Repository navigation
test(ui-merge): the governance pins on objectui's workflows retire to their roster rows and root gates; the Node anchor reads the root workflows - #25940
Conversation
… their roster rows and root gates; the Node anchor reads the root workflows GitHub runs only the repository root's .github/workflows/. The last eight ui/scripts/__tests__ files that scan ui/.github/workflows/ as a population stop reading it. - dependabot-merge-gate: the bucket partition against the check names objectui's pull_request workflows produce, its exemption control, and the six pins on dependabot-auto-merge.yml retire as roster row 9 (sub-issue 4). The gate's one caller runs nowhere and no root workflow merges Dependabot pull requests. The verdict, deadline and legibility cases stay. - merge-queue-reporting: the #3523 step 1 and step 2 pins and the floor derived from REQUIRED_CONTEXTS read objectui's workflows. The root check:required-contexts (assertions 6 and 7) and check:workflow-status-functions carry both holes for the contexts the repository requires today. The CI page describe stays, scanning the map. - check-lockfile-dedupe, check-lockfile-integrity: the wiring pins on objectui's lockfile-dedupe.yml and lockfile-integrity.yml retire as roster rows 18 and 19 (kept, follow-up port). The dedupe gate's live-reading scan reads the root workflows. - ci-setup-pnpm-wiring: the population cases over objectui's workflows retire; the four root ui jobs are held to the root setup-pnpm composite. - doc-version-claims: the node-version anchor reads the root workflows, and the census counter skips whole-line YAML comments. - workflow-cache-save-bound and labeler-package-coverage are deleted: every case read objectui's workflows or its labeler config. The root ui jobs' cache saves belong to the card that bounds them; the labeler pins retire as roster row 14, and ui/.github/labeler.yml stays until the label taxonomy is decided. - markdown-test-inputs.mjs drops the deleted labeler test's entry and the merge-queue test's workflow walker. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40271867662 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Tesla · project thread
Part of #25712 (4b PR 2d-2b: the last
ui/scripts/__tests__files that scanui/.github/workflows/as a population stop reading it).Part of objectstack#25677.
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
ui/.github/workflows/当作一个总体来扫描。这个目录在 monorepo 里不运行。doc-version-claims和check-lockfile-dedupe的扫描改成读根目录的.github/workflows/。ci-setup-pnpm-wiring改为断言根目录 4 个 UI job 都通过根目录的./.github/actions/setup-pnpm安装 pnpm。dependabot-merge-gate、merge-queue-reporting、check-lockfile-integrity里读 objectui workflow 的 pin 退役,每条都写明由谁承接:路线表的行号,或者根目录现在承担这件事的 gate。其余用例保留。workflow-cache-save-bound和labeler-package-coverage两个文件整个删除,因为里面每个用例都读 objectui 的 workflow 或 labeler 配置。labeler.yml不加ui/规则(原因见下)。ui/.github/workflows/,删之前这 8 个文件必须先不依赖它。改完以后,无论ui/.github/workflows/在不在,保留和修改的 6 个文件都是绿的(本地两种布局都是 96 个用例通过)。席位核对
(left for the dispatch seat)
Why
GitHub runs only the repository root's
.github/workflows/. Since the cutover (#25825), objectui's workflows sit atui/.github/workflows/and run nowhere. 2d-1 (#25879) moved the readers ofui/.github/workflows/ci.yml. 2d-2a (#25904) took 18 of the 27 files that scan the workflow directory as a population. This PR takes the other 8, the governance files.check-pre-install-import-graphstays with 2d-3, because its gate, not just its test, derives its population from the nested workflows.The rule is the same as in 2d-1 and 2d-2a. A pin is either retargeted to the root workflows by path, or retired with a comment naming who carries its subject. Nothing is skipped and nothing is folded into a root workflow.
What changes
dependabot-merge-gate. Three groups of pins read objectui'spull_requestworkflows through./workflow-checks.ts: the bucket partition, the exemption control forRENAMED_SINCE_4959, and the six pins ondependabot-auto-merge.yml. They retire as roster row 9 (→ sub-issue 4). The gate's one caller is that workflow, which runs nowhere, and no root workflow merges Dependabot pull requests. Everything that judges a check-run list stays: the spec:view元数据两种形状并存,且 objectui 写侧产出的可能不是根 schema 收的那一种 —— 需裁定唯一 authorable 形状 #4959 counterfactual, absence, the optional bucket,waitForGate,main(), the verdict text, the check-runs-only boundary, and the reasons.merge-queue-reporting. The chore(deps)(deps): bump better-auth from 1.7.0-rc.1 to 1.7.0-rc.2 #3523 step 1 pins, the floor derived fromREQUIRED_CONTEXTS(deriveMergeGroupFloor()and its three cases) and the step 2 pins all read objectui's workflows. The root gates already carry both chore(deps)(deps): bump better-auth from 1.7.0-rc.1 to 1.7.0-rc.2 #3523 holes, for every context the repository requires today:scripts/check-required-contexts.mjs(check:required-contexts) holds each required context's workflow to amerge_group:trigger (assertion 6) and to apull_requesttrigger with no path filter (assertion 7), andcheck:workflow-status-functionspins the filter contract's status-function half. Both run inLint · CI, release & engine gates. The CI page describe stays and now scansMUST_SUBSCRIBE_MERGE_GROUPalone.check-lockfile-dedupe,check-lockfile-integrity. The wiring pins on objectui'slockfile-dedupe.ymlandlockfile-integrity.ymlretire as roster rows 18 and 19 (kept, follow-up port, re-aimed at the one rootpnpm-lock.yaml). The dedupe test's live-reading scan now reads the root workflows throughhelpers/root-ci.ts, andLIVE_READING_SITESdrops the nested workflow. The population controls and the classification cases stay.ci-setup-pnpm-wiring. Three population cases swept objectui's workflows for calls toscripts/ci-setup-pnpm.sh, and they retire. A new describe asks the same questions of the four root* UIjobs, by path: nocorepackoutside the shared setup, and checkout before./.github/actions/setup-pnpmbefore the firstpnpm. All four hold at this head. The script and its self-test stay; no root job calls the script.doc-version-claims. Thenode-versionanchor (WORKFLOWS_DIR) is now the root.github/workflows/(rootWorkflowsDir). All 56 root declarations read'22'. The census cross-check's key counter now skips whole-line YAML comments: roothalf-state-patrol.yml:111quotes a commented setup example, and counting it would read the parser's correct silence as a lost lane.workflow-cache-save-bound.test.ts(11 cases) andlabeler-package-coverage.test.ts(7 cases). Every case read objectui's workflows orui/.github/labeler.yml. Their carriers are in rows 7 and 8 of the table.ui/scripts/markdown-test-inputs.mjs. It drops the deleted labeler test's entry, and thewalker:ofmerge-queue-reporting(itsreaddirSync(workflowDir)is gone).F12 as ruled → B, labels absent
The dispatcher first ruled that this PR should add the
ui/globs to the root.github/labeler.ymland retargetlabeler-package-coverageto it. Measuring first showed that this would turn root Auto Label red on every pull request touchingui/packages:Root
Auto Label(pr-automation.yml) is notactions/labeler. It isnode scripts/pr-labels.mjs --paths, an additive POST withpull-requests: writeonly, andpr-labels.mjstreats any 4xx as fatal ("a422is a label that does not exist in the repo").28 of the 32 labels in
ui/.github/labeler.ymldo not exist in this repository's label registry:package: core,package: types,package: react,package: components,package: app-shell,package: auth,package: cli,package: collaboration,package: create-plugin,package: fields,package: i18n,package: layout,package: mobile,package: permissions,package: providers,package: react-runtime,package: runner,package: sdui-parser;plugin,plugin: charts,plugin: editor,plugin: kanban,plugin: markdown;data-adapter,configuration,examples,apps,breaking-change.Only
documentation,tests,dependenciesandci/cdexist.The dispatcher re-ruled B:
ui/globs go into the root labeler;ui/.github/labeler.ymlstays as an inert config until sub-issue 4 rules, and 2d-3 lists it as "kept, pending sub-issue 4".Disposition table (8 files)
dependabot-merge-gatefound the workflows and the shard matrix,classifies every produced check exactly once,requires only contexts whose workflow carries NO path filter,marks optional exactly those blocking contexts whose workflow IS path-filtered; the exemption-control half ofclassifies every context the incident produced;the workflow cannot merge without consulting the gate(6 cases ondependabot-auto-merge.yml)waitForGate,main(), legibility, boundary, reasonsmerge-queue-reportingderiveMergeGroupFloor()), step 2 (3it.eachoverci.yml/lint.ymland the 2 fail-OPEN cases)check:required-contextsassertions 6 and 7, andcheck:workflow-status-functions(Lint · CI, release & engine gates)check-lockfile-dedupe--report-only, path-filtered, nomerge_group, shared pnpm setup.github/workflows/; population controls; classificationcheck-lockfile-integrityexists and runs the gate,checks out deep enough to have a merge baseci-setup-pnpm-wiringno workflow runs corepack outside the shared script,every workflow that invokes pnpm also runs the shared setup,every job that calls the setup script checks the repository out first* UIjobs, by path, against./.github/actions/setup-pnpm; the script's own casestype-check-ui,test-ui,lint-ui,build-e2e-uidoc-version-claimsnode-versionanchor reads root.github/workflows/; the census skips comment lines.github/workflows/workflow-cache-save-bound(deleted)ci.yml::e2e≤30,lint.yml::lint25build-e2e-ui(ceiling 45) andlint-ui(ceiling 30); see follow-up F13ci.yml::docs≤15,live-e2e.yml≤40,performance-budget.yml25check-links.yml20,cross-repo-issue-closer.yml20,labeler.yml20,changelog.ymlunboundedlabeler-package-coverage(deleted)package: Xspelling, exemption lists, docs tree,issues: write)ui/.github/labeler.ymlstays, inertFollow-up rows (not folded here)
lint-ui(timeout-minutes: 30) andbuild-e2e-ui(45) ceilings came over without the derivations objectui wrote beside its 25 and 30, and nothing pins them. ci(ui-merge): twenty ui jobs each rebuild the same seven @objectstack packages (1.6–2.5 min apiece, mostly turbo cache misses on PRs) — build them once per run and hand the dists to the ui lanes (parent #25677) #25869's F1 seat touches the same jobs.## Merge Queuesection (ui/content/docs/guide/ci-cd-pipeline.md) still saysmerge-queue-reporting.test.tsderives the floor fromREQUIRED_CONTEXTS. This PR retires that derivation. The page as a whole describes objectui's CI. It is for the dispatcher to route.ui/scripts/dependabot-merge-gate.mjshas no caller, and itsREQUIRED_CONTEXTSnames objectui's check names. Eight other test files still import it as a classification source (check-required-check-set,check-governed-queue-guardandcheck-readme-exportsamong them). Sub-issue 4 decides whether to port it or delete it.What 2d-3 still owes (not here)
check-pre-install-import-graph,check-action-ref-convention(its gate scans the nested workflow directory),check-merge-queue-headandworkflow-checks.ts, and the 24 single-workflow readers.ui/.github/prompts/*.prompt.mdfiles to root.github/prompts/, with a separate prompts root forcheck:prompt-keys.ui/.github/dependabot.yml, and deletesui/.github/workflows/**once ci(ui-merge): the 19 objectui repo gates inui/.github/workflows/repo-gates.ymlhave run nowhere since the cutover — port them into the rootLint UIjob before 2d-3 deletes the nested workflows (roster row 24; parent #25677) #25880 lands.ui/.github/labeler.ymlas kept, pending sub-issue 4.Verification
This head is
main2a728ba2(with #25904) plus this commit. The test runs below were taken onmaincb0a2fcfwith 2d-2a and this commit applied. That tree'sui/andscripts/pm/are byte-identical to this head's: the only commit between them is #25830, which touches neither. The derived gates were re-run on this head. Test runs are fromui/, perui/AGENTS.md.ui/.github/workflows/presentui/.github/workflows/moved aside (the 2d-3 layout)scripts/__tests__suite,--shard=1/4through4/4, underscripts/pm/os-verify-lock.shpnpm type-check:scriptspackages/components/src/renderers/action/resolve-icon.ts(265,69)TS2339, identical on unmodifiedmainhere; none in a touched filepnpm exec eslint --max-warnings=0(touched files),lint:coverage,check:test-path-roots,check:vi-mock-override-shape; rootpnpm check:test-source-aliasThe one suite failure is the base red riding
main:check-pre-install-import-graph,unresolved: scripts/objectstack-pin.mjs. Main's push run 40264138159 is red on the same row. It clears in 2d-3 with the nested workflows.Derived gates (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack): 18 families from this PR's 9 paths, 1830 changed lines. All 18 exit 0 at this head, and--ranreconciles 18 run, 0 NOT-MEASURED, 0 UNRUN. The same 18 also exited 0 on thecb0a2fcftree. The slowest werecheck:query-options-erasure(567 s),check-comment-mask-corpus(326 s) andcheck:engine-double-contract(140 s), measured on a shared box.Push-environment battery (
GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs, both tiers): "✓ dispatch-gates self-test: 2182 cases pass." (fast 1917 in 403.6 s, slow 265 in 1124.4 s).🤖 Generated with Claude Code
https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS