Skip to content

docs(agents): point os-dev.md at AGENTS.md's body-mutation clause instead of a narrow local copy - #9838

Merged
os-warren merged 1 commit into
mainfrom
claude/issue-9717-osdev-sanitizer-pointer
Aug 19, 2026
Merged

docs(agents): point os-dev.md at AGENTS.md's body-mutation clause instead of a narrow local copy#9838
os-warren merged 1 commit into
mainfrom
claude/issue-9717-osdev-sanitizer-pointer

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

Fixes #9717

What changed

.claude/agents/os-dev.md only, in the 字节与 sanitizer 纪律 section. The paragraph that
described the GitHub body sanitizer's shape locally is replaced by a one-line pointer at
AGENTS.md's binding body-mutation clause ("GitHub mutates body BYTES — spell poison-shaped
tokens out in words, never literally", AGENTS.md line 303).

The local wording knew only one member of the mutation family — that a less-than sign
followed by a letter is stripped as an HTML tag. AGENTS.md's clause is the fuller home: it
states the author rule in general terms, says fences do not protect a poison-shaped token,
requires reading the body back after writing any less-than fragment, and points at
.claude/skills/pm-dispatch/references/platform-readings.md for the two measured mutation
shapes and their triggers. The local copy was therefore a stale, narrower restatement — one
rule, one home.

Kept deliberately (operative os-dev-specific instruction, not shape description):

  • the attribution-footer rule and its text code block showing the bare form versus the
    session-URL form, plus the trailing note that comments are a different path;
  • the separate instruction near line 259 to read your own report comment back after posting
    it, because the report marker can be eaten after it lands.

Net diff is 3 insertions / 4 deletions — one line shorter, so the ratchet ceiling is
unaffected. No changeset: this is agent instruction text under .claude/, nothing published.

Verification

Gate families derived from the real change set with
node scripts/pm/dispatch-gates.mjs (no paths passed — the script takes the change set from
the merge base itself), re-derived after the final commit and identical both times. All eight
run locally on head 60336203b, quoting each gate's own verdict line:

gate verdict line
check:agent-model-declared ✓ check-agent-model-declared: 1 agent definition(s) under .claude/agents/ all declare a model
check:doc-authoring ✓ doc authoring guard: 377 files clean — no bare metadata literals.
check:doc-formula-expressions ✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 396 files / 1413 TS blocks judged clean
check:nul-bytes check-nul-bytes: OK (scanned 6278 text file(s) ... no raw ASCII control bytes).
check:pm-governed-merges ✓ check-governed-merges --self-test: 77 assertions
check:pm-skill-id-lint ✓ check-skill-id-lint: 9 file(s) clean (pattern /#[0-9]{3,}/g).
check:pm-skill-ratchet ✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 352 lines (ceiling 399; headroom 47).
check:skill-frame-sync ✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files

Line budget: 353 before, 352 after, ceiling 399.

check:doc-formula-expressions first failed with ERR_MODULE_NOT_FOUND on
@objectstack/formula/dist/index.mjs — a fresh worktree with no built dependency closure,
not a finding. Green after pnpm --filter '@objectstack/lint^...' build.

Governed surface under .claude/ — opened as draft and left draft for a human to merge;
auto-merge not enabled.

Premise re-verification

The card's hard same-file serial is discharged. No open pull request touches
.claude/agents/os-dev.md: all twelve open PRs were checked by diffing each head against its
merge base with origin/main. One first-pass scan appeared to hit, which was an artifact of
the shared checkout being a shallow clone — git merge-base returns empty there, and the
comparison silently degrades. Re-checked after git fetch --deepen, the hit disappears and
every branch reports no change to this file.


Generated by Claude Code

…tead of a narrow local copy

The sanitizer's shape was described twice: AGENTS.md carries the binding
body-mutation clause ("GitHub mutates body BYTES - spell poison-shaped
tokens out in words, never literally"), which names the two measured
mutation shapes and points at the pm-dispatch reading ledger for their
triggers. os-dev.md carried an older, narrower restatement that knew only
one member of that family, so the local copy was already drifting behind
its authoritative home.

Replace the local shape description with a one-line pointer at AGENTS.md's
clause - one rule, one home. The operative os-dev-specific instructions
around it are untouched: the attribution-footer form and its code block
stay, as does the separate instruction to read back your own report comment
after posting it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
@os-warren os-warren added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 19, 2026 — with Claude
@github-actions github-actions Bot added documentation Improvements or additions to documentation and removed skip-changeset PR has no user-facing published change; bypasses the changeset gate labels Aug 19, 2026
@os-warren os-warren added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 19, 2026 — with Claude
@os-warren
os-warren marked this pull request as ready for review August 19, 2026 05:11
@os-warren
os-warren added this pull request to the merge queue Aug 19, 2026
Merged via the queue into main with commit 59b6e99 Aug 19, 2026
27 checks passed
@os-warren
os-warren deleted the claude/issue-9717-osdev-sanitizer-pointer branch August 19, 2026 05:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

os-dev.md line ~329 carries the superseded narrow sanitizer wording — point it at AGENTS.md's binding clause

2 participants