Repository navigation
tooling(ui-merge): governance in-repo — liveness evidence and spec tests stop citing objectui by commit, one sdui-parser, AGENTS.md / pm scripts drop objectui#, ui/AGENTS.md nests, 18 governance workflows merged or retired (parent #25677, 4b/6) #25712
Description
Filing gate ④: sub-issue 4b/6 of the epic #25677 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU). Part of #25677. ⛔ Not a claim. Item 4 of the parent is split in two at filing: 4a = #25711, release and publish (fixed group, Console build, pin scripts); 4b (this card) = everything that today encodes "objectui is another repository" in this repo's governance.
Blocked-by: #25685 (merging now) for anything that runs against the ui/ tree; the inert parts (pm scripts learning ui/**, the governed-surface register) can land before cutover like PR A of #25697. Input: the roster table on #25697 (comment 6388182608).
Who does it, where it lands: the epic PM dispatches it (os-dev, objectstack checkout). Two PRs to objectstack-ai/objectstack main: PR 1 inert (pm scripts, governed-surface register for ui/**, dispatch-gates — lands before cutover; Tier S/H as the paths decide); PR 2 cutover-window (liveness evidence, spec tests, sdui-parser merge, AGENTS.md + ui/AGENTS.md, workflow deletions under ui/.github/; Tier H: AGENTS.md, .github/workflows/**).
维护者速读
两仓并成一仓后,本仓里所有"objectui 在另一个仓"的记法都要改:liveness 账本里 185 条 evidenceScope: cross-repo 证据有一部分是「objectui @某提交 的某文件某行」(另一部分指 cloud 仓,不动),合并后直接写仓内路径 ui/...,不再钉提交、不再续日期;161 个 spec 测试文件提到 objectui,其中真的去读 objectui 克隆/钉的改读 ui/,只是文字提到的不动;sdui-parser 两边各一份加一个 lockstep 检查,合并后留一份、删检查;AGENTS.md 里 41 处 objectui# 跨仓约定、pm 脚本里按仓分表的 objectui 行、domain:ui 车道,都并入本仓;objectui 自己的 AGENTS.md 变成 ui/AGENTS.md(嵌套,只管 ui/ 下);objectui 28 个 workflow 里 18 个治理类的,按 #25697 的去向表逐个并入本仓同类 workflow 或删除(嵌套的 ui/.github/ GitHub 本来就不会执行)。AGENTS.md 和 workflow 是受管面,按 Tier H 由你批准。
Scope
- Liveness ledger.
packages/spec/liveness/*.json: of the 185"evidenceScope": "cross-repo"entries, those whose evidence names objectui (objectui @<sha>: path#symbol) are rewritten to in-repo evidence (ui/<path>#<symbol>, scope per the README's in-repo value); entries namingcloud @<sha>stay cross-repo. The reader (scripts/liveness-*.mjs, README §evidenceScope) stops treatingui/as a foreign realm and resolves the paths like any in-repo path (exist-or-fail). The dev reports the split (objectui rows / cloud rows / mixed) before rewriting. - Spec tests that read objectui. Of the 161
packages/spec/**/*.test.tsfiles mentioning objectui, classify: (a) read the objectui tree through a clone, the pin orobjectui-lockstep.json→ readui/directly; (b) textual mention in a comment or fixture name → unchanged.packages/sdui-parser/objectui-lockstep.jsonandscripts/check-sdui-lockstep.mjs/check-sdui-manifest.mjs/gen-sdui-manifest-node.mjs/sdui-manifest.record.jsongo with item 3. - One sdui-parser.
packages/sdui-parser(@objectstack/sdui-parser) andui/packages/sdui-parserare two copies kept in lockstep by a gate. Keep one (the dev proposes which, with the import graph on both sides; the published@objectstack/sdui-parsername is the default to keep), make the other a re-export or delete it, delete the lockstep gate and manifest record. Assessment item P5. AGENTS.md,ui/AGENTS.md, pm scripts.AGENTS.md: the 41objectui#mentions and every "sibling repo" instruction (the../objectuicheckout, the pin bump procedure, cross-repo card references) become in-repo instructions or are deleted;domain:uijoins this repo's lane table. objectui'sAGENTS.mdbecomesui/AGENTS.md, scoped toui/and pointing up for anything repo-wide (rules that duplicate the root file are deleted, not restated).scripts/pm/**:GOVERNED_REPOS/check-governed-merges.mjsregister learns whichui/**paths are governed (ui/.claude/**,ui/skills/**,ui/AGENTS.mdby the same two-tier rule); the fleet relay's per-repo rows forobjectuistay until the repo is archived (sub-issue 5) and are removed in sub-issue 6;dispatch-gates.mjsderivesui/gates.- The 18 governance workflows (roster rows 1–6, 8–15, 20, 24, 25, 28 on tooling(ui-wiring): objectstack-side inert wiring for the
ui/workspace — workspace globs, root turbo tasks, path-filtered ui test/typecheck/lint/E2E jobs, spec change compiles the Console; pin gates retire at cutover (parent #25677, 3/6) #25697): for each, one of — fold into the objectstack counterpart (board-snapshot, changelog, changeset-guard, changeset-presence, check-links, cross-repo-issue-closer, dependabot-auto-merge, governed-surface-guard, half-state-patrol, hook-selftests, labeler, merge-queue-head-patrol, required-check-set-patrol, test-shard-timings-refresh) widening it toui/**; or port as a new objectstack workflow (line-citation-gate, repo-gates' doc/skill gates if they have no counterpart); or delete (anything the merge makes meaningless).ui/.github/is deleted at the end of PR 2 — nested workflow files never run.ui/.claude/hooks(8 hooks) andui/.githooks: merge into the root hooks or delete, with the hook self-tests covering what remains.docs-deploy.ymlfor objectui's site: keep as a second deploy job in this repo'sdocs-deploy.yml(the site stays a separate Vercel project) — the project id/secrets are the maintainer's.
Verification (the dev's)
- PR 1 on
mainas it is: every derived gate green;check-governed-merges.mjs --self-testand the queue guard self-tests pin the newui/**rows. - PR 2 on the
DO NOT MERGEverification branch of tooling(ui-wiring): objectstack-side inert wiring for theui/workspace — workspace globs, root turbo tasks, path-filtered ui test/typecheck/lint/E2E jobs, spec change compiles the Console; pin gates retire at cutover (parent #25677, 3/6) #25697: liveness reader green with zero objectui-citing cross-repo rows; the reclassified spec tests pass readingui/; sdui-parser's consumers on both sides build and test against the kept copy;AGENTS.mdgates (check:agents-*, line citations) green; hook self-tests green over the merged hook set; no workflow underui/.github/remains. - A table on this card: each of the 18 workflows → its disposition and the PR hunk that implements it.
Done when
- PR 1 merged before cutover; PR 2 green on the verification branch, approved by
GOVERNED_APPROVERS, handed to sub-issue 5 and merged in the cutover window after the subtree PR. git grep -c 'objectui @' packages/spec/livenessis 0;git grep -l 'objectui#' AGENTS.mdis empty; one sdui-parser package;ui/.github/absent.
Size: XL — the PM may split PR 2 by item if the diff crosses 3000 lines (the human-merge line applies either way). Clause-②: no. Metadata-protocol: none.
风险
- Liveness semantics: rewriting evidence must not silently upgrade a stale cross-repo claim to a fresh in-repo one; the dev keeps
verifiedAtas it is and lets the ledger's own staleness worklist re-date them. AGENTS.mdis read by every seat: PR 2'sAGENTS.mdhunk is reviewed against the pm-dispatch skill for contradictions before the maintainer sees it.- Two hook trees with overlapping names: a merged pre-commit must not run objectui's root-assuming hooks against objectstack paths —
uiRoot()from tooling(objectui-readiness): make the objectui tree merge-ready in its own repo before cutover — one react line, one zod range, uiRoot() helper, tsc heap, workspace-aware Console chunk tests, typecheck alias (parent #25677, 2/6) #25685 is the guard.
Dedupe
Open issues list 2026-10-24 23:05Z (REST, state=open 100 most recent) filtered on liveness / sdui / AGENTS / governance / objectui: only this epic's own cards and #25556 (superseded at sub-issue 6). Assessment item P5 (sdui-parser lockstep) is carried here rather than filed on its own. New.
Activity
objectstack-fleet commentedon Oct 25, 2026
Claim: epic #25677 round 5 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
Session:
session_01RSDL3SFtJaKzcymvCD8RsUAccount:
os-teslaBranch:
claude/project-thread-15baee(the card thread's designated branch in objectstack-ai/objectstack — the thread can push only this branch, a measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-25712Domain:
domain:devxSeat:
epic:#25677File surface:
scripts/pm/**(governed-surface register,check-governed-merges.mjs, queue guard,dispatch-gates.mjsrunGit maxBuffer) + their self-tests; nothing underpackages/,AGENTS.md,.github/**in PR 1Container & model: M (PR 1 of 2; the card is XL),
mode:thread(thread sessionsession_01JjL3Jp6KnsA4vDma1b4KDa; order:/mnt/project-files/d1-merge/dispatch/in the project, FRAME.md + the card's file),model: opus,effort: high(coordinator default)Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Serial constraints cleared: #25711 (4a, branch
claude/project-thread-a0vh3h) touches release files, notscripts/pm/**; the dispatch-gates maxBuffer item moves from the PR A2 bill of #25697 to this PR (recorded there when PR 1 is up); PR A2 keeps the partitioner + root build filterGenerated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
os-dev-report
{ "issue": 25712, "status": "done", "branch": "claude/project-thread-15baee", "pr": "https://github.com/objectstack-ai/objectstack/pull/25732", "session": "session_01JjL3Jp6KnsA4vDma1b4KDa", "premise_still_valid": true, "summary": "PR 1 of 2, inert, head faaeaeb47d. dispatch-gates spawns git with a 64 MiB maxBuffer (runGit + check-ignore); a slow self-test stages a 16,000-path index, proves ENOBUFS at the default buffer (control) and that trackedFiles reads it whole. The register matchers (governedSurfacesFor/governedPathsIn/governedTierFor) and the queue guard's CODEOWNERS mirror take an optional register (default GOVERNED_SURFACES); self-tests drive the six nested ui/ rows through them in both directions. Per the epic PM's decision B, the six rows themselves, the AGENTS.md/SKILL.md spans and the CODEOWNERS lines are deferred to PR 2 (recorded in the PR body). The card stays open: the PR says Part of #25712.", "tests": "check-governed-merges --self-test exit 0, 527 assertions (512 before; new battery 15). check-governed-queue-guard --self-test exit 0, 339 cases (335 before). check-governed-prose --self-test + gate exit 0, 31 cases. dispatch-gates --self-test both tiers exit 0, 2178 cases (fast 1913 / slow 265), the 5 new maxBuffer cases included. No ablation: tooling/script change, the control leg is the ENOBUFS case.", "gates": "39 derived (dispatch-gates --commands --repo objectstack-ai/objectstack at faaeaeb), all 39 exit 0, exit captured before any pipe; --ran: 39 derived, 39 run, 0 NOT-MEASURED, exit 0. check-governed-merges --branch HEAD: exit 0, not governed, +136/-11 over 5 files. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "6 — read-only: issue_read x4 (card, card comments x2, #25697 comments), pull_request_read x1 (read-back), plus 0 write tools", "api_writes": "2 relay writes — fleet-write pr_create (PR #25732, labels skip-changeset, assignee os-tesla) and this post-stamped comment; plus 1 git push", "open_questions": [ { "question": "ui/.claude/** lands Tier H in PR 2 (fail-closed; Tier H in objectui today). Should it move to Tier S like the root .claude/**?", "options": [ "A keep Tier H", "B Tier S by maintainer ruling (one field)" ], "recommendation": "A, because Tier S would loosen that content's landing without a ruling" } ], "out_of_scope_findings": [ "carrier: #25712 PR 2 · the six ui/ register rows, AGENTS.md and SKILL.md spans, CODEOWNERS lines (deferred by the epic PM, recorded in PR #25732)", "carrier: none · noted, not filed: check-governed-prose header still says Containment covers all six entries while the register has seven" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
ACCEPT (PR 1 of 2) — dispatch seat. objectstack#25732 (head
faaeaeb47d, branchclaude/project-thread-15baee, +136/−11, 5 files, all underscripts/pm/**) is accepted as the inert half of this card. The card stays open for PR 2.Checked against the order (
/mnt/project-files/d1-merge/dispatch/4b-25712-objectstack-governance-pr1.md) and the PM ruling B (register code able to carry nested rows + self-tests + dispatch-gates maxBuffer; the sixui/**Tier-H rows, prose spans and CODEOWNERS lines deferred to PR 2):dispatch-gates.mjs: git children get a 64 MiB stdout ceiling inrunGitandignoreVerdicts; measured merged listing ≈ 1.36 MB vs spawnSync's 1 MiB default, which is the Lint · PM dispatch-gatesENOBUFSred on the verification run. Slow-tier self-test stages a 16,000-path index with anENOBUFScontrol. This also retires the dispatch-gates item of the PR A2 bill on tooling(ui-wiring): objectstack-side inert wiring for theui/workspace — workspace globs, root turbo tasks, path-filtered ui test/typecheck/lint/E2E jobs, spec change compiles the Console; pin gates retire at cutover (parent #25677, 3/6) #25697.governedSurfacesFor,governedPathsIn,governedTierFor, queue guardcodeownersMirrorVerdict) take an optional register defaulting toGOVERNED_SURFACES; no production caller passes one. New battery of 15 cases drives the six nestedui/rows through the real matchers (527 assertions, roster floor 35; queue guard 339 cases; prose gate 31 cases)./mnt/project-files/d1-merge/out/4b-25712-pr2-bill.md): six Tier-H rowsui-adr,ui-claude-tree,ui-skills-catalog,ui-agents-md,ui-claude-md,ui-workflows(repos: ['objectstack'];ui/.claude/**stays Tier H), the AGENTS.md §14 / SKILL.md spans (ratchet ceilings 1117/1117 and 319/319 are freed by PR 2's AGENTS.md rewrite, no ceiling raise), six CODEOWNERS lines, and the pin fliptoday-the-register-does-not-know-ui-…. Cutover window order: subtree PR → PR B → this card's PR 2 → 4a.ui/tree).check-governed-merges --pr objectstack-ai/objectstack#25732on the final file list: NOT governed (0 of 5 paths hit the register), 147 changed lines ≤ 3000 — ordinary queue landing.Landing: the seat flips #25732 ready and arms auto-merge via the relay now. PR 2 is dispatched as its own card thread against this card once the subtree PR window opens.
Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: epic #25677 round 6 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
Session:
session_01RSDL3SFtJaKzcymvCD8RsUAccount:
os-teslaBranch:
claude/project-thread-6qe56u(the card thread's designated branch in objectstack-ai/objectstack — the thread can push only this branch, a measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-25712Domain:
domain:devxSeat:
epic:#25677Scope: PR 2a of 2 —
scripts/check-sdui-lockstep.mjs,scripts/check-sdui-manifest.mjs,scripts/gen-sdui-manifest-node.mjslearn the in-treeui/oracle when.objectui-shais absent (pin mode unchanged),sdui.manifest.jsonregenerated; green onmainas it is. PR 2b (sixui/**governed rows, CODEOWNERS, AGENTS.md / SKILL.md spans, PR 1 pin flip) is prepared as a patch in the project folder and opened after 2a merges. Nothing else of PR 2 tonight.Why now: after 4a #25745 deletes
.objectui-sha, both gates exit 1 inlint-repo-tooling(required laneLint & Repo Gates); measured on the cutover headc326d2fdf1with the file absent.Container & model: M (PR 2a + 2b of the XL card),
mode:thread(thread sessionsession_01A6SEitNngAMugGbuJHWsDS; order:/mnt/project-files/d1-merge/dispatch/4b-25712-objectstack-governance-pr2a.mdin the project, FRAME.md applies),model: opus,effort: xhighClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Serial constraints cleared: #25745 (4a,
claude/project-thread-a0vh3h) deletes the pin and touches none of the three scripts; #25825 (cutover) touches none of them; #25827 (PR B) touches none of themobjectstack-fleet commentedon Oct 25, 2026
ACCEPT (PR 2a of the PR 2 series) — dispatch seat. objectstack#25833 (head
a6ee32ec59, branchclaude/project-thread-6qe56u, 3 files underscripts/, +993/−136) merged 2026-10-25 20:58Z ase2aaaf1c07. The card stays open.Checked against the order (
/mnt/project-files/d1-merge/dispatch/4b-25712-objectstack-governance-pr2a.md):.objectui-shapresent the lockstep and manifest gates and the generator behave as before (golden harnesses byte-identical; existing self-test rows unchanged); without it they judge the in-treeui/copy. Measured on the sitting tree (cutoverc326d2fdf1+ 4a50bd417d30): lockstep 0 (no drift betweenpackages/sdui-parser/srcandui/packages/sdui-parser/src); manifest 1 until the regeneration, 0 after it.sdui.manifest.json(107 components) describes pinb41ed7f689; the frozen registry has 106 (objectui#13449 retiredhtml). One artefact cannot serve both, so PR 2a carries code only and the regeneration rides with the pin deletion in 4a release(ui-merge): one release lane for both scopes — @object-ui joins the fixed group, @objectstack/console builds from ui/apps/console, the objectui pin is deleted (#25711) #25745 as a ready patch (/mnt/project-files/d1-merge/out/4a-sdui-manifest-regen.patch, applied by the 4a thread during its sitting re-merge). Until then 4a'sLint & Repo Gatesreds withrecord is missing inTreeand prints the one remedy command.node scripts/gen-sdui-manifest-node.mjs(96 of objectui's last 200 commits would have). Follow-up: regenerate-and-compare inBuild & E2E UI(ci.yml), next 4b dispatch.--ranreconciled; CI 34 success / 17 skipped; no governed path, no CODEOWNERS path → Tier S, landed via the relay (ready + auto-merge), queue merge.PR 2b (six
ui/**governed rows, CODEOWNERS,AGENTS.md§14 and pm-dispatchSKILL.mdspans, PR 1 pin flip; 5 files +73/−60; both ceilings paid in place) is measured (54 derived gates exit 0; Tier H verdicts on the sitting tree) and is being opened as a draft PR for the 09:00Z sitting; Tier H (AGENTS.md), maintainers approve after 4a. The rest of PR 2 (ui/.github/deletion with the 18 workflow dispositions, liveness ledger, spec tests, parser unification,AGENTS.mdcross-repo rewrite,ui/AGENTS.md, the ci.yml regenerate-and-compare step) is the next dispatch after the cutover.Thread report:
/mnt/project-files/d1-merge/out/4b-25712-pr2-final-report.md. Relay writes by the thread: 1 (+1 for 2b); MCP write calls: 0.merge(ui): objectui becomes the ui/ workspace of this repository — su…
release(ui-merge): one release lane for both scopes — @object-ui join…
feat(pm): the governed register gains the six nested ui/ workspace ro…
18 remaining items
test(spec): exclude the moved SDUI base-prop pin from the visibility-…
objectstack-fleet commentedon Oct 26, 2026
Claim amendment (PM, epic #25677) 2026-10-26T17:28Z: the 2h seat (
session_01P33kUswHotSHBLPc6UVn6n, branchclaude/project-thread-5a915t, Claim 6418578280) is free now that #26216 has merged. It takes the parked ui-filter / cross-package PR for this card. The patch was built by the 4b seat and parked in project files asd1-merge/out/4b-25712-uifilter.patch.Scope:
ci.ymluifilter gains.github/prompts/**(F16),skills/objectui/**(moved there by skills(ui-merge): move the objectui skill bundle into the root skills/ catalog (decision C) #26097) and.github/workflows/**in place ofci.yml(F21);pnpm --filter @objectstack/spec check:livenessstep in Lint UI, so a ui/ PR that breaks a liveness citation goes red on itself.It is Tier H (
.github/workflows/**): draft, then the PM flips it ready after derived gates and the push battery (2182/0) are reported. It changes no lane that 2g or 2i (#26137) edit. Whichever PR lands second rebases.Merge origin/main into claude/project-thread-6qe56u (#25712)
test(sdui-parser): say the alias pin keeps the change out of major, n…
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 25712, "status": "done", "branch": "claude/project-thread-5a915t", "pr": "https://github.com/objectstack-ai/objectstack/pull/26278", "session": "session_01P33kUswHotSHBLPc6UVn6n", "premise_still_valid": true, "summary": "Landed the parked 4b ui-filter patch (Claim amendment): the root ci.yml ui filter gains .github/workflows/** in place of ci.yml (F21), .github/prompts/** (F16) and skills/objectui/**, and Lint UI runs pnpm --filter @objectstack/spec check:liveness (F26 = B). git am applied cleanly onto main 3d50a43b; only the commit trailers changed (card relation dropped, this session's model-free pair).", "tests": "pnpm --dir ui exec vitest run on check-pre-install-import-graph, check-prompt-component-keys, check-skills-paths: 3 files, 120/120. pnpm --filter @objectstack/spec check:liveness: exit 0. Push battery GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs: 2182 pass, 0 fail (fast 1917 / slow 265).", "gates": "dispatch-gates --commands: 63 derived, 63 exit 0. --ran: 63 run, 0 NOT-MEASURED, 0 UNRUN. PR check-runs: pending at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "reads only; zero MCP write tools", "api_writes": "relay only: git push (branch recreated), fleet-write pr_create #26278 (draft; assignee os-tesla, label skip-changeset; governed-review follow-up requested the approvers at create), this comment", "open_questions": [], "out_of_scope_findings": ["#26137 (2i PR A) also edits the ci.yml ui filter; whichever lands second rebases · carrier: PM · noted, not filed"] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
决策卡:#26343(2g 第 3 步:删掉前端解析器副本)要改两条待发的 changeset,需维护者确认
2026-10-26T22:09Z · PM 立卡(维护者 2026-10-26 03:31Z 规则)。#26343 已挂
needs-user-decision,本卡不另挂 label。os-zhuang 批准 #26343 即视为选 A,不需要另外回字母。一句话问题: 前端那份解析器包删掉后,两条已经写好、还没发版的 changeset 仍然点名
@object-ui/sdui-parser;不把这一行去掉,18.2 的changeset version会因为找不到这个包而直接失败。改已提交的 changeset 属于「故意更正」,门禁要求维护者确认。Governing text:
check-empty-changeset对已提交 changeset 被改动的判词(DELIBERATE CORRECTION 类,需维护者确认);2g 裁决 E(comment 6418729849):「drops@object-ui/sdui-parserfrom the changesets fixed group」。协议声明: 不改协议。
前提(带 re-check):
.changeset/25831-object-ui-18-1-to-merge.md(chore(changeset): release Object UI's 18.1.0-to-merge changes to the 38 @object-ui packages as one consolidated changeset #26068 合入)与.changeset/26276-ui-package-test-vitest.md,各删'@object-ui/sdui-parser'一行,正文不动。re-check:gh api repos/objectstack-ai/objectstack/pulls/26343/files。check-empty-changeset(就是这处更正);push 电池 2164/0;ui 定向测试 83 文件 1663 通过。选项 × 真实代价 × 工作量:
changeset version正常;发版说明里不再出现一个不发布的包@objectstack/sdui-parser业务含义直译: A = 店都搬走了,把旧店名从待发的公告里划掉;B = 把旧店的公告改贴到新店门口。
os-decision-facets
changeset version对不存在的包会响亮失败(保持现状);B 静默把错误内容带进发版说明。Prior rulings read: changeset correction / sdui-parser → 2g 裁决 E + B(6418729849)、第 28 项 B(aftercare(ui-merge): move the 65 travelled ui/.changeset files into the root .changeset so the first post-cutover Version PR bumps @object-ui/* (parent #25677, before #25753) #25831 汇总 changeset)、chore(changeset): release Object UI's 18.1.0-to-merge changes to the 38 @object-ui packages as one consolidated changeset #26068; ADR none; thread: none。
推荐:A。 只看①选 A;②③④ 是否翻转:否。置信缺口:无。不取 B:说明内容会错位。
裁后执行: A ⇒ os-zhuang 批准 #26343 后,PM 开 automerge(或由批准人入队),合并后 PM 移除 #26343 上的
needs-user-decision。B ⇒ 席位在 #26343 改为替换包名,重跑门禁与电池后再请批。维护者速读
要做的: 批准 #26343(删掉前端解析器副本,Tier H)。批准它就等于同意从两条待发的 changeset 里去掉已不存在的
@object-ui/sdui-parser一行,否则 18.2 生成不了版本 PR。你要做的: 批准 #26343(即选 A),或在本卡回 B。
Merge branch 'main' into claude/project-thread-q3olv3
objectstack-fleet commentedon Oct 26, 2026
Ruling: decision card 6428513060 · letter A · recorded 2026-10-26T22:49Z
os-zhuang approved #26343 (review 5660142243) at 2026-10-26T22:49Z. As the card states, that approval confirms the deliberate correction:
.changeset/25831-object-ui-18-1-to-merge.mdand.changeset/26276-ui-package-test-vitest.mdeach lose their'@object-ui/sdui-parser'line, and the bodies are unchanged.needs-user-decisioncomes off #26343.#26343's only red is Check Changeset on exactly this correction. That check is outside the required set, so the queue is not blocked. After #26343 merges, 2g's code is complete on
main. What remains for 18.2 is 2i PR A (#26315) and PR B (records retirement). Thenpm deprecateof@object-ui/sdui-parserstays a maintainer step after 18.2 publishes.objectstack-fleet commentedon Oct 27, 2026
Addendum to decision card 6428513060 (ruling A, 6429188774), 2026-10-27T00:55Z: #26343 needs one more pending-changeset correction, and the maintainer must confirm it. Until then
needs-user-decisionis back on #26343.Why: #26274 (merged 23:51Z) retired the node-level
visibleOn/hiddenOn/disabledOnkeys inui/packages/sdui-parser, which is the copy #26343 deletes. Taking the deletion as is would have silently dropped #26274's parser half. The 2g-b seat therefore carried that change ontopackages/sdui-parser. The three keys leaveSDUI_BASE_PROPS, andvalidateTreeanswers each with an unknown-prop warning naming the canonical key, so no save verdict changes.The correction:
.changeset/25926-retire-node-visibility-dialects.mdlists'@object-ui/sdui-parser': minor. It now names'@objectstack/sdui-parser': minor(line 4 and the matching bullet), because that package is where the behaviour ships. This differs from the first two corrections, which deleted a line: here the line is re-pointed, since the release note describes a real change in the surviving package.Recommendation: confirm (extend A to this file). The alternative, deleting the line, would leave 18.2's notes without the visibility-dialect retirement for the package that now carries it.
Confirmation: maintainer approval of #26343 at its new head, or the word on this card. A word in project chat counts too.
objectstack-fleet commentedon Oct 27, 2026
PM correction to addendum 6431022475 (#26343, third changeset correction): 2026-10-27T00:59Z
The addendum asked the maintainer to confirm re-pointing
.changeset/25926-retire-node-visibility-dialects.mdfrom@object-ui/sdui-parserto@objectstack/sdui-parserat minor. On head c933183, Check Changeset refused that grade on the level axis, because #26343 declaresMetadata-protocol: none. The current head, 9673955, grades it patch instead. The fixed group still takes its minor from@object-ui/types, so the 18.2 version is unchanged.The question for the maintainer is the same apart from the grade. Confirm the move of that one line to
'@objectstack/sdui-parser': patchas a third deliberate correction beside the two that ruling A already covers.check-empty-changesetstays red by design until that confirmation. os-zhuang's approval 5660142243 still stands, and needs-user-decision stays on #26343.objectstack-fleet commentedon Oct 27, 2026
Ruling recorded: #26343 third changeset correction, 2026-10-27T01:21Z
维护者裁定(Tesla,2026-10-27T01:19Z):「26343 已批准」
This confirms the addendum (6431022475, as corrected by 6431063794).
.changeset/25926-retire-node-visibility-dialects.mdmoves its@object-ui/sdui-parserline to'@objectstack/sdui-parser': patch. It joins the two deletions ruling A already covers as a deliberate correction. os-zhuang re-approved on head 9673955 (review 5661142403). Thecheck-empty-changesetred on #26343 is therefore confirmed and does not block anything.Post-ruling execution: needs-user-decision comes off #26343, and the PM arms it for the merge queue by relay. After it lands, 2g has no open PRs left. 18.2 (#25753) then waits only on 2i PR B #26367.
objectstack-fleet commentedon Oct 27, 2026
Closing record for #25712 (4b, governance in-repo): 2026-10-27T02:32Z
维护者速读
4b 的全部条目都已合入 main。最后一个 PR 是 #26343(2g PR 2),于 2026-10-27T02:29Z 合入,提交 80f267d。现在只有一份 sdui-parser(
@objectstack/sdui-parser),manifest 由 CI 重新生成(2i,#26137 已关)。本卡不再挡 18.2(#25753)。18.2 发布后,维护者需执行npm deprecate @object-ui/sdui-parser "moved to @objectstack/sdui-parser"。What landed, by item
Done-when, checked against origin/main
ui/packages/sdui-parserno longer exists.git grep 'objectui#' AGENTS.md: empty.git grep 'objectui @' packages/spec/liveness: not 0. This is the accepted 2e ruling. A citation whose line could not be re-verified keeps its old reading as dated prose ((:N at objectui @sha)) and is never re-dated to look fresh, which matches the liveness risk this card names.ui/.github/: onlylabeler.ymlis left. This is ruling F12 = B: 28 of its 32 labels do not exist in the root registry, so the file stays inert until the label taxonomy is decided.Residual cleanup, not blocking 18.2
These items go to the aftercare card #25753 under "cleanup leftovers" and to a follow-up card if the PM files one there:
ui/.github/labeler.ymlonce the label taxonomy is set.ui/content/docs/guide/ci-cd-pipeline.mddescribes CI that no longer exists; rewrite or retire it.