Skip to content

lanes: every seat's patrol gains "read the half-state anchor's own-lane rows first" - #9988

Merged
os-warren merged 1 commit into
mainfrom
claude/issue-9981-lanes-read-anchor
Aug 19, 2026
Merged

lanes: every seat's patrol gains "read the half-state anchor's own-lane rows first"#9988
os-warren merged 1 commit into
mainfrom
claude/issue-9981-lanes-read-anchor

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

Fixes #9981

GOVERNED surface — draft, human-merge-only. Never flip ready, never enqueue, never arm auto-merge.

What

Each of the six lane job descriptions (.claude/skills/pm-dispatch/references/lanes/{engine,services,cli,devx,skills,spec}.md) gains ONE identically-worded line, first bullet of its 常设承诺 section:

- **每轮巡检第一判据**:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)点名本道卡/PR/座位贴的 H 行,逐行认领或处置,再做其余判据;锚行未处置 ⛔ 不开新派发。

Incident grounding (card): two landed-but-still-dispatched cards sat on the board for 18h/2h — the H8 predicate had already surfaced them on the pinned anchor, but no seat read the anchor per patrol. The rule now lives at the decision point, in every seat's standing commitments.

Wording notes: the anchor is named as 半状态巡查锚 + half-state-patrol.yml (the workflow's ANCHOR_ISSUE names the pinned issue) rather than by issue number, because check:pm-skill-ratchet's sibling gate check:pm-skill-id-lint mechanically rejects 3+-digit issue-ID citations across the whole pm-dispatch surface, lanes included. "每轮巡检" follows SKILL.md's patrol register. The line is deliberately one physical line: the ratchet counts physical lines and the card budgets exactly +1 per file.

Line budget — payment audit (ceilings untouched, headroom-0 ratchet)

file before after ceiling cut paid with
engine.md 41 41 41 header parentheticals (范围 / 常设承诺 / 席内判断) — duplicated the file's own three section headings — and (当前 PM、继承台账、热文件串行队) — duplicated seat-post-protocol.md's four-segment enumeration (当前 PM | 继承台账 | 热文件串行队 | 说明); 三车道…而成 trimmed, the three merged lane names stay. Survivors: same file's headings; seat-post-protocol.md; SKILL.md 域车道表 engine row (merger ruling verbatim).
services.md 31 31 31 (2026-08-19 并入) on the 身份侧 bullet — literal duplication of the same file's header (本车道 2026-08-19 并入原 identity 车道的四个插件) and of SKILL.md 域车道表 services row.
cli.md 37 36 37 the git ls-remote … gh-readonly-queue command and the "入队瞬间滞后" caveat — both survive verbatim in platform-readings.md 「队列成员资格与 auto-merge」(command at its first bullet; the lag as「队列满载时 PR 已入队而分支尚未建出」); replaced by a pointer. cli-only detail kept: entry-name shape, parent-sha queue order, ref lingering after dequeue. Net −2 then +1 → headroom 1.
devx.md 38 38 38 two clauses of the 边界 bullet — the SUBJECT exception (SUBJECT 是 governed 面本身的门禁/审计除外,归 skills) and the spec three-plane split (与 spec 相交的三面按「是否围着 spec 契约转」切分) — both survive verbatim in SKILL.md 域车道表 devx row (which also states the skills/devx SUBJECT boundary); compressed to one pointer at the same spot.
skills.md 36 36 36 判定命令 node scripts/pm/check-governed-merges.mjs --test 带路径 cut from the 范围 bullet — survivors: the same file's 常设承诺 bullet (flip/arm 前跑 check-governed-merges --test, now carrying the (带路径) detail) and SKILL.md 域车道表 skills row + 守卫索引, both naming the full script path.
spec.md 44 44 44 (那是状态,不是岗位说明) — restates the same file's own header rule (现值状态恒在座位贴,⛔ 不迁入本文件) and seat-post-protocol.md (范围与常设承诺是岗位说明,版本化在 lanes/…;段段皆现值); plus grammar particle for width.

No re-wrapping without a content cut; every reflow above follows a named removal. Ceilings map in check-skill-line-ratchet.mjs untouched.

Gates (all at 41e7425, run after the final commit)

  • check:pm-skill-ratchet EXIT=0 — verdict lines: ✓ check-skill-line-ratchet: …lanes/engine.md is 41 lines (ceiling 41; headroom 0), services 31/31, cli 36/37 (headroom 1), devx 38/38, skills 36/36, spec 44/44; all other covered files green.
  • check:pm-skill-id-lint EXIT=0 — ✓ check-skill-id-lint: 15 file(s) clean (pattern /#[0-9]{3,}/g).
  • check:doc-authoring EXIT=0 — ✓ doc authoring guard: 377 files clean — no bare metadata literals.
  • check:pm-governed-merges EXIT=0 — ✓ check-governed-merges --self-test: 77 assertions …
  • check:skill-frame-sync EXIT=0 — ✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions EXIT=0 — ✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 402 files / 1413 TS blocks judged clean (after building the lint dependency closure; first run failed on unbuilt @objectstack/formula dist, a worktree-freshness artifact, not a change defect).
  • Derivation: node scripts/pm/dispatch-gates.mjs (no args, real diff, 6 paths vs merge base 8fa4e2a) named exactly the six families above; exit codes captured before any pipe.

Reverse verification (direction predicted in writing)

Predicted: one extra line appended to skills.md (at ceiling, 36) turns check:pm-skill-ratchet red naming that file at 37 vs ceiling 36. Observed: EXIT=1, ✗ check-skill-line-ratchet: …lanes/skills.md is 37 lines; the ratchet ceiling is 36. Restored via git checkout from the committed state — sha256 byte-identical before/after (f54ab092…9723), gate green again (EXIT=0, headroom 0).

Out of scope

No overlap with the in-flight SKILL.md card (different file, same governed tree). skip-changeset: instruction files only, nothing published.


Generated by Claude Code

…ne rows first"

Adds one identically-worded standing-commitment line to all six lane job
descriptions: the first judgment of every patrol round is reading the
half-state patrol anchor's own-lane H rows, claiming/acting on each before
other judgments; unhandled anchor rows block new dispatches. Each +1 line
is paid by a genuine dedup within the same file (ratchet ceilings untouched).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
@os-warren
os-warren requested a review from os-zhuang August 19, 2026 12:04
@os-warren os-warren added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s labels Aug 19, 2026 — with Claude
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 19, 2026
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 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.

lanes: every seat's patrol judgment set gains "read the anchor's own-lane rows first" — six lane job descriptions, one line each

3 participants