Skip to content

docs(pm): the ui lane names the objectui label/assignee write channel - #18145

Merged
claude[bot] merged 1 commit into
mainfrom
claude/issue-18120-lanes-ui-label-channel
Sep 14, 2026
Merged

docs(pm): the ui lane names the objectui label/assignee write channel#18145
claude[bot] merged 1 commit into
mainfrom
claude/issue-18120-lanes-ui-label-channel

Conversation

@claude

@claude claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Fixes #18120

Under lock 1 an objectui session cannot write a label or an assignee through MCP issue_write (its .claude/settings.json on origin/main denies the tool), and nothing an objectui seat reads said what to use instead: .claude/skills/pm-dispatch/references/lanes/ui.md carried no label line at all. The channel already exists and already takes the repository — the objectstack checkout's scripts/pm/label-write.mjs --repo owner/name, with the four steps and the read-back built in — so this card is one rule line in the lane register, not a mechanism.

The rule line — lanes/ui.md :23, 118 bytes (cap 120)

- 本仓标签/assignee 写走 objectstack `label-write.mjs --repo`,⛔ 不 MCP `issue_write`;被拒转有通道席。

It sits next to :22 「scripts/pm/** 单写手恒在 objectstack 侧 ⇒ 本席的工具需求走上游卡带 Blocked-by: 回链。」 — the channel is that objectstack-side single writer. It deliberately does not restate references/rest-channel.md :38–:39, which already carry the four steps, the read-back and the prohibition for objectstack cards:

- 标签/assignee 写恒经 `scripts/pm/label-write.mjs`:四步内建、回读、回退整组 PATCH 回传 assignees。
- ⛔ 永不 MCP `issue_write`(锁 1 已拒);会话分类器拒改动 ⇒ 无通道,交有通道席位立卡。

What is new here is the cross-repository half — --repo — plus the hand-off when a session's classifier refuses the write.

Line budget — net 0, paid by a deletion, not by a re-wrap

lanes/ui.md is pinned at 38 lines with zero headroom (check:pm-skill-ratchet). Payment is the deletion of :15 「症状位置不改流向,docs 随所记录的面走,两条同上节,⛔ 不在此另抄。」 — a pointer-only line that says as much itself.

Where the deleted rule survives: .claude/skills/pm-dispatch/SKILL.md :198, inside 〈多仓协调〉 (heading at :185) — 「其余(发布库与 apps)归 domain:ui 执行席;症状位置不改流向,docs 随所记录的面走。」 The lane file already points at that section from :3 and from :13, so the rule stays reachable for the seat that reads the lane. No ceiling raised, no line re-wrapped, no other file touched.

Acceptance — both directions, measured on bb9e97d3f

  • git grep -c label-write -- .claude/skills/pm-dispatch/references/lanes/ui.md1 (0 before the edit); the literal control 「单写手」 still hits, now at :22.
  • wc -l38 lines, unchanged; the ratchet prints ✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/lanes/ui.md is 38 lines (ceiling 38; headroom 0).
  • LC_ALL=C awk 'length($0)>120' over the file prints nothing; the new line measures 118 bytes.
  • git diff --name-only a90a9f267..HEAD prints exactly one path — so references/rest-channel.md is untouched, and no permissions.allow text is added anywhere.
  • objectui AGENTS.md is untouched by construction: that file lives in the sibling repository and is not in this diff's repo at all.
  • grep -naP control-byte self-scan over the edited file: no hits (check:nul-bytes green over 8,652 files).

Gates — derived, run in the foreground, reconciled

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 15 families from the working-tree change set; all 15 ran with the exit code captured before any pipe, and all exited 0:

✓ dispatch-gates --ran: 15 derived famil(ies) accounted for — 15 run, 0 NOT-MEASURED
  (a DERIVED zero — all 15 recorded an exit code and none of them is 3).

Named in the dispatch and green here: check:pm-skill-ratchet, check:pm-skill-id-lint (27 files clean), check:nul-bytes, check:skill-frame-sync, check:pm-governed-merges, plus check:pm-governed-prose (not in the derived set — it scores silent as an artifact roster — run anyway: 2 instruction surfaces name all 5 registered governed surfaces).

Six of the fifteen first exited 3 PREREQUISITE NOT MET on a fresh worktree (node_modules absent; one also needed @objectstack/formula + @objectstack/lint built). That is not a verdict: pnpm install, then the build under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0 · held the lock 2s · waited 0s), then a re-run — all 0.

Changeset

skip-changeset label, applied through the additive endpoint and read back. .claude/** publishes nothing: no package files[] ships it, and the fast-track list names .claude/** directly.

Deviation from the dispatch's suggested route

The suggested wording measured 171 bytes against the 120-byte cap, so it could not land as written; the shipped line is a compressed spelling of the same three clauses (channel + --repo, ⛔ MCP issue_write, hand-off on refusal). The suggested payment (dropping :15) measured correct and is what was used.

维护者速读(草稿)

改了什么 — objectui 车道岗位说明加一行:objectui 卡的标签/assignee 写,走 objectstack 检出里的 label-write.mjs --repo,不走 MCP;会话被拒就把卡交给有通道的席位。同一文件删掉一行纯指针句(它的两条规则逐字住在 SKILL.md 〈多仓协调〉:198),行数 38 不变。

为什么改 — 锁 1 已在两仓落地,objectui 会话的 MCP 写标签能力被拒。通道是有的(objectstack 侧那一个脚本,已在 objectui 卡上实跑过),但 objectui 席位读的文件没有一处写着它。席位找不到通道时会把状态记在散文里,而不是记在标签上——这正是同一失败形态在第二个仓的复发。

风险与代价(含回滚) — 风险低:纯指令面一行,无代码、无发布物。代价是删掉的那行指针句;它的规则在 SKILL.md 仍在,车道文件 :3 与 :13 都指向该节。回滚 = revert 本 PR 一次提交,文件回到 38 行原样。

席位意见 — (待席位定稿)

你要做的 — 读一下新增那行的措辞是否符合你的口径(尤其「被拒转有通道席」这半句),然后人工合并:本 PR 触 .claude/**,属受管面,只能由你手工落地。另:objectui 会话真正键入的那条命令要不要进 permissions.allow(前缀拼写在 objectui 会话里不一样),仍等你的裁决,本卡按 out of scope 处理。

Generated by Claude Code


Generated by Claude Code

An objectui seat reads references/lanes/ui.md, which said nothing about how a
label or assignee write is made now that lock 1 denies MCP issue_write in that
repository as well. The lane register gains one rule line naming the objectstack
checkout's label-write.mjs --repo, the MCP prohibition, and the hand-off when a
session's classifier refuses the write.

Paid at the file's 38-line ceiling (headroom 0) by deleting the pointer-only
line whose two rules live verbatim in pm-dispatch SKILL.md 多仓协调 at :198.

Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8
Co-authored-by: Claude <noreply@anthropic.com>
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 14, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 14, 2026
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author
  • Served-tier: 2274/2274 CONTRACT_REVIEW_TIER — harness model stamp counted over this seat's own transcript (non-sidechain assistant messages a model served; <synthetic> harness notices excluded) at 2026-09-14T06:26Z and compared to the constant's value outside the repository; get_session external_metadata.last_served_model read equal to the constant at 2026-09-14T00:20Z.

Contract review

Head: bb9e97d3 (PR #18145, card #18120) — reviewed at 2026-09-14T06:27Z by the skills seat at the contract-review tier. GOVERNED references tier (references/lanes/ui.md only; no rules-layer file) ⇒ this in-seat record is the landing record at the tier PR #18036 enforces: the seat readies and arms auto-merge after it; no approval is owed.

① derived judgments (seat-measured on the fetched head bb9e97d3 against merge-base a90a9f26, ⛔ not taken from the report):

  1. The one line: lanes/ui.md :23 「- 本仓标签/assignee 写走 objectstack label-write.mjs --repo,⛔ 不 MCP issue_write;被拒转有通道席。」 — 118 bytes under the 120 cap, one rule, beside :22 「scripts/pm/** 单写手恒在 objectstack 侧 …」 (the channel IS that single writer); it carries the three ruled halves (the objectstack-side script with --repo; never MCP issue_write under lock 1; a refused session hands the card to a seat with the channel) and does not restate rest-channel.md :38–:39.
  2. Net 0 at 38/38, paid by deleted content: :15 「症状位置不改流向,docs 随所记录的面走,两条同上节,⛔ 不在此另抄。」 is gone; both of its rules survive verbatim at SKILL.md :198 inside 〈多仓协调〉 (seat grep), the section :3 and :13 already cite — a fold, not a re-wrap; every line ≤120 B; ratchet and frame-sync exit 0 on the head (seat-run in a worktree).
  3. Premises held, re-measured by the dev: no label line on a90a9f267 (controls :22 / :23 present); the script prints --repo OWNER/NAME and its four steps; objectui origin/main (e3cb476) denies mcp__github__issue_write; git log a90a9f267..origin/main -- lanes/ui.md empty. The seat's own objectui#9403 pair (05:54Z, --repo objectstack-ai/objectui, read-back match) is the live proof of the channel.
  4. Gates: 15 derived / 15 run / 0 NOT-MEASURED / 0 UNRUN with exit codes recorded, plus check:pm-governed-prose exit 0; six exit-3 prerequisites cleared by install + a build under the verify lock and re-run to 0. Checks on the head at 2026-09-14T06:26Z: 15 success / 12 skipped / 2 in progress / 0 red.
  5. Scope held: one file, +1/−1; rest-channel.md untouched, objectui AGENTS.md not in this repository's diff; no permissions.allow text; skip-changeset is the declaration; Clause-②: no holds — no contract path; --pair 18145 on origin/main's reader → exit 0 at 2026-09-14T06:26Z before this record; 3 REST writes, 0 MCP calls per the report.

② semver: unchanged — nothing published.

③ boundary flags: the PR body stores two footers (the create channel appended its own after a rule-line-free footer) — platform-readings :331 / :338 each state half of that combination and no row states it whole; the dev's out-of-scope note names this seat as the carrier — one row when the register is next touched (the maintainer's permissions.allow word still governs the classifier half of the channel, not this line). Nothing else.

Implemented-by: claude/issue-18120-lanes-ui-label-channel
Reviewed-by: session_01DAcomhvR9kKizeYgg89Vo8

Verdict: PASS — references tier ⇒ this seat lands: ready through POST …/pulls/18145/ccr/ready_for_review with read-back, then PUT …/ccr/auto_merge; Fixes #18120 closes the card on landing.

维护者速读(终稿)

lanes/ui.md 多一行:objectui 卡的标签/assignee 写走 objectstack 检出的 label-write.mjs --repo,⛔ 不用 MCP issue_write,会话被拒就交给有通道的席位;为守住 38 行上限删了一句只做指针的话,它指向的两条规则在 SKILL.md :198 原文都在。references 层,本席自审自落地,不需要你批。


Generated by Claude Code

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 size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

1 participant