Repository navigation
test(ui-merge): the ui tests stop reading objectui's nested workflows — Lint UI and Repo Gates readers pin the root lint-ui job, governance pins retire with their roster rows - #26013
Merged
Conversation
GitHub runs only the repository root's .github/workflows/. objectui's lint.yml, which five ui tests read, runs nowhere since the monorepo merge; the root ci.yml ported its Lint job as lint-ui (roster row 16 of the #25697 audit), and spells every gate through its ui alias. The bash 3.2 floor and entry-guard wiring pins, the test-path-roots and vi.mock override-shape pins, and lint-workflow's ratchet prose and trigger claims now read that job by path: its steps, its comments, the root `on:` block (which filters no paths) and the filter job's ui globs, which must still match a ui TypeScript source. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
…th their roster rows Thirteen ui tests, and check-governed-queue-guard's own --self-test, pinned how a workflow under ui/.github/workflows/ runs a gate: changeset-guard, changeset-presence, performance-budget, governed-surface-guard, merge-queue-head-patrol, line-citation-gate, shadcn-check, check-links, required-check-set-patrol and dependabot-auto-merge. None of them runs under the monorepo, and no root workflow runs these gates, so those pins assert nothing GitHub does. Each retired case is named where it stood, with the row of the #25697 workflow roster that carries the workflow (rows 3, 4, 6, 9, 11, 15, 20, 22, 25, 26), and the port that brings the pins back against a root workflow, by path. Every case that reads a script, a fixture, a config or package.json stays. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
…tead of objectui's decision step The firing control for objectui#8861 ran the "Decide whether this change needs a full run" step out of objectui's ci.yml. That workflow runs nowhere since the monorepo merge, and the root test-ui job (roster row 7 of the #25697 audit) was ported without the step. The step-driven legs retire, named in the header. What carries the property now is pinned in their place: the filter job's ui globs match the documents the objectui#8857, #9096 and #9142 shapes changed, and test-ui reads that filter. The affected-test selector picks the readers, as its own test pins. The ledger's audit and derivation cases stay. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
objectui's `repo-gates.yml` sits under `ui/.github/workflows/`, where GitHub never runs it. The root `ci.yml`'s `lint-ui` job now runs the same gates through `pnpm --dir ui run <alias>`, so the four tests that pinned the nested workflow read the root job by path instead: - check-control-bytes and check-docs-route-eager-closure: the alias is a package script, the root Lint UI job runs it, the root trigger gates pull requests with no paths filter, and the `ui` filter matches the files the gate reads. - check-doc-snippet-emitted-census: the census leg runs after the gate build and before the gate, in the root job, and the alias runs this script. - check-doc-fence-languages: one step runs both legs, no other job or root workflow runs the guard, the job's install comes after it, and its header comments state no count. The markdown-test-inputs ledger records the new markdown path literals as `notRead`: they probe the `ui` filter's globs and open no document. The fence-languages entry drops its `walker`, since its only walk was of the nested workflows directory. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Tesla · project thread
Part of #25712 (4b PR 2d-3b: the ui tests that read a nested workflow whose root carrier is on
main).Part of objectstack#25677.
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
ui/.github/workflows/下的 objectui workflow,现在不再读。lint.yml的 5 个文件和读repo-gates.yml的 4 个文件,改为按路径读根目录ci.yml的lint-ui作业(ci(ui-merge): run objectui's Repo Gates in the root Lint UI job (18 of 19; the pre-install import graph waits for ui/.github to retire) #25902 已把 Repo Gates 移入该作业)。markdown-test-inputs改为读根目录filter作业的ui过滤器和test-ui的if:。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 roster 的行号,由该行负责以后迁移。读脚本、fixture、配置或package.json的用例全部保留。check-governed-queue-guard.mjs自带的--self-test里也有读 workflow 的接线断言,同样退役。.github/workflows/,嵌套的那些 workflow 永远不会运行,对它们做断言等于什么都没检查。2d-3c 要删除ui/.github/workflows/**,这些测试必须先不再读它们。席位核对
(left for the dispatch seat)
Why
GitHub runs only the repository root's
.github/workflows/. Since the cutover (#25825), objectui's own workflows sit atui/.github/workflows/and run nowhere, so a pin on one of them asserts nothing GitHub does. 2d-3c deletes that directory. Before it can, every test that reads it has to stop. This PR handles the readers whose root carrier is already onmain:repo-gates.yml) merged first and the combined diff stays under 3000 lines;ui/.github/workflows/**andui/.github/dependabot.yml, and retires the action-ref scan.What changes
lint-uijob, by path (roster row 16, ported in PR A):bash32-floor-wiringandentry-guard-wiringread the job's steps throughhelpers/root-ci.tsand pin the one step that runs both legs of the alias.check-test-path-rootsandcheck-vi-mock-override-shapepin the job'spnpm --dir ui runstep.uifilter matches the files the gate reads.lint-workflowchanges three things:lint-uijob: its text for the rule-name check, its comments for the count check.on:block. It must still subscribepull_requestand filter no paths, and the job'sif:must not read the event name.uifilter still matches a ui.ts/.tsxsource, and the job excludes no path".repo-gates.yml, carried by ci(ui-merge): run objectui's Repo Gates in the root Lint UI job (18 of 19; the pre-install import graph waits for ui/.github to retire) #25902's "objectui's Repo Gates" block):check-control-bytesandcheck-docs-route-eager-closure: the alias is a package script, the root Lint UI job runs it, the root trigger gates pull requests (and, for the eager closure, the queue) with no paths filter, and theuifilter matches the files the gate reads.check-doc-snippet-emitted-census: the census leg runs afterui-gate-buildand before the gate, in the root job. A new case pins that the alias the job runs is this script.check-doc-fence-languages: one step runs both legs; no otherci.ymljob and no other root workflow runs the guard; nothing before it in the job installs; the job's header comments state no count.package.jsoncases in the same files are unchanged.ui/scripts/check-governed-queue-guard.mjs. Its--self-testasserted ten facts aboutgoverned-surface-guard.yml, and its test file's collection failure hid them. They retire against row 11. The required-context register pin stays. The self-test now passes 183 cases.markdown-test-inputs.test.tsran the "Decide whether this change needs a full run" step out of objectui'sci.yml. The roottest-ui(row 7) was ported without that step, so the step-driven legs retire, named in the header.filterjob'suiglobs match the documents the objectui#8857, docs(deployment): add mysql:// to environment-variables.mdx's OS_DATABASE_URL example list #9096 and test(scaffold-e2e): cover the pinned Dockerfile shape a real scaffold ships #9142 shapes changed, andtest-ui'sif:reads that filter.select-affected-tests.test.tspins that already.ui/scripts/markdown-test-inputs.mjs.--auditis clean. The ledger changes in five places:check-changeset-presence's workflow walker, andcheck-links-workflow's entry, which no longer reads markdown.check-control-bytesandcheck-docs-route-eager-closuregainreads: []entries. Their new markdown literals probe theuifilter's globs and open no document, so they are recorded asnotRead.check-doc-fence-languagesrecords its probe asnotReadand drops itswalker, since its only walk was of the nested workflows directory.Disposition table
Roster = the #25697 workflow audit (comment 6388182608).
bash32-floor-wiringlint.ymlstep →lint-ui'scheck:bash32-floorstep, both legsci.ymllint-ui(row 16)entry-guard-wiringcheck:entry-guardcheck-test-path-rootslint-uirunscheck:test-path-rootscheck-vi-mock-override-shapelint-uistep after the install; pre-install scan;uifilterfilterjoblint-workflowlint.yml's header prose, withlint.ymllint-uijob; trigger claims → rooton:plus theuifiltercheck-control-bytesrepo-gates.yml→lint-ui; trigger and paths claims → rooton:plus theuifilterlint-ui's Repo Gates block (#25902)check-docs-route-eager-closurecheck-doc-snippet-emitted-censuslint-ui(ui-gate-build< census < gate); new: the alias runs this scriptcheck-doc-fence-languageslint-ui; paths → rooton:plus theuifiltercheck-changeset-overwritechangeset-guard.ymlpinscheck-changeset-no-majorchangeset-guard.ymlpinscheck-changeset-claimscheck-changeset-presencepr-automation.ymlCheck Changesetrender-changeset-claims-commentcheck-eager-closure-budgetmerge_groupabsence pin; the workflow leaves both prose populationsBuild & E2E UIrender-budget-commentperformance-budget.yml contractcheck-governed-queue-guard(+ the.mjsself-test)governed-surface-guard.yml, whose register governsui/.github/workflows/**check-merge-queue-headmerge-queue-triage.ymlcheck-new-cross-file-line-citationsshadcn-check-reportcheck-links-workflowcheck-links.ymlsweeps the root's trees, notui/check-required-check-setdependabot-auto-merge.ymlleavesREPAIREDrequired-set-patrol.ymlmarkdown-test-inputsuifilter matches the three shapes' documents;test-uireads the filtertest-ui), plus the affected-test selectorWhen a test file shows "(one only partly)", the case kept its non-workflow half under a new title.
Untouched here, and listed for 2d-3c (the PM files its decision card):
check-governed-queue-guard'severy declared surface exists in this treegoes red onceui/.github/workflows/is gone. The register's.github/workflows/**row was a maintainer ruling (objectui#12255), so this PR does not decide it.ui/.github/labeler.ymlstays, pending sub-issue 4 (F12 = B).Follow-up rows (not folded here)
markdown-test-inputsledger has no root CI consumer. Its audit runs in Test UI, and the roottest-uijob decides from theuifilter and the selector, never from the ledger. Sub-issue 4 decides whether the ledger stays as an audit or retires.ui/scripts/__tests__/workflow-checks.ts's parser (readWorkflows,triggerBlock,producedCheckNames) has no caller after this PR. ItsrepoRootexport still has two,check-lockfile-integrityandcheck-lockfile-dedupe. It can be trimmed with 2d-3c or sub-issue 4.ui/scripts/check-cross-repo-closer-outcome.mjstakes objectui'sui/.github/workflows/cross-repo-issue-closer.ymlas its subject, and only objectui'slint.ymlran it. Nothing runs it now, and after 2d-3c its subject is gone. It goes with the cross-repo-issue-closer roster row in sub-issue 4.Verification
Head
249928d5, onmain3518664c. 25 files, +606 / −1544.Test runs are from
ui/, perui/AGENTS.md.3518664cscripts/__tests__suite (at45026511, before the rebase;mainbrought oneui/scriptschange since,check-i18n-dead-keys.mjs, which no touched file reads)ui/.github/workflows/andui/.github/dependabot.ymlmoved aside)check-action-ref-convention(12 cases; 2d-3c retires it),check-governed-queue-guard(1 case, the open question above),check-pre-install-import-graph(sections 4 and 5; collection),ci-cd-pipeline-doc(2d-3c deletes it; collection). No hidden reader is left.node scripts/check-governed-queue-guard.mjs --self-testpnpm type-check:scriptspackages/components/src/renderers/action/resolve-icon.ts(265,69)TS2339, identical on unmodifiedmain; none in a touched filepnpm exec eslint --max-warnings=0(all 25 touched files),markdown-test-inputs --auditGate sweep:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 18 families for this diff, unchanged after the rebase. All 18 ran and exited 0.--ranreconciliation: 18 derived, 18 run, 0 NOT-MEASURED, 0 UNRUN.Push-environment battery (
GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs): ✓ 2182 cases pass, 0 failed (fast tier 1917 in 442.3 s, slow tier 265 in 1234.8 s), exit 0. The rebase brought noscripts/pm/change.🤖 Generated with Claude Code
https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS