You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
os-dev.md: a project-thread session's harness writes an HTML-comment attribution line as PR body line 1, against 〈干净收尾〉's ban on HTML comments — name the exemption #25220
This was out-of-scope finding 2 of PR #25214 (card #25185). Contract review 6341183860 flagged it, and its round 2 record 6341480064 repeated it. The review sent it to the skills lane, as a card the seat files at ACCEPT.
Finding
The session harness of a Claude Code project thread tells it to begin every PR body with an attribution block. The block's first line is an HTML comment (claude-projects-attribution, carrying the requester's GitHub login).
.claude/agents/os-dev.md forbids HTML comments in GitHub text, at lines 18 and 322–323 (〈干净收尾〉). Its reason is that the sanitizer eats short angle-bracket fragments.
So every card thread breaks one of the two rules. So far it has kept the harness line and reported it as a deviation (PRs #25192, #25212 and #25214 all carry it). A relay read-back on an earlier card thread's PR found the line kept byte for byte.
Ask
Add a one-line exemption to os-dev.md, shaped like the existing one for trailers the harness writes itself (line 286: report it, do not copy or rewrite it):
the harness-required attribution line on PR body line 1 stays exactly as the harness gives it, and the dev reports it;
the ban still covers every HTML comment the dev writes itself.
The closing keyword moves to line 4 because of it; say that too, or point to the rule that already allows it.
Acceptance
os-dev.md names the exemption in one line; nothing else in the ban is loosened.
Line growth is paid by compression under check:pm-skill-ratchet, with no ceiling moved.
The .claude/** Tier S path applies: a contract-review-tier PASS on the head, then the owning seat lands it.
Handover from domain:skills seat 1 (seat post #7623, session_0165fj9zYfUrt6ckcUgYBD5a, 2026-10-22): the maintainer's project that held this seat stops owning the skills lane after its in-flight cards (#25115, #25216) land, so this card stays in the lane queue for the next seat. Order of work:
Shape: S mechanical, os-dev.md only — ONE line in 〈干净收尾〉 shaped like the harness-trailer exemption (near L286: report it, do not copy or rewrite it): the harness-required attribution line on PR body line 1 stays byte-for-byte and the dev reports it; the ban still covers every HTML comment the dev writes. Say that Fixes #<n> then sits on the first line after that block, or point to the rule that already allows it. Paid by compression in the same file; no ceiling moved.
Carry-over from PR docs(pm-dispatch, os-dev): the claim template and the dev definition carry the Metadata-protocol: line beside Clause-②: #25240's contract review (6343268424), same file, ratchet-neutral reword (no new line): 「两行同抄进每个 changeset 正文行首,Check Changeset 读:有 kind 即 minor,none 即 patch。」 should say the gate reads the two lines off the PR body (check-changeset-no-major.mjs L1818 / L1843) and the changeset-body copy is AGENTS.md Post-Task Checklist ③'s publishing rule — e.g. 「两行同抄进 changeset 正文行首;Check Changeset 读 PR 正文:kind 即 minor,none 即 patch。」 (≤120 bytes).
Size / model: S, in-seat subagent, CONTRACT_REVIEW_TIER (os-dev.md is protocol semantics per dispatch-gates.mjs --tier), effort medium. Tier S .claude/**: CONTRACT_REVIEW_TIER PASS on the head, then the owning seat lands it.
Claim: PM loop round 1 (in-seat subagent) · 2026-10-23T06:49Z · p3, enhancement, domain:skills. Names the exemption for the harness-required attribution line on PR body line 1 in os-dev.md 〈干净收尾〉, plus the seat-1 handover's carry-over reword of the changeset line.
Session: session_01REMuzhz6MWRjg8uohedMnM (domain:skills seat 2, in-seat subagent)
Account: os-elon-musk (the seat's linked user; always the card's assignee)
Branch: claude/project-thread-r6oa8t (the seat thread's designated push branch, restarted from mainfc7b53ff after PR #25254 merged; the claude/issue-<n>-<slug> convention cannot be used by a project thread, a measured platform exception)
Worktree: ../objectstack-issue-25244 (the seat's linked worktree on that branch)
Domain: domain:skills
Seat: domain:skills#2 (seat post #19287)
File surface: .claude/agents/os-dev.md only (one exemption line in 〈干净收尾〉 paid by compression in the same file; the ratchet-neutral reword of the changeset-line rule per handover 6343602884). (stop on breach; explain in the report)
⛔ Not in scope: any Tier H file; the pm-dispatch skill files; scripts/**; ceiling rows.
Container & model: S, in-seat subagent (the maintainer's word: S mechanical cards run in the seat), model: CONTRACT_REVIEW_TIER (dispatch-gates.mjs --tier --repo objectstack-ai/objectstack .claude/agents/os-dev.md at fc7b53ff: "MANDATORY"), effort: medium (S). Governed surface .claude/** is Tier S: a CONTRACT_REVIEW_TIER PASS record on the PR's head plus all-green checks; landing on the maintainer's word naming the PR.
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — a rule gap found by contract review 6341183860, not a defect in shipped code
Thread-read: 6343602884
Serial constraints cleared: #25115 (PR #25240) merged; no open PR touches .claude/agents/os-dev.md at claim time (#25385, #25247, #25255, #25386 do not).
Activity
objectstack-fleet commentedon Oct 22, 2026
Handover from
domain:skillsseat 1 (seat post #7623,session_0165fj9zYfUrt6ckcUgYBD5a, 2026-10-22): the maintainer's project that held this seat stops owning the skills lane after its in-flight cards (#25115, #25216) land, so this card stays in the lane queue for the next seat. Order of work:Clause-②:line, so a dispatched PR never writes theMetadata-protocol:line ruling A (#25105) adds #25115 (PR docs(pm-dispatch, os-dev): the claim template and the dev definition carry theMetadata-protocol:line besideClause-②:#25240, ready + auto-merge armed 14:43Z): it editsos-dev.md's claim-copy rule. Start fromorigin/mainafter that merge.os-dev.mdonly — ONE line in 〈干净收尾〉 shaped like the harness-trailer exemption (near L286: report it, do not copy or rewrite it): the harness-required attribution line on PR body line 1 stays byte-for-byte and the dev reports it; the ban still covers every HTML comment the dev writes. Say thatFixes #<n>then sits on the first line after that block, or point to the rule that already allows it. Paid by compression in the same file; no ceiling moved.Metadata-protocol:line besideClause-②:#25240's contract review (6343268424), same file, ratchet-neutral reword (no new line): 「两行同抄进每个 changeset 正文行首,Check Changeset读:有 kind 即minor,none即patch。」 should say the gate reads the two lines off the PR body (check-changeset-no-major.mjsL1818 / L1843) and the changeset-body copy is AGENTS.md Post-Task Checklist ③'s publishing rule — e.g. 「两行同抄进 changeset 正文行首;Check Changeset读 PR 正文:kind 即minor,none即patch。」 (≤120 bytes).CONTRACT_REVIEW_TIER(os-dev.mdis protocol semantics perdispatch-gates.mjs --tier), effort medium. Tier S.claude/**:CONTRACT_REVIEW_TIERPASS on the head, then the owning seat lands it.Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 1 (in-seat subagent) · 2026-10-23T06:49Z · p3,
enhancement,domain:skills. Names the exemption for the harness-required attribution line on PR body line 1 inos-dev.md〈干净收尾〉, plus the seat-1 handover's carry-over reword of the changeset line.Session:
session_01REMuzhz6MWRjg8uohedMnM(domain:skillsseat 2, in-seat subagent)Account:
os-elon-musk(the seat's linked user; always the card's assignee)Branch:
claude/project-thread-r6oa8t(the seat thread's designated push branch, restarted frommainfc7b53ffafter PR #25254 merged; theclaude/issue-<n>-<slug>convention cannot be used by a project thread, a measured platform exception)Worktree:
../objectstack-issue-25244(the seat's linked worktree on that branch)Domain:
domain:skillsSeat:
domain:skills#2(seat post #19287)File surface:
.claude/agents/os-dev.mdonly (one exemption line in 〈干净收尾〉 paid by compression in the same file; the ratchet-neutral reword of the changeset-line rule per handover 6343602884). (stop on breach; explain in the report)⛔ Not in scope: any Tier H file; the pm-dispatch skill files;
scripts/**; ceiling rows.Container & model:
S, in-seat subagent (the maintainer's word: S mechanical cards run in the seat),model: CONTRACT_REVIEW_TIER(dispatch-gates.mjs --tier --repo objectstack-ai/objectstack .claude/agents/os-dev.mdatfc7b53ff: "MANDATORY"),effort: medium(S). Governed surface.claude/**is Tier S: aCONTRACT_REVIEW_TIERPASS record on the PR's head plus all-green checks; landing on the maintainer's word naming the PR.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — a rule gap found by contract review 6341183860, not a defect in shipped code
Thread-read: 6343602884
Serial constraints cleared: #25115 (PR #25240) merged; no open PR touches
.claude/agents/os-dev.mdat claim time (#25385, #25247, #25255, #25386 do not).Generated by Claude Code