Skip to content

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

Open

Description

@objectstack-fleet

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

  1. 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 naming cloud @<sha> stay cross-repo. The reader (scripts/liveness-*.mjs, README §evidenceScope) stops treating ui/ 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.
  2. Spec tests that read objectui. Of the 161 packages/spec/**/*.test.ts files mentioning objectui, classify: (a) read the objectui tree through a clone, the pin or objectui-lockstep.json → read ui/ directly; (b) textual mention in a comment or fixture name → unchanged. packages/sdui-parser/objectui-lockstep.json and scripts/check-sdui-lockstep.mjs / check-sdui-manifest.mjs / gen-sdui-manifest-node.mjs / sdui-manifest.record.json go with item 3.
  3. One sdui-parser. packages/sdui-parser (@objectstack/sdui-parser) and ui/packages/sdui-parser are 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-parser name is the default to keep), make the other a re-export or delete it, delete the lockstep gate and manifest record. Assessment item P5.
  4. AGENTS.md, ui/AGENTS.md, pm scripts. AGENTS.md: the 41 objectui# mentions and every "sibling repo" instruction (the ../objectui checkout, the pin bump procedure, cross-repo card references) become in-repo instructions or are deleted; domain:ui joins this repo's lane table. objectui's AGENTS.md becomes ui/AGENTS.md, scoped to ui/ and pointing up for anything repo-wide (rules that duplicate the root file are deleted, not restated). scripts/pm/**: GOVERNED_REPOS / check-governed-merges.mjs register learns which ui/** paths are governed (ui/.claude/**, ui/skills/**, ui/AGENTS.md by the same two-tier rule); the fleet relay's per-repo rows for objectui stay until the repo is archived (sub-issue 5) and are removed in sub-issue 6; dispatch-gates.mjs derives ui/ gates.
  5. 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 to ui/**; 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) and ui/.githooks: merge into the root hooks or delete, with the hook self-tests covering what remains. docs-deploy.yml for objectui's site: keep as a second deploy job in this repo's docs-deploy.yml (the site stays a separate Vercel project) — the project id/secrets are the maintainer's.

Verification (the dev's)

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/liveness is 0; git grep -l 'objectui#' AGENTS.md is 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.

风险

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

  1. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 round 5 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: 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 to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25712
    Domain: domain:devx
    Seat: epic:#25677
    File surface: scripts/pm/** (governed-surface register, check-governed-merges.mjs, queue guard, dispatch-gates.mjs runGit maxBuffer) + their self-tests; nothing under packages/, AGENTS.md, .github/** in PR 1
    Container & model: M (PR 1 of 2; the card is XL), mode:thread (thread session session_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, not scripts/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 filter


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (PR 1 of 2) — dispatch seat. objectstack#25732 (head faaeaeb47d, branch claude/project-thread-15baee, +136/−11, 5 files, all under scripts/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 six ui/** Tier-H rows, prose spans and CODEOWNERS lines deferred to PR 2):

    • dispatch-gates.mjs: git children get a 64 MiB stdout ceiling in runGit and ignoreVerdicts; measured merged listing ≈ 1.36 MB vs spawnSync's 1 MiB default, which is the Lint · PM dispatch-gates ENOBUFS red on the verification run. Slow-tier self-test stages a 16,000-path index with an ENOBUFS control. This also retires the dispatch-gates item of the PR A2 bill 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.
    • Register matchers (governedSurfacesFor, governedPathsIn, governedTierFor, queue guard codeownersMirrorVerdict) take an optional register defaulting to GOVERNED_SURFACES; no production caller passes one. New battery of 15 cases drives the six nested ui/ rows through the real matchers (527 assertions, roster floor 35; queue guard 339 cases; prose gate 31 cases).
    • PR 2 bill as the thread recorded it (/mnt/project-files/d1-merge/out/4b-25712-pr2-bill.md): six Tier-H rows ui-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 flip today-the-register-does-not-know-ui-…. Cutover window order: subtree PR → PR B → this card's PR 2 → 4a.
    • CI on the PR head: all checks green (Lint & Repo Gates, TypeScript Type Check, Test Core 6/6; UI jobs correctly skipped, no ui/ tree). check-governed-merges --pr objectstack-ai/objectstack#25732 on the final file list: NOT governed (0 of 5 paths hit the register), 147 changed lines ≤ 3000 — ordinary queue landing.
    • Writes: relay only; no review requested by the thread. CODEOWNERS routes the two enforcement-chain files to the approvers, so leaving draft asks a code owner for review; that is the repository's own rule, not a Tier H ruling.

    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

  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 round 6 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: 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 to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25712
    Domain: domain:devx
    Seat: epic:#25677
    Scope: PR 2a of 2 — scripts/check-sdui-lockstep.mjs, scripts/check-sdui-manifest.mjs, scripts/gen-sdui-manifest-node.mjs learn the in-tree ui/ oracle when .objectui-sha is absent (pin mode unchanged), sdui.manifest.json regenerated; green on main as it is. PR 2b (six ui/** 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 in lint-repo-tooling (required lane Lint & Repo Gates); measured on the cutover head c326d2fdf1 with the file absent.
    Container & model: M (PR 2a + 2b of the XL card), mode:thread (thread session session_01A6SEitNngAMugGbuJHWsDS; order: /mnt/project-files/d1-merge/dispatch/4b-25712-objectstack-governance-pr2a.md in the project, FRAME.md applies), model: opus, effort: xhigh
    Clause-②: 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 them

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (PR 2a of the PR 2 series) — dispatch seat. objectstack#25833 (head a6ee32ec59, branch claude/project-thread-6qe56u, 3 files under scripts/, +993/−136) merged 2026-10-25 20:58Z as e2aaaf1c07. The card stays open.

    Checked against the order (/mnt/project-files/d1-merge/dispatch/4b-25712-objectstack-governance-pr2a.md):

    • Dual mode: with .objectui-sha present 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-tree ui/ copy. Measured on the sitting tree (cutover c326d2fdf1 + 4a 50bd417d30): lockstep 0 (no drift between packages/sdui-parser/src and ui/packages/sdui-parser/src); manifest 1 until the regeneration, 0 after it.
    • Ruling recorded: the committed sdui.manifest.json (107 components) describes pin b41ed7f689; the frozen registry has 106 (objectui#13449 retired html). 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's Lint & Repo Gates reds with record is missing inTree and prints the one remedy command.
    • Known cost filed in the PR body: after 4a, a UI PR touching a registry source must run node scripts/gen-sdui-manifest-node.mjs (96 of objectui's last 200 commits would have). Follow-up: regenerate-and-compare in Build & E2E UI (ci.yml), next 4b dispatch.
    • Gates: 35 derived, 35 exit 0, --ran reconciled; 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-dispatch SKILL.md spans, 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.md cross-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.

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Plan (card thread): #25712 PR 2c of the PR 2 series. Not a claim; the dispatch seat adds the PM claim line below.

    Session: session_01A6SEitNngAMugGbuJHWsDS
    Branch: claude/project-thread-6qe56u, restarted from main e167956e3f (its earlier history, #25833 and #25834, is merged)
    Worktree: objectstack-issue-25712
    Domain: domain:devx
    Seat: epic:#25677
    Scope: PR 2c. Main's red Test UI 8/16 and 9/16 tests that read the two workflows #25745 deleted (changeset-release.yml, spec-range-floors.yml) are made to read what the tree has. Nothing is skipped; rows whose subject is gone retire with the disposition quoted.
    File surface: ui/content/docs/guide/ci-cd-pipeline.md, ui/scripts/__tests__/ci-cd-pipeline-doc.test.ts, ui/scripts/__tests__/workflow-cache-save-bound.test.ts. No governed path, so expected Tier S. Nothing under ui/.github/**.
    Why now: on main (90a34e20, e167956e) Test UI 8/16 has 9 ci-cd-pipeline-doc failures and 9/16 has 2 workflow-cache-save-bound failures, all reproduced locally (12 failed / 121 passed over the three files; the twelfth is the row below).
    Container & model: M, mode:thread
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a, not a defect card
    Thread-read: none
    Serial constraints checked: #25852 (claude/project-thread-a0vh3h: ui/packages/cli app-generator test, ui/scripts/check-test-path-roots.mjs, a packages/lint test) touches none of the three files. #25851 (dispatch-gates slow tier) is scripts/pm/**.

    Owned red that stays after 2c, first row of 2d. Test UI 8/16 keeps one failure: ui/scripts/__tests__/check-pre-install-import-graph.test.ts > finds no pre-install gate reaching a package, with

    AssertionError: a script this repository runs before `pnpm install` needs `node_modules` to load: expected [ Array(1) ] to deeply equal []
    +   "unresolved: scripts/objectstack-pin.mjs",
    

    This is a true finding on the tree, not a stale pin. #25745 deleted ui/scripts/objectstack-pin.mjs, but ten nested workflows still run node scripts/objectstack-pin.mjs build before their install step: ci.yml, docs-deploy.yml, lint.yml, live-e2e.yml, lockfile-dedupe.yml, node-esm-load-gate.yml, performance-budget.yml, published-dist-gate.yml, repo-gates.yml, shadcn-check.yml under ui/.github/workflows/ (about 99 lines of cache and build steps). Those files are Tier H since #25834 and never run nested. PM ruling A: no throwaway edits to files 2d deletes. It clears when 2d deletes ui/.github/workflows/**, and the test is then retired or retargeted with its subject.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 round 7 (cutover aftercare; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」) 2026-10-26T00:51Z
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: claude/project-thread-6qe56u (the card thread's designated branch in objectstack-ai/objectstack, restarted from main e167956e3f; the thread can push only this branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25712
    Domain: domain:devx
    Seat: epic:#25677
    Scope: PR 2c of the remaining PR 2 series (2c → 2d → 2e/2f/2g → 2h → 2i, one PR each, per the seat's plan 6405777597): ui/content/docs/guide/ci-cd-pipeline.md + ui/scripts/__tests__/ci-cd-pipeline-doc.test.ts + ui/scripts/__tests__/workflow-cache-save-bound.test.ts read the tree 4a left (changeset-release.yml / spec-range-floors.yml deleted). Tier S. Ruling A (00:49Z): Test UI 8/16 keeps its one red, check-pre-install-import-graph (ten nested workflows still run the deleted scripts/objectstack-pin.mjs), until 2d deletes ui/.github/workflows/** (Tier H); the finding is 2d's first row.
    Why now: Test UI 8/16 and 9/16 are red on every hourly full run of main since 4a (#25745); nothing else owns them (Test UI 3/16 + Test Core 5/8 are #25852's, Lint · PM dispatch-gates is #25851's).
    Container & model: M (2c of the XL card), mode:thread (thread session session_01A6SEitNngAMugGbuJHWsDS; order: the PM's 00:42Z + 00:49Z messages, the seat's plan comment, FRAME.md applies), model: opus, effort: xhigh
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — epic step
    Thread-read: none
    Serial constraints cleared: #25852 (4a follow-up, claude/project-thread-a0vh3h) touches ui/packages/cli and packages/lint tests only; #25851 (dispatch-gates) touches scripts/pm/**; #25853 touches scripts/check-required-contexts.mjs; #25855 touches the root ci.yml; none of them touch the three files above

  8. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    决策卡:删掉 ui/.github/workflows/ 之后,objectui 自带的受管面登记里那一行怎么处理(#26058,2d-3c)

    2026-10-26T10:36Z · PM 立卡(维护者 2026-10-26 03:31Z 规则:需要决策的都要有决策卡)。本卡挂 needs-user-decision。PR #26058 是 Tier H(路径 + 体量 +140/−14224),本来就要 os-zhuang 批;批准 #26058 即视为选 (b),不需要另外回字母。

    一句话问题: objectui 的旧工作流目录已经不会被 GitHub 运行,2d-3c 要把它删掉;但 objectui 自带的「受管面清单」里还登记着这个目录,删掉之后这份清单的自检会因为「登记的目录不存在」而变红。要么删掉这行登记,要么保留登记并把它改成「这个目录必须不存在」。

    Governing text: objectui#12255(已关闭):「.github/workflows/** joins this repository's governed surfaces — the AGENTS.md 受管面 list (five → six)」。根仓 scripts/pm/check-governed-merges.mjs:1213 行 ui-workflows:prefix: 'ui/.github/workflows/', tier: GOVERNED_TIER_H(git grep -n "ui-workflows" origin/main -- scripts/pm/check-governed-merges.mjs)。.github/CODEOWNERS:56:/ui/.github/workflows/ @os-zhuang @hotlong。

    协议声明: 不改协议;只动 ui/scripts/check-governed-queue-guard.mjs 的登记与其测试。

    前提(带 re-check):

    选项 × 真实代价 × 工作量:

    选项 做什么 后果 工作量
    (a) 删掉 ui 登记里的 .github/workflows/** 行(6 → 5) 形式上撤回 objectui#12255 的决定;以后若有人重建 ui/.github/workflows/,ui 这层不再报警(根仍判 Tier H) ui-tooling · 并入 #26058 · 约 −10 行
    (b)(推荐) 保留这行;它的存在性用例改成「目录必须不存在(重新出现即红)」,并断言根判定仍为 Tier H #12255 的受管意图原样保留;目录被误建回来时响亮报错 ui-tooling · 已在 #26058 独立提交 · +32/−3(实测)
    (c) 整个退役 ui 的 queue guard,统一由根的 guard 负责 少一套重复的检查;但这是 #25712 roster 第 11 行的问题,范围超出 2d-3c 子卡 4 · 另起 PR · 无先例
    (d) 留一个占位目录让用例继续变绿 树里多一个没有意义的目录,误导后来者 极小,但不推荐

    业务含义直译: (a) = 把门牌摘了;(b) = 门牌留着,改写成「此门已封,重开报警」;(c) = 两个保安合成一个,另找时间谈;(d) = 为了让检查通过,摆一扇假门。

    os-decision-facets

    推荐:(b)。 只看①选 (b);②③④ 是否翻转:否。置信缺口:(c) 的终态取舍(是否保留 ui 自己的 guard)没有在本卡评估,留给子卡 4。不取 (a):去掉了重建时的报警,而代价只差几十行;不取 (d):用假文件掩盖检查。

    裁后执行: (b) ⇒ 维护者批准 #26058,PM 开 automerge,合并后 PM 在本卡贴 main 推送运行读数并关闭 2d-3。(a) ⇒ 席位在 #26058 用一个提交替换 (b) 的提交,重跑 ui 套件与电池(2182/0)后再请批。(c) ⇒ #26058 先按 (b) 合入,(c) 记入子卡 4 第 11 行。


    维护者速读

    要做的: 2d-3c(#26058)删除不再运行的 ui/.github/workflows/(−14224 行)。objectui 自带的受管清单里还登记着这个目录,推荐保留登记并改成「此目录必须不存在」,已在 PR 里。

    你要做的: 批准 #26058(即选 (b));或在本卡回 (a)/(c)。

  9. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: 2d-3c decision card 6413952558 · letter (b) · recorded 2026-10-26T10:49Z

    Maintainer 「b)保留这一行」 at 2026-10-26T10:47Z (project chat, relayed).

    The ui register keeps its .github/workflows/** row (objectui#12255 stands). Its existence case becomes "the directory must be absent, and the root predicate still judges ui/.github/workflows/** Tier H", which is the existing commit on #26058. needs-user-decision comes off this card.

    Execution: once CI is green on #26058 and the push battery (2182/0) is reported at its head, the PM flips it ready and the seat requests os-zhuang. Tier H, so a human approves and merges. (c) (retiring the ui guard in favour of the root one) stays a sub-issue 4 question (roster row 11).

  10. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    PM ruling on 2e (liveness ledger), 2026-10-26T11:55Z: the done-when git grep -c 'objectui @' packages/spec/liveness = 0 is read as pointers only (seat's option A). It becomes "0 objectui-attributed evidence or producer pointers", and the reader enforces it: ui joins REPO_ROOTS and objectui stops being a foreign realm, so a leftover objectui: marker fails loudly.

    Note history such as "re-verified against objectui @c2fd1223" stays as written. It records what was checked at the time, and rewording it only to satisfy a grep would erase that record. The grep counts 270 hits today, almost all in notes and the README.

    Seat's measurement on main aa2f8e3: 184 cross-repo rows, of which 110 carry an objectui pointer and 1 is mixed. 105 of the 108 rows with paths resolve once re-rooted under ui/. 3 need a current reader found, or they go to the worklist. Full split: /mnt/project-files/d1-merge/out/4b-25712-2e-liveness-split.md (project files).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions