Repository navigation
hourly full run: red on main (Lint & Type Check) #21924
Description
os-hourly-full-run-lint-type-check — machine-findable marker for this generated card. ⛔ Do not delete this line: it is how the hourly full run finds this card instead of filing a new one every hour.
hourly full run: red on main (Lint & Type Check)
Swept 2026-10-06T02:42:29.128Z · run log · commit 9dce635337c2cc42a4149aa49289ad77d172363d · conclusion failure.
Lint & Type Check runs the FULL battery on main every hour (#16467). 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 hourly 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 hourly run green.
Fix what it names and let the next 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 hourly run
Range: e6dc7a2406 (run 37386981268, the last green Lint & Type Check schedule run) .. 9dce635337 — compare
54fb60ac3ffix(service-automation)!: a flow the kernel:ready cold-boot bind refuses is withdrawn, not left registered and active from the boot pull (fix(service-automation)!: a flow the kernel:ready cold-boot bind refuses is withdrawn, not left registered and active from the boot pull #21897)dcb11c2ec9fix(plugin-auth): revalidate the memoized default organization id when a user is bound (fix(plugin-auth): revalidate the memoized default organization id when a user is bound #21905)833d57c9cffix(plugin-security): the packaged-permission-set lock refusal carries its guidance as userMessage (fix(plugin-security): the packaged-permission-set lock refusal carries its guidance as userMessage #21902)3dbd084209test(spec): the second ui/ file group's test titles state each cited decision in words instead of a tracker number (stage 21) (test(spec): the second ui/ file group's test titles state each cited decision in words instead of a tracker number (stage 21) #21907)8e35895832feat(spec): offer onSuccess and outcomeMessages in Studio's action form; field.picklist joins the own-editor class (feat(spec): offer onSuccess and outcomeMessages in Studio's action form; field.picklist joins the own-editor class #21901)41a1135149fix(plugin-auth)!: implicit account linking requires the standard local-ownership condition; unlink is honoured (fix(plugin-auth)!: implicit account linking requires the standard local-ownership condition; unlink is honoured #21872)f5b8e29e37fix(plugin-sharing): share-link password never leaves the server, is stored with the platform slow hash, and is accepted in a header (fix(plugin-sharing): share-link password never leaves the server, is stored with the platform slow hash, and is accepted in a header #21890)be97cf3c93test(dogfood): every test file runs in its own temporary working directory (test(dogfood): every test file runs in its own temporary working directory #21919)f243a29290fix(objectql): the cascade skips a federated object's injected tenant anchor (fix(objectql): the cascade skips a federated object's injected tenant anchor #21917)faf8dce482fix(runtime,service-datasource): an import over a code-defined datasource is held to its package's ADR-0028 namespace (fix(runtime,service-datasource): an import over a code-defined datasource is held to its package's ADR-0028 namespace #21906)ce577ec4b7docs(sso): the OIDC flow uses /sign-in/social and /callback/:id (docs(sso): the OIDC flow uses /sign-in/social and /callback/:id #21926)7b6c65290etest(rest): pay the state route's objectql load at collection, so the multi-kernel case stops timing out on the hourly run (test(rest): pay the state route's objectql load at collection, so the multi-kernel case stops timing out on the hourly run #21925)9dce635337docs(drivers): a plugin driver's config is its author's to keep free of credentials (docs(drivers): a plugin driver's config is its author's to keep free of credentials #21927)
Filed by.github/workflows/scheduled-full-run-card.yml. Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 6, 2026
Path: fleet decision — the hourly full run says whether the whole tree is green (#16467) | 缺项 | none
Triage: routed —
pm:queue·domain:cli(fromdomain:devx). A real red from #21919: onedispatch-gatesself-test case refuses the new per-file cwd site'smkdtempSyncbase (bug·priority:p1stay as the generator filed them)Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-06T00:57Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
packages/qa/dogfood/test/per-file-cwd.setup.ts(about:49–:60), the site PR #21919 added for #21914 ⇒domain:cli(packages/qa); rationale: the guard is right to refuse a base it cannot read. The new site is what changed, so the fix belongs at the site, not in the guard.What the run shows (run
37394652870, atbe97cf3c93,Lint & Repo Gates→PM dispatch-gates self-test, 1 of 1,976 cases failed):be97cf3c93, landed 00:23Z) is the one that added that file.main, the base comes frominject('dogfoodCwdRoot').per-file-cwd.global-setup.ts(about:46) creates that root asmkdtempSync(join(tmpdir(), 'os-dogfood-run-')), so it is outside the tree in fact. The scan just cannot see that throughprovide/inject.main's hourly run is the first to see it.Why p1 stands:
main's Lint battery is red. Any PR whose paths schedulecheck:pm-dispatch-gatesgoes red on a defect it did not make.Direction (the dev picks the smallest honest one):
tmpdir(), keeping dogfood: five files boot the showcase in the package directory and leave its federated fixture database behind, so a later showcase boot's federated state depends on shard order #21914's isolation and its leftover check.tmpdir()), so the rule still fails on the next unreadable base.inject()base. ⛔ No skip of the case.After it lands, the next scheduled
Lint & Type Checkrun onmaindecides this card. If it is green, the card closes. If it is red on anything else, triage re-reads it.Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
Claim: PM loop round 1
Session:
session_01RWZbGvPFcRKvUqASZtunCUAccount:
os-warren(the seat's linked user asget_meanswers it; the card's assignee)Branch:
claude/issue-21924-per-file-cwd-readable-baseWorktree:
objectstack-issue-21924Domain:
domain:cliSeat:
domain:cli#1File surface, per triage
6007022370(read onorigin/mainfaf8dce4):packages/qa/dogfood/test/per-file-cwd.setup.ts, themkdtempSync(join(runRoot, 'file-'))site (:60). Its base comes frominject('dogfoodCwdRoot'), which thedispatch-gatesself-test case "no mkdtempSync site in this tree takes a base the scan cannot read" (scripts/pm/dispatch-gates.mjs:26662) refuses. Make the base readable at the site, keeping dogfood: five files boot the showcase in the package directory and leave its federated fixture database behind, so a later showcase boot's federated state depends on shard order #21914's isolation and its leftover guard. That includestest/per-file-cwd.global-setup.tsif the run-end removal must follow the new base.packages/qa/dogfood/vitest.config.ts(theglobalSetupentry's comment, "removes the run's temporary root" → "removes the run's per-file directories"), made true by the new run-end removal. No config value moves.scripts/pm/is the skills lane's surface, not this one, so if only that route works, stop and report. ⛔ The rule is not loosened for everyinject()base. ⛔ No skip of the case. ⛔ Nopackages/specpath. (Stop on breach and explain in the report.)Container & model:
M,mode:subagent,model: default (opus).dispatch-gates --tierover the path: no path-derived mandate.Clause-②: no
@objectstack/dogfoodisprivate: true, so the change takesskip-changeset.Thread-read: 6007022370
Serial constraints cleared: read 2026-10-06T01:03Z:
be97cf3c93) added the site, andmain's hourlyLint & Type Checkrun37394652870is red on it.per-file-cwd.setup.tsorper-file-cwd.global-setup.ts. This seat's other card in flight, test(rest):meta-state-route-engine-outage.test.ts's multi-kernel wiring case times out at vitest's 5000 ms default under the hourly full run, and has turnedmain's hourly run red three times in two days #21920, holdspackages/restonly.domain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-06T01:03Zobjectstack-fleet commentedon Oct 6, 2026
os-dev-report
{
"issue": 21924,
"status": "done",
"branch": "claude/issue-21924-per-file-cwd-readable-base",
"pr": "#21935",
"session": "session_01RWZbGvPFcRKvUqASZtunCU (mode:subagent, the parent session id)",
"premise_still_valid": true,
"summary": "Fixed at the SITE route. The rule, the case and scripts/pm/dispatch-gates.mjs are untouched, and nothing is skipped or recorded. per-file-cwd.setup.ts now makes each file directory as mkdtempSync(join(tmpdir(), perFileDirPrefix(runTag))). The base is tmpdir(), which the scan reads as outside the tree. Only the run TAG crosses inject() (key dogfoodCwdRoot renamed to dogfoodRunTag), as a name component, and a tag carrying a separator or .. is refused. per-file-cwd.global-setup.ts still clears a stale .objectstack at start, and still reserves the run as mkdtempSync(join(tmpdir(), os-dogfood-run-)), now providing its basename. At run end it removes every system-temp entry carrying this run prefix (perFileDirPrefix, one spelling shared by both modules), then the reservation. The removal stays run-level for the memoized shared boot, a concurrent run is never touched, and the teardown still judges nothing. vitest.config.ts: one comment line. The isolation and the leftover guard are unchanged. PR 21935 is a draft, assignee os-warren, labels skip-changeset plus the bot-applied size/s and tests. CI was in progress at report time (13 check runs completed, 17 in progress).",
"tests": "(1) Reproduced on origin/main faf8dce, unmodified: pnpm check:pm-dispatch-gates gave ✗ dispatch-gates self-test: 1 of 1976 case(s) failed. The one red case: no mkdtempSync site in this tree takes a base the scan cannot read, UNRESOLVED: packages/qa/dogfood/test/per-file-cwd.setup.ts:60 (a base this scan cannot read: inject(dogfoodCwdRoot)). 821.9s. (2) At head 2edc5d5: ✓ no mkdtempSync site in this tree takes a base the scan cannot read, and ✓ dispatch-gates self-test: 1976 cases pass (780.2s). The shell exit code was not captured (detached run); pnpm printed no ELIFECYCLE and the verdict line is ✓. (3) Planted unreadable base, in a second worktree at 2edc5d5, through scripts/ablation-replace.mjs in wrap mode. The site became process.chdir(mkdtempSync(join(inject(dogfoodRunTag), file-))): anchor 1 to 0, blob dc1d3de3 to 51346b9f. Result: ✗ 1 of 1976 failed, exactly that case, UNRESOLVED: packages/qa/dogfood/test/per-file-cwd.setup.ts:73 (a base this scan cannot read: inject(dogfoodRunTag)). The tool proved the restore: blob equals HEAD dc1d3de3, git diff HEAD is empty, status is clean. The second worktree was removed. (4) #21914 re-proven at 2edc5d5. Whole suite, pnpm --filter @objectstack/dogfood test: Test Files 208 passed, 1 skipped (209); Tests 1606 passed, 9 skipped (1615); VERDICT command-exit 0. No packages/qa/dogfood/.objectstack afterwards, and 0 /tmp/os-dogfood-run-* entries both before and after. H4 ablation via ablation-replace dropped the central chdir (blob dc1d3de3 to ad6684f2). showcase-external-autoconnect and showcase-search gave Test Files 2 failed (2); both failed in the guard, naming .../packages/qa/dogfood/.objectstack/data with Entries: showcase_external.db (plus -shm/-wal on the shared-showcase file). The restore was proven (blob equals HEAD, git diff HEAD empty). The restored leg gave 2 passed, exit 0, nothing left in the package dir, and 0 temp entries after each leg, the red one included. (5) pnpm --filter @objectstack/dogfood typecheck is green, and pnpm lint exits 0.",
"gates": "dispatch-gates --commands over the 3 changed paths derived 47 families. All 47 ran at 2edc5d5, and dispatch-gates --ran reported: 47 derived famil(ies) accounted for, 47 run, 0 NOT-MEASURED (a DERIVED zero). check:dual-build-cjs-loads first exited 3 (packages/apps/studio/dist missing) and exited 0 after building it. Also run: pnpm lint exit 0, and pnpm check:pm-dispatch-gates green (item 2; it is not derived for these paths, which is how the red reached main). The PR-context scripts with PR 21935 context all exited 0: check-closing-target-claim (closes 21924 with a matching Claim branch), check-partof-closing-keyword and check-single-claim-paths.",
"line_budget": "3 files, +59 / -24: per-file-cwd.global-setup.ts +37 -15, per-file-cwd.setup.ts +21 -8, vitest.config.ts +1 -1. No governed path.",
"files_changed": [
"packages/qa/dogfood/test/per-file-cwd.setup.ts",
"packages/qa/dogfood/test/per-file-cwd.global-setup.ts",
"packages/qa/dogfood/vitest.config.ts"
],
"deviations": [
"The planted-base ablation ran in a second, detached worktree at the same head, so it could run alongside the head self-test without either one reading the other mutated tree. It was removed after a proven restore.",
"The exit code of the head pnpm check:pm-dispatch-gates run was not captured by the shell (detached run). Its evidence is the verdict line and the absence of ELIFECYCLE."
],
"mcp_calls": "0",
"api_writes": "3 REST writes plus git push. (a) POST /repos/objectstack-ai/objectstack/pulls: PR 21935, relay run 37402097279, 5615 bytes stored identical. (b) label-write: POST /repos//issues/21935/labels (skip-changeset) and POST /repos//issues/21935/assignees (os-warren), one relay run 37402150375, read back MATCHES. (c) POST /repos//issues/21924/comments: this report. Reads otherwise.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: PR 21935 Acceptance notes · How the red reached main: the PR for #21914 (21919) did not schedule check:pm-dispatch-gates, which is path-scoped, while its live-tree half reads every tracked source. The scoping is the documented merge-group ruling, and the hourly full run caught it as designed · noted, not filed",
"carrier: PR 21935 Acceptance notes · open PR 21930 also edits packages/qa/dogfood/vitest.config.ts, in the alias block near line 295. This PR changes one comment line near line 146, so the hunks do not overlap · noted, not filed"
]
}
objectstack-fleet commentedon Oct 6, 2026
ACCEPT — PR #21935 at
2edc5d59, pending CIdomain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· read on GitHub 2026-10-06T02:08ZChecked on GitHub and in the diff, not from the report:
main. Line 1 isFixes #21924, line 2 isClause-②: no. Assigneeos-warren. Labelsskip-changeset, plus the bot'ssize/sandtests.@objectstack/dogfoodisprivate: trueand the change is test infrastructure, soskip-changesetis right.packages/qa/dogfood/:test/per-file-cwd.setup.ts,test/per-file-cwd.global-setup.ts, and one comment line invitest.config.ts. No production source, noscripts/pm/, nopackages/spec.vitest.config.tsline was outside the claim as first written. It is a comment made true by the new run-end removal, and no config value moves. The seat amended claim6007126991in place to cover it.mkdtempSync(join(tmpdir(), perFileDirPrefix(runTag))). The base istmpdir(), so the scan can read it.inject(), now keyeddogfoodRunTag. It is used only as a name component, and a tag with a path separator or..throws.perFileDirPrefixis exported from the global setup and imported by the setup module.afterAll, and the throwingafterAllguard onpackages/qa/dogfood/.objectstack/datais byte-for-byte the same.scripts/pm/dispatch-gates.mjsis not in the diff. Nothing is skipped and no exception is recorded.liveScratch.unresolved.filter(call === 'mkdtempSync')(dispatch-gates.mjs:26660). The seat ran its scan,exposedScratchDirs, in two detached worktrees:origin/main9dce6353: 1 unresolved site,packages/qa/dogfood/test/per-file-cwd.setup.ts:60,join(runRoot, 'file-'), "a base this scan cannot read: inject('dogfoodCwdRoot')". That is the hourly red, reproduced.2edc5d59: 0 unresolvedmkdtempSyncsites, 0 exposed, across 1535 sites in 8270 tracked sources. Noper-file-cwdentry in either list.2edc5d59), which agrees with the seat's reading:pnpm check:pm-dispatch-gateswas red onfaf8dce4(1 of 1976, the case above) and is green at head (1976 pass), run in full. CI's path scoping may not schedule this battery for this PR, which is how test(dogfood): every test file runs in its own temporary working directory #21919's red reachedmain.join(inject('dogfoodRunTag'), 'file-')) turns the case red again, namingper-file-cwd.setup.ts:73. Restored, blob equals HEAD..objectstackand no/tmp/os-dogfood-run-*entries were left afterwards.chdirdropped): both files red in the guard, namingshowcase_external.db. Restored: 2 passed and nothing left.dispatch-gates --ranaccounts for 47 of 47 derived families.pnpm lintexits 0 and the dogfood typecheck is green.git merge-tree --write-tree origin/main 2edc5d59is clean on9dce6353. Open PR fix(objectql): a field-narrowed search no longer matches through the companion of a field outside the search-field set #21930's hunk invitest.config.ts(theisolatedalias block) does not overlap this one-line change.2edc5d59, read just now: 22 success · 7 skipped · 8 in progress (Lint & Repo Gates, Dogfood Regression Gate 1–3, Test Core 1–3, Temporal Conformance) · 0 red. That is an honest reading, ⛔ not green.After landing: the merge closes this card. The seat then reads
main's next scheduledLint & Type Checkrun for thePM dispatch-gates self-teststep and records it here.objectstack-fleet commentedon Oct 6, 2026
Evidence carried from #21936 (closed as a duplicate of this card) by the triage seat ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-06T02:54Z:main's hourly run. PR fix(objectql): a field-narrowed search no longer matches through the companion of a field outside the search-field set #21930 (security(search): a field-narrowed search still matches through the name field's pinyin companion #21880) failed its requiredLint & Repo Gatesat the samePM dispatch-gates self-testcase. It triggers thepm_dispatch_gatesfamily by touchingpnpm-lock.yamland the dogfood package'spackage.json/vitest.config.ts.domain:engineseat 1 reproduced it locally at that PR's head40618fa8cc(1 of 1,976 cases).Generated by Claude Code
objectstack-fleet commentedon Oct 6, 2026
Landed: PR #21935 →
9e33ee7c59, a single-parent queue squashdomain:cliseat ·session_01RWZbGvPFcRKvUqASZtunCU· 2026-10-06T02:55Zgit rev-list --parents -n 1 9e33ee7c59names one parent,cc2300b0ec.9e33ee7c59is an ancestor oforigin/main; the pre-merge head2edc5d59is not. Merged 2026-10-06T02:54:50Z through the merge queue, which it entered 2026-10-06T02:20:30Z.Fixes #21924closed this card as completed.origin/main:per-file-cwd.setup.ts:73readsmkdtempSync(join(tmpdir(), perFileDirPrefix(runTag))).per-file-cwd.global-setup.ts:55exportsperFileDirPrefix.vitest.config.ts:146carries the amended comment line.origin/main9e33ee7c: the seat ranexposedScratchDirsin a detached worktree. It found 0 unresolvedmkdtempSyncsites and 0 exposed directories across 1535 sites. Before the merge, on9dce6353, it found the one site atper-file-cwd.setup.ts:60.2edc5d59. CI was green on all 35 checks.check-expected-skipsOK (7 skips, all on the roster), not governed, merge-tree clean.Clause-②: no,skip-changeset.main's next scheduledLint & Type Checkrun, whosePM dispatch-gates self-teststep went red atbe97cf3c93(run37394652870) andfaf8dce482(run37399274733). The seat records that run's result on seat post [PM seat] domain:cli — 🟢 os-bill · session_01FLwgbTSmGMrqsXkBDsiwfG · batch 3 · in flight 3 (#23532 · #23491+#23517 · #23501) #6024.pm:dispatchedis removed.test(dogfood): each file's temporary cwd is created from a base the s…