Repository navigation
Description
Filed and dispatched on direct maintainer instruction (2026-08-14, verbatim, untranslated): 「把上面四条豁免固化进 skill」, answering the seat's analysis of why a one-leaf translation fix became a filed card instead of a same-PR change.
The measured instance
A dev repairing the es-ES half of an ADR-0090 rename found the identical stale leaf in the ja-JP bundle — same defect class, adjacent file, one string value, correct form already pinned by the file's own sibling field and by the English source. Current rule said file it, so it was filed with a full repo-wide bounding sweep behind it. Result: a 1-line fix now needs the whole pipeline (triage, claim, worktree, dispatch, gate union, PR, review, merge), and the chance to close the CLASS was lost — the consistency guard added in the es-ES PR deliberately omits a ja-JP rule because the instance was still open, so the two changes could have been one.
What the current rule says, and what it is really protecting
.claude/agents/os-dev.md (the out-of-scope clause, near the top of the role's scope section): out-of-scope findings are filed as unassigned issues and listed in out_of_scope_findings — never fixed in this PR. Absolute by construction.
It protects two real things and must keep protecting both: file-surface serialization between parallel agents (a drive-by edit to a file another claim holds is a collision), and unreviewable scope creep ("while I was here I also…"). What it does not distinguish is a mechanical same-class leaf from a module refactor.
Deliverable — the exemption, in .claude/agents/os-dev.md
Amend the out-of-scope clause so that in-place repair is licensed when all four hold:
- the finding is in the same defect class as the card being worked;
- the change is mechanical — no semantic judgment, the correct form already pinned by existing evidence (source of truth, sibling declaration, or a landed ruling);
- the target file is held by no other claim;
- it is covered by the same gate families — no new verification surface.
Obligations when the exemption is taken (part of the rule, not optional): the claim's declared file surface is amended in the same round; the PR body names the extra fix and carries its evidence (a bounding sweep belongs in the PR body, not lost); and where the same PR can extend an existing guard to cover the class rather than the instance, that is the preferred form. Any condition unmet ⇒ the existing behavior is unchanged: file unassigned, list in out_of_scope_findings, do not touch.
Reviewer's half, only if it fits the ceiling: one line in references/review-checklist.md — an in-place adjacent fix is checked against the four conditions plus the amended surface and the named evidence. If the ceiling cannot fund it without cutting a norm, skip it and say so; the dev-side rule is the load-bearing half.
⛔ Ratchet constraint — this is the first card to land under the full-surface ratchet
Every covered file is at headroom 0: os-dev.md 399/399, review-checklist.md 82/82, SKILL.md 686/686 untouched. Additions must be funded line-by-line in the PR body, exactly as SKILL.md edits have been all along. Compression to pay for the new text must follow the rule that landed with the ratchet: verbatim rulings keep, stories compress to one line, ⛔ marks and norms survive. ⛔ Raising a ceiling is not an option here — no maintainer ruling authorizes it, and this card is not one.
Surface is .claude/agents/os-dev.md (+ optionally one references/** line) ⇒ fable-mandatory dispatch, ADR-class merge path (draft PR, human merge, auto-merge never armed). Gate union after the final commit with quoted HEAD.
Activity
hotlong commentedon Aug 15, 2026
Claim: #8781 — bounded in-place exemption (maintainer-pulled)
session_018WuTtyckQa1VcXwgd52JpN(single-card special dispatch on direct maintainer instruction; the skills lane seat stays ⏳ vacant — this is not a re-seating)claude/issue-8781-inplace-fix-exemptiondomain:skills.claude/agents/os-dev.md(primary) · optionally one line in.claude/skills/pm-dispatch/references/review-checklist.md; ⛔ SKILL.md untouchedclaude-fable-5— checked against the mandatory roots list rather than recalled: the surface touches the agent definition and possibly.claude/skills/pm-dispatch/references/**, both fable-mandatoryADR-class merge path: draft PR, human merge, auto-merge never armed. Ratchet posture: both target files at headroom 0, so the diff must be net-zero-or-negative per file and funded line-by-line in the PR body.
Generated by Claude Code
hotlong commentedon Aug 15, 2026
Claim amendment — model downgrade
claude-fable-5→opusunder the quota-exhaustion exemption (maintainer 2026-08-13, 「8451 同意」, codified on main).opus, the exemption's floor — not a further downgrade..claude/agents/os-dev.md+ optionally onereferences/**line), same ADR-class merge path (draft, human merge, auto-merge never armed), same headroom-0 ratchet constraint.Generated by Claude Code
hotlong commentedon Aug 15, 2026
{ "issue": 8781, "status": "done", "branch": "claude/issue-8781-inplace-fix-exemption", "pr": "https://github.com/objectstack-ai/objectstack/pull/8785", "premise_still_valid": true, "summary": "Premise re-verified on origin/main before implementing: the out-of-scope clause in .claude/agents/os-dev.md ground rule 3 was still absolute ('never fixed in this PR', no exemption landed), and both ceilings read exactly as stated (os-dev.md 399/399, review-checklist.md 82/82, SKILL.md 686/686 untouched). Amended ground rule 3 with a bounded four-condition exemption (same defect class; mechanical with the correct form already pinned by existing evidence; file held by no other claim; same gate families) plus its three obligations — claim file surface amended the same round, PR body naming the fix with its evidence including the bounding sweep, and extending a guard to close the class preferred over patching the instance. The prohibition stays the default and both things it protects remain legible: file-surface serialization (condition 3 + the amend-the-surface obligation) and unreviewable scope creep (the name-it-with-evidence obligation). The optional reviewer's half WAS funded and landed — one bullet in references/review-checklist.md — without cutting any norm. Diff is net zero per file (56 insertions / 56 deletions across 2 files); no ceiling raised. Observation, not a surprise on the PR: a second worktree at my commit (scratchpad/rev-8781, detached HEAD) exists that I did not create — left untouched.", "tests": "Gate union run AFTER the final commit at HEAD 675f7bb7e6 (PR head.sha 675f7bb7e67992116f9b79be92de5452106bb4a5 — matches), working tree clean, heavy phase under flock -E 99 -w 540 /tmp/os-heavy-verify.lock. Families derived from the ACTUAL changed paths via 'node scripts/pm/dispatch-gates.mjs .claude/agents/os-dev.md .claude/skills/pm-dispatch/references/review-checklist.md' — the derivation returned exactly the six the dispatch named PLUS check:doc-formula-expressions, which was run too (the addition named per contract). All green: check:pm-skill-ratchet — '.claude/agents/os-dev.md is 399 lines (ceiling 399; headroom 0)' and '.claude/skills/pm-dispatch/references/review-checklist.md is 82 lines (ceiling 82; headroom 0)'; check:pm-skill-id-lint; check:agent-model-declared — '1 agent definition(s) ... all declare a model, os-dev.md -> opus, 0 justified inherit(s)', 18 self-test cases pass; check:skill-frame-sync — '4 copies of the decision frame are structurally isomorphic across 3 files ... binding sentence present in all 4', 12 self-test cases pass; check:doc-authoring — '377 files clean'; check:nul-bytes — 'scanned 5803 text file(s) ... no raw ASCII control bytes', 75 self-test assertions; check:doc-formula-expressions — '22 record-scoped formula example(s) across 396 files / 1410 TS blocks judged clean', run after 'pnpm --workspace-concurrency=2 --filter @objectstack/formula... build' in the fresh worktree (missing-dist would have been an environmental red). No test suite applies — the change is agent-protocol prose, so the verification that carries the load is the ratchet plus a mechanical norm-survival check: stop marks 11 on main / 11 at head, 'measured' markers 8/8, maintainer rulings unchanged (3 'maintainer ruling' + 1 'maintainer-decided' + 1 'maintainer,'). Checklist reflow proved content-pure: with the new bullet removed the file is character-identical to main modulo whitespace (norm(curMinus) === norm(old) -> true). Also self-scanned for control bytes with grep -naP beyond the gate: clean. Gate status on CI: in_progress at report time (draft-PR-time reporting per contract).", "open_questions": [], "out_of_scope_findings": [] }Accounting is in the PR body as an explicit per-site table: os-dev.md +9 for the exemption, funded by -3 (frontmatter comment reflowed from 78 to the file's 95-col width, zero words removed), -1 worktree-cleanup rule, -1 local-verification item 4, -1 union-after-final-commit paragraph (closing restatement folded into the opening sentence), -1/-1/-1 terminating rules 2/3/4 (one measured story folded to a clause). review-checklist.md +2 funded by two pure reflows. No stop mark dropped, so none needed a surviving home named.
Labels read back after bots settled:
["size/m","skip-changeset"]— the union, not the bare set. PR is draft; auto-merge never armed (ADR-class).Generated by Claude Code