From 79c60715dcad9c4dccc3ce75b70b2a42432f8280 Mon Sep 17 00:00:00 2001 From: Defame1297 Date: Sun, 30 Aug 2026 16:42:51 +0000 Subject: [PATCH] fix(gates): restore byte-identity of the shared ADR-0020 boundary resolver 915eb09 rewrote the bare-arrow carve-out comment in scripts/skill-size-check.sh without pasting the block over the two other copies, so the resolver stood at 764 lines in the hook and 755 in both audit validators. tests/test-adr0020-contract.sh exists to catch exactly this and did -- it was the regression behind that suite's failure, and I reported the suite green after 915eb09 without re-running it. No behaviour changes: the drift was comment-only. Restoring identity keeps the invariant the test enforces, which matters because the three copies are the only thing making the hook and the two validators agree on what a boundary target is. Refs #99 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01MWb5RQgCL1ye7cGp2RPb2u --- .../.apm/skills/agent-audit/scripts/validate.sh | 13 +++++++++++-- .../.apm/skills/skill-audit/scripts/validate.sh | 13 +++++++++++-- .../skills/agent-audit/scripts/validate.sh | 13 +++++++++++-- .../skills/skill-audit/scripts/validate.sh | 13 +++++++++++-- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh b/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh index fc0f711..b13a210 100755 --- a/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh +++ b/plugins/kyberforge/.apm/skills/agent-audit/scripts/validate.sh @@ -446,8 +446,17 @@ def known_targets(start_dir): # condition, pc-run's "run pre-commit hooks" reads as a route to a # non-existent `pre-commit` skill. # * A BARE arrow target counts only in ADR-0020's compressed boundary form, -# `Not -> `. Without that, diagnose's process chain -# "fix -> regression-test" reads as a route to `regression-test`. +# `Not -> `. The example that motivated it is gone: +# diagnose's process chain "fix -> regression-test", which without the +# gate read as a route to a non-existent `regression-test` skill, was cut +# when issue #99 retrofitted that description. So the gate is currently +# UNEXERCISED — gating and not gating produce the same verdict corpus-wide. +# Keep it anyway. It is a false-positive guard against prose no one has +# written yet, and any new process chain re-arms it. Unexercised is not the +# same as unnecessary, and the branch it guards is still load-bearing: the +# bare-arrow rule is the sole extractor for three real targets in +# kyberforge's audit skills (agent-audit -> agent-author, agent-audit -> +# skill-audit, skill-audit -> skill-author), all written unbackticked. # * A backticked hyphenated token counts only inside a boundary sentence. # Unconditionally, `pre-push` or `commit-msg` in a TRIGGER clause is a hard # FAIL with no escape hatch. Gating it costs nothing (measured over this diff --git a/plugins/kyberforge/.apm/skills/skill-audit/scripts/validate.sh b/plugins/kyberforge/.apm/skills/skill-audit/scripts/validate.sh index f9c0df7..e169390 100755 --- a/plugins/kyberforge/.apm/skills/skill-audit/scripts/validate.sh +++ b/plugins/kyberforge/.apm/skills/skill-audit/scripts/validate.sh @@ -372,8 +372,17 @@ def known_targets(start_dir): # condition, pc-run's "run pre-commit hooks" reads as a route to a # non-existent `pre-commit` skill. # * A BARE arrow target counts only in ADR-0020's compressed boundary form, -# `Not -> `. Without that, diagnose's process chain -# "fix -> regression-test" reads as a route to `regression-test`. +# `Not -> `. The example that motivated it is gone: +# diagnose's process chain "fix -> regression-test", which without the +# gate read as a route to a non-existent `regression-test` skill, was cut +# when issue #99 retrofitted that description. So the gate is currently +# UNEXERCISED — gating and not gating produce the same verdict corpus-wide. +# Keep it anyway. It is a false-positive guard against prose no one has +# written yet, and any new process chain re-arms it. Unexercised is not the +# same as unnecessary, and the branch it guards is still load-bearing: the +# bare-arrow rule is the sole extractor for three real targets in +# kyberforge's audit skills (agent-audit -> agent-author, agent-audit -> +# skill-audit, skill-audit -> skill-author), all written unbackticked. # * A backticked hyphenated token counts only inside a boundary sentence. # Unconditionally, `pre-push` or `commit-msg` in a TRIGGER clause is a hard # FAIL with no escape hatch. Gating it costs nothing (measured over this diff --git a/plugins/kyberforge/skills/agent-audit/scripts/validate.sh b/plugins/kyberforge/skills/agent-audit/scripts/validate.sh index fc0f711..b13a210 100755 --- a/plugins/kyberforge/skills/agent-audit/scripts/validate.sh +++ b/plugins/kyberforge/skills/agent-audit/scripts/validate.sh @@ -446,8 +446,17 @@ def known_targets(start_dir): # condition, pc-run's "run pre-commit hooks" reads as a route to a # non-existent `pre-commit` skill. # * A BARE arrow target counts only in ADR-0020's compressed boundary form, -# `Not -> `. Without that, diagnose's process chain -# "fix -> regression-test" reads as a route to `regression-test`. +# `Not -> `. The example that motivated it is gone: +# diagnose's process chain "fix -> regression-test", which without the +# gate read as a route to a non-existent `regression-test` skill, was cut +# when issue #99 retrofitted that description. So the gate is currently +# UNEXERCISED — gating and not gating produce the same verdict corpus-wide. +# Keep it anyway. It is a false-positive guard against prose no one has +# written yet, and any new process chain re-arms it. Unexercised is not the +# same as unnecessary, and the branch it guards is still load-bearing: the +# bare-arrow rule is the sole extractor for three real targets in +# kyberforge's audit skills (agent-audit -> agent-author, agent-audit -> +# skill-audit, skill-audit -> skill-author), all written unbackticked. # * A backticked hyphenated token counts only inside a boundary sentence. # Unconditionally, `pre-push` or `commit-msg` in a TRIGGER clause is a hard # FAIL with no escape hatch. Gating it costs nothing (measured over this diff --git a/plugins/kyberforge/skills/skill-audit/scripts/validate.sh b/plugins/kyberforge/skills/skill-audit/scripts/validate.sh index f9c0df7..e169390 100755 --- a/plugins/kyberforge/skills/skill-audit/scripts/validate.sh +++ b/plugins/kyberforge/skills/skill-audit/scripts/validate.sh @@ -372,8 +372,17 @@ def known_targets(start_dir): # condition, pc-run's "run pre-commit hooks" reads as a route to a # non-existent `pre-commit` skill. # * A BARE arrow target counts only in ADR-0020's compressed boundary form, -# `Not -> `. Without that, diagnose's process chain -# "fix -> regression-test" reads as a route to `regression-test`. +# `Not -> `. The example that motivated it is gone: +# diagnose's process chain "fix -> regression-test", which without the +# gate read as a route to a non-existent `regression-test` skill, was cut +# when issue #99 retrofitted that description. So the gate is currently +# UNEXERCISED — gating and not gating produce the same verdict corpus-wide. +# Keep it anyway. It is a false-positive guard against prose no one has +# written yet, and any new process chain re-arms it. Unexercised is not the +# same as unnecessary, and the branch it guards is still load-bearing: the +# bare-arrow rule is the sole extractor for three real targets in +# kyberforge's audit skills (agent-audit -> agent-author, agent-audit -> +# skill-audit, skill-audit -> skill-author), all written unbackticked. # * A backticked hyphenated token counts only inside a boundary sentence. # Unconditionally, `pre-push` or `commit-msg` in a TRIGGER clause is a hard # FAIL with no escape hatch. Gating it costs nothing (measured over this