Skip to content

Commit 1b26b56

Browse files
pm(lanes/ui): ruled standing exception — a red Spec Main Shape Gate on objectui main or its merge queue is claimed at once as a stop-the-bleed (#20417)
Fixes #20411 Clause-②: no ## What changes One file: `.claude/skills/pm-dispatch/references/lanes/ui.md` (the `domain:ui` lane charter), section 〈形态〉. Two lines out, two lines in: 38 / 38 lines, headroom unchanged at 0. Before (lines 8-9, at `789b2ae5`): ```text - ⛔ 不产 `domain:*`、type 与定级,中央分诊唯一生产,见 SKILL.md 多仓协调规则 1 与 4。 - 误标 ⛔ 不自改:挂 `pm:retriage` 加异议评论同笔,见同节规则 4。 ``` After (lines 8-9, at `8dbfe743`): ```text - ⛔ 不产 `domain:*`、type 与定级,中央分诊唯一生产;误标 ⛔ 不自改,挂 `pm:retriage`+异议同笔。 - 维护者裁决例外于上条与 SKILL.md 无标签禁认领:main/队列 `Spec Main Shape Gate` 红即止血认领。 ``` - **New line 9 is the standing rule.** It carries the operational kernel the ruling asked for: the authority (a maintainer ruling, which SKILL.md 〈优先级〉 ranks above skill text), the two rules it excepts (the line directly above it, central triage as the sole producer of `domain:*` / type / grade; and SKILL.md 〈域车道〉, a card with no `domain:*` label is never claimed), the signal (`Spec Main Shape Gate` red on `main` or in the merge queue; the gate exists only in objectui, so in this charter it reads as objectui's) and the action (claim at once, as a stop-the-bleed). It sits directly under the rule it excepts. - **New line 8 is the old lines 8 and 9 joined, and the join is paid for by deletion.** Both facts are kept: the ui seat produces no `domain:*`, type or grade (central triage is the sole producer); a mislabel is never corrected by the seat, which puts `pm:retriage` plus an objection on the card in the same write. Line 8's rule text up to 中央分诊唯一生产 is byte-identical, so the card's quotation of it still greps. ## Why this wording: every line of this file is held to 120 bytes The dispatch assumed the file's line width is not pinned (it has no table, so the widest-table-row pin is 0). One pin does apply: `scripts/pm/check-skill-line-ratchet.mjs` holds every line of every ceilinged file to `MAX_LINE_BYTES = 120` UTF-8 bytes, and a CJK character is 3 bytes. Measured with the gate's own `scanLineLengths` on the `789b2ae5` text: - the dispatch's literal merge of lines 8 and 9 (a semicolon join that keeps both pointer clauses) is **169 bytes**, an offender: the gate would demand a wrap back into two lines, so the join alone frees no line; - the dispatch's suggested wording for the new rule runs to several hundred bytes, several physical lines. So: - The payment is **deleted content, not a re-wrap**: lines 8 + 9 were 108 + 83 = 191 bytes; the merged line is 120 bytes. The 71 bytes removed are the two pointer clauses (`见 SKILL.md 多仓协调规则 1 与 4`, `见同节规则 4`), the word 评论, and 加 spelled as `+`. Both pointers name a location that no longer exists: SKILL.md has carried no numbered 多仓协调 rules since `f151ef2c` moved that chapter to `references/cross-repo-coordination.md`, and line 3 of this same file already points the whole charter there. - The new rule is exactly 120 bytes. The ruling says a line that cannot hold everything keeps the kernel (signal, action, the rule it excepts, the maintainer's ruling) and gets no second line; it has none. ## What the line leaves to the card and this body (recorded, not built into the line) - p0 standing; the ui seat adds no grade label, and triage still grades afterwards on its next fire. - The repair it dispatches must compile on both the installed spec and spec `main`; the gate is never disabled or skipped. - Target: the queue is restored within an hour. - Unchanged: the gate itself, its requiredness, and ruling C. SKILL.md's emergency direct-triage duty for P0 suspects applies alongside the claim. - objectstack side: no required check. The second sentence of the ruling is a non-action and is recorded here, not built. - The attribution qualifier (a red the diff under test did not cause) is not spelled in the line. The gate's own red names the objectui file and the objectstack commit it failed against (the acceptance criterion in its workflow header), so the seat reads the attribution off the red itself. ## Provenance (this body only; the operational text carries no ruling date, quotation or issue number, per the `check:pm-skill-id-lint` corpus rule) - Ruled: the maintainer's 「同意」 on 2026-09-28 in the objectui `domain:ui` seat 1 chat (`session_01DuWo5bdP9SdVebamn99GGk`), answering this proposal, verbatim: > 定一条常设规则:"Spec Main Shape Gate"在 main 或合并队列上变红时,直接视为本车道的 p0,不等分诊定级,任何 ui 席位立即认领止血。成本几乎为零,不改检查、不改裁决 C,目标是在一小时内恢复队列。 > objectstack 侧不做必需检查。如果以后要加,最多只在改动 `packages/spec/src` 的 PR 上跑,而且只报告、不阻塞:让作者提前知道要破坏 objectui,但不拖慢 objectstack。 - objectui#9860 carries ruling C (2026-09-18): the gate is the only shape gate for the spec's public surface. - Episodes behind the ruling: objectui#10080 (2026-09-20); a gate setup fault repaired by objectui#10238 (2026-09-24); objectui#10916 (2026-09-28), which objectstack#20369 tripped. 27 minutes passed between that card and its claim, and objectui#10901 was ejected from the queue twice in that window. - #20154 and #20250 are the precedents for the triage grade (`tooling`, p2, `domain:skills`). - Premise re-measured today: ruleset 11776024 on `objectstack-ai/objectui` (enforcement `active`) lists `Spec Main Shape Gate` among its required status checks, and `.github/workflows/spec-main-shape-gate.yml` on objectui `main` subscribes `merge_group`. ## Readings (head `8dbfe743`) Line budget (tokens = ceil(bytes / 4), the `check-skills-token-ratchet.mjs` definition): | scope | lines | bytes | tokens | |:--|:--|:--|:--| | `references/lanes/ui.md` | 38 → 38 (ceiling 38) | 2552 → 2601 | 638 → 651 | | `.claude/skills/pm-dispatch/**` (whole tree) | 2618 → 2618 | 224064 → 224113 | 56016 → 56029 | - Line widths: both edited lines are 120 bytes; `scanLineLengths` reports no offender. Positive control (in memory, nothing written): 3 more bytes on either edited line makes that line an offender at 123 bytes. - Gates: the 17 commands `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` derives for this change set, every one exit 0 at `8dbfe743`. `--ran` reconciliation: `17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3)`. - `pnpm check:pm-skill-ratchet` exit 0: `ui.md is 38 lines (ceiling 38; headroom 0)`, self-test 157 cases. - `pnpm check:pm-skill-id-lint` exit 0: `34 file(s) clean (pattern /#[0-9]{3,}/g)`. - `pnpm check:skill-frame-sync`, `pnpm check:nul-bytes`, `pnpm check:pm-governed-merges`, `pnpm check:doc-authoring`, `pnpm check:agent-test-spelling`, `pnpm check:cross-package-test-inputs`, `pnpm check:driver-memory-census`, `pnpm check:gitlink-declared`, `pnpm check:refd-timer-probe`, `pnpm check:watch-hint-literal`, `node scripts/check-closing-keyword-parity.mjs` (and `--self-test`), `node scripts/check-comment-mask-corpus.mjs`, `node scripts/pm/check-harness-current.mjs --self-test`: exit 0 each. - `pnpm --filter @objectstack/lint run check:doc-formula-expressions`: first run exit 3, PREREQUISITE NOT MET (the fresh worktree had not built its two workspace imports; nothing measured). Built under the shared verify lock (`VERDICT command-exit 0`), re-run exit 0. - Changeset: `skip-changeset`. The one changed path is under `.claude/**`; the root package is `private: true`, and 0 of the `packages/**/package.json` manifests name `.claude` in any field (positive control: 69 name `dist`). ## Acceptance notes - `references/lanes/hotcrm.md` line 8 carries the same dead pointer (`纪律全文在 SKILL.md 多仓协调规则 4`). It is outside this card's declared file surface and is untouched here. - objectui's `.github/workflows/spec-main-shape-gate.yml` header still says the context is not required yet and that `scripts/dependabot-merge-gate.mjs` keeps it in `NOT_A_GATE`. Both are now false: ruleset 11776024 requires it, and that script lists it in `REQUIRED_CONTEXTS`. Comment drift in the sibling repo, noted only. ## Deviations from the dispatch - Mechanism assumption 1 (line width unpinned) is false: the 120-byte line rule binds, measured above. Consequence for assumption 3: the 8 + 9 merge frees a line only by deleting the two pointer clauses and two words, not by the semicolon join. The payment candidate and placement are the dispatch's; the wording is not. - The suggested wording for the new rule is not used: it would be several physical lines. The line is cut to the kernel the ruling names, with both must-keep elements (the rule it excepts, the maintainer's ruling) present. - `check:doc-formula-expressions` needed a prerequisite build (`@objectstack/formula`, `@objectstack/lint`) before it could measure; no gate was narrowed or skipped. - The dispatch's single-card clause says `.claude/**` is Tier S and its generic clause says Tier H; AGENTS.md Prime Directive 14 puts all of `.claude/**` in Tier S. Reported, not chosen silently. This PR stays a draft either way; the dev does not ready, queue or merge it. ## 维护者速读(草稿) **改了什么**:ui 车道岗位说明(`references/lanes/ui.md`)加了一条常设规则:objectui 的 main 或合并队列上 `Spec Main Shape Gate` 变红时,任何 ui 席立刻以止血名义认领,不等分诊贴域标签和定级;这一行写明它是您的裁决,并点名它破例的两条规则。为了不增加行数,原来"域标签只由分诊生产"和"误标怎么处理"两行合成了一行,两条事实都保留,只删掉了两个已经指向不存在位置的旧指针。 **为什么改**:您 9 月 28 日同意了 ui 席的提议。上一次同类事故里,卡片为等定级空等了 27 分钟,期间 objectui 的一个 PR 被踢出合并队列两次。 **风险与代价(含回滚)**:文件仍是 38 行,整个 pm-dispatch 目录行数不变,只多 49 字节。受每行 120 字节上限约束,新规则只写了核心四件(信号、动作、例外的两条规则、维护者裁决);p0 待遇、一小时目标、修复须同时兼容已安装 spec 与 spec main、门禁不关不跳过等细节留在卡片和本 PR 正文。回滚就是 revert 这一个提交。 **席位意见**: **你要做的**:无需操作;如对这一行的措辞有意见,在本 PR 留言即可。 --- _Generated by [Claude Code](https://claude.ai/code/session_01MjvgiFAmjHqsxy1XLiVYfH)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 50e273f commit 1b26b56

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

  • .claude/skills/pm-dispatch/references/lanes

‎.claude/skills/pm-dispatch/references/lanes/ui.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
## 形态
66

77
- 本席为姊妹仓执行座位:在 objectui 仓认领、派发、复核、落地。
8-
- ⛔ 不产 `domain:*`、type 与定级,中央分诊唯一生产,见 SKILL.md 多仓协调规则 1 与 4。
9-
- 误标 ⛔ 不自改:挂 `pm:retriage` 加异议评论同笔,见同节规则 4。
8+
- ⛔ 不产 `domain:*`、type 与定级,中央分诊唯一生产;误标 ⛔ 不自改,挂 `pm:retriage`+异议同笔。
9+
- 维护者裁决例外于上条与 SKILL.md 无标签禁认领:main/队列 `Spec Main Shape Gate` 红即止血认领。
1010

1111
## 范围
1212

0 commit comments

Comments
 (0)