Classification is where interlock turns a diff into a single tier. Each changed path is sorted by how reversible a mistake in it would be: Tier 0 is behaviour-neutral, such as docs, tests, and markdown; Tier 2 is protected, such as CI config, auth, and the policy file itself; Tier 1 is everything not named in either list. The tiers are just glob lists in interlock.yml, matched case-sensitively, so the policy is something a person can read and reason about in a few minutes.

Every path is normalized through one chokepoint, matched tier2 then tier0 else tier1, and the PR takes the maximum.

The rule that makes this safe is the maximum. A PR's tier is the highest tier of any file it touches, so one Tier 2 file in a thousand-file change makes the whole change Tier 2. There is no averaging a dangerous edit down by burying it in harmless ones. Renames are counted on both the old and new path too, so moving a file out of a protected directory is not an escape hatch.

This is the anchor the verdict rests on. A path either matches a protected glob or it does not; the classification is a fact about the diff, not a judgement about intent, which is what lets the same PR get the same tier every time.