Repository navigation
test(ui-merge): the repo-gates wiring pins retire with their port; "no workflow runs this" pins read the root workflows - #25904
Conversation
…o workflow runs this" pins read the root workflows GitHub runs only the repository root's .github/workflows/. 18 of the ui/scripts/__tests__ files that scan ui/.github/workflows/ ask a question of a directory that runs nowhere. - 14 files pin the wiring of a gate whose only home is objectui's repo-gates.yml: its home, triggers, path filters, install order, step names, and the header-count pin. No root workflow runs these gates; the card that ports repo-gates.yml into the root Lint UI job brings the pins back against that job. They retire with a comment naming it. What reads no workflow stays: the package.json aliases, the import-graph walks, the build-filter emission, the REQUIRED_CONTEXTS classifications, the CI page sections, and the header-count controls. The doc-snippet-types file's six cases that ran repo-gates.yml's derive and build steps under bash retire the same way. - 4 files assert that no workflow runs a gate (comment-mask, i18n dead keys, lint-rule coverage, the published-dist scan per PR). They now ask the root directory through a new helpers/root-ci.ts rootWorkflowFiles(), which refuses a scan that reads implausibly few files. The published-dist scan's "runs nightly" pin retires as roster row 23, a follow-up port. - markdown-test-inputs.mjs drops the ten `walker` declarations those workflow-directory walks produced, and the three entries the scanner no longer offers at all. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
|
Standing down on two red Test UI shards at
Neither shard is a required context. Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40267487698 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40268208875 红了。队列跑的是全量套件(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-2a: the per-gate wiring pins among the
ui/scripts/__tests__files that scanui/.github/workflows/stop reading it).Part of objectstack#25677.
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
ui/scripts/__tests__里有 18 个测试文件扫描嵌套的ui/.github/workflows/目录,问的是“哪个 workflow 运行这个 gate”。这个目录在 monorepo 里根本不运行。其中 14 个文件的 gate 唯一的家是 objectui 的repo-gates.yml,根目录没有任何 workflow 运行它们。它们的接线 pin(home、trigger、path filter、install 顺序、step 名、header 计数)退役,注释写明由 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 承接(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 把这 19 个 gate 移植进根Lint UI,届时把 pin 指回那个 job)。不读 workflow 的用例全部保留。另外 4 个文件断言“没有 workflow 运行这个 gate”,改为扫描根目录.github/workflows/(新的rootWorkflowFiles())。ui/.github/workflows/。删之前这 18 个文件必须先不依赖它。改完以后,不管ui/.github/workflows/在不在,这 18 个文件都是绿的(本地两种布局都是 1,034 个用例通过)。ui/.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 接回。回滚 = revert 本 PR。席位核对
(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 28 files that readui/.github/workflows/ci.ymlto the rootci.yml. This PR takes 18 of the 27 files that scan the workflow directory as a population. The dispatcher split the population in two: the other 8 (the governance files, which read throughworkflow-checks.tsor scan every workflow for a repo-wide rule) are 2d-2b.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 2d-1 rule: retarget a pin to the root workflows by path, or retire it with a comment naming who carries its subject. Nothing is skipped and nothing is folded into a root workflow.
The 19 gates in
ui/.github/workflows/repo-gates.ymlrun in no root workflow. #25880 ports them into the rootLint UIjob. Per the dispatcher, the pins on their wiring retire against #25880, not against roster row 24.What changes
14 files: gate-wiring pins for
repo-gates.ymlgates retire against 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. Each file loses itsui/.github/workflowsreads and the cases built on them:has a workflow that gates pull requests,runs it in NO path-filtered workflow,has exactly one home, the install-order half ofneeds no install,subscribes merge_group, step-name assertions,does not run a NEIGHBOUR gate, and the header-count pins. The note where they were names 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. Every case that reads no workflow stays:package.jsonaliases;needs no install(check-doc-component-types,check-prompt-component-keys), kept asneeds no install: its import graph reaches no package;check-doc-snippet-types's build-filter emission cases;REQUIRED_CONTEXTSanddependabot-merge-gate.mjsclassification halves;check-doc-component-types's three header-count controls, which exercisedocumentCountsandheaderCommentson synthetic text. They become the controls of the pin 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 brings back.check-doc-snippet-types'the build-filter steps propagate failure…describe (6 cases) retires. It ran therun:scripts of tworepo-gates.ymlsteps under bash. 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 carries those steps, and the cases come back against them.4 files: "no workflow runs this" pins ask the root directory.
check-hand-rolled-comment-mask,check-i18n-dead-keys,check-lint-rule-coverageandcheck-published-dist-tooling(the per-PR half) each asserted that no workflow runs a gate. They now read the root.github/workflows/throughhelpers/root-ci.ts:rootWorkflowsDir;rootWorkflowFiles(), which refuses a scan that reads fewer than 10 files, so a "nothing names this" pin cannot go vacuous;rootWorkflow(file).check-published-dist-tooling'sruns nightlyreadpublished-dist-gate.ymland retires as roster row 23 (kept, follow-up port).ui/scripts/markdown-test-inputs.mjs. Its scanner flagged every removedreaddirSync(workflowDir)as a directory walk, so the ledger changes:walker:declaration;check-i18n-dead-keysandcheck-lint-rule-coverage(bothreads: []), andcheck-prompt-component-keys.The prompt-keys test still reads
.github/prompts/*.prompt.md, but through the gate's exportedPROMPT_DIR, which the scanner cannot see. 2d-3 moves those prompts to the root.github/prompts/(dispatcher ruling), outside the tree this ledger describes. Test UI runs the whole suite on every ui change, so no selection depends on the entry today.Disposition table (18 files)
repo-gates.ymlunless noted)check-doc-component-typescheck-doc-example-idscheck-doc-example-typescheck-doc-json-fencescheck-doc-snippet-typescheck-prompt-component-keyscheck-readme-exportsREQUIRED_CONTEXTSclassificationcheck-shell-escape-residueREQUIRED_CONTEXTSclassificationcheck-skill-eval-tokenscheck-skill-examplescheck-skills-pathscheck-vi-mock-inheritcheck-vi-mock-specifiersdocs-links-workflowexists at allcheck-hand-rolled-comment-masknothing GitHub runs names this gate.github/workflows/check-i18n-dead-keysis NOT invoked by any GitHub workflow.github/workflows/check-lint-rule-coveragenot in a workflow yet.github/workflows/check-published-dist-toolingruns nightly(published-dist-gate.yml)is NOT wired into any per-PR workflow.github/workflows/; nightly half roster row 23Some pins outlive their meaning but still read no workflow. For example, the CI page still says the doc gates block. They stay green and are #25880's to restate when the gates run again.
What 2d-2b and 2d-3 still owe (not here)
dependabot-merge-gate,merge-queue-reporting,check-lockfile-dedupe,check-lockfile-integrity(all throughworkflow-checks.ts),ci-setup-pnpm-wiring,workflow-cache-save-bound,doc-version-claims, andlabeler-package-coverage. The last of these is retargeted to the root.github/labeler.yml, which gains theui/globs it lacks (dispatcher ruling on F12).check-pre-install-import-graph,check-action-ref-convention(its gate scans the nested workflow directory), and the 24 single-workflow readers. It also moves the threeui/.github/prompts/*.prompt.mdfiles to root.github/prompts/, with a separate prompts root forcheck:prompt-keys, and deletesui/.github/dependabot.ymland the 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.Verification
Run from
ui/perui/AGENTS.md, at this head (main6e0597f2plus this commit):ui/.github/workflows/presentui/.github/workflows/moved aside (the 2d-3 layout)ui/.github/moved asidecheck-prompt-component-keysfails 7 prompt-surface cases, because the prompts are underui/.github/prompts/. 2d-3 moves them (above).scripts/__tests__suite,--shard=1/4through4/4, underscripts/pm/os-verify-lock.shmarkdown-test-inputs.mjs(10 files)pnpm 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
mainsince 2c:check-pre-install-import-graph,unresolved: scripts/objectstack-pin.mjs. It clears in 2d-3 with the nested workflows.Derived gates (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackfrom this diff): 18 families, all exit 0 at this head.--ranreconciles 18 run, 0 NOT-MEASURED, 0 UNRUN. The slowest werecheck:query-options-erasure(320 s),check-comment-mask-corpus(202 s) andcheck:engine-double-contract(68 s).The push-environment battery (
GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs, both tiers) is running on this head. Its line goes to the dispatch seat.🤖 Generated with Claude Code
https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS