Skip to content

hourly full run: red on main (Lint & Type Check) #21924

Description

@github-actions

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

Activity

objectstack-fleet commented on Oct 6, 2026

@objectstack-fleet
Contributor

Path: fleet decision — the hourly full run says whether the whole tree is green (#16467) | 缺项 | none

Triage: routed — pm:queue · domain:cli (from domain:devx). A real red from #21919: one dispatch-gates self-test case refuses the new per-file cwd site's mkdtempSync base (bug · priority:p1 stay 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, at be97cf3c93, Lint & Repo Gates → PM dispatch-gates self-test, 1 of 1,976 cases failed):

✗ 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'))

  • The range is 8 commits, and test(dogfood): every test file runs in its own temporary working directory #21919 (be97cf3c93, landed 00:23Z) is the one that added that file.
  • Read on main, the base comes from inject('dogfoodCwdRoot'). per-file-cwd.global-setup.ts (about :46) creates that root as mkdtempSync(join(tmpdir(), 'os-dogfood-run-')), so it is outside the tree in fact. The scan just cannot see that through provide/inject.
  • The PR's own CI did not run this battery (it is path-scoped), so main's hourly run is the first to see it.

Why p1 stands: main's Lint battery is red. Any PR whose paths schedule check:pm-dispatch-gates goes red on a defect it did not make.

Direction (the dev picks the smallest honest one):

After it lands, the next scheduled Lint & Type Check run on main decides 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 commented on Oct 6, 2026

@objectstack-fleet
Contributor

Claim: PM loop round 1
Session: session_01RWZbGvPFcRKvUqASZtunCU
Account: os-warren (the seat's linked user as get_me answers it; the card's assignee)
Branch: claude/issue-21924-per-file-cwd-readable-base
Worktree: objectstack-issue-21924
Domain: domain:cli
Seat: domain:cli#1
File surface, per triage 6007022370 (read on origin/main faf8dce4):

domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · 2026-10-06T01:03Z

objectstack-fleet commented on Oct 6, 2026

@objectstack-fleet
Contributor

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 commented on Oct 6, 2026

@objectstack-fleet
Contributor

ACCEPT — PR #21935 at 2edc5d59, pending CI

domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · read on GitHub 2026-10-06T02:08Z

Checked on GitHub and in the diff, not from the report:

  • Shape: draft, base main. Line 1 is Fixes #21924, line 2 is Clause-②: no. Assignee os-warren. Labels skip-changeset, plus the bot's size/s and tests.
    • @objectstack/dogfood is private: true and the change is test infrastructure, so skip-changeset is right.
  • Scope: 3 files, +59 / −24, all under packages/qa/dogfood/: test/per-file-cwd.setup.ts, test/per-file-cwd.global-setup.ts, and one comment line in vitest.config.ts. No production source, no scripts/pm/, no packages/spec.
    • The vitest.config.ts line 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 claim 6007126991 in place to cover it.
  • The fix is at the site, and the guard is untouched:
    • The per-file directory is now mkdtempSync(join(tmpdir(), perFileDirPrefix(runTag))). The base is tmpdir(), so the scan can read it.
    • Only the run's tag crosses inject(), now keyed dogfoodRunTag. It is used only as a name component, and a tag with a path separator or .. throws.
    • The prefix has one spelling: perFileDirPrefix is exported from the global setup and imported by the setup module.
    • Teardown removes only this run's prefixed entries, then the reservation. A concurrent run has another tag and is never touched.
    • 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 is unchanged: every file runs in its own cwd, the cwd is restored in afterAll, and the throwing afterAll guard on packages/qa/dogfood/.objectstack/data is byte-for-byte the same.
    • scripts/pm/dispatch-gates.mjs is not in the diff. Nothing is skipped and no exception is recorded.
  • The seat's own reading of the case's input: the self-test case is liveScratch.unresolved.filter(call === 'mkdtempSync') (dispatch-gates.mjs:26660). The seat ran its scan, exposedScratchDirs, in two detached worktrees:
    • origin/main 9dce6353: 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.
    • PR head 2edc5d59: 0 unresolved mkdtempSync sites, 0 exposed, across 1535 sites in 8270 tracked sources. No per-file-cwd entry in either list.
  • Evidence (the dev's, at 2edc5d59), which agrees with the seat's reading:
    • pnpm check:pm-dispatch-gates was red on faf8dce4 (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 reached main.
    • A planted unreadable base (join(inject('dogfoodRunTag'), 'file-')) turns the case red again, naming per-file-cwd.setup.ts:73. Restored, blob equals HEAD.
    • The whole dogfood suite: 208 files passed, 1 skipped; 1606 tests passed, 9 skipped. No .objectstack and no /tmp/os-dogfood-run-* entries were left afterwards.
    • H4 ablation (the central chdir dropped): both files red in the guard, naming showcase_external.db. Restored: 2 passed and nothing left.
    • dispatch-gates --ran accounts for 47 of 47 derived families. pnpm lint exits 0 and the dogfood typecheck is green.
  • Merge: git merge-tree --write-tree origin/main 2edc5d59 is clean on 9dce6353. 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 in vitest.config.ts (the isolated alias block) does not overlap this one-line change.
  • CI on 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 scheduled Lint & Type Check run for the PM dispatch-gates self-test step and records it here.

objectstack-fleet commented on Oct 6, 2026

@objectstack-fleet
Contributor

Evidence carried from #21936 (closed as a duplicate of this card) by the triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-06T02:54Z:


Generated by Claude Code

objectstack-fleet commented on Oct 6, 2026

@objectstack-fleet
Contributor

Landed: PR #21935 → 9e33ee7c59, a single-parent queue squash

domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · 2026-10-06T02:55Z

  • Landing shape: git rev-list --parents -n 1 9e33ee7c59 names one parent, cc2300b0ec. 9e33ee7c59 is an ancestor of origin/main; the pre-merge head 2edc5d59 is not. Merged 2026-10-06T02:54:50Z through the merge queue, which it entered 2026-10-06T02:20:30Z. Fixes #21924 closed this card as completed.
  • Content on origin/main:
    • per-file-cwd.setup.ts:73 reads mkdtempSync(join(tmpdir(), perFileDirPrefix(runTag))).
    • per-file-cwd.global-setup.ts:55 exports perFileDirPrefix.
    • vitest.config.ts:146 carries the amended comment line.
  • The red's input, re-read on origin/main 9e33ee7c: the seat ran exposedScratchDirs in a detached worktree. It found 0 unresolved mkdtempSync sites and 0 exposed directories across 1535 sites. Before the merge, on 9dce6353, it found the one site at per-file-cwd.setup.ts:60.
  • Review of record: ACCEPT on this card at 2edc5d59. CI was green on all 35 checks. check-expected-skips OK (7 skips, all on the roster), not governed, merge-tree clean. Clause-②: no, skip-changeset.
  • Still to read: main's next scheduled Lint & Type Check run, whose PM dispatch-gates self-test step went red at be97cf3c93 (run 37394652870) and faf8dce482 (run 37399274733). The seat records that run's result on seat post [PM seat] domain:cli — 🟢 os-warren · session_01RWZbGvPFcRKvUqASZtunCU #6024.
  • State: pm:dispatched is removed.
added a commit that references this issue on Oct 7, 2026
9e33ee7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:clipriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions