Skip to content

docs(pm): clause-② claim declaration line + gate honesty sentence; label descriptions to GitHub's 100-char cap - #9322

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-9211-clause2-declaration-line
Aug 17, 2026
Merged

docs(pm): clause-② claim declaration line + gate honesty sentence; label descriptions to GitHub's 100-char cap#9322
os-zhuang merged 1 commit into
mainfrom
claude/issue-9211-clause2-declaration-line

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#9211

Implements the maintainer ruling recorded on the card (2026-08-17, options 2+4 accepted verbatim: 「同意」), plus the two seat scope-supplement piggybacks recorded there.

Main deliverable 1 — mandatory claim declaration line

The /pm-dispatch claim-comment template (.claude/skills/pm-dispatch/SKILL.md) gains a mandatory machine-criterion line, always English, exactly two spellings: Clause-②: yes / Clause-②: no. Criterion: does the card change contract accept/reject behaviour or widen the public surface, judged from the card content. A yes binds the enqueue gate path-independently (contract-review tier + needs:contract-review); a wrong no becomes an auditable false statement on the record instead of a silent gap. The os-dev agent definition carries no claim template (the claim comment is written by the PM seat), so the declaration lives at the template's single home — verified against the current tree.

Main deliverable 2 — honesty sentence

The enqueue-gate bullet (入队与落地) is restructured as two limbs — path limb (diff touches packages/spec/src/** / error-code ledger / *.zod.ts) and declaration limb (Clause-②: yes, path-independent) — and now states explicitly: the path trigger covers the path limb only; the content limb is carried by the declaration line; the gate must never be read as complete clause-② coverage.

Piggyback 1 — re-wrap ruling at the ratchet clause (line-neutral)

One extension of the ratchet row in 机械守卫索引, no new line: re-wrap (merging wrapped lines) must not fund ratchet lines — the ratchet governs content volume, lines are its machine proxy, additions pay by deletion; density optimization rides only in net-content-reduction PRs. Seat ruling under maintainer delegation, recorded on the card.

Piggyback 2 — scripts/pm/ensure-pm-labels.sh descriptions at the 100-char cap

GitHub hard-caps label descriptions at 100 characters; gh label create gets HTTP 422 above it and the script's || true (needed for idempotent reruns) swallows the failure — so an over-cap line means the label is NEVER created on a repo where it doesn't exist yet, and a rerun can never repair it (measured live on needs:contract-review, ~145 chars). Fixed to the 97-char description matching the live label object the maintainer repaired by hand. The commissioned same-disease sweep found and fixed three more over-cap lines in the same file: pm:on-hold (107 → 97), pm:epic (132 → 83), target:$V (124 → 97 at v17). The script header now records the cap fact, and the needs:contract-review comment block gains the declaration limb so the script stays truthful about the label's trigger.

Line budget (SKILL.md ceiling 682; headroom was 0)

Additions: +1 template line, +1 net line in the gate bullet (3 → 4 physical lines). Funded by content deletion, not re-wrap — every cut names where the surviving statement lives:

  • Claim postscript (6 → 5 lines): dropped the ls-remote branch-discoverability rationale parenthetical (survives verbatim in AGENTS.md, Multi-agent discipline item 2, which SKILL.md defers to) and compressed the atomicity restatement to 「限流不拆原子对」 (the atomic pair is already stated in this section's own intro sentence).
  • Model-tiering paragraph (15 → 14 lines): the dispatch-time gate pointer shrank to a bare pointer — its old spelling 「入队前按 diff 过条款②闸门」 was itself the diff-only reading the new honesty sentence bans, so this cut is also a correctness fix; the downgrade-cause parenthetical no longer repeats its own bold header 「额度耗尽豁免」; the 「明确不变」 sentence de-duplicated its repeated 「照旧 / 默认 opus」; the model-pin allowlist-fallback trap restatement reduced to its named authority (the os-dev.md frontmatter comment, which the sentence already cited as authoritative).
  • Gate bullet: dropped 「(尽力从卡片内容判档,无论派什么档,入队前按 diff 过闸门)」 — both halves survive in the same bullet's opening sentence and the tiering paragraph's pointer.

Result: 682/682, ratchet green, id-lint clean (no issue numbers in the added operative text). No semantic loss intended; each deleted spelling leaves the full statement at exactly one named location.

Tier derivation (clause ①, quoted verbatim from this tree)

Model tier — MANDATORY: claude-fable-5 (derived from the file surface, not recalled).
- .claude/skills/pm-dispatch/SKILL.md ⇢ '.claude/skills/pm-dispatch/**' — clause ① of the model-tiering ruling: a card editing the PM dispatch skill is fable-mandatory, references included — the skill is the lane's own operating protocol and a wrong edit propagates to every later dispatch
The only exit is the measured quota exemption (fable unavailable ⇒ opus, never lower), recorded with its reason in the claim comment's `Container & model` line.
Clause ② is NOT reachable from paths: a card that changes contract accept/reject behaviour or widens the public surface is fable-mandatory too, judged from the card CONTENT. This line is a FLOOR, never a clearance.

Gates — union run at cc3edea99 (after the final commit)

  • pnpm check:pm-skill-ratchet — PASS (SKILL.md 682 lines, ceiling 682)
  • pnpm check:pm-skill-id-lint — PASS (9 files clean)
  • pnpm check:skill-frame-sync — PASS; pnpm check:skill-frame-freshness — PASS (exit 0)
  • pnpm check:doc-authoring — PASS (376 files clean)
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions — PASS (after building the lint dependency closure; the first run failed only on the fresh worktree's unbuilt @objectstack/formula dist)
  • pnpm check:nul-bytes — PASS (6069 files scanned)
  • bash -n scripts/pm/ensure-pm-labels.sh — PASS; all -d strings re-measured ≤100 Unicode chars

Re-derived with node scripts/pm/dispatch-gates.mjs over the actual changed paths: the five named families above, nothing beyond the dispatch prompt's list.

Landing discipline

This PR touches .claude/skills/** — ADR-class per the skills ruling (maintainer 2026-08-11): it stays draft, is never made ready / queued / auto-merged by any AI seat, and hangs visibly for the maintainer's own merge.


Generated by Claude Code

…bel descriptions ≤100 chars
The clause-② enqueue gate keyed on paths only, so a content-only clause-②
card walked straight through it. Per the maintainer ruling (2026-08-17,
options 2+4): every claim comment now carries a mandatory English
machine-criterion line Clause-②: yes/no; a yes binds the enqueue gate
(contract-review tier + needs:contract-review) regardless of paths, and
SKILL.md now states the path trigger covers the path limb only — the gate
must never be read as complete coverage.
Piggybacks (both scoped on the card): the ratchet row records the seat
ruling that re-wrap never funds lines (density optimization rides only
net-content-reduction PRs); ensure-pm-labels.sh descriptions are cut to
GitHub's 100-char hard cap, which || true was swallowing as silent 422s
(needs:contract-review, pm:on-hold, pm:epic, target:vNN all affected).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TNzEetykdh7ceZGwuAPLq
@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation labels Aug 17, 2026
@os-zhuangos-zhuang added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 17, 2026 — with Claude
@os-zhuang
os-zhuang marked this pull request as ready for review August 17, 2026 16:31
@os-zhuang
os-zhuang added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit 71e609fAug 17, 2026
23 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-9211-clause2-declaration-line branch August 17, 2026 16:52
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-zhuang@claude