Repository navigation
4-hourly full run: red on main (CI) #28849
Description
os-4-hourly-full-run-ci — machine-findable marker for this generated card. ⛔ Do not delete this line: it is how the 4-hourly full run finds this card instead of filing a new one every 4 hours.
4-hourly full run: red on main (CI)
Swept 2026-11-02T00:32:07.615Z · run log · commit 2cba2eb3f1f50ff1678dfa7b2925e37965b6f9c5 · conclusion failure.
CI runs the FULL battery on main every 4 hours (#16467, #25771). A push run on
main tests only the packages the merge touched, and a merge-queue build tests only what the group
contained — so this scheduled run is the only thing that says whether the WHOLE tree is green, and
this card is the only channel that reports it. Nothing is blocked by it.
⛔ The remedy is never to narrow, skip or delete the failing check to make the 4-hourly run green.
Fix what it names and let the next 4-hourly run refresh this card; a card nobody reopens is closed by
the next green run being uneventful, not by editing this one.
What landed since the last green 4-hourly run
Range: d9c4cdc4e5 (run 41344864428, the last green CI schedule run) .. 2cba2eb3f1 — compare
8196881e70feat(runtime): the per-base customizations read names the package behind each field and flow another package contributes (feat(runtime): the per-base customizations read names the package behind each field and flow another package contributes #28749)0aaad18fc0feat(setup): retire Packaged automation's flows half; Packaged actions is its own Setup entry (feat(setup): retire Packaged automation's flows half; Packaged actions is its own Setup entry #28785)899782b58bfix(objectql): a package refused while it registers leaves nothing of itself registered (fix(objectql): a package refused while it registers leaves nothing of itself registered #28790)c064d3a246perf(console): write app navigation at page and dashboard create and delete sites (perf(console): write app navigation at page and dashboard create and delete sites #28783)1617b7fb91fix(lint,metadata-protocol,rest,runtime): refuse a sum/avg roll-up the engine cannot recompute, and answer a landed child write's success (fix(lint,metadata-protocol,rest,runtime): refuse a sum/avg roll-up the engine cannot recompute, and answer a landed child write's success #28781)b9b877ccb0feat(pm): epic seats open a mailbox and show on the fleet roster (feat(pm): epic seats open a mailbox and show on the fleet roster #28751)516119db19docs(pm-dispatch): runbook patrol names the per-seat patrol and dedupes review claims by seat (docs(pm-dispatch): runbook patrol names the per-seat patrol and dedupes review claims by seat #28759)c9a9981daetest(dogfood): pin what the reads serve for a dependent's email template locale the base does not ship (metadata-protocol: measure what the base-named read serves when only a dependent package holds an email-template locale under the base's name (#28746 follow-up) #28779) (test(dogfood): pin what the reads serve for a dependent's email template locale the base does not ship (#28779) #28800)70bf434385fix(metadata-protocol): the sealed-overlay boot report no longer counts a served .custom override (metadata-protocol: the boot's metadata_sealed_overlay_unserved line counts a served .custom flow override and tells the operator to delete it #28771) (fix(metadata-protocol): the sealed-overlay boot report no longer counts a served .custom override (#28771) #28801)70943dd677fix: save_notice follow-ups: name the array triggerType, pin the persisted approval round trip, classify the node in flow lint (fix: save_notice follow-ups: name the array triggerType, pin the persisted approval round trip, classify the node in flow lint #28805)663b7c08eefix(objectql,cloud-connection)!: a field patch reaches the owner's own fields only, at the fold and the install door; the install door refuses it with 422 (fieldPatches: make the fold, the install door and os validate agree on a patch of a field another extension adds, and fix the stale actions guidance list #28733) (fix(objectql,cloud-connection)!: a field patch reaches the owner's own fields only, at the fold and the install door; the install door refuses it with 422 (#28733) #28791)2081a5e58efix(runtime): the customizations read attributes a contributed field and flow by one stamp rule (fix(runtime): the customizations read attributes a contributed field and flow by one stamp rule #28807)c5ac1b61e0fix(service-analytics)!: the draft preview refuses one column asked raw beside its own time bucket, as the live faces do (fix(service-analytics)!: the draft preview refuses one column asked raw beside its own time bucket, as the live faces do #28794)1e019240f9fix(platform-objects): the Setup Users list and the user record highlights stop showing the legacy role scalar (fix(platform-objects): the Setup Users list and the user record highlights stop showing the legacy role scalar #28810)3e05ed1ec2fix(fields): a text field that declares options reads the option label in its record cell (fix(fields): a text field that declares options reads the option label in its record cell #28817)50df124c1afix(spec)!: defineConnector() refuses a top-level key the connector does not declare (fix(spec)!: defineConnector() refuses a top-level key the connector does not declare #28815)2587485175fix(objectql): a refused upgrade leaves the installed version serving (fix(objectql): a refused upgrade leaves the installed version serving #28822)693e1003c9feat(studio): customize a read-only base's flow into its pair, with one ledger switch and Restore package original (feat(studio): customize a read-only base's flow into its pair, with one ledger switch and Restore package original #28824)3cb8553c94docs(spec): postureStampsOrganization docblock names the open stampers (docs(spec): postureStampsOrganization docblock names the open stampers #28823)1caf67220ffix(app-shell): Studio and Setup read an item's layered view at the package that owns it (fix(app-shell): Studio and Setup read an item's layered view at the package that owns it #28825)2a4c0034edfix(metadata-protocol)!: the adopt-orphans door asks the save door's owner judges (another package owns the object; a permission set naming another owner) before the__cjudge (fix(metadata-protocol)!: the adopt-orphans door asks the save door's owner judges (another package owns the object; a permission set naming another owner) before the__cjudge #28808)1920e4801afix(metadata-protocol)!: an email template locale added in a.custompair is listed and sent on the base's address; a dependent's added locale stays under its own package (metadata-protocol: an email-template locale added in a<base>.custompair is read by name but never listed or sent, so a send in that locale renders the base's (#28779 follow-up) #28802) (fix(metadata-protocol)!: an email template locale added in a.custompair is listed and sent on the base's address; a dependent's added locale stays under its own package (#28802) #28828)0c1829a28afeat(metadata-protocol,objectql): an object extension is an authorable item of a writable package, saved, published and exported through the existing doors (metadata-protocol + objectql: an object extension is an authorable item of a writable package — saved and published through the existing doors, registered as 'extend', exported as objectExtensions #28574) (feat(metadata-protocol,objectql): an object extension is an authorable item of a writable package, saved, published and exported through the existing doors (#28574) #28811)839aae58c2docs(ui): platform-admin gate examples read isPlatformAdmin, not the legacy user.role scalar (docs(ui): platform-admin gate examples read isPlatformAdmin, not the legacy user.role scalar #28832)892eb668f6docs(spec): key the fieldPatches example option by a value crm_account.industry stores (docs(spec): key the fieldPatches example option by a value crm_account.industry stores #28827)fa59f78779fix(service-analytics)!: two granularities of one time dimension are refused on every face, not collapsed to the last one (fix(service-analytics)!: two granularities of one time dimension are refused on every face, not collapsed to the last one #28837)a96bf3ce4bfix(objectql): a refused first install leaves nothing of itself, even over a tenant's object (fix(objectql): a refused first install leaves nothing of itself, even over a tenant's object #28839)2cba2eb3f1feat(spec)!: refuse at publish a save_notice that a suspending node reaches (feat(spec)!: refuse at publish a save_notice that a suspending node reaches #28838)
Filed by.github/workflows/scheduled-full-run-card.yml. Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p0 confirmed · deterministic ·
domain:devx· 2026-11-02T00:54Z⛔ Not a claim. The lane claims this round (
execution-duties.md: first read of an open p0, unclaimed ⇒ claim and dispatch in the same round).2cba2eb3, then themainpush runs on00918c88and7f4cbc9d.00918c88is a skills-docs commit. The last dogfood run that executed its shards before midnight was green.packages/qa/dogfood/test/upgrade-harness/fixture-18.0, ref5b14b7f3ad8e):upgrade-18x-harness.dogfood.test.tsstep 3:no such table: sys_activity__r20261019audit-key-material.dogfood.test.tsstep 2: expected 8, got 4audit-mail-bodies.dogfood.test.tsstep 2: expected 4, got 2identity-mail-read-gate.dogfood.test.ts, the sys_activity mirror: expected > 0, got 0sys_activityis a rotation object,storage: { strategy: 'rotation', shards: 14, unit: 'day' }(packages/plugins/plugin-audit/src/objects/sys-activity.object.ts).ensureRotation(packages/drivers/driver-sql/src/sql-driver-schema-sync.ts) keeps only shards within the last 14 days ofDate.now()and drops the rest. The fixture's activity shard issys_activity__r20261019. From 2026-11-02 the oldest kept shard is20261020, so the boot drops the fixture's activity rows. The tests then find half their copies, or no table at all.mainpush and every merge group that runs the dogfood shards stays red until this lands. The merge queue has been green only because no group since midnight ran the shards.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Triage: p0 escalated by name · dispatch now · 2026-11-02T01:51Z
⛔ Not a claim.
@marchtian,
domain:devx#2(seat post #20163): this p0 is your lane's, and it is unclaimed a full round after the mailbox bell (#28536). Claim it and dispatch the fix now.execution-duties.md: an open, unclaimed p0 is claimed and dispatched in the same round it is read, and other work pauses for it.mainis red on every push that runs the dogfood shards, and it stays red until the fixture tests stop depending on the wall clock. The root cause and the fix's boundaries are in the comment above.landing-operations.md).Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd
Claim: PM loop round 2
Session:
session_017ihL2gLghEqeDKTbDTC7ZdAccount:
marchtianBranch:
claude/issue-28849-fixture-rotation-clockWorktree:
objectstack-issue-28849Domain:
domain:devxSeat:
domain:devx#2File surface:
packages/qa/dogfood/test/upgrade-harness/**and the dogfood test files that boot the 18.0 upgrade fixture (upgrade-18x-harness,audit-key-material,audit-mail-bodies,identity-mail-read-gate); test-side only. ⛔ No change tosys_activity's retention (plugin-audit) or toensureRotation(driver-sql), and no test skipped or narrowedContainer & model:
M test-fixture fix,mode:subagent,model: default tier,effort: highClause-②: no
Metadata-protocol: none
Responsibility: the fixture's rotation shard keys are absolute dates (
sys_activity__r20261019), so the boot's 14-day retention dropped them once the UTC date reached 2026-11-02; no merge caused itThread-read: 6566499307
Premise: holds
Serial constraints cleared: none (no open PR touches the upgrade harness,
sql-driver-schema-sync.tsorsys-activity.object.tsat claim time)p0 main-red, claimed in the round of its first read per the triage (6566499307). The fix makes the fixture boot independent of the wall clock (a pinned clock for the fixture boot, or shard keys re-dated relative to the run, whichever the fixture's design admits). The dev measures both against the harness first and states the choice.
objectstack-fleet commentedon Nov 2, 2026
domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd
os-dev-report
{ "issue": 28849, "status": "done", "branch": "claude/issue-28849-fixture-rotation-clock", "pr": 28867, "head": "48a5608202", "base": "3e62a22c4f", "premise_still_valid": true, "summary": "Test-side only. readFixtureAsOf (packages/qa/dogfood/test/upgrade-harness/fixture-as-of.ts) re-dates each rotation shard in the fixture dump's SQL text to the day before the run (tables, shard-named indexes and INSERTs together) and maps the manifest's physical names the same way. Every 18.0 and 18.0.0 fixture load goes through it; the 18.0.0 fixture (shard 20261020) would have gone red on 2026-11-03 and is covered too. A pinned clock was rejected: the suites spawn os migrate binaries that run the same rotation on their own clock, faking Date there would move every timestamp they write, and the only time seam (ensureRotation nowMs) is not reachable from a boot without a product change. ensureRotation, sys-activity.object.ts and retention are untouched; no test skipped or narrowed.", "files_changed": [ "packages/qa/dogfood/test/upgrade-harness/fixture-as-of.ts (new)", "packages/qa/dogfood/test/upgrade-harness-fixture-as-of.test.ts (new)", "packages/qa/dogfood/test/upgrade-18x-harness.dogfood.test.ts", "packages/qa/dogfood/test/audit-key-material.dogfood.test.ts", "packages/qa/dogfood/test/audit-mail-bodies.dogfood.test.ts", "packages/qa/dogfood/test/identity-mail-read-gate.dogfood.test.ts", "packages/qa/dogfood/test/upgrade-18x-index-equivalence.dogfood.test.ts", "scripts/cross-package-test-inputs.mjs", "turbo.json" ], "repro": "base 3e62a22c4f on 2026-11-02, the five fixture-booting dogfood files: Test Files 4 failed | 1 passed (5), Tests 4 failed | 55 passed (59), the four failures exactly as triaged. Same base with the clock +1 day in every process (local preload, not committed): the 18.0.0 leg adds no such table: sys_activity__r20261020 (tomorrow's red).", "after": "head 48a5608202: the five files plus the new unit test, Test Files 6 passed (6), Tests 81 passed (81). Clock +1, +30 and +180 days in every process: Test Files 5 passed (5), Tests 59 passed (59) each. New unit test: real SqlDriver#rotateShards with sys_activity's declaration at offsets -20..+400 days, 22 passed, including the control where the fixture read as written loses its shard at day 14.", "gates": "pnpm --filter @objectstack/dogfood typecheck exit 0; eslint on touched files exit 0. dispatch-gates --commands: 69 families, 68 exit 0, check:dual-build-cjs-loads exit 3 (needs the whole tree's dist) = NOT MEASURED, left to CI. --ran: 68 run, 1 NOT-MEASURED, exit 0.", "changeset": "none: @objectstack/dogfood is private; turbo.json and scripts/ are repo config. skip-changeset label set at pr_create.", "deviations": [ "The dev worked local-only (no WIP push) because this session's GitHub writes were held until 田騏 allowed them at 02:03Z; the seat pushed and opened the PR.", "Scope addition: fixture-18.0.0 goes through the same loader (same defect, red from 2026-11-03).", "Scope addition: turbo.json and scripts/cross-package-test-inputs.mjs each gain one dogfood input line, required by check:cross-package-test-inputs for the new test's import of sys-activity.object.ts. Neither is a governed surface." ], "mcp_calls": "0", "api_writes": "dev 0; the seat made the pr_create and this comment", "out_of_scope_findings": [ "noted, not filed: fixture-18.0.0-next.5 carries no rotation shard, so cli-prerelease-fixture.ts still loads it directly; a regenerated fixture with a sys_activity shard must switch to readFixtureAsOf." ] }objectstack-fleet commentedon Nov 2, 2026
domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd
Landed · 2026-11-02T02:57Z · PR #28867 merged as
0518fd7afe(reviewed head48a5608202, seat record ACCEPT 6567624636). The 18.0 and 18.0.0 upgrade fixtures now load with theirsys_activityrotation shards re-dated to the day before the run, so a boot's 14-day retention no longer drops them. Production retention andensureRotationare unchanged. The dogfood shards skip on PRs, so the seat reads the nextmainpush run that executes them. The 4-hourly full run refreshes this card's family on its next green sweep.pm:dispatchedis removed in this stroke.