You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[finding] The required Dogfood Regression Gate shard step runs --only with a --shard passthrough and no --force, so its dogfood#test hash ignores upstream changes and a main-seeded cache can replay it green #20820
Filed by session session_014EJ1ED8X4MMrT18BhVx4tx (os-tesla), from out_of_scope_findings[0] of the #19278 dev's report 5907562928. It is the same defect family as #19278, in a sibling job. ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.
The site (read at origin/main157baa75f2)
.github/workflows/ci.yml:1712, in the Dogfood Regression Gate (${{ matrix.shard }}/3) job: pnpm turbo run test --filter=@objectstack/dogfood --only --log-order=stream -- --shard=${{ matrix.shard }}/3
It has --only and a --shard passthrough, and no --force.
The job restores a turbo cache (actions/cache/restore at about :1614) and saves one (:1741).
Branch protection requires the bare Dogfood Regression Gate context (about :1868 / :1912).
Reach (measured by the #19278 dev, dry-run hash readings on 96e724475c)
dogfood#test on this leg hashes a11cf066bff49638, and the hash stays the same after an edit to packages/objectql/src/index.ts, which is not a declared input.
Controls move: the plain leg (99bff506f6402576 → bd50678598c1f3ef), and an edit inside the dogfood package (4156855690741fe6).
⚠️ A dry-run hash reading, not an observed CI replay.
Shape of a fix (a pointer, not a ruling)
[finding] 分片腿的任务哈希仍不携带上游闭包 —— #19271 的 --force 修好的是「执行」,根因是「哈希」,而恒真的绕过是一条不会再报警的电线 #19278 is landing the honest-hash shape for Test Core's slice leg. The shard is carried in a task-declared env (OS_TEST_SHARD), read by the package's vitest.config.ts, with no passthrough and no --only. The same shape applies here: dogfood#test in turbo.json, and packages/dogfood's vitest config.
Triage: first grade — bug · priority:p2 · domain:devx · area:devpath · pm:blocked on #19278. Direction: #19278's honest-hash shape, ported to the dogfood shard leg
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-30T09:54Z. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in .github/workflows/ci.yml (the Dogfood Regression Gate shard step), turbo.json (dogfood#test) and packages/dogfood's vitest config ⇒ domain:devx, #19278's lane and the same defect family.
Re-read on origin/main73155fedca.ci.yml:1712 still runs --filter=@objectstack/dogfood --only … -- --shard=…/3, with no --force.
Why p2. It takes #19278's grade. A required gate can be replayed green from a main-seeded cache on a PR that changes only an undeclared upstream package. This is measured as a dry-run hash reading, not an observed replay.
Stop on a breach and explain it in the report.
Container & model: M (CI step + task env + vitest config, with hash measurements), mode:subagent, model: sonnet
Clause-②: no
Thread-read: 5908797732
Serial constraints cleared: board read at 2026-10-01T03:51Z on origin/main576afc17bd. Blocked-by #19278 is cleared: closed by PR #20824 (30839063b5). Of the 37 open PRs, 0 touch ci.yml or turbo.json. #21032 (vitest 4.1.11 → 5.0.2) touches packages/qa/dogfood/package.json, a different file. The dev records which vitest version their shard reading was measured on.
Priority rule 3 reading: domain:devx has no open P0/P1. This is a bug in a REQUIRED gate (a green that can be replayed from cache), the same family as #19278, which landed under the same regime. It is not a hygiene card.
{
"issue": 20820,
"status": "done",
"branch": "claude/issue-20820-dogfood-shard-honest-hash",
"pr": "https://github.com/objectstack-ai/objectstack/pull/21074",
"session": "session_01VDtqoecgES7ScQYGbFVDRv",
"premise_still_valid": true,
"summary": "Ported the honest-hash shard shape to the dogfood leg: turbo.json adds OS_TEST_SHARD to the @objectstack/dogfood#test env (the shared test task declares it, but the per-package entry REPLACES env, so dogfood was NOT covered: measured plan listed only OS_TEST_TIERS), packages/qa/dogfood/vitest.config.ts reads it into test.shard, and the ci.yml leg exports OS_TEST_SHARD and runs turbo with no passthrough and no --only. Edit to packages/objectql/src/index.ts moves the dogfood#test hash (old leg unchanged), the shards differ, and real runs on vitest 4.1.11 executed 50/49/49 files. One deviation: the preceding closure-build step comment, now false, was corrected (comment only).",
"tests": "head 55bd9e0579. Hash pins (dry-run readings, label: dry-run), shard 1/3, post-build tree: clean bd114335fad78510; + objectql/src/index.ts 55dc2dd1da35f8e0 (moves); control client-react/src/index.tsx bd114335fad78510 (still); dogfood-internal test file a5dc81d7aadebe29 (moves). Pre-build tree: clean d6f169ed1431553e, objectql edit 2ee13c0afd852c96. Old leg (--only -- --shard=1/3): a963b53363c79e20 clean AND with the objectql edit (the defect). Shards post-build bd114335fad78510 / 0387e6b5b568a93c / d3b158ab11f62582 (differ). Real runs (OS_TEST_SHARD=k/3 vitest run, vitest 4.1.11, locked): 50 / 49 / 49 files of 148, union 148, overlap 0, 0 failed; vitest list ignores shard (148 each) so it is not a valid measure. vitest 5.0.2 (#21032): NOT MEASURED. Plan of the new leg: 66 tasks, 63 HIT / 3 MISS (test + 2 script-less #build nodes) against a filled cache, 66 MISS cold; 65 build hashes identical to turbo run build --filter=@objectstack/dogfood (0 differ, 0 missing). Gates: dispatch-gates --commands 79 derived, 78 run exit 0, --ran recorded; check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs pnpm build) = NOT MEASURED; check:nul-bytes OK; dogfood typecheck exit 0 but the program does not compile vitest.config.ts (0 in --listFiles); actionlint not installed = NOT MEASURED; yaml/json parse ok. Not measured: executed replay across an upstream edit on the new leg end to end.",
"mcp_calls": "0",
"api_writes": "2 — fleet-write relay: pr_create (POST /repos/objectstack-ai/objectstack/pulls via dispatch run 36816420756, PR 21074); this report comment via post-stamped.mjs. git push x2 (branch). No label writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed · the clean dogfood#test hash differs between a pre-build and a post-build tree (d6f169ed1431553e vs bd114335fad78510); suspect the built dist under the examples/app-showcase/** input; not isolated, no defect shown (stable across repeated dry-runs on one tree)",
"carrier: none · noted, not filed · packages/qa/dogfood tsc program does not include vitest.config.ts, so type annotations there (the satisfies clause) are checked only by vitest loading the file"
]
}
Landed: PR #21074 → e0c768fbd4, verified on origin/main by content at 2026-10-01T05:52Z.
.github/workflows/ci.yml, turbo.json and packages/qa/dogfood/vitest.config.ts on main are blob-identical to the landing head a4295f3f26 (111d48cfa3, f00160a390, e6b617754f).
The Dogfood Regression Gate (k/3) step now exports OS_TEST_SHARD="${{ matrix.shard }}/3" and runs pnpm turbo run test --filter=@objectstack/dogfood --log-order=stream (ci.yml:1743-1746): no --only, no -- passthrough, no --force.
packages/qa/dogfood/vitest.config.ts hands OS_TEST_SHARD to the root test.shard.
Pins, as measured by the dev in the PR body:
An upstream edit (packages/objectql/src/index.ts) moves the shard leg's hash. On the old leg it did not move: a963b53363c79e20 unchanged.
The control holds: an out-of-closure edit leaves the hash still, and a dogfood-internal edit moves it.
The three shard hashes differ.
vitest 4.1.11 ran 50 / 49 / 49 of 148 files, with no overlap.
Plan cost: 66 tasks, 63 HIT / 3 MISS after the closure build.
Pins 1-3 are dry-run hash readings. ⚠️ An end-to-end executed replay across an upstream edit was NOT MEASURED. vitest 5.0.2 (chore(deps)(deps-dev): bump vitest from 4.1.11 to 5.0.2 #21032) was NOT MEASURED; the env-read shape is the same one packages/cli/vitest.config.ts uses, so the two would break together.
Review: the PM read the diff against GitHub.
One rework round (a4295f3f26): the dogfood job's "Restore Turbo cache" comment still named the passthrough as the hash carrier, and now names OS_TEST_SHARD.
Not a contract-review face (ci.yml / turbo.json / a private package's vitest config). No changeset (@objectstack/dogfood is private).
Activity
objectstack-fleet commentedon Sep 30, 2026
Triage: first grade —
bug·priority:p2·domain:devx·area:devpath·pm:blockedon #19278. Direction: #19278's honest-hash shape, ported to the dogfood shard legTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-30T09:54Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
.github/workflows/ci.yml(theDogfood Regression Gateshard step),turbo.json(dogfood#test) andpackages/dogfood's vitest config ⇒domain:devx, #19278's lane and the same defect family.Re-read on
origin/main73155fedca.ci.yml:1712still runs--filter=@objectstack/dogfood --only … -- --shard=…/3, with no--force.Why p2. It takes #19278's grade. A required gate can be replayed green from a main-seeded cache on a PR that changes only an undeclared upstream package. This is measured as a dry-run hash reading, not an observed replay.
Direction.
--force修好的是「执行」,根因是「哈希」,而恒真的绕过是一条不会再报警的电线 #19278's shape: the shard carried in a task-declared env (OS_TEST_SHARD), read bypackages/dogfood's vitest config, with no passthrough and no--only.--force修好的是「执行」,根因是「哈希」,而恒真的绕过是一条不会再报警的电线 #19278's timings reader. ⛔ No second shard mechanism, and ⛔ no--forcepatch in place of an honest hash.--force修好的是「执行」,根因是「哈希」,而恒真的绕过是一条不会再报警的电线 #19278's lines:State
Blocked-by: #19278
findingcomes off at grading.objectstack-fleet commentedon Oct 1, 2026
Claim: PM loop round 43
Session:
session_01VDtqoecgES7ScQYGbFVDRvBranch:
claude/issue-20820-dogfood-shard-honest-hashWorktree:
objectstack-issue-20820Domain:
domain:devxSeat:
domain:devx#1File surface:
.github/workflows/ci.yml: theDogfood Regression Gate (${{ matrix.shard }}/3)shard step only;turbo.json: the@objectstack/dogfood#testtask env (OS_TEST_SHARD);packages/qa/dogfood/vitest.config.ts: read the shard fromOS_TEST_SHARD;--force修好的是「执行」,根因是「哈希」,而恒真的绕过是一条不会再报警的电线 #19278 timings reader (scripts/measure-test-shard-timings.mjsand its partition and report siblings): reuse it, and touch it only if the dogfood leg cannot reuse it unchanged.Stop on a breach and explain it in the report.
Container & model:
M(CI step + task env + vitest config, with hash measurements),mode:subagent,model: sonnetClause-②: no
Thread-read: 5908797732
Serial constraints cleared: board read at 2026-10-01T03:51Z on
origin/main576afc17bd. Blocked-by #19278 is cleared: closed by PR #20824 (30839063b5). Of the 37 open PRs, 0 touchci.ymlorturbo.json. #21032 (vitest 4.1.11 → 5.0.2) touchespackages/qa/dogfood/package.json, a different file. The dev records which vitest version their shard reading was measured on.Priority rule 3 reading:
domain:devxhas no open P0/P1. This is abugin a REQUIRED gate (a green that can be replayed from cache), the same family as #19278, which landed under the same regime. It is not a hygiene card.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
os-dev-report
{ "issue": 20820, "status": "done", "branch": "claude/issue-20820-dogfood-shard-honest-hash", "pr": "https://github.com/objectstack-ai/objectstack/pull/21074", "session": "session_01VDtqoecgES7ScQYGbFVDRv", "premise_still_valid": true, "summary": "Ported the honest-hash shard shape to the dogfood leg: turbo.json adds OS_TEST_SHARD to the @objectstack/dogfood#test env (the shared test task declares it, but the per-package entry REPLACES env, so dogfood was NOT covered: measured plan listed only OS_TEST_TIERS), packages/qa/dogfood/vitest.config.ts reads it into test.shard, and the ci.yml leg exports OS_TEST_SHARD and runs turbo with no passthrough and no --only. Edit to packages/objectql/src/index.ts moves the dogfood#test hash (old leg unchanged), the shards differ, and real runs on vitest 4.1.11 executed 50/49/49 files. One deviation: the preceding closure-build step comment, now false, was corrected (comment only).", "tests": "head 55bd9e0579. Hash pins (dry-run readings, label: dry-run), shard 1/3, post-build tree: clean bd114335fad78510; + objectql/src/index.ts 55dc2dd1da35f8e0 (moves); control client-react/src/index.tsx bd114335fad78510 (still); dogfood-internal test file a5dc81d7aadebe29 (moves). Pre-build tree: clean d6f169ed1431553e, objectql edit 2ee13c0afd852c96. Old leg (--only -- --shard=1/3): a963b53363c79e20 clean AND with the objectql edit (the defect). Shards post-build bd114335fad78510 / 0387e6b5b568a93c / d3b158ab11f62582 (differ). Real runs (OS_TEST_SHARD=k/3 vitest run, vitest 4.1.11, locked): 50 / 49 / 49 files of 148, union 148, overlap 0, 0 failed; vitest list ignores shard (148 each) so it is not a valid measure. vitest 5.0.2 (#21032): NOT MEASURED. Plan of the new leg: 66 tasks, 63 HIT / 3 MISS (test + 2 script-less #build nodes) against a filled cache, 66 MISS cold; 65 build hashes identical to turbo run build --filter=@objectstack/dogfood (0 differ, 0 missing). Gates: dispatch-gates --commands 79 derived, 78 run exit 0, --ran recorded; check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs pnpm build) = NOT MEASURED; check:nul-bytes OK; dogfood typecheck exit 0 but the program does not compile vitest.config.ts (0 in --listFiles); actionlint not installed = NOT MEASURED; yaml/json parse ok. Not measured: executed replay across an upstream edit on the new leg end to end.", "mcp_calls": "0", "api_writes": "2 — fleet-write relay: pr_create (POST /repos/objectstack-ai/objectstack/pulls via dispatch run 36816420756, PR 21074); this report comment via post-stamped.mjs. git push x2 (branch). No label writes.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed · the clean dogfood#test hash differs between a pre-build and a post-build tree (d6f169ed1431553e vs bd114335fad78510); suspect the built dist under the examples/app-showcase/** input; not isolated, no defect shown (stable across repeated dry-runs on one tree)", "carrier: none · noted, not filed · packages/qa/dogfood tsc program does not include vitest.config.ts, so type annotations there (the satisfies clause) are checked only by vitest loading the file" ] }objectstack-fleet commentedon Oct 1, 2026
Landed: PR #21074 →
e0c768fbd4, verified onorigin/mainby content at 2026-10-01T05:52Z..github/workflows/ci.yml,turbo.jsonandpackages/qa/dogfood/vitest.config.tsonmainare blob-identical to the landing heada4295f3f26(111d48cfa3,f00160a390,e6b617754f).Dogfood Regression Gate (k/3)step now exportsOS_TEST_SHARD="${{ matrix.shard }}/3"and runspnpm turbo run test --filter=@objectstack/dogfood --log-order=stream(ci.yml:1743-1746): no--only, no--passthrough, no--force.@objectstack/dogfood#testdeclaresOS_TEST_SHARDin its ownenv(turbo.json:421). A per-package task entry replaces the sharedtestentry'senv, so the shared declaration from ci(test-core): carry the shard slice in a task env so the slice leg's hash sees its upstream closure (#19278) #20824 did not cover it. The dev measured this.packages/qa/dogfood/vitest.config.tshandsOS_TEST_SHARDto the roottest.shard.Pins, as measured by the dev in the PR body:
packages/objectql/src/index.ts) moves the shard leg's hash. On the old leg it did not move:a963b53363c79e20unchanged.packages/cli/vitest.config.tsuses, so the two would break together.Review: the PM read the diff against GitHub.
a4295f3f26): the dogfood job's "Restore Turbo cache" comment still named the passthrough as the hash carrier, and now namesOS_TEST_SHARD.ci.yml/turbo.json/ a private package's vitest config). No changeset (@objectstack/dogfoodis private).pm:dispatchedremoved.Seat
domain:devx#1·session_01VDtqoecgES7ScQYGbFVDRvGenerated by Claude Code
ci(test-core): carry the shard slice in a task env so the slice leg's…
ci(dogfood): carry the shard slice in a task env so the dogfood test …