The check-composed-skills unselected list is never validated, so an exemption outlives its reason silently #1206

Open
opened 2026-08-22 23:59:43 +00:00 by coilyco-ops · 0 comments
Member

Filed by Darren (director, claude seat) from pulls/1204, which merged before the review landed. Not a defect in that change, a gap in the mechanism it introduced.

The exemption is consulted and never validated

check_composed_skills.catalogue_problems on main:

allowed = load_str_list(HOOK_ID, "unselected", repo_root)
...
if any(fnmatch.fnmatchcase(entry.name, pattern) for pattern in allowed):
    continue

Nothing asserts that an unselected entry still describes something real. Two ways it drifts:

  • Its source is deleted. The pattern lingers forever. Harmless, accumulates.
  • Its source later becomes selected by a role. The exemption is now wrong and still active. If someone removes that selector afterwards, the gate stays silent, because the stale exemption still covers the source. The check is off for that entry and nothing says so.

The second is the one worth fixing. It is a silent hole in a gate whose entire purpose is to stop a source's status being invisible.

Why it belongs to this repo's current work rather than to style

This is the shape the #1177 lane spent a day removing, in three separate places:

  • AGENTS.md took seven cap raises, each individually justified, until the margin reached zero (#1089).
  • .typos.toml carried two path entries that had stopped binding, and passed anyway because no flagged word happened to appear (#1186).
  • Five repos carried an identical whole-file code-comments exclude that a rule gap made necessary, long after it was (#993).

Every one is an exemption that outlived its reason and had nothing watching it. The unselected list is two entries today, which is exactly when making it self-cleaning is cheapest.

Suggested

Both checks use values catalogue_problems already computes:

  • An unselected pattern matching no directory under .agents/composed/ is stale. Report it.
  • An unselected pattern matching a directory some role also selects is contradictory. Report that too, since the exemption is now claiming something the graph disagrees with.

Both messages are the same sentence the hook already says about roles and sources: your declaration no longer describes reality.

Priority

P3, outside the lane. #1073 is complete and this is about keeping it complete.

**Filed by Darren (director, claude seat)** from `pulls/1204`, which merged before the review landed. Not a defect in that change, a gap in the mechanism it introduced. ## The exemption is consulted and never validated `check_composed_skills.catalogue_problems` on `main`: ```python allowed = load_str_list(HOOK_ID, "unselected", repo_root) ... if any(fnmatch.fnmatchcase(entry.name, pattern) for pattern in allowed): continue ``` Nothing asserts that an `unselected` entry still describes something real. Two ways it drifts: * **Its source is deleted.** The pattern lingers forever. Harmless, accumulates. * **Its source later becomes selected by a role.** The exemption is now wrong and still active. If someone removes that selector afterwards, **the gate stays silent**, because the stale exemption still covers the source. The check is off for that entry and nothing says so. The second is the one worth fixing. It is a silent hole in a gate whose entire purpose is to stop a source's status being invisible. ## Why it belongs to this repo's current work rather than to style This is the shape the #1177 lane spent a day removing, in three separate places: * `AGENTS.md` took seven cap raises, each individually justified, until the margin reached zero (#1089). * `.typos.toml` carried two path entries that had stopped binding, and passed anyway because no flagged word happened to appear (#1186). * Five repos carried an identical whole-file `code-comments` exclude that a rule gap made necessary, long after it was (#993). Every one is an exemption that outlived its reason and had nothing watching it. The `unselected` list is two entries today, which is exactly when making it self-cleaning is cheapest. ## Suggested Both checks use values `catalogue_problems` already computes: * An `unselected` pattern matching no directory under `.agents/composed/` is stale. Report it. * An `unselected` pattern matching a directory some role also selects is contradictory. Report that too, since the exemption is now claiming something the graph disagrees with. Both messages are the same sentence the hook already says about roles and sources: your declaration no longer describes reality. ## Priority P3, outside the lane. #1073 is complete and this is about keeping it complete.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os#1206
No description provided.