Found while diagnosing today's main break (#1825 × #1779).
checkTypeCycleBaseline in scripts/layering/daemon-modularity.ts reports the offending file as members.find(<zone match>) — i.e. the alphabetically first member of the over-budget zone — not the member that joined the cycle. Today's failure read [R10] 17 daemon-server files (baseline 16) at src/daemon/daemon-command-registry.ts, but that file was already a member at a853734f0 (46). The +1 node was src/daemon/handlers/snapshot-interactor-capture.ts (new in d76e0f9, wedged between handlers/snapshot-capture.ts → it → core/interactors.ts), found only by diffing largestTypeCycleMembers between the two commits.
Fix: when the measured count exceeds the ceiling, print the members that are new relative to the previous state (or the whole zone member list) instead of the first alphabetical hit, so the author sees which edge to cut. Small; no policy change.
Refs: #1781 A6, #1825, #1779.
Found while diagnosing today's main break (#1825 × #1779).
checkTypeCycleBaselineinscripts/layering/daemon-modularity.tsreports the offending file asmembers.find(<zone match>)— i.e. the alphabetically first member of the over-budget zone — not the member that joined the cycle. Today's failure read[R10] 17 daemon-server files (baseline 16) at src/daemon/daemon-command-registry.ts, but that file was already a member ata853734f0(46). The +1 node wassrc/daemon/handlers/snapshot-interactor-capture.ts(new in d76e0f9, wedged betweenhandlers/snapshot-capture.ts→ it →core/interactors.ts), found only by diffinglargestTypeCycleMembersbetween the two commits.Fix: when the measured count exceeds the ceiling, print the members that are new relative to the previous state (or the whole zone member list) instead of the first alphabetical hit, so the author sees which edge to cut. Small; no policy change.
Refs: #1781 A6, #1825, #1779.