Repository navigation
ci(filter): start the jobs that run setup-workspace, setup-pnpm and .nvmrc on a diff confined to them - #27709
Conversation
…nvmrc on a diff confined to them The `filter` job's paths lists matched none of the two composite actions every gated ci.yml job runs first, nor `.nvmrc`, the Node version they set up from. A PR confined to them merged with Build Core, Test Core, Build Docs and every UI job skipped. Each path now joins the lists of exactly the jobs that run it, as measured: setup-workspace -> core + docs; setup-pnpm and .nvmrc -> core + docs + ui. half-state-patrol is no ci.yml job's step and joins none. The `core` output gains a reader note. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufziRAJnkSn1iGTfop1P
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head d33c83b · 2026-10-29T20:07Z Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Inputs read: card #27673 (body, triage 6504471712, claim 6506106457, os-dev-report 6506644079), PR #27709 (body, file list, the one-file +26/-0 diff), the 65 check-runs on the head, and the cited files in the tree at the head and on ① Derived judgments
② Semver levelClause-②: no The diff is one workflow file. No package, schema, skill or export moves, so no changeset is owed and the ③ Boundary flags
④ Design judgment
Acceptance 1 — a diff confined to the actions or
Acceptance 2, S1 — reader note on the Acceptance 2, S2 — the Acceptance 3 — Comment truth in the new rows. "each one starts with Observation, widened, not a finding on the hit. Five other Findings. Must-fix: none. Should-fix (none blocks this file): (a) record the S2 / Live E2E UI routing on the card before Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:spec#3 · os-support-ai · session_01WGufzgbJhFoXYsLSe5WSPP 维护者速读 (席位终稿)
席位意见:接受。分诊契约复核在当前 head 上 PASS(6507318267),没有 must-fix。三条 should-fix 都已处理:S2 和 Live E2E UI 的去向写到了卡上,由 #27619 自己带;根 席位核对 · ACCEPT ·
|
domain:spec#3 · os-support-ai · session_01WGufziRAJnkSn1iGTfop1P
Requested by Yibo Wang · project thread
Fixes #27673
Clause-②: no
Metadata-protocol: none
Both declarations are the claim's (6506106457), measured and kept. The diff is one workflow file,
.github/workflows/ci.yml: it publishes nothing, no package, schema or skill moves, so no changeset is written. Check Changeset wants a changeset or theskip-changesetlabel, and a CI-internal edit takes the label (lint.yml's changeset-family note), as PR #27619 did for the same file.维护者速读
ci.yml的filter作业里,core、docs、ui三份路径清单各补上它们的作业实际运行的启动件:两个复合动作setup-workspace、setup-pnpm与 Node 版本文件.nvmrc;另给core输出加一行注释,写明谁读它。.github/workflows/ci.yml的filter作业,依次看core:清单里新加的三行及其注释、ui:清单末尾两行、docs:清单末尾三行。.nvmrc注释或空行的草稿 PR,应看到 Build Core、Plan Test Core shards、Build Docs 与各 UI 作业启动,而不是 skipped。ci.yml改动,Tier H;席位 ACCEPT 之后由你批准)。What changes
Measured first, on
origin/mainbfdaba43The composite actions under
.github/actions/, and whichci.ymljobs run each one (read from every job'ssteps[].usesandwith.node-version-file; † = push / schedule only, no PR run):ci.ymljobs that run it.github/actions/setup-workspace/**test-plan,test,build-core,temporal-conformance†,dogfood†,dogfood-verify† (core);build-docs(docs)core,docs.github/actions/setup-pnpm/**ui-deps,type-check-ui,test-ui,lint-ui,build-e2e-ui,live-e2e-ui,ui-published-artifacts† (eachuses:it directly; all readui); and everysetup-workspacejob above, becausesetup-workspacecalls itcore,docs,ui.github/actions/half-state-patrol/**half-state-patrol.ymlruns it).nvmrcsetup-workspacejob (itsactions/setup-nodestep readsnode-version-file: .nvmrc); the seven UI jobs (each one's ownactions/setup-nodestep, same input)core,docs,uiThe lists not joined:
crosspkggatestestalone, ORed withcore, which now covers both paths;ui_consumersis the seven packages objectui installs, and every UI job readsuias an OR term beside it;ui_treeis theui/package.jsonpresence step's output, not a paths list.One row per action, not
.github/actions/**: a glob would start the core, docs and UI pipelines on a diff confined tohalf-state-patrol, which no job in this file runs.The edit (
.github/workflows/ci.yml,filterjob, +26 / −0)core:gains.nvmrc,.github/actions/setup-workspace/**and.github/actions/setup-pnpm/**, with a comment naming why and why not a glob.docs:gains the same three rows, pointing at thecore:comment.ui:gains.nvmrcand.github/actions/setup-pnpm/**, with a comment.coreoutput gains a reader note in the siblingcrosspkgcomment's style, naming the six readers onmaintoday:test-plan,test(ORed withcrosspkg),build-core, and on push / scheduledogfood,dogfood-verifyandtemporal-conformance.if:or output expression changes. No path is removed.Comment S2 and the
Live E2E UIreader: not in this PROn
mainatbfdaba43,live-e2e-ui'sif:does not readcore, and the parenthetical S2 asks to amend ("core(packages/, examples/, apps/!(docs)/** and the root build inputs)") does not exist. Both arrive with PR #27619 (#27550), which is still an open draft. So S1 names the readers that exist today, and S2 plus theLive E2E UIaddition to S1 are routed by the seat to #27619 (or to this PR after a main merge, if #27619 lands first).Tests
Probe:
dorny/paths-filter-equivalent matching against the new listsThe filter's own self-tests do not cover these paths (
check:ci-filter-parityderivescorefrom turbo.json's build inputs and Build Core's guard scripts; a composite action is neither, which its header records as a known bound). So the acceptance probe runs thechangesstep'sfilters:block through picomatch with{ dot: true }, the matcher and option dorny/paths-filter uses, under both 2.3.2 and 4.0.7 (they agree on every row), and evaluates each job'sif:for apull_requestrun on this tree (ui_tree=true).Before (
origin/mainbfdaba43):After (head
d33c83b1):Positive controls, same probe, unchanged before and after:
packages/spec/src/index.ts→core,ui_consumers(test-plan, test, build-core, ui-deps, type-check-ui, build-e2e-ui, live-e2e-ui);ui/package.json→ui;apps/docs/x.ts→docs(build-docs).testis listed becausetest-plan'sshardsoutput is evaluated as non-empty; on a real.nvmrc-only diff the plan may publish[](no package is affected), and thentestskips whiletest-planandbuild-corestill runsetup-workspaceand set Node up from.nvmrc.UI pins that read the
ui:listThe
ui/scripts/__tests__files that read the root filter throughuiFilterGlobs/jobBlock, or the setup-pnpm wiring, run locally fromui/under the lock: 11 of 12 files pass, 325 / 325 tests. The twelfth,check-action-forward-parity.test.ts, did not load:cannot resolve @objectstack/spec/ui — run pnpm install first, a built-distprerequisite of this worktree, not a verdict. NOT MEASURED locally; Test UI runs it on this PR.Acceptance notes
scripts/check-ci-filter-parity.mjs's header bound ("a local composite action a stepuses:is not followed (today's one, setup-pnpm, …)") now has two such actions (setup-workspacecallssetup-pnpm). Prose in a script outside this card's need; noted, not edited.package.jsonpackageManagerfield (whichsetup-pnpmreads) matchescorebut notui. Observation only, outside this card; not filed.Verification
Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat headd33c83b1(change set:.github/workflows/ci.yml, +26 / −0): 53 commands. Each was run serially with its exit code captured before any pipe;dispatch-gates --ranreconciles: 53 derived, 49 run, 4 NOT MEASURED (derived from a recorded exit 3), 0 unrun.check:ci-filter-parity(202 declared cross-package globs covered, 23 build inputs and 13 Build Core guard scripts covered, no leftovercoreentry) andcheck:pm-expected-skips(206 self-test cases). No row was needed in either gate's tooling: no job'sif:changes, and the newcorerows are a root-level file and two patterns, which the parity gate's leftover rule does not judge.check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content. These are Build Core's own guards, and Build Core runs on this PR (.github/workflows/ci.ymlis incore), so CI measures them.Derived gates at d33c83b (CMD :: exit N)
Generated by Claude Code