fix(gates): report an unparsed routing clause beside a parsing sibling
boundary_clause_status() ran BOUNDARY_ARROW.search() and _arrow_targets()
over the whole description, so one arrow clause that parsed suppressed the
diagnostic for every other clause in it. A backticked hyphenated routing
target wrapped across lines in a folded scalar was therefore silently
unchecked -- no error, no suggestion, exit 0 -- whenever the description
carried one other clause that parsed. Written bare, the same wrap errors
correctly. That is the shape #100 regressed on.
The check is now per clause. Nothing that passed starts failing: all 68
routing targets across the 38 SKILL.md files resolved before and still do.
26 of those descriptions carry more than one arrow clause, so the
suppression was live across two thirds of the corpus, not an edge case.
validate-skill.bats pins the shape. test-adr0020-targets.sh's comment
described the #100 regression as a backticked wrap; the historical text was
unbackticked, which is precisely the shape the gate did not catch.
Also closes three README misroutes the branch left in the enforcement
layer: CompositionNote.yml's message, agent-description-quality.md:58 and
vale-wrap.sh's header still sent overflow to a skill-root README.md and
named the two skills ADR-0025 merged away. 1ec3e8a fixed the prose and
missed the rules that enforce it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NwD8Egs5r4ndqeFLmhusX2
This commit is contained in:
@@ -442,6 +442,24 @@ fi
|
||||
# terminal and therefore danglable. The issue #99 retrofit cut that composition
|
||||
# sentence and the dangling target went with it, so the set is down to one.
|
||||
#
|
||||
# Correction (2026-09-20): the historical text carried NO backticks. `7801589^`
|
||||
# has gitea-issues' description as "Composes gitea-labels-\n milestones for all
|
||||
# label inference/resolution and milestone lookup", bare, so the token was read
|
||||
# by the route-verb path — `Composes` is a ROUTE_VERB and the name matched
|
||||
# NAME_HYPH — and not by the backtick sweep. Everything the paragraph above says
|
||||
# about the fold and the trailing hyphen holds; only the spelling is wrong.
|
||||
#
|
||||
# The spelling is the load-bearing part, because the two are not equally
|
||||
# visible. Backticked, that same wrap reaches every extractor as
|
||||
# `` `gitea-labels- milestones` ``, which none of them can read: the opening
|
||||
# backtick blocks the bare NAME_HYPH alternative and the space inside blocks the
|
||||
# backticked one. Bare, it was extracted and reported all along, which is the
|
||||
# only reason this dangling target was ever measured. In an ARROW clause the
|
||||
# backticked wrap was silent until the 2026-09-20 fix to
|
||||
# boundary_clause_status() in the shared resolver made the unparsed diagnostic
|
||||
# per clause: before it, one sibling clause that parsed suppressed the finding
|
||||
# for the whole description.
|
||||
#
|
||||
# `neuledge-context` was the last one. The issue #99 wave-3 retrofit deleted that
|
||||
# boundary clause outright — commit `6146120` had already deleted the skill it
|
||||
# named, and nothing has owned MCP-server installation since — so the corpus
|
||||
|
||||
Reference in New Issue
Block a user