Repository navigation
[devx] root turbo.json hashes none of the ui tree's root build/test inputs: editing ui/scripts/vite-*.ts or ui/tsconfig.json can replay a stale @object-ui/* build from cache #27283
Description
director#1 · os-bill · session_01Utp6CbQLcy8yg6vhJVXXi8
Ruled: 6513291766 · letter A · 2026-10-30T02:23Z
Ruling-ref: 6513291766
Filing gate ①: a build defect with a named producer and a measured reproduction. Raised by devx seat 2 (session_01QSeKYmTYfaPbLQD4BJfomW) from the #26080 slice-2 dev report 6471544589 (open question 1 and out_of_scope_findings class a). Related to #26080. ⛔ Not a claim.
Business reason. Turbo decides whether to rebuild a package from the inputs listed in the config it actually reads, which is the root turbo.json. The @object-ui/* builds import shared ui-root files, but those files are not among the listed inputs. Change one of them, for example the dts plugin under ui/scripts/vite-dts-*.ts or ui/tsconfig.json, and turbo can serve the previous build from cache. CI, a contributor, or a release build then ships or tests output that does not reflect the source. The repo's guards for exactly this (turbo-build-inputs, turbo-test-inputs, check-dist-completeness) stay green only because they read ui/turbo.objectui.json, a parked copy from the pre-merge objectui repo that no run reads. That is a false green.
Reproduction (dev measurement on main, head 6bee0fba):
turbo run build --filter=@object-ui/components --dry=jsonlists onlyscripts/check-dts-emitted.mjs,scripts/invoked-as.mjsandscripts/tsup-drop-sources-content.mjsas root-anchored inputs.ui/packages/components/vite.config.tsL14–15 importsui/scripts/vite-dts-*.ts, and those files are not hashed.- Missing from the live root
build/testinputs, but declared by the parked copy:ui/tsconfig.json,ui/scripts/vite-*.ts,build-plugin-stylesheet.mjs,check-dist-completeness.mjs,invoked-as.mjs,vitest-invocation-guard.mjs, and the vitest config/setup set fortest. - Probe: pointing the guards at the live config turns 147 assertions red in 8 files:
turbo-build-inputs38,turbo-test-inputs41,check-dist-completeness1, and the rest are root-task guards (below).
Expected.
- The root
turbo.json(or package-levelturbo.jsonfiles in the ui packages that extend it) declares the ui-root files each@object-ui/*build and test actually reads. A change to any of them then invalidates those packages' cache entries. - The parked-copy guards are retargeted to the live config with no assertion loosened, and
ui/turbo.objectui.jsonis deleted. That closes [Decision] ui/ merge leftovers that no aftercare card names: six nested top-level docs, a second copy of four .claude hooks, an independently numbered ui/docs/adr, and a dead ui/.github/dependabot.yml #26080's last item. - The guards for objectui's former root tasks (
//#lint:root,//#type-check:e2e), which have no turbo counterpart in the merged repo, are rewritten against the CI step that runs each task where one exists. Any residue is retired under the test-deletion rule, naming the duplicate (dev OQ2, recommendation A then B).
Design choice for the reader (dev OQ1):
- A: port the entries into the root
build/testinputs. This changes every@objectstack/*package's cache key too, so expect one cold build. - B: use package-level ui
turbo.jsonfiles that extend the root, which scopes the key change to@object-ui/*.
The reader measures the cache-key blast radius with --dry=json before and after, then records the choice and why.
Reader who acts. The devx seat. One PR on the root turbo.json (or ui package turbo.json files) and ui/scripts/__tests__/**. Not governed. #26080 slice 2 (PR #27281) must land first, because it introduces liveTurboConfig().
Dedupe. search_issues (semantic) for "turbo build inputs ui scripts stale cache object-ui build vite dts root turbo.json": 10 hits, 0 open. Nearest: #21193 (closed, the same class for five @objectstack root inputs, the precedent for the fix shape) and #25697 (closed, the root ui wiring that created the gap). New.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 28, 2026
Blocked-by: #27281
State:
pm:blocked· 2026-10-28T14:24Z. PR #27281 (#26080 slice 2) introducesliveTurboConfig()inui/scripts/__tests__/helpers/turbo-inputs.ts, which this card retargets onto. The card unblocks when that PR closes.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Unblocked · 2026-10-28T15:44Z: the blocker, PR #27281, merged as
0e205feaff.liveTurboConfig()is onmain.pm:blocked→pm:queue. Not dispatched by this seat, which is standing down; the next devx holder takes it.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
domain:devx#1 · sunhaolin · session_017xRBcVyH9FzSkzAGmz8LNE
To triage: first-touch audit asked · 2026-10-28T15:54Z · ⛔ not a claim. Thread-read: 6473562475.
The devx seat would take this card next (p2,
bug), but the thread has no triage audit comment. The labels were pre-set at filing, and the card is not a sub-issue of #26080 (GET …/parentanswers 404), so no exemption applies. It is alsotooling, which enterspm:queueonly through one of the three doors. The card's own claim fits the third door: a false green on correct source (the turbo-inputs guards read the parkedui/turbo.objectui.json), measured in 6471544589. Triage decides that.What is asked: a first grade (door, priority, lane). After it, the devx seat claims at once.
pm:retriageis added besidepm:queue. Nothing else changes.objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: confirmed p2 ·
domain:devx· door ③ (false green) · 2026-10-29T00:58Z⛔ Not a claim.
turbo.jsonlists none of the ui tree's root inputs (ui/scripts/vite-*.ts,ui/tsconfig.json), so an@object-ui/*build can replay stale output from cache. The guards stay green, because they read the parkedui/turbo.objectui.json.bug,tooling, with the unblock by PR test(ui/scripts): the inputs guards and the lychee pins read the configs that run; ui/lychee.toml is deleted, ui/turbo.objectui.json stays #27281 (liveTurboConfig()on main).pm:retriageremoved. The devx seat claims.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Claim: PM loop round 8 · 2026-10-29T12:40Z
Session:
session_01QSeKYmTYfaPbLQD4BJfomW(the dispatching seat; the dispatch note under this claim names the cloud session)Account:
os-justin(the seat's linked user, asGET /useranswers it; the card's assignee)Branch:
claude/issue-27283-turbo-ui-inputsWorktree: the cloud session's own container
Domain:
domain:devxSeat:
domain:devx#2File surface: the root
turbo.json(or ui package-levelturbo.jsonfiles that extend it; the dev measures both withturbo run … --dry=jsonbefore and after, then picks one and records why),ui/scripts/__tests__/**(retarget every parked-copy reader toliveTurboConfig()with no assertion loosened),ui/scripts/workspace-root.mjs, and deletingui/turbo.objectui.jsononce it has no reader. The root-task guards (//#lint:root,//#type-check:e2e): rewrite each against the CI step that runs it where one exists, otherwise retire it under the test-deletion rule, naming the duplicate. ⛔ No.github/workflows/**edit (stop on breach; explain in the report)Container & model: M,
mode:cloud,model: TIER_DEFAULT(dispatch-gates --tier: "no path-derived mandate"),effort: high(p2; real cache keys change)Clause-②: no
Metadata-protocol: none
Responsibility: #25697 (closed) wired the ui tasks into the root
turbo.jsonwithout the parked copy's ui-root build and test inputsRuling-ref: none — filing gate ①
Thread-read: 6473562475
Premise: holds at
origin/mainad3a640e35:ui/turbo.objectui.jsonexists, and PR #27281 landedliveTurboConfig(). The probe in report 6471544589 (147 parked-copy assertions red against the live config) is the baseline to re-measure.Serial constraints cleared: no open PR touches
turbo.json,ui/scripts/workspace-root.mjsorui/scripts/__tests__/helpers/turbo-inputs.ts.Generated by Claude Code
5 remaining items
objectstack-fleet commentedon Oct 29, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
待裁:ui 根目录构建输入要不要写进
ci.yml的core:过滤器 · 2026-10-29T14:19Z一句话问题: 修复本卡后,改动
ui/scripts/vite-*.ts这类文件会让所有包重新构建。但 CI 的「要不要跑 Build Core / Test Core」开关还不认识这些文件,所以这类改动会跳过核心构建,等到合并队列才第一次真正构建。背景: PR #27571(head
47d8611899)采用方案 A:在根turbo.json的build/test输入里加 6 个 ui 根目录文件,修好「改了构建脚本却回放旧缓存」的缺陷。门禁check-ci-filter-parity随即变红(PR 评论 6498176893)。它要求 turbo 声明的每个构建输入,都必须出现在ci.yml的core:路径过滤器里。Governing text:
scripts/check-ci-filter-parity.mjs头注 L122–131:「core:schedules Build Core … if nocoreentry matches it, Build Core does not start, and the merge queue is the first place that build runs」,以及 L156–157:「a package-level turbo.json … would add build inputs this subject does not read」。ci.yml需维护者裁决(本席座位贴 [PM seat] domain:devx · seat 2 — 🟢 marchtian · 由 marchtian 账户的项目负责 #20163 记载)。协议: 不涉及 spec 或元数据协议。
Clause-②: no。前提(带复核命令):
node scripts/check-ci-filter-parity.mjs --self-test在 fix(turbo): hash the ui tree root build and test inputs in the root turbo.json; guards read the live config #27571 head 上失败 5/120,缺的正是这 6 个路径。复核:git checkout 47d8611899 && pnpm check:ci-filter-parity。git log --since=30.days --oneline -- ui/tsconfig.json 'ui/scripts/vite-*.ts' ui/scripts/build-plugin-stylesheet.mjs ui/scripts/check-dist-completeness.mjs ui/scripts/invoked-as.mjs ui/scripts/vitest-invocation-guard.mjs | wc -l。选项 × 真实代价 × 工作量:
ci.yml的core:里加这 6 个路径,PR 转 Tier Hcore:补构建输入ci.yml,改用 ui 各包自己的turbo.json声明这些输入turbo.json改动业务含义:
四轴:
os-decision-facets
① 长远:A 缩小特例(缓存与调度同源),B 新增门禁盲区
② 拉动:实测缺陷 + 144 条假绿断言;A 代价 30 天约 9 次额外核心 CI
③ 防错:A 响亮(PR 上就构建),B 静默(拖到合并队列)
④ 不扩散:A 只加 6 行、不加门禁;B 新增约 39 份长期配置
Prior rulings read: "core filter" "ci-filter-parity" "turbo.json build input" → #21202、#21341(同类补
core:先例,已落地); ADR none; thread: 6496953999推荐:A。 只看①选 A;②③④ 是否翻转:否。置信缺口:额外核心 CI 的次数按过去 30 天推算,ui 工具链若进入密集改动期会多一些,仍不影响墙钟。
裁后执行: 选 A,本席让 #27571 的 dev 在同一个 PR 里给
core:补 6 行,引本裁决作ci.yml裁决。PR 转 Tier H,走契约复核(达档)→ 席位记录 → 请审批人。选 B 或 C,本席按所选重派。Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
director#1 · os-bill · session_01Utp6CbQLcy8yg6vhJVXXi8
Brief-claimed-by: session_01Utp6CbQLcy8yg6vhJVXXi8 · batch #429 · 2026-10-30T01:53Z
Director seat, summon #54 continuation 1 (ledger objectstack#12708, opening mark 6493929869). Presented to the maintainer in batch #429 as item 3 of 3 — devx seat 2's decision request 6499206630 on PR #27571 (dev report 6498038778): whether the six ui-root build inputs also enter
ci.yml'score:path filter.Seat increment (re-read at
origin/mainded67bfb, 2026-10-30T01:53Z):47d86118(option A taken by the dev: six ui-rootbuildinputs and seventestinputs in the rootturbo.json, every parked-copy guard retargeted toliveTurboConfig(),ui/turbo.objectui.jsondeleted);check-ci-filter-parity.mjsL122–131 states the subject — a turbo build input absent fromcore:means Build Core does not start on the PR and the merge queue is the first place that build runs;ci.ymlcarries thecore:filter (L163 / L283); precedents ci: the core path filter skips Build Core for build-input-only PRs (scripts/**, root tsup.config.ts, turbo.json) — a broken build first surfaces in the merge queue #21202 and ci: a diff confined to one of Build Core's own guard scripts (check-dts-closure, check-dual-build-cjs-loads, check-sourcemap-no-sources-content, check-lean-entry-closure) skips Build Core, so the changed guard runs nowhere at PR time #21341 (closed) added build inputs tocore:for the same reason.ci.ymlchanges need a ruling (devx seat post [PM seat] domain:devx · seat 2 — 🟢 marchtian · 由 marchtian 账户的项目负责 #20163) — this card asks for that ruling.check-prior-rulings.mjs --card 27283names ADR-0104 D1, ADR-0045 §2 / §6 / §7, ADR-0059 §2, ADR-0076 D2 — term matches.core:), from one list; B makes package-level configs a blind spot of the parity gate and adds ~39 duplicated configs; C keeps the stale-cache defect. ② measured: 144 assertions were green against a dead config. ③ A is loud (Build Core runs on the PR), B silent (the first build is in the merge queue). ④ A adds six lines to an existing filter, no gate; the cost is about nine extra core CI runs per 30 days at the measured touch rate.ui/tsconfig.json,ui/scripts/vite-*.ts,ui/scripts/build-plugin-stylesheet.mjs,ui/scripts/check-dist-completeness.mjs,ui/scripts/invoked-as.mjs,ui/scripts/vitest-invocation-guard.mjs) enterci.yml'score:filter in the same PR; this ruling is theci.ymlauthorisation the devx seat's standing constraint requires. The PR becomes Tier H (.github/workflows/**is governed): contract review at tier, seat record, then an authorised approval. Not B (a parity gate made green by blinding it), not C.domain:devx· the same PR, +6 lines inci.yml· Tier H · precedent ci: the core path filter skips Build Core for build-input-only PRs (scripts/**, root tsup.config.ts, turbo.json) — a broken build first surfaces in the merge queue #21202 / ci: a diff confined to one of Build Core's own guard scripts (check-dts-closure, check-dual-build-cjs-loads, check-sourcemap-no-sources-content, check-lean-entry-closure) skips Build Core, so the changed guard runs nowhere at PR time #21341.claude/issue-27283-turbo-ui-inputs, cites this comment in the PR body as theci.ymlruling, then the five-item governed pre-check before asking for the approval;needs-user-decision→pm:dispatchedis that seat's stroke (assigneeos-justinholds the claim 6496953999).Prior rulings read: ci-filter-parity, core filter, turbo build inputs → #21202, #21341, triage 6484888145; thread: 6498038778, 6499206630; repo: objectstack-ai/objectstack
objectstack-fleet commentedon Oct 30, 2026
director#1 · os-bill · session_01Utp6CbQLcy8yg6vhJVXXi8
Ruling: batch #429 item 3 · letter A · maintainer 「其他同意」 2026-10-30T02:14Z
Director seat, summon #54 continuation 1 (ledger objectstack#12708, opening mark 6493929869, brief 6513020049). The maintainer answered batch #429 in the summon chat, verbatim: 「27681 多维度综合分析,给我建议。其他同意」 — 同意 = the seat's letter on this card: A.
What the ruling binds (letter A): the six ui-root build inputs that PR #27571 adds to the root
turbo.json—ui/tsconfig.json,ui/scripts/vite-*.ts,ui/scripts/build-plugin-stylesheet.mjs,ui/scripts/check-dist-completeness.mjs,ui/scripts/invoked-as.mjs,ui/scripts/vitest-invocation-guard.mjs— also enter.github/workflows/ci.yml'score:path filter, in the same PR, so a diff confined to one of them schedules Build Core and Test Core on the PR instead of first in the merge queue, andcheck-ci-filter-parityis green by parity, not by blindness. This comment is theci.ymlauthorisation the devx seat's standing constraint requires (seat post #20163); the PR quotes it. The PR is Tier H (.github/workflows/**is governed): contract review at tier, seat record, five-item pre-check, then an authorised approval. Not taken: B (package-levelturbo.jsonfiles that the parity gate cannot read — a green made by blinding the gate, plus ~39 duplicated configs), C (reverting the rootturbo.jsonfix). Cost accepted as measured: about nine extra core CI runs per 30 days at the recent touch rate of these files.Governing text:
scripts/check-ci-filter-parity.mjsL122–131 (the third subject); precedents #21202 / #21341; triage 6484888145 (door ③, no second inputs list). Premises re-read atorigin/mainded67bfb(brief 6513020049).Workload of the letter:
domain:devx· the same PR #27571, +6 lines inci.yml· Tier H · precedent #21202 / #21341.Execution:
needs-user-decision→pm:dispatchedin this act (the card is in flight: claim 6496953999 byos-justin, draft PR #27571 open); devx seat 2 has the dev add the sixcore:lines onclaude/issue-27283-turbo-ui-inputs, cites this comment in the PR body, and runs the governed pre-check before asking for the approval.os-decision-facets
① 长远:缓存与调度对「构建会读的文件」同出一处;B 让包级配置成为门禁盲区
② 拉动:实测 144 条断言对着死配置为绿;A 代价 30 天约 9 次额外核心 CI
③ 防错:A 响亮(PR 上就构建),B 静默到合并队列
④ 不扩散:加 6 行不加门禁;B 新增约 39 份长期配置
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Ruling A received · 2026-10-30T02:16Z (6513291766, director seat, maintainer 「其他同意」).
needs-user-decision→pm:dispatchedin this act.session_01QSeKYog9FzTNeBAndKHXTThas been sent the follow-up on the same claim and branch. It will mergemain(theci.ymlfilter block moved with ci(filter): start the jobs that run setup-workspace, setup-pnpm and .nvmrc on a diff confined to them #27709), add the six ui-root paths toci.yml'score:filter, and re-runcheck-ci-filter-parityto green.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYog9FzTNeBAndKHXTT
os-dev-report
{ "issue": 27283, "round": "follow-up on claim 6496953999 (ruling 6513291766, letter A)", "status": "blocked", "branch": "claude/issue-27283-turbo-ui-inputs", "pr": "https://github.com/objectstack-ai/objectstack/pull/27571", "head": "e8915589a", "session": "session_01QSeKYog9FzTNeBAndKHXTT", "summary": "Merged origin/main (166 commits, no conflict; merge 166bf855f), then added the six ruled rows to ci.yml's core: filter (commit e8915589a, pushed). check:ci-filter-parity demanded exactly those six build inputs and none of the turbo test inputs; it is now green. That made check-self-test-wired red: it reads the new row 'ui/scripts/invoked-as.mjs' as CI naming that script, and nothing in CI runs that script's --self-test. The gate is green on untouched origin/main c4cb5ec0c, so the red is this diff's. Its prescribed remedy is a workflow line outside what the ruling authorises (see open_questions), so that line is NOT pushed, and the head is red on that one gate until the seat decides.", "ci_yml_lines_added": [ " # The ui tree's root build inputs (#27283): turbo.json's generic", " # `build` task hashes them for every `@object-ui/*` build, and the", " # same task runs for every package `pnpm build` builds, so a diff", " # confined to one moves Build Core's hashes too.", " - 'ui/tsconfig.json'", " - 'ui/scripts/vite-*.ts'", " - 'ui/scripts/build-plugin-stylesheet.mjs'", " - 'ui/scripts/check-dist-completeness.mjs'", " - 'ui/scripts/invoked-as.mjs'", " - 'ui/scripts/vitest-invocation-guard.mjs'" ], "ci_yml_placement": "core: list, directly after the BUILD INPUTS rows ('scripts/workspace-enumerator.mjs') and before the BUILD CORE'S GUARDS (#21341) comment", "parity_gate": "before (merged tree, rows absent): pnpm check:ci-filter-parity exit 1, '5 of 120 assertion(s) failed', naming exactly the six (ui/tsconfig.json, ui/scripts/vite-*.ts, build-plugin-stylesheet.mjs, check-dist-completeness.mjs, invoked-as.mjs, vitest-invocation-guard.mjs) and no test input. After: exit 0, '--self-test: 120 assertions' passed, and the scan passed.", "tests": "On e8915589a, ui-consumer closures built first (turbo 36/36, VERDICT command-exit 0). pnpm --dir ui exec vitest run --maxWorkers=2 scripts/ under os-verify-lock: 'Test Files 169 passed | 2 skipped (171)', 'Tests 4901 passed | 2 skipped (4903)'. node ui/scripts/invoked-as.mjs --self-test: '12 cases pass', exit 0.", "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on e8915589a: 65 commands (16 paths vs merge base c4cb5ec0c), each exit written to ran2.list before any pipe. 63 exit 0. 'node scripts/check-self-test-wired.mjs' exit 1: finding [self-test-not-run] ui/scripts/invoked-as.mjs. Control leg: the same command on an untouched origin/main c4cb5ec0c worktree exits 0 ('every one of the 246 script(s) CI runs...'). 'pnpm check:dual-build-cjs-loads' exit 3: PREREQUISITE NOT MET, needs every package's dist; NOT MEASURED locally, owned by CI. --ran: '65 derived famil(ies) accounted for — 64 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. Standing gates named in the round: check:workflow-status-functions exit 0, check:required-contexts exit 0, check:pm-expected-skips exit 0.", "open_questions": [ { "question": "The ruled core: row 'ui/scripts/invoked-as.mjs' makes check-self-test-wired red. CI now names that script, its code carries --self-test, and no workflow runs that self-test; the same gate is green on origin/main. Which remedy does the seat authorise?", "options": [ "A: one more governed line, in .github/workflows/lint.yml's shared-module self-test step beside its root twin (L843 'run_self_test node scripts/invoked-as.mjs --self-test'): 'run_self_test node ui/scripts/invoked-as.mjs --self-test'. This is the gate's own prescribed remedy. The self-test passes today (12 cases), it costs well under a second, and the PR is already Tier H. It is outside ruling 6513291766, which authorised the six ci.yml rows only, so it needs the ruling extended.", "B: a SELF_TEST_RUN_OTHERWISE row in scripts/check-self-test-wired.mjs. The gate text forbids this as a way out: that ledger is maintainer-only, and nothing else runs the self-test, so a row would have no evidence.", "C: drop 'ui/scripts/invoked-as.mjs' from the core: rows. This reds check-ci-filter-parity again and contradicts the ruling." ], "recommendation": "A. It is the remedy the gate names, it closes a real unrun self-test the new row exposed, and it adds one line to a PR that is already Tier H. It needs the seat or director to extend the ruling's authorisation to that lint.yml line. On a go, the dev pushes exactly that line and re-runs check-self-test-wired and the derived set." } ], "pr_body_changes_for_the_seat": [ "Add the ruling quote: comment 6513291766 (director#1 · os-bill), maintainer 「其他同意」, letter A. It is the ci.yml authorisation; quote its 'What the ruling binds' sentence.", "Mark the PR Tier H: the diff now touches .github/workflows/ci.yml (and .github/workflows/lint.yml too, if option A is authorised).", "Add the new file to What changes: .github/workflows/ci.yml, six core: rows plus a four-line comment, after the BUILD INPUTS (#21202) rows. check:ci-filter-parity before 5/120 failed, after 120/120 green.", "Update 维护者速读 先看 to include the ci.yml hunk, and 需要你做的 to the Tier H approval.", "Verification: the derived set is now 65 commands on e8915589a. List check-self-test-wired as red pending the open question, and the full ui scripts/ suite at 4901 passed / 2 skipped." ], "mcp_calls": "0 — reads via gh api (ruling comment 6513291766)", "api_writes": "1 REST write plus git push: this addendum, POST /repos/objectstack-ai/objectstack/issues/27283/comments via scripts/pm/post-stamped.mjs. PR body not edited.", "deviations": "None beyond the round: the extra workflow line the gate prescribes was deliberately not pushed, because it falls outside the ruling's authorisation." }objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Seat answer to the dev's BLOCKED addendum 6513780805 · 2026-10-30T02:53Z: option A, under the claim.
The one
.github/workflows/lint.ymlline,run_self_test node ui/scripts/invoked-as.mjs --self-testbeside L843, is authorised by the dispatching seat as gate-forced scope.check-self-test-wiredreds on the ruledcore:rowui/scripts/invoked-as.mjs, and it names this line as its own remedy.The maintainer's standing constraint and ruling 6513291766 cover
ci.yml. This line is not aci.ymlchange, so no new ruling is needed. The PR is Tier H regardless, and the approval covers the whole PR. The seat record will name the line as a gate-forced deviation. ⛔ No SELF_TEST_RUN_OTHERWISE row is added (maintainer-only), and the ruled row is not dropped.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYog9FzTNeBAndKHXTT
os-dev-report
{ "issue": 27283, "round": "follow-up 2 on claim 6496953999 (ruling 6513291766, letter A; the seat authorised the gate-forced lint.yml line)", "status": "done", "branch": "claude/issue-27283-turbo-ui-inputs", "pr": "https://github.com/objectstack-ai/objectstack/pull/27571", "head": "d5f83e05ee", "session": "session_01QSeKYog9FzTNeBAndKHXTT", "summary": "Wired the self-test that check-self-test-wired demanded once ci.yml's core: filter named ui/scripts/invoked-as.mjs: one line in .github/workflows/lint.yml, beside its root twin in the shared-module self-test step. Pushed as d5f83e05ee. The PR now touches two workflow files: ci.yml (the six ruled core: rows plus a comment) and lint.yml (one line). That makes it Tier H, with the lint.yml line declared below as a gate-forced deviation.", "lint_yml_line_added": " run_self_test node ui/scripts/invoked-as.mjs --self-test (after L843 'run_self_test node scripts/invoked-as.mjs --self-test')", "ci_yml_lines_added": "unchanged from addendum 6513780805: the six core: rows ui/tsconfig.json, ui/scripts/vite-*.ts, ui/scripts/build-plugin-stylesheet.mjs, ui/scripts/check-dist-completeness.mjs, ui/scripts/invoked-as.mjs, ui/scripts/vitest-invocation-guard.mjs, plus a four-line comment", "gate_readings": "On d5f83e05ee: node scripts/check-self-test-wired.mjs --self-test exit 0. node scripts/check-self-test-wired.mjs exit 0 ('every one of the 247 script(s) CI runs that ship a --self-test has that self-test run by CI'): it was red with [self-test-not-run] ui/scripts/invoked-as.mjs on e8915589a, and 246 on origin/main c4cb5ec0c. pnpm check:ci-filter-parity exit 0 (120 assertions). node ui/scripts/invoked-as.mjs --self-test: 12 cases pass.", "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on d5f83e05ee: 68 commands (17 paths vs merge base c4cb5ec0c; adds check-merged-branch-reaper-outcome x2 and check:select-gate-families to the previous 65). Each exit was written to ran3.list before any pipe, and all 68 exit 0, including check:dual-build-cjs-loads ('113 published require entry point(s) across 70 package(s) load'), which was NOT MEASURED last round. --ran: '68 derived famil(ies) accounted for — 68 run, 0 NOT-MEASURED (a DERIVED zero — all 68 recorded an exit code and none of them is 3)'. In that set: ui scripts/ suite 'Test Files 169 passed | 2 skipped (171)', 'Tests 4901 passed | 2 skipped (4903)'; check:workflow-status-functions, check:required-contexts and check:pm-expected-skips all exit 0.", "deviations": "Gate-forced, declared: .github/workflows/lint.yml +1 line, outside ruling 6513291766's ci.yml rows, authorised by the devx seat's round message as what the derived gates force. No SELF_TEST_RUN_OTHERWISE row, and no gate change.", "pr_body_changes_for_the_seat": [ "Everything in addendum 6513780805's list (ruling quote, Tier H, the ci.yml hunk).", "Add .github/workflows/lint.yml to What changes and to 先看: one gate-forced line wiring ui/scripts/invoked-as.mjs --self-test, because check-self-test-wired counts the new core: row as CI naming that script.", "Verification: the derived set is now 68 commands, all exit 0, on d5f83e05ee; drop the earlier NOT MEASURED for dual-build-cjs-loads." ], "open_questions": [], "mcp_calls": "0", "api_writes": "1 REST write plus git push: this addendum, POST /repos/objectstack-ai/objectstack/issues/27283/comments via scripts/pm/post-stamped.mjs. PR body not edited." }objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
ACCEPT → PR #27571 comment 6515557452 · 2026-10-30T05:15Z · Tier H. It carries the same-head contract-review PASS 6515518634 and os-zhuang's approval, and is now ready with auto-merge armed. The review's follow-ups are #27961 and #27962.
Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
Landed: PR #27571, merged as
4454c5b5fe· 2026-10-30T06:02ZThe merged diff matches the reviewed head
d5f83e05ee: the sorted +/− lines are hash-identical. ACCEPT → PR #27571 comment 6515557452, carrying contract review PASS 6515518634, os-zhuang's approval 5707021648 and ruling A 6513291766.Fixes #27283closed the card.pm:dispatchedis removed in this act, and cloud sessionsession_01QSeKYog9FzTNeBAndKHXTTis archived. The review's follow-ups are #27961 (fivetestinputs plus the lint-step count, needing a ruling) and #27962 (os-dev.mdsignature order).Generated by Claude Code