fix(skill): name graphify affected in every always-on block (#3177) - #3241
fix(skill): name graphify affected in every always-on block (#3177)#3241abhay-codes07 wants to merge 1 commit into
Conversation
…fy-Labs#3177) The always-on block is the text that reaches the agent on EVERY session - and none of the six templates mentioned `affected`. Measured on a real deployment: zero calls in 262 sessions, while the verbs the block does name (query, path, explain) were used daily once the graph was consulted at all. Agents reach for what the block names. All six templates (CLAUDE.md, AGENTS.md, GEMINI.md, Copilot instructions, Antigravity rules, Kiro steering) now name the blast-radius verb beside query/path/explain, in each template's own voice, and the additions are recorded as sanctioned edits against the frozen v8 baseline so the always-on round-trip validator keeps guarding everything else. Artifacts regenerated, expected/ blessed, all five skillgen validators pass.
There was a problem hiding this comment.
Graphify reviewed this change.
Worth a look — the grounded gate found no coupling regressions or blocking issues, but 1 advisory finding(s) below merit a look before merge.
Graphify review — findings
Adds a graphify affected "<symbol-or-file>" blast-radius rule to all six always-on templates so every session tells the agent to check reverse dependencies before modifying a symbol, and mirrors it into the packaged expected/ fixtures. Extends the sanctioned-edit registry so each always-on constant carries exactly one purely additive #3177 substitution, and reworks test_always_on_roundtrip_is_byte_faithful to apply every sanctioned edit in sequence rather than the single old→new pair. Adds test_always_on_affected.py, which asserts all six blocks name both graphify affected/"blast radius" and the existing graphify query verb.
Worth a look
- Additive-edit assertion fails for kiro-steering block whose new text is not a word-prefix —
tests/test_skillgen.py:771· Escalate · medium- agreed by 2 of 2 members but NOT verified (no proof, no reproducing execution) — consensus is not a verdict; needs human review
Analysis details — impact, health, verification
Impact & health
Graphify review
Impact — 282 functions depend on the 282 functions this change touches.
Health — this change adds coupling hotspots:
- new:
render()— 13 callers, 5 callees - new:
audit_coverage()— 8 callers, 6 callees - new:
main()— 3 callers, 11 callees - new:
monolith_roundtrip()— 3 callers, 5 callees - new:
test_audit_catches_a_dropped_non_allowlisted_heading()— 0 callers, 6 callees
Verification — 282 functions in the blast radius were not formally verified this run (proofs are advisory here).
Gate & verification
graphify gate
PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.
Advisory (not blocking):
- verification_scope: 282 function(s) in the blast radius were not formally verified this run
· 5 more finding(s) on lines outside this diff (see the check run).
Closes #3177.
The problem
The always-on block is the text that reaches the agent on every session — and none of the six templates mentioned
affected. The issue's field measurement makes the cost concrete: on a real deployment, zeroaffectedcalls in 262 sessions (counted fromtool_useblocks, not text grep), while the verbs the block does name —query,path,explain— were used daily once the graph was consulted at all. Agents reach for what the block names; the blast-radius verb was invisible at the only layer that is always loaded.The change
All six templates (CLAUDE.md, AGENTS.md, GEMINI.md, Copilot instructions, Antigravity rules, Kiro steering) now name
graphify affected "<symbol-or-file>"beside query/path/explain, each in its own template's voice — a rule bullet in the bullet-styled blocks, a sentence in Kiro's paragraph, a wrapped sentence in the Copilot prose. The wording says what the verb uniquely answers: the blast radius (reverse dependencies), which query/path/explain do not show.The always-on blocks are frozen against a v8 baseline by the
--always-on-roundtripvalidator, so each addition is recorded inALWAYS_ON_SANCTIONED_EDITSas an audited, purely-additive substitution — the guard keeps rejecting any other drift. Artifacts regenerated,expected/blessed, all five skillgen validators pass.Two existing tests that pinned the registry to exactly the single #1530 entry are updated faithfully: the #1530 substitution is still asserted first and intact, every constant is asserted to carry exactly one purely-additive #3177 edit (token-prefix additivity, since the Copilot edit rewraps a line), and the byte-compare now applies the full registry rather than one hand-applied pair.
Tests
tests/test_always_on_affected.py— all six blocks exist, every one namesgraphify affectedand the blast radius, and the previously-named verbs are untouched. With the change reverted, 6 of 13 fail (the existence and query-verb checks rightly keep passing).tests/test_skillgen.pypasses in full (78 together); the full suite matches the freshv8(0.9.53) baseline.