Skip to content

fix(devx): point shallow-clone refusals at ci.yml's history fetch step - #31667

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-pasvxm
Nov 8, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-pasvxm

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steedos · project thread

Fixes #31649

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:五个门禁脚本在浅克隆时的拒绝提示文案。原来只叫 CI 设 fetch-depth: 0,现在同时点名 ci.yml 的取历史步骤与 lint.yml 的全量检出。
  • 为什么改:ci.yml 读历史的作业已改为深度 1 检出加取历史步骤,旧提示会把 CI 读者引向错误的修法。
  • 风险与回滚:只改提示字符串与两处断言,退出码与逻辑不动;回滚即 revert 本 PR。
  • 先看:packages/spec/scripts/build-schemas.ts 的 remedy 串;ui/scripts/check-changeset-presence.mjs 的 SHALLOW 分支;ui/scripts/__tests__/check-changeset-presence.test.ts 的浅克隆用例。
  • 两分钟验证:pnpm --dir ui exec vitest run scripts/__tests__/check-changeset-presence.test.ts,预期全绿,且浅克隆用例断言了步骤名。
  • 需要你做的:无,席位落地。

What changes

On main 532230f, five shallow-clone refusal messages told a CI reader that the fix was fetch-depth: 0. That is no longer what works in a ci.yml job that reads history. Those jobs check out at depth 1 and run the step Fetch this commit's history and the base branch (test-plan, test, test-ui; type-check-ui joins them when #31644 lands). lint.yml still checks out with fetch-depth: 0.

Each message's "In CI" clause now names both remedies: run that step before the gate (ci.yml), or give the checkout fetch-depth: 0 (lint.yml). The local advice, exit codes and every other line are unchanged. No logic changes, and no workflow file is touched.

Script Who runs it Change
packages/spec/scripts/build-schemas.ts (resolveBaselineWithoutMergeBase remedy) spec's build in every job that builds spec (both kinds), and check:authorable-surface in lint.yml both remedies named
ui/scripts/check-new-cross-file-line-citations.mjs no workflow step on main both remedies named, generically
ui/scripts/check-changeset-claims.mjs no workflow step on main both remedies named, generically
ui/scripts/check-changeset-overwrite.mjs same text, added by Claim amendment 6726615830 same wording
ui/scripts/check-changeset-presence.mjs same text, added by Claim amendment 6726615830 same wording

About #31644: the wording is conditional on the job's shape ("in a job that runs the step, or a full checkout"), so it holds whether #31644 has landed or not. It names no job, and type-check-ui is true under either branch of the sentence. check-i18n-en-drift.mjs carries the same text, but #31644 rewords it itself, so it is left alone here.

Changeset: skip-changeset. These are repository scripts and tests. packages/spec/scripts/ is not in @objectstack/spec's files[], and ui/scripts/ is the ui workspace root, which is not a published package.

Tests

The pins move with the prose. Both still assert fetch-depth: 0, and each now also asserts the step name:

  • packages/spec/scripts/build-schemas-check-mode.git-topology.test.ts: "a tree that carries no anchor of its own refuses" asserts Fetch this commit's history and the base branch.
  • ui/scripts/__tests__/check-changeset-presence.test.ts: the depth-1 clone case asserts the same.

No pin asserted the old text of the other three messages. A grep of the tests for each old string returned no other hits.

Acceptance notes

  • Two nearby strings in build-schemas.ts were left alone because they are outside the card's surface and are not refusals. The --update-base shallow warning ("Re-anchor from walkable history: fetch-depth: 0 in CI") belongs to a mode run locally. The why line ("proved where history is walkable (fetch-depth: 0), which is this repository's own PR gate") stays true, because lint.yml's typecheck-source-gates runs check:authorable-surface on a full checkout.
  • check:new-line-citations and check:changeset-claims are not run as a step by any workflow on main, so their "In CI" line can only describe the two job shapes.

Verification

All runs below are on head 243250a6. The merge of main 8c9260f7 (head e7396e12) brought 31 files, none of them in this surface or its packages, so nothing was re-run.

Dispatch gates: 66 derived, 65 run, 1 NOT MEASURED
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 66 commands. All exited 0 except one.
  • NOT MEASURED: pnpm check:dual-build-cjs-loads exited 3 (PREREQUISITE NOT MET: about 33 packages have no dist/). This worktree built only spec, formula, sdui-parser, lint and client, so CI's run is the evidence.
  • node scripts/check-plugin-teardown-shape.mjs --self-test first exited 3 because the shallow clone could not read its pinned fixture commit. After git fetch --depth=1 origin 621a4876, it exited 0 with 48 cases.
  • pnpm check:query-options-erasure hit the loop's 300 s timeout. Run alone, it exited 0.
  • pnpm --dir ui exec vitest run scripts/ exited 0: 170 files passed and 2 skipped; 5021 tests passed and 2 skipped.
  • pnpm check:pm-dispatch-gates exited 0: 2205 fast-tier cases.
  • dispatch-gates --ran: 66 derived families accounted for (65 run, 1 NOT MEASURED).
Pins: red on main's text, green on the fix
  • Red leg: git restore --source=532230f3 of check-changeset-presence.mjs and build-schemas.ts, tree only. "names the shallow-clone case, which is how CI hits it" fails (1 failed, 45 passed). "a tree that carries no anchor of its own refuses" fails (1 failed). Both files were then restored to HEAD, and git diff HEAD was empty.
  • Green: build-schemas-check-mode.git-topology.test.ts passed 17/17. The four ui gate suites (presence, claims, overwrite, citations) passed 4 files and 196 tests.

Generated by Claude Code

Three refusal messages told a CI reader to give the checkout
`fetch-depth: 0`. ci.yml's history-reading jobs now check out at depth 1
and run the step "Fetch this commit's history and the base branch";
lint.yml still checks out full history. Each message now names both
remedies. Local advice, exit codes and every other line are unchanged.
The spec topology pin also asserts the step name.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsR2jQqimUnb4io8LpGcvH
check-changeset-overwrite and check-changeset-presence printed the
same shallow-clone remedy as check-changeset-claims. They now carry its
wording, and the presence gate's shallow pin also asserts the step name.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsR2jQqimUnb4io8LpGcvH
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 8, 2026
@github-actions github-actions Bot added size/s tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 8, 2026
@github-actions

github-actions Bot commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 8c9260f79c5d060dfed58a92cc8f9b10a1762a5b → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6

维护者速读

  • 改了什么:五个门禁脚本(spec 的 build-schemas、跨文件行号引用、changeset claims / overwrite / presence)在浅克隆时的拒绝提示。原来只叫 CI 设 fetch-depth: 0,现在同时点名 ci.yml 的取历史步骤 Fetch this commit's history and the base branch 和 lint.yml 的全量检出。另有两条测试断言了步骤名。
  • 为什么改:ci.yml 读历史的 job 已改为深度 1 检出加取历史步骤(ci(test): check out Test Core and Test UI at depth 1 and fetch only the history they read #31429、ci: check out Type Check UI at depth 1 and give every history fetch a budget sized to its job #31644),旧提示会把读红灯的人引向错误的修法。
  • 风险与回滚:只改提示字符串与两处断言;退出码、逻辑、workflow 都不动。回滚 = revert 本 PR。
  • 先看:packages/spec/scripts/build-schemas.ts 的 remedy 串。
  • 两分钟验证:本 PR 的 CI 全绿(56 成功、13 跳过)。
  • 需要你做的:无,席位落地(未触受管路径,Tier S)。
  • 席位意见:可合,本席入队。

席位核对 · ACCEPT · 2026-11-08T21:39Z · head e7396e12540eeb3f2741b5fea8d7feba7215df65

Seat domain:devx#2 reviewed the diff of its own dispatch (claim 6726578254 on #31649, amendment 6726615830, card thread session_01QsR2jQqimUnb4io8LpGcvH, report 6727200982). Checked against GitHub, not against the report.

  1. Shape: net diff against main: 7 files, +20 / -9. Five refusal strings (build-schemas.ts resolveBaselineWithoutMergeBase remedy, and the check-new-cross-file-line-citations, check-changeset-claims, check-changeset-overwrite and check-changeset-presence SHALLOW branches). Two pins add the step name (build-schemas-check-mode.git-topology.test.ts, check-changeset-presence.test.ts). All inside the claim as amended. Body: Fixes #31649, skip-changeset.
  2. Premise: read on main. The step name Fetch this commit's history and the base branch is the exact name in ci.yml's test-plan, test and test-ui, and lint.yml still checks out with fetch-depth: 0. The wording names no job, so it holds before and after ci: check out Type Check UI at depth 1 and give every history fetch a budget sized to its job #31644. Local advice, exit codes and every other line are byte-unchanged in the diff.
  3. Gates / check-runs: this head has 69 completed runs: 56 success, 13 skipped, 0 red. check-expected-skips --pr 31667 from main: OK, 13 skipped, every one in main's roster, exit 0. mergeable_state: clean. Dev: 66 derived families, 65 exit 0, and check:dual-build-cjs-loads NOT MEASURED (exit 3, no dist). CI's build jobs ran that family's ground and are green.
  4. Contract review: none owed. Clause-②: no, no published schema and no governed path. The brief template's face for this file list is the declaration face, which the Clause-②: yes line alone owes.
  5. Accepted deviations: none. Nothing pins the step name to ci.yml, so a rename there would leave this text stale. The risk is small and needs no card.
  6. Landing: check-governed-merges reports NOT governed (0 of 7 paths), 29 changed lines, Tier S. The seat readies the PR and arms auto-merge, which enqueues it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

devx: refusal prose still tells CI to set fetch-depth: 0 where ci.yml now fetches history in a step

1 participant