Skip to content

docs(pm-dispatch): objectui keeps two lanes, domain:ui and domain:skills; its domain:spec, domain:devx and domain:tooling retire - #25213

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-c7ly2a
Oct 22, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-c7ly2a

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Bill · project thread

Fixes #25191
Clause-②: no
Metadata-protocol: none

What changed

The maintainer ruled on 2026-10-22, quoted verbatim from the card: 「objectui 只有 skills 是特殊的,他本身没有 spec 的概念。devx 我感觉可以和 ui 合并」, and on the options 「甲,现在做」. After this PR, objectui has exactly two lanes:

  • domain:ui — all objectui code: the published library and apps/*; packages/types, the schema corpus and the spec-pin coupling; .github/, scripts/, the build and release pipeline and the gate tools; docs, which follow the surface they document.
  • domain:skills — the published skills/**.

domain:spec, domain:devx and domain:tooling retire in objectui only. objectstack's own lanes are untouched. The protocol stays objectstack domain:spec's: a cross-layer feature keeps rule 2 (a parent plus per-layer children, spec and backend first), and its objectui child is now a domain:ui card. domain:cloud stays a parking label, unchanged.

File Change Lines
.claude/skills/pm-dispatch/references/cross-repo-coordination.md the three 「三流」 lines become: two-lane routing · the retirement · protocol stays objectstack domain:spec 51 → 51 (ceiling 51)
.claude/skills/pm-dispatch/references/lanes/ui.md the seat's scope is the whole objectui code face in the card's four bullets, plus the protocol line; the former packages/spec line is folded into it 38 → 38 (ceiling 38)
.claude/skills/pm-dispatch/references/lanes/devx.md the objectui scope line is deleted 36 → 35
.claude/skills/pm-dispatch/references/lanes/spec.md the objectui scope line is deleted 43 → 42
scripts/pm/ensure-pm-labels.sh the objectui domain:devx / domain:spec rows are gone; the objectui domain:ui description names the whole scope (93 characters, under the 100 cap); the block and the header record the retirement with the ruling's words and date —
scripts/pm/check-half-states.mjs the H38 sibling-board fixture is re-spelled from domain:devx @ objectui to domain:ui @ objectui (the docblock keeps the census provenance) —

SKILL.md has zero edits: its only objectui mention is the 域车道 table's unanchored row (repo:objectui for UI defects); there is no 多仓协调 line about devx / spec pulls on objectui, so nothing to restate (card item 4, re-measured on origin/main at e5f194b).

Why re-spell the H38 fixture. It is a fixture, not a rule, and either choice passes the self-test. Re-spelled because a retired lane name standing as the canonical example of a sibling-board seat title is exactly the trap the label script's own header names for area:*: a retired name surviving a git grep as though it were still a value, for the next AI to copy. Immediate retirement, no dual spelling.

Label objects on objectui. The relay op table (scripts/pm/fleet-write/ops.mjs) carries no label-object op at all — labels_add / labels_remove act on an issue's labels, not on the objects — and this session cannot read objectui (the API answers 403 for the repository), so the live objects' current state is NOT MEASURED here. The script stops creating domain:devx / domain:spec on objectui; the object cleanup is the separate PM act the script's header describes, with the exact strokes in the report comment on the card.

维护者速读(草稿)

改了什么。 objectui 仓从三条流(devx / spec / ui)收成两条车道:domain:ui 管 objectui 全部代码,domain:skills 管仓根发布的 skills/**。objectui 的 domain:spec / domain:devx / domain:tooling 退役(仅 objectui);objectstack 自己的车道不动。改的是 PM 技能参考四个文件、标签词表脚本与半态巡查的一个夹具。

为什么改。 你 2026-10-22 的裁决 甲:objectui 本身没有 spec 的概念,devx 与 ui 合并。实测 10-08 → 10-22 期间 objectui 的 spec 卡全是本仓 packages/types、docs、widget 追协议,devx 卡全是本仓 CI、分片、pin 与发版工具,都由 objectui 的人在做;协议本体只在 objectstack。

风险与代价(含回滚)。 零发布面,skip-changeset。风险只在车道表:座位每次选卡都读这几行,改错会把 objectui 卡派错席。回滚 = revert 本 PR;objectui 上已被分诊改贴到 domain:ui 的 4 张卡不受本 PR 影响。标签对象的清理是落地时席位另一笔动作,本 PR 不碰 objectui。

席位意见。(席位定稿时填写)

你要做的。 无:.claude/** 是 Tier S,席位做达档契约复核 PASS 后入队落地。

Acceptance notes

  • lanes/devx.md (36 → 35) and lanes/spec.md (43 → 42) now sit one line under their ceilings in scripts/pm/check-skill-line-ratchet.mjs; lowering the two rows is legitimate any time and is left out of this PR to keep the file surface the claim declared.
  • The roster creates no objectui domain:skills object; the card names that lane as staying, so the object presumably already exists on objectui. Not measured here (403); if absent, a row with its named reader is a one-line follow-up.
  • check-half-states.mjs: no test file outside the script names it (git grep over scripts/** tests and test/** found none), so its own --self-test is the whole suite owed by the edit.

Gates

Local subset at head db3b205, each exit captured before any pipe (the full derived list and the --ran reconciliation are in the report comment on the card):

Gate Exit
pnpm check:pm-skill-ratchet 0 — every ceiling held (cross-repo 51/51, ui 38/38, devx 35/36, spec 42/43), every line ≤120 bytes
pnpm check:pm-skill-id-lint 0 — 87 files clean
pnpm check:pm-governed-prose 0
pnpm check:pm-label-desc-cap 0 — 38 descriptions ≤100 chars
pnpm check:skill-frame-sync 0
pnpm check:pm-half-states (the edited script's own self-test) 0
pnpm check:pm-dispatch-gates 0
derived union (dispatch-gates.mjs --commands on the diff, 51 families) 51 run, 0 NOT-MEASURED, 0 UNRUN (--ran reconciliation)

CI families run by the PR's check-runs; the seat's ACCEPT reads those.


Generated by Claude Code

…lls; its domain:spec, domain:devx and domain:tooling retire

The maintainer ruled 甲 on 2026-10-22: objectui has no spec of its own and
its devx work merges into ui, so objectui cards go to exactly two lanes —
domain:ui (all objectui code) and domain:skills (the published skills/**).
The objectui domain:spec / domain:devx / domain:tooling streams retire in
objectui only; objectstack's lanes are untouched. The protocol stays
objectstack domain:spec's, and a cross-layer feature's objectui child is a
domain:ui card.

- cross-repo-coordination.md: the three-stream lines become the two-lane
  routing, the retirement, and the protocol-stays-spec rule (51 → 51 lines).
- lanes/ui.md: the seat's scope is the whole objectui code face, with the
  protocol line folded in from the former packages/spec line (38 → 38).
- lanes/devx.md, lanes/spec.md: the objectui scope lines are deleted.
- ensure-pm-labels.sh: the objectui domain:devx / domain:spec rows are gone,
  domain:ui's description names the whole scope, and the block and the
  header record the retirement with the ruling's words and date.
- check-half-states.mjs: the H38 sibling-board fixture is re-spelled to
  domain:ui so no retired lane name survives as a canonical example.

Claude-Session: https://claude.ai/code/session_01FRiDG7bG4jkZL2tQKpJgGv
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: db3b20594418aa53995849a74a916589bd11c0cf
Local-runs: none
Scope: .claude/skills/pm-dispatch/references/cross-repo-coordination.md, .claude/skills/pm-dispatch/references/lanes/ui.md, .claude/skills/pm-dispatch/references/lanes/devx.md, .claude/skills/pm-dispatch/references/lanes/spec.md + scripts/pm/ensure-pm-labels.sh, scripts/pm/check-half-states.mjs (the H38 docblock and self-test fixture), .claude/skills/pm-dispatch/SKILL.md (the 域车道 table, read for leftovers), scripts/pm/check-skill-line-ratchet.mjs (the four ceiling rows)

Inputs: card #25191 (body with the maintainer's verbatim ruling 甲, the Claim 6340134773, the os-dev report 6340752952); PR #25213 body, file list (6 files, +52/−32) and the diff at the head; the head's check-runs (44: 25 success, 13 skipped, 6 in progress at this write); git grep over the whole tree at the head for the retired vocabulary. The head was verified: origin/claude/project-thread-c7ly2a resolves to the PR's head.sha. Nothing built, run or re-run; the dev's 51-family local gate readings are reported as the dev's.

① Derived judgments

  • The ruling is applied exactly, no wider — RIGHT. objectui keeps domain:ui (all code) and domain:skills (the published skills/**); domain:spec / domain:devx / domain:tooling retire in objectui only; objectstack's lanes are untouched (lanes/devx.md and lanes/spec.md lose only their objectui line; SKILL.md is not edited and its only objectui mention, the 域车道 table's unanchored row, is unrelated). domain:cloud is untouched.
  • No retired vocabulary survives as a live rule — RIGHT. At the head, git grep for 「三流」, domain:devx @ objectui, 「objectui 的 domain:devx」 and 「objectui 的 domain:spec」 over .claude/** and scripts/pm/** hits only the new retirement line itself and the two comment blocks that record the retirement with its date. The H38 fixture is re-spelled to domain:ui @ objectui, so no retired name stands as the canonical example.
  • The protocol rule is kept and cross-referenced correctly — RIGHT. cross-repo-coordination.md L16 says the protocol stays objectstack domain:spec's and names 规则 2; 规则 2 is defined at L28 of the same file (parent plus per-layer children, spec/backend first), so the reference resolves. lanes/ui.md restates it from the seat's side.
  • One clause moved, none lost — RIGHT, judged. lanes/ui.md deletes the 常设承诺 line 「新 packages/spec 工作恒归 domain:spec 席,已派发卡 ⛔ 不因此转席」 and folds its first half into the scope line. The second half (an in-flight card does not change seat on a routing change) lives in SKILL.md's state model (「定车道与改路由限未派发卡」 on the pm:retriage row; 「在飞卡跟到 MERGED」 on the assignee row), so the deletion drops no rule. Noted, not a finding: the second scope bullet of lanes/ui.md reads as a continuation of the first (it starts with .github/); density over polish is this tree's convention, and the ratchet ceiling (38/38) leaves no free line.
  • Label script — RIGHT. The objectui domain:devx / domain:spec rows are removed (the script never created domain:tooling), the domain:ui description names the whole scope in 93 characters (check:pm-label-desc-cap cap 100), and the header's retired-labels paragraph gains the pointer so a reader of either place finds the other. The script's own rule that leftover objects are a separate PM act is kept; the dev lists the strokes in the report and executed none (objectui is unreachable from the card thread). No objectui domain:skills row is added: the object's existence is NOT MEASURED by the dev or this seat (403 from both containers); the Acceptance note records it as a one-line follow-up if absent.
  • Fixture, not rule — RIGHT. check-half-states.mjs changes only the H38 docblock example and its two self-test titles/inputs; seatLane is not touched, and the self-test stays the whole suite (no other test names the file).
  • Accept set / public surface — unchanged. PM files only; skip-changeset is right; Clause-②: no and Metadata-protocol: none are correct and at line start in the body.

② Semver level

skip-changeset: nothing published changes. Metadata-protocol: none is consistent (ruling A: a non-protocol change).

③ Boundary flags

Implemented-by: session_01FRiDG7bG4jkZL2tQKpJgGv
Reviewed-by: session_0165fj9zYfUrt6ckcUgYBD5a

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT · domain:skills seat 1 (seat post #7623) · session_0165fj9zYfUrt6ckcUgYBD5a · head db3b20594418aa53995849a74a916589bd11c0cf · 2026-10-22T12:32Z

  1. Form. Draft against main; body carries Fixes #25191, Clause-②: no and Metadata-protocol: none at line start, the project's attribution lines and the 维护者速读 draft. Assignee os-bill equals the card's. Files, read with the PR's file list: the four references, scripts/pm/ensure-pm-labels.sh, scripts/pm/check-half-states.mjs (+52/−32). check-governed-merges.mjs --pr 25213: Tier S (.claude/** ×4; the two scripts/pm paths are off the register), 84 changed lines, under the 3000-line ceiling. skip-changeset is right: nothing published.
  2. Premises measured. The seat read every hunk and the cited neighbours itself (contract review 6340812927): the ruling is applied exactly and no wider; no retired vocabulary survives as a live rule at the head; 规则 2 resolves inside the same file; the one folded clause in lanes/ui.md keeps its second half in SKILL.md's state model. Ratchet: cross-repo 51/51, ui 38/38, devx 35/36, spec 42/43 (dev's reading; check:pm-skill-ratchet exit 0, confirmed by the Lint · PM dispatch-gates check-run once it completes).
  3. Gate check-runs, pinned to this head at this write: 44 runs, 25 success, 13 skipped, 0 failures, 6 in progress (Test Core (1/6), Type Check · consumer gates, Lint · docs & code guards, Lint · PM dispatch-gates, Lint · CI, release & engine gates, Live half-state sweep). The landing pre-check re-reads them at completion; ⛔ no ready / enqueue before every run is success or an expected skip. The dev's 51 derived gates all exited 0 with --ran reconciled (dev's reading).
  4. Accepted deviations. Edits in the card thread's primary checkout under OS_ALLOW_MAIN_EDITS=1 (single-tenant thread); no reviewer requested (Tier S owes none); a lint-closure build to measure one derived gate. None touches the diff.
  5. Out-of-scope findings. (a) lanes/devx.md 35/36 and lanes/spec.md 42/43: Acceptance note, the ceiling rows ride a later lane PR. (b) objectui domain:skills label object NOT MEASURED (403 from both containers): Acceptance note; a row with its named reader is a one-line follow-up if absent.
  6. Landing clause. Tier S: this seat lands it through the relay (pr_ready + automerge_enable) once the head's check-runs are all green or expected skips, after check-governed-queue-guard.mjs --test on the four .claude/** paths. The objectui seat-post acts the card names (objectui#5748 retitle request, objectui#10217 / objectui#10917 closed not_planned) go through the relay against objectstack-ai/objectui at landing; the label-object edits need a shell that can mint the fleet identity (with-fleet.sh runs no command on the dispatch route), so they are handed to a seat that can, named on the card.

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

Projects

None yet

2 participants