Repository navigation
feat(pm): dispatch-gates derives the ui/scripts/__tests__ suite for diffs under ui source, ui apps, skills/objectui and ui/scripts - #26383
Conversation
…e four roots it reads Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AYg1gtz1tWt66GpPnTo1QF
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AYg1gtz1tWt66GpPnTo1QF
席位核对Verdict: ACCEPT at head Contract review: not triggered. The diff is private root scripts only ( The data module's own rule is met. Against the card and the dispatch order (read line by line)
Gates at head
Out of scope, carried in the seat's handoff, not filed here: Generated by Claude Code |
Requested by Elon · project thread
What
scripts/pm/dispatch-gates.mjsnow derivespnpm --dir ui exec vitest run scripts/(the wholeui/scripts/__tests__suite) for any diff touching one of the card's four roots:ui/packages/**/src,ui/apps/**,skills/objectui/**orui/scripts/**. Before this, those 180 files (178 that run, 2 skipped) ran only in CI's 16Test UIshards and no derived family named them.How (the tool's own convention, no parallel mechanism)
CHANGE_KIND_ROWS(scripts/pm/dispatch-gates.data.mjs) with predicateui-scripts-suite-input, bound inCHANGE_KIND_PREDICATES. The roots are data (UI_SCRIPTS_SUITE_ROOTS). They are matched in CI's ownpaths:language through the existingtriggerListCovers, so a directory surface counts the way it counts for a workflow trigger.check:*family. This suite has no such family: the only step that runs it isTest UI's vitest line, which carries a shard and the affected-test selector's filter list, and.github/**is out of scope here. So the gate declaresciJob: 'Test UI'andciRunner: 'pnpm --dir ui exec vitest run'.ciJobRunsRunnerresolves the gate against the sameworkflowEntriesthe discovery reads. If the job is renamed or the runner is respelled, the gate renders STALE, which is the same rot report a renamed family gets.bindChangeKindRowsrefuses a half-declared binding at load.kindGroupsthe gate is in--commands,--json, the human convention block, the--residuekind list and--ran(commandsFor→runReconciliation). Nothing moves in the family partition: the residue still places 326 of 326.whynames its prerequisite. The suite needs the seven@objectstackpackagesTest UIbuilds first. Unbuilt, 16 files go red on a missing dist import (measured below). So the line prints the job's own turbo build command.Measured first
All measured on a 4-vCPU cloud container at base
6390fe52.@objectstack/specdist and similar)Vitest reports ~270 s of the run as module import.
Reach of the 180 files, from a static scan of each file plus the helpers it imports relatively. This is a source scan, not a runtime trace.
ui/packages/**/srcui/apps/**skills/objectui/**ui/scripts/**Decision: the whole suite, not an affected subset. On this container it is about five minutes, not the card's "about a minute". It still replaces a ~25-minute CI round trip. A subset map would have to model what each file reads off the tree: 165 of the 180 read package source and 141 the apps. That map is exactly the second list that goes stale, and it would save minutes, not a round trip. The deletion criterion and the stated blind spot sit with the row's docblock.
Self-test pins (fast tier, in-process)
packages/core/src/x.ts,ui/packages/core/package.json,skills/objectstack/SKILL.mdandscripts/pm/dispatch-gates.mjsderive neither.ciJobRunsRunnerresolves on a fixture job, fails on a renamed job and on a respelled runner, and resolves against the live workflows.inherited-populationmarker line census readsdispatch-gates.mjs:738instead of:736, because the data import and its re-export each gained one name. It carries a comment like its neighbours.node scripts/pm/dispatch-gates.mjs --self-test --fast, detached: 1935 cases pass. The full battery result is in the gate run below.End to end on PR #26274 head 1ef5c48
The head is reachable. Merge base
2409c9c8, 57 changed files.--commandsover those 57 files: 66 commands. Against the base tool (same tree,6390fe52) the only difference is the added linepnpm --dir ui exec vitest run scripts/.1ef5c482, after the seven-package build: 4 files failed, 174 passed. It reproduces all three reds the card measured:check-skill-examples.test.ts:json: 69 marked, floor 70(the MARKED_FLOOR).turbo-build-inputs.test.ts:@object-ui/console's build readspackages/sdui-parser/src/retired-visibility-dialects.ts, which turbo's build inputs do not declare.check-doc-expression-carriage.test.ts: 10 failures on the carriage fixtures.check-hand-rolled-comment-mask.test.ts › exits 0 as a process, was a 15 s timeout while the dispatch-gates self-test ran on the same 4 cores. It passed in both clean runs on main. I read it as container load, not that head's.No narrowing
--commandsfrom this branch vs main's tool on the same tree, sorted and diffed:packages/core/src/index.tsscripts/pm/dispatch-gates.mjsui/scripts/check-skill-examples.mjsskills/objectui/SKILL.mdui/apps/console/package.json+ a spec fileNo line was removed in any set.
Local gates for this diff
node scripts/pm/dispatch-gates.mjs --commands(no paths, from git, merge base6390fe52) derives 30 families for this diff. All 30 ran, each recorded asCMD :: exit N, and all 30 exited 0.pnpm check:pm-dispatch-gatesis the fast tier, 1935 cases in 377 s.node scripts/pm/dispatch-gates.mjs --ran ran.listreports:30 derived famil(ies) accounted for — 30 run, 0 NOT-MEASURED (a DERIVED zero), exit 0.The slow tier (
--self-testwithout--fast) runs onmain's push and schedule only. Its local reading is reported on the card.Out of scope, noted for the seat
dispatch-gates.mjs'spnpmrecognizer readspnpm [--filter X] [run] check:*, neverpnpm --dir ui run check:*. So the 38 distinctcheck:*scripts thatLint UI/Build & E2E UIinvoke that way inci.ymlare discovered as no family at all.if:isui_tree != 'false' && ui != 'false', whichjobIfReadingrefuses as an intersection. So they appear in neither the job-filtered tail nor the always-runs tail.&&-of-filter-outputs reading).Governance
scripts/pm/dispatch-gates.mjs,scripts/pm/dispatch-gates.data.mjs,scripts/pm/dispatch-gates.self-test.mjs..github/**,AGENTS.md,.claude/**orskills/**file is touched, and no governed text quotes the change-kind list.check-governed-merges --teston these paths: 0 hits.skip-changeset.Clause-②: no
Metadata-protocol: none
Fixes #26318
🤖 Generated with Claude Code
https://claude.ai/code/session_01AYg1gtz1tWt66GpPnTo1QF
Generated by Claude Code