Skip to content

AGENTS.md File Suffix Protocol is an inventory that drifted both ways: 4 of its 12 declared suffixes have zero instances in src/, and 8 suffixes the app really authors are absent from it #1745

Closed

Description

@os-bill

Filed unassigned by the os-dev agent working #1573, which restated §🔒 Schema Validation Requirements. Found while bringing the File Suffix Protocol into agreement with that section (the card's Zone 2.2 requirement). ⛔ Not graded — grading is the PM seat's.

The finding

§📝 Coding Standards (The "File Suffix Protocol") declares 12 file types across Core and Extended. Measured on origin/main @ e735d00d, the inventory is wrong in both directions.

Declared, but zero instances under src/:

*.form.ts           0 files      (src/forms/         ABSENT)
*.statemachine.ts   0 files      (src/statemachines/ ABSENT)
*.capabilities.ts   0 files      (src/plugins/       ABSENT)
*.events.ts         0 files      (src/events/        ABSENT)

Corroborated independently by the toolchain rather than only by git ls-files: pnpm validate reports Runtime: 0 plugins.

Authored by this app, but absent from the protocol:

*.dataset.ts      9 files        *.skill.ts        6 files
*.profile.ts      7 files        *.report.ts       5 files
*.seed.ts         5 files        *.sharing.ts      4 files
*.mapping.ts      3 files        *.translation.ts  1 file
                                 *.app.ts          1 file

⚠️ One of these is already being corrected by #1573's PR and is not part of this card: the protocol's *.permission.ts line named a suffix authored nowhere, while the app's permission sets are src/profiles/*.profile.ts — that single line is fixed there because §🔒 now names src/profiles/ and the two sections would otherwise contradict each other. The remaining eight, and the four zero-instance declarations, are untouched.

Why this is a trap and not a tidiness complaint

Registration in this app is explicit, file by file: each src/{type}/index.ts re-exports its files, and objectstack.config.ts feeds those barrels to defineStack(). There is no glob discovery. A file that never reaches a barrel is registered by nothing and validated by nothing.

Measured, not assumed — a valid new object file added to src/objects/ and deliberately left out of src/objects/index.ts:

VALIDATE exit=0
  Data: 18 Objects  331 Fields          ← unchanged from baseline
mentions of the probe in validate output: 0

Exit 0. The count does not move, the file is named nowhere, and pnpm verify stays green. So an agent that reads the protocol, believes *.statemachine.ts is a file type this app uses, and authors one gets a silent no-op with a green verify — there is not even a directory or barrel for it to be missed from. That is the same class as #1573: an instruction with no in-repo precedent produces work that looks accepted and does nothing.

The inverse half costs differently: an agent authoring a dataset or a sharing rule finds the protocol silent on the suffix that 9 and 4 existing files already use, and has nothing to pattern-match against for the naming rule the section opens by calling strict.

⛔ What this card is not

⛔ Not a request for a guard, gate, lint rule or test. AGENTS.md Scope rule 3: "Lint, validation, gates and diagnostics belong to the platform, uniformly. A drift-class or validation-class gap you find is a platform problem and goes upstream." A gate that checks the protocol's inventory against the tree would be exactly the local gate farm that rule forbids. #1573 was refused the same thing twice.

⛔ Not foldable into #1573. Different defect shape and different fix shape: #1573 corrected how metadata is authored and validated, which had one measured answer per form. This card is an inventory question whose fix is a judgement the maintainer owns — for each zero-instance suffix, whether it is (a) an aspirational convention worth keeping so a future author names the file correctly, or (b) dead weight to delete; and for the eight real suffixes, whether the protocol should list every one or state a rule that generates them. That decision is not mechanical, which is why it was not folded in.

⛔ Serial fence

AGENTS.md is a governed surface (2026-08-18 cross-repo ruling): draft PR, human merge. #1573's PR edits this same file and is in flight. ⛔ Do not dispatch this card until that one clears — two drafts on one hand-merged governed file is a conflict a human has to resolve by hand.

Refs #1573 · #1436 · #1229

Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    on Sep 7, 2026
  2. added theissue type on Sep 7, 2026
  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Sep 9, 2026
  4. self-assigned this
    on Sep 9, 2026
  5. os-justin commented on Sep 9, 2026

    @os-justin
    Collaborator

    Claim: PM loop round 2 — maintainer direct dispatch to the skills seat, authority verbatim: 「看一下 hotcrm 的agents.md 写的太乱了。只留下必要的。包括同时同时审核 hotcrm 的skills 任务,合并派发处理。」 and 「首先要明确 hotcrm 是元数据应用,平台功能应该在 objectstack中开发。 其次 claude.md 是不是直接让他阅读 agents.md 即可,没必要维护两套。所有仓库都有类似的问题」. Fold member of #1823 (chain head; full claim there): the File Suffix Protocol's drifted 12-suffix roster leaves the file — the trimmed AGENTS.md points at src/{type}/ and the neighbour-file rule instead of restating an inventory.
    Session: session_01MoTv7pn338AZ71owsp19gQ
    Branch: claude/issue-1823-agents-md-necessary-only
    Worktree: hotcrm-issue-1823
    Domain: repo:hotcrm (single-lane repo; the skills seat acts here on the direct instruction only)
    File surface: AGENTS.md only for this member (stop on breach; explain in the report)
    Container & model: L (a 651-line instruction file rewritten to ≤250 lines + five folded cards + a new CLAUDE.md), mode:subagent (the hotcrm seat's standing 「不要用云卡片」), model: claude-fable-5-1 — --tier REFUSES for a sister repo (Families are a property of THAT repo. A card landing in another repo derives nothing here — assert with --repo to make this checkable. dispatch-gates: REFUSING ), so the tier is the seat's explicit decision: a whole-file rewrite of the agent instruction surface with necessity judgement is protocol-semantics work ⇒ contract-review tier, reviewed in the seat at the same tier
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: AGENTS.md free per the repo:hotcrm seat's R58 close (5602546839, 13:21Z: 「AGENTS.md is FREE. Serial queue: #1745 → #1620 → #1618」 — consumed by this fold); no open hotcrm PR touches AGENTS.md, CLAUDE.md, .github/instructions/** or .github/tasks/** (6 open PRs' file lists read 2026-09-09T13:51Z); newest AGENTS.md touch on origin/main 965933b is 67bd085 (#1820, 2026-09-09) ⇒ same-day churn, the dev works on the merged tree; hotcrm has no scripts/pm/ ⇒ no H17 index, no verify lock (docs-only, no build).


    Generated by Claude Code

  6. os-justin commented on Sep 9, 2026

    @os-justin
    Collaborator

    Landed in the #1823 fold: draft PR #1830 (governed, maintainer merge; skip-changeset). Full os-dev-report is on #1823, comment 5603505779; this card's own acceptance line is in the PR body under Per-member acceptance.


    Generated by Claude Code

  7. os-justin commented on Sep 9, 2026

    @os-justin
    Collaborator

    ACCEPT for this fold member — the review record is on the chain head #1823 (5603569687, this seat, 2026-09-09T14:30Z): PR #1830 delivers it — the 12-suffix roster is gone; the neighbour-file rule and the three authoring forms point at src/{type}/. Governed terminal (draft, needs-user-decision, 速读, reviews requested); the card stays pm:dispatched until the merge lands.


    Generated by Claude Code

  8. os-justin commented on Sep 9, 2026

    @os-justin
    Collaborator

    Landing record — PR #1830 (Fixes this card; fold head #1823 with #1745 · #1620 · #1618 · #1818 · #1681) MERGED 2026-09-09T15:33:23Z through hotcrm's merge queue, squash commit 06b9bb327bb0 on origin/main (read at 2026-09-09T15:50Z: AGENTS.md 248 lines, CLAUDE.md is the 6-line pointer). GOVERNED (AGENTS.md, CLAUDE.md, .github/instructions/**): approved, flipped ready and enqueued by os-zhuang (review APPROVED 15:32:55Z; merged_by os-zhuang) — this seat did none of the three. In-seat review ACCEPT 5603569687 on #1823; 速读 5603571614 on the PR. Recorded by the skills seat acting in the repo:hotcrm lane on the maintainer's direct instruction (audit note on the hotcrm seat post #1353, comment 5603003979), session session_01MoTv7pn338AZ71owsp19gQ.

    Same stroke: pm:dispatched removed and the assignee cleared on this auto-closed card (folded member; its own criterion — the File Suffix Protocol inventory is gone from AGENTS.md, the rule is what remains — was read on the merged tree).


    Generated by Claude Code

  9. removed their assignment
    on Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions