Skip to content

docs(pm): label writes re-read current labels in the same action — stale snapshots are invalid snapshots (#9226) - #9238

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-9226-label-write-reread
Aug 17, 2026
Merged

docs(pm): label writes re-read current labels in the same action — stale snapshots are invalid snapshots (#9226)#9238
os-zhuang merged 1 commit into
mainfrom
claude/issue-9226-label-write-reread

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#9226

Main deliverable — references/platform-readings.md (in-place, line-neutral)

The issue_write labels whole-set-replace trap line is rewritten in place (no new lines). Core increment per the card: 写标签前同一动作内重读现值合并 —— 隔轮/隔小时的旧读数视为无效快照. All pre-existing elements are preserved: whole-set replace (not append), the silent-stripping consequence, true append via REST POST /issues/{n}/labels, and the post-write read-back. Rationale (from the card): the old wording pinned read-then-union but not the freshness of the read — a reading taken early in a round plus a write 80 minutes later satisfied it literally while bypassing it semantically; post-write read-back cannot catch this class, so the only effective defense is compressing the read-write window to seconds.

Piggyback (scope-addendum comment on #9226) — landed, not dropped

SKILL.md review section (the skill-surface ACCEPT 三件套, item ①) now states that the review seat for clause-① skill-surface PRs must itself run at the contract-review tier, referenced via the dispatch-gates constant CONTRACT_REVIEW_TIER — no model name written, single source preserved. Funded line-neutrally by extending the existing line (long-line precedent in the file: lines up to 492 chars); no re-wrap, no new line.

Line budget (ratchet, read on the spot)

filebeforeafterceiling
.claude/skills/pm-dispatch/references/platform-readings.md133133134
.claude/skills/pm-dispatch/SKILL.md682682682

Tier derivation (verbatim, node scripts/pm/dispatch-gates.mjs --tier on the changed paths)

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
- .claude/skills/pm-dispatch/references/platform-readings.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.

Verification — gate union re-run after the final commit, at 0627eed38

doc-authoring: PASS
doc-formula-expressions: PASS
pm-skill-id-lint: PASS
pm-skill-ratchet: PASS
skill-frame-sync: PASS
nul-bytes: PASS
union at HEAD: 0627eed38

Gate families re-derived from the actual changed paths (node scripts/pm/dispatch-gates.mjs on the two files): the five families above, matching the dispatch expectation; no additions beyond the derived set. .claude/-only change — releases nothing; skip-changeset applied.

This is a skill-surface PR (.claude/skills/**): draft, awaiting a human merge — never ready/queue/auto-merge.


Generated by Claude Code

… — stale snapshots are invalid (#9226)
In-place, line-neutral rewrite of the issue_write labels whole-set-replace
trap line in platform-readings.md: the freshness of the read is now pinned
(re-read current values within the same action; a reading from an earlier
round/hour is an invalid snapshot). Piggyback per the scope-addendum comment:
SKILL.md review section now states that the review seat for clause-1
skill-surface PRs must itself run at the contract-review tier, referenced
via the dispatch-gates CONTRACT_REVIEW_TIER constant (no model name).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TNzEetykdh7ceZGwuAPLq
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 17, 2026
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 17, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 17, 2026 11:50
@os-zhuang
os-zhuang added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit 862eb14Aug 17, 2026
23 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-9226-label-write-reread branch August 17, 2026 13:15
os-zhuang pushed a commit that referenced this pull request Aug 17, 2026
…9395)
Implements the maintainer ruling on #9319 decision 2 (2026-08-17): the
`ADR maintainer approval` gate's path predicate extends to
`.claude/skills/**`, so Prime Directive #14's human-merge reservation is
machine-enforced on the lane's own protocol surface rather than declared.
- the single ADR prefix becomes a GOVERNED_SURFACES table: identical pass
conditions (an APPROVED standing + no armed auto-merge), distinct failure
wording, each surface naming its own rule;
- the #8012 armed-auto-merge clause reaches the new path class identically,
with its own emptiness proof (identical reviews, opposite verdicts);
- one path hit governs the whole PR -- a mixed diff is never judged by
proportion, pinned by comparing a 1-of-4 verdict with a 1-of-1 one;
- the report renderer is pure, so the "each surface names its own rule"
requirement is asserted on the text an operator actually reads;
- PR #9238 -- the skills-only PR the merge queue landed with zero reviews --
joins the historical replay fixtures as a real capture, pinned RED.
The workflow needed no trigger change: it carries no `paths` filter (a path
filter would skip the whole workflow and hang the queue on a required context
that never reports), and #9238 already produced a completed `ADR maintainer
approval` check run through the clean path.
No existing check is weakened: every prior assertion still runs, and the
self-test goes from 66 to 96 assertions.
Fixes#9395
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性)

2 participants

@os-zhuang@claude