Skip to content

docs(agents): sanitizer clause states the two measured body-mutation shapes; Skills section stops enumerating; platform-readings carries the read-layer facts - #9715

Draft
os-support-ai wants to merge 1 commit into
mainfrom
claude/issue-9621-read-layer-agents-hygiene
Draft

docs(agents): sanitizer clause states the two measured body-mutation shapes; Skills section stops enumerating; platform-readings carries the read-layer facts#9715
os-support-ai wants to merge 1 commit into
mainfrom
claude/issue-9621-read-layer-agents-hygiene

Conversation

@os-support-ai

Copy link
Copy Markdown
Collaborator

Fixes#9621
Fixes#9557
Fixes#9526

Three-card bundle on the read-layer/sanitizer family plus AGENTS.md inventory hygiene. Instruction text only — no runtime code. Governed surface (AGENTS.md + .claude/skills/): this PR stays DRAFT and is merged by the maintainer, by hand — never queued, armed, or flipped ready by a seat.

Per the family's own convention, this body spells the poison tokens out in words and never writes them literally.

What changed

1. AGENTS.md — sanitizer clause (Multi-agent working discipline). The dispatch ruling said to amend the clause naming "less-than + letter"; measured on fetched main (cd455c8), AGENTS.md carries no sanitizer clause at all — the "less-than + letter" wording lives in the dev-agent definition file, which is a sibling card's solo surface and untouched here. So the clause is added to AGENTS.md (next to the existing attribution-footer/body-rewrite block, its nearest kin), stating the two measured shapes:

  • storage-side deletion: the exclamation mark is deleted from the markup-declaration opener (the byte sequence less-than, exclamation mark, open square bracket — exactly a regex negative lookbehind before a character class); web page shows the same loss; two independent authors measured it; bare less-than + exclamation mark without the bracket survives;
  • API-side truncation: reads through the GitHub API/MCP tools cut the body at a literal script-tag-shaped token (doctype-opener and object-tag-shaped tokens also trigger it) while the web page carries the full text — never "repair" a card that reads short only through the API; fetch the rendered page first;
  • the operative author rule: regex literals and script-tag-shaped tokens go in fenced code with the dangerous character spelled out in words, or are described entirely in words — fences do not protect them.

2. AGENTS.md — Skills section. Adopted grading direction 1: both hand-written inventories (the nine-name published list and the two-name internal list) are replaced by the two root paths (skills/, .claude/skills/) plus "the filesystem is the catalog; consult the matching SKILL.md". Stale names deleted, none added; the metadata.internal: true requirement is retained.

3. platform-readings.md — read-layer fact rows. The truncation row now carries the deterministic read-side trigger (script-tag-shaped token; doctype/object shapes too) with the WebFetch-the-rendered-page remedy, and a new row carries the storage-layer exclamation-mark deletion with the author rule. No issue numbers in operational text (id-lint green).

Ratchet payment table (platform-readings.md, ceiling 134)

directioncontent
addeddeterministic read-side truncation trigger + do-not-repair remedy (packed into the existing double-read row)
addednew row: storage-layer exclamation-mark deletion shape + spell-in-words author rule
cutthe generic single-read tail-loss clause ("tool output limit / paging / slicing") — superseded: the measured token trigger names the concrete read-side cause, and the leading double-read rule remains the discriminator
net0 lines — file stays exactly 134/134 (headroom 0); no existing lines re-wrapped or merged; the pre-existing write-side short-fragment guidance moved to its own bullet verbatim

Gates (all at final commit 22e6ffe, the pushed head)

Derived by node scripts/pm/dispatch-gates.mjs (no paths passed; 6 matched of 109 families), run twice — before and after the final commit; the list did not change:

gateexit
pnpm check:doc-authoring0
pnpm --workspace-concurrency=2 --filter @objectstack/lint run check:doc-formula-expressions (closure built first; script echo verified — not a zero-match pass)0
pnpm check:pm-governed-merges0
pnpm check:pm-skill-id-lint0
pnpm check:pm-skill-ratchet (platform-readings: 134 lines, ceiling 134, headroom 0)0
pnpm check:skill-frame-sync0
node scripts/check-nul-bytes.mjs (6203 files, no raw control bytes)0

Recovered content statement (the two mutilated member cards)

  • Lead card body truncates mid probe-table through the API; full probe table (six probes: the trigger is the bracketed opener, not bare less-than + exclamation mark), the second-mutation note (doctype-opener token truncated its own first revision through the API), and the suggested-resolution section were recovered from the rendered web page. Its comments read fine through the API.
  • The script-token card's body ends at the poison token through the API; the full text (silent-spec-loss analysis, the wrong-remedy warning against repairing intact cards, interim guidance) was recovered from the rendered web page; its triage comment (read fine via API) adds the object-tag-shaped trigger. Nothing remained unrecoverable on either card.

Tests/docs-only instruction change — skip-changeset applied read-modify-write with read-back.


Generated by Claude Code

…shapes; Skills section stops enumerating; platform-readings carries the read-layer facts
AGENTS.md gains the binding sanitizer clause naming the measured shapes
(storage-side exclamation-mark deletion from the markup-declaration opener;
API-side truncation at script-tag-shaped tokens) with the spell-it-out-in-words
author rule, and its Skills section replaces both hand-written inventories with
the two root paths (the filesystem is the catalog). platform-readings.md carries
the same facts as fact rows within the 134-line ratchet ceiling.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WswfK2yNYT9hNnMH6TzAwL
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants

@os-support-ai@claude