Ratified project protocol
Pairwise-collapse domain: declare the transform set, extend it with the two degradation channels
transform_screen.pairwise_collapse: fn(A)==fn(B) over base + paren_drop() + hyphen_drop(); every output declares pairwise_transforms (the domain, per row)
Meaning first
What it means in standard English
The screen that checks whether two declared forms collapse into one string under an ordinary pipeline operation now (a) says exactly which operations it ran, and (b) includes the two degradation channels marker filings actually argue about — dropping parentheses and dropping hyphens. A served false finally means 'checked against THIS list and clean', never 'the collapsing transform was not in the room'.
Project machinery
What this protocol changes
- Component
- DeterministicMetrics::transformScreen pairwise loop (site) + measure.py port (parity-pinned)
- Change
- pairwise fn(A)==fn(B) runs over base ∪ {paren_drop(), hyphen_drop()}; transform_screen output declares pairwise_transforms; the gating fn(A)==B_raw loop keeps the frozen base set (reported-never-gates unchanged, mutation-verified).