Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .claude/agents/os-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,6 @@ model: opus
- PR 改到已有的 `.changeset/*.md`:⛔ 永不打 `skip-changeset`,门禁红着是对的,确认走 PR 文字。
- objectstack:标签是真实机制,打标签是你的默认步骤,PR 一开出就打;派发词可收窄或禁写。
- 范围 = 派发词点名的标签 + 上文判据下的 `skip-changeset`;禁写或交集为空 ⇒ 零写并报告。
- `needs:contract-review` 归席位,⛔ 不挂不摘不等;报 PR 上有无与 `--pair PR-NUMBER` 退出码作读数。
- 写恒经 `scripts/pm/label-write.mjs`:取现集、加法 POST、回读比 union、缺者重挂一次并报告。
- 读回只检测剥除防不了(size-labeler 整组 PUT),门标签被剥恰成绿灯;加法写同样必要不充分。
- 关此步骤的是读回不是写入;读回只验写落了,验不出有门在读:幻影门标签读回照样成功。
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -766,7 +766,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- `AskUserQuestion` 只是在场加速器:仅当维护者在本会话 ~30 分钟内有过人类输入才可发。
- 每问必带推荐项,被 Skip 或长挂即转卡通道,⛔ 不重弹。
- 项目总监席:维护者在所在仓召唤 `/pm-dispatch director`;⛔ 无 Routine/cron;未回字 = 不在 = 停。
- 三职 = `needs:contract-review` 事后审计、决裁勤务、维护者动作台账。
- 三职 = 契约复核记录事后审计、决裁勤务、维护者动作台账。
- 每场召唤把带席内 ACCEPT 的受管草稿呈为一批 ≤5 行决裁;批准与合并仍是维护者的点击。
- 总监席档位由维护者按项目人工定,每场记入摘要台账;⛔ 无档位硬门、无免档整理态。
- 总监席是唯一裁决者:决策箱、代裁与一类自裁只出自本席,⛔ 无子代理无自述。
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/dispatch-runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@

- 衍生 sub-issue:认领席同笔写父卡域与优先级、附查重词后派发;父卡 checklist 评论记一行。
- 无主阻塞项:只做 `Blocked-by:` 点名的那一张,做完即回,⛔ 不顺手接第二张。
- 无主阻塞项的契约面(含 `packages/spec`)走 `contract-review.md` 独立性件的隔离达档复核。
- 无主阻塞项的契约面(含 `packages/spec`)按 `contract-review.md` 欠达档复核记录。
- 在飞阻塞项:等待者在阻塞卡留一行点名自卡;父卡 p0/p1 ⇒ 阻塞卡同笔升同级,沿链重复。

## 停摆复位梯度
Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/pm-dispatch/references/lanes/director.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@
- 创业阶段不渐进:废弃别名与能力退役默认立即退休,无窗口、无双拼写宽限。
- 一次裁清:子问题、分叉与执行参数(字母、车道、级别)同笔裁定,⛔ 不留 dev 另立决策卡。

## 职责一:`needs:contract-review` 事后审计与抽查(可选)
## 职责一:契约复核记录事后审计与抽查(可选)

- 本职是审计位,非放行链:放行常设归派发席席内复核,归属与全链见 `../contract-review.md`。
- 召唤时枚举载体(卡与 PR 两侧)与近期落地的条款② PR,查复核质量与漏网。
- 召唤时枚举近期落地的受管 PR 及其 `## Contract review` 记录,查复核质量与漏网。
- 非机械 CI 红交回具名读者;机械红可接手,经派发 dev 执行。
- 处理三分支之一,收尾 PASS 且工已完 ⇒ 跟到合并为止。
- 非受管 code PR 走清标即落地全链;受管面两层落地见 `../contract-review.md` 落地前检③。
- 非受管 code PR 绿加 ACCEPT 即入队落地;受管面两层落地见 `../contract-review.md` 落地前检②。
- 到合并 = 推进到就绪并点名等待,⛔ 不代维护者合并。
- 之二,大的错误 FAIL 或 REWORK ⇒ 改标签即交接,端态按 `../contract-review.md` 载体纪律。
- 之二,大的错误 FAIL 或 REWORK ⇒ 改 `pm:*` 标签即交接,记录留在 PR 或卡上。
- ⛔ 散文点名不是交接:标签才是收件箱,散文对候选查询与 sweep 全不可见。
- 之三,卡在决策卡 BLOCKED ⇒ ⛔ 不擅断:并入决裁批次,按基本原则格式与维护者讨论。

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/lanes/ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@
- 零读数恒配点亮的正控,且正控须经被测机制本身生效;本仓 search 假零,查重只引命中。
- 脚本能滚动不证明用户能滚动:可达性断言必须驱动真实输入管道。
- 落地验证按内容,正控须在合并前证明会响,⛔ 不按 sha 判已落地。
- 条款②复核本席适用:默认判断档自审加门禁,标照挂;豁免只有独立性件与降档保险丝。
- 条款②复核本席适用:按面欠达档复核记录,落 PR 或卡,归属与资格见 `../contract-review.md`。
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/platform-readings.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
- `list_pull_requests` 的 `fields` 请求 `merged_by` 不返回该字段 ⇒ 字段缺席不是值读数。
- `mergeable_state` 惰性计算,`unknown` 不是读数 —— 挂 unknown 等于挂在可能脏的头上。
- `dirty` 即入队否决(冲突对象是当前 main);draft PR 照答 `clean`/`blocked`/`unknown`,不答 `draft`。
- `needs:contract-review` 是合并闸:实测 `blocked` 而 `mergeable: true`,无标签同形兄弟回 `clean`。
- `mergeable_state: blocked` 且 `mergeable: true` = 规则或必需检查在挡,非冲突;无阻兄弟回 `clean`。
- ready 翻转实测两序列 `clean→blocked→clean` 与 `blocked→unstable→clean`;`unstable` 瞬态非失败。
- `unstable` 可源自 check-runs 看不见的 commit STATUS(如 `Vercel`)⇒ ③ 另读 `/commits/{sha}/status`。
- 零 legacy status 的仓恒答空集默认值 `pending`+`total_count: 0`,⛔ 非门禁读数,门禁读 check-runs。
Expand Down
3 changes: 1 addition & 2 deletions .claude/skills/pm-dispatch/references/state-machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
## 跨状态通则

- 六态 = `pm:{queue,dispatched,blocked,on-hold,awaiting-maintainer}` 加 `needs-user-decision`。
- 六态 ONE-OF 的成因恒是半写的转换;判定以 `check-half-states.mjs` 的 H29/H30/H31 为权威。
- 六态 ONE-OF 的成因恒是半写的转换;判定以 `check-half-states.mjs` 的 H29/H30 为权威。
- 生成物不分叉:`skills/**` 生成器产物跑 `check-governed-merges.mjs --test`,⛔ 不按路径手判。
- `needs:contract-review` 卡侧先挂而 PR 尚不存在是合法中间态,⛔ 不读作半写。
- 交接即标签:只写交接评论而不同笔挂标 = 空交接,收件箱只认标签。

## `pm:on-hold`
Expand Down
21 changes: 10 additions & 11 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -916,9 +916,9 @@ jobs:
# over-long -d means the label is never created on a repo that lacks it
# and a rerun can never repair it. Headroom is thin (one description sits
# at exactly 100), and the only previous enforcement was the author
# counting by hand. Measured in characters, never bytes: the live
# needs:contract-review description is 97 characters / 101 bytes, so a
# byte-length guard would red a label GitHub accepts. Unconditional, like
# counting by hand. Measured in characters, never bytes: the specimen
# that fixed the measure was 97 characters / 101 bytes, so a byte-length
# guard would red a label GitHub accepts. Unconditional, like
# the other self-tested gates above.
- name: PM label description cap
run: pnpm check:pm-label-desc-cap
Expand Down Expand Up @@ -1254,16 +1254,15 @@ jobs:
# else's pair is a fact about the board, not about the PR that happens to
# run CI next, and failing that PR would punish the wrong actor.
#
# ⛔ Do not "promote" the live sweep into this step. The script's own
# `--pair <pr>` mode is the per-PR predicate, and it is a PRE-ARM tool a
# seat runs against its own pair — deliberately not a merge gate, because
# a new blocking context over board state is a required-set change and
# the required set is the maintainer's.
# ⛔ Do not "promote" the live sweep into this step. The script's `--pair`
# landing pre-check is retired (ruling record 5770886272 on #19061) and
# nothing runs it; the file stays only because the Governed Surface Queue
# Guard lazily imports its contract-review record recognisers and
# `--template`, and this self-test is what keeps those loadable.
#
# The self-test is offline and imports `check-half-states.mjs` for the
# label constant, the `prDeliversCard` delivery relation and the shared
# PREREQUISITE-NOT-MET exit code — one source for each, so this checker
# and H31 cannot come to disagree about which PR delivers which card.
# `prDeliversCard` delivery relation and the shared PREREQUISITE-NOT-MET
# exit code — one source for each.
- name: Clause-② carrier checker self-test
run: pnpm check:pm-clause2-carriers

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-automation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -784,8 +784,8 @@ jobs:
WHAT THE AXIS DOES NOT JUDGE, in its own words: "WHICH of the
packages above received that widening is NOT something this gate
can read, and it does not claim to. Clause ② is declared ONCE, FOR
THE PR" -- neither the carrier label nor the declaration line in
the PR body names a package. The axis cross-checks a declaration
THE PR" -- the declaration line in the PR body names no package.
The axis cross-checks a declaration
against the levels; it never reads the diff to find the act.
Judging the act is still yours, this paragraph is still where the
rule lives, and everything in it the axis does not reach is still
Expand Down
12 changes: 6 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -275,12 +275,12 @@ localStorage / auth gotchas.
spent once per PR — the OWNING seat then lands it, later pushes included; the director seat requests the word as
ONE batch of at most five rows, and the click stays the maintainer's. **Tier S** (席内达档复核落地: all of
`.claude/**`): those four lift once the PR thread or its card carries a `## Contract review` record for the PR's
current head with `Served-tier: CONTRACT_REVIEW_TIER` and a PASS verdict, `check-clause2-carriers.mjs --pair N`
reads 0 on its definite rows (⛔ never C5) and every check is green — the owning seat then lands it through the
queue; the post-merge audit is the compensating control. A PR whose only governed paths are register rows the queue
leg regenerates byte-exact clears with zero approvals — an uncertified recompute, drift or a hand-authored sibling
keeps it governed. ⛔ **No agent seat submits an approving review on a governed-surface PR, under any account** —
an authorized account is agent-operated too; "CI is green" carries no information about a governance change.
current head with `Served-tier: CONTRACT_REVIEW_TIER` and a PASS verdict and every check is green — the owning
seat then lands it through the queue; the post-merge audit is the compensating control. A PR whose only governed
paths are register rows the queue leg regenerates byte-exact clears with zero approvals — an uncertified
recompute, drift or a hand-authored sibling keeps it governed. ⛔ **No agent seat submits an approving review on a
governed-surface PR, under any account** — an authorized account is agent-operated too; "CI is green" carries no
information about a governance change.

**Already armed or queued when you read this?** Convert it back to **draft** AND disable auto-merge — draft is
what removes queue membership, disabling alone drops only the arming — then confirm from the remote that it is in
Expand Down
Loading
Loading