✂️ Version Matrix THIN

#2229 · the one genuine drift that survived the adversarial re-audit · 478 catalogue rows → 2 constants

verified by reading consumers, not grepping — the lesson, applied

📊 The cut

−573
lines removed
−478
catalogue rows
−77 KB
hook bundle
0
behavior change

🔻 Before → After

615 lines

MIN_CC_VERSION
CCFeatureEntry interface
CC_FEATURE_MATRIX (478 rows)
CCFeature type
getAvailableFeatures()
getMissingFeatures()
hasFeature()
compareCCVersions()
42 lines

MIN_CC_VERSION = '2.1.148'
LATEST_KNOWN_CC = '2.1.162' (new — 1 line/cycle, not 5 rows)
compareCCVersions()

that's the entire surface anything read.

🔬 Why it's safe (the consumers, read not grepped)

consumerwhat it neededverdict
cc-version-check.ts:42iterated the matrix only for the MAX version (a scalar)→ now reads LATEST_KNOWN_CC
generate-docs-data.jsregex-extracts MIN_CC_VERSION (a scalar)unaffected
stamp-cc-support.mjsMIN_CC_VERSIONunaffected
hasFeature + friendscalled ONLY by tests (0 production)removed
cc-file-adoption-issues.shgrep said "consumer" — reads cc-adoption-gaps.json, NOT the matrixnever a consumer

✅ Verification

Full hooks suite 8502 passed, 0 failed · Biome + tsc clean · bundle 799→722 KB · rewrote the matrix test (10 pass) — covers the 2 constants + comparator; dropped the catalogue/helper tests with the code they tested.

📦 What lands

The cc-watch "catalogue in matrix" ritual is gone — bump LATEST_KNOWN_CC one line per adoption cycle instead of appending ~5 rows. Refs #2217 (the re-audit that confirmed this) · rule: shared/rules/cc-native-first.md