Skip to content

Local turbo cache served a DTS-less @objectstack/plugin-auth build in a fresh worktree with OS_SKIP_DTS unset — its own typecheck then reds on a diff that never touched it #11907

Description

@os-warren

Observation from working #11377 (PR #11906) in a fresh per-task worktree; recorded, not diagnosed. Filed unassigned.

Measured (2026-08-25, fresh worktree, pnpm install clean, OS_SKIP_DTS verified unset in the environment)

  1. pnpm exec turbo run typecheck --filter '...@objectstack/driver-sql' --filter '...@objectstack/objectql' (which builds dependencies via ^build) produced a packages/plugins/plugin-auth/dist/ containing index.js / index.mjs / maps but zero .d.ts files. @objectstack/plugin-auth#typecheck then failed its own second program (tsconfig.examples.json): examples/basic-usage.ts(13,28): error TS7016: Could not find a declaration file for module '@objectstack/plugin-auth'.
  2. A direct pnpm --filter @objectstack/plugin-auth build emitted the DTS files fine (DTS dist/index.d.ts 272.91 KB etc.) — the build itself is healthy.
  3. The next turbo run typecheckrestored the DTS-less artifact over the good dist (cache hit on the unchanged hash) and failed identically — so the bad artifact lived in the local turbo cache under the current input hash, and every turbo run re-materialized it.
  4. turbo run build --filter @objectstack/plugin-auth --force replaced the cache entry; all subsequent runs green (48-package closure typecheck, 0 TS errors).

Why it is worth a record

  • OS_SKIP_DTS is declared in turbo.jsonglobalEnv, and it was unset here — so the documented "skip-DTS build hashes differently" defense should have applied, yet a DTS-less artifact sat under the hash of a normal build. Mechanism unestablished: candidates include the tsup DTS worker dying without failing the parent build under memory pressure (the shape CI infra: @objectstack/spec 的 DTS 构建贴着 runner 内存天花板 —— 每个 spec PR 首跑都被 OOM 杀掉一次(--max-old-space-size=12288 on a 16GB runner) #4845 recorded for spec's DTS build at a different scale), or something else entirely.
  • The failure presents exactly as "your change broke plugin-auth" on a diff that never touched it — the AGENTS.md §9 stale-artifact class, but through the cache, so the §9 remedy (pnpm build) does NOT clear it: a plain rebuild is a cache hit that restores the same bad artifact. The working remedy is --force (or clearing the entry).
  • CI is immune (fresh checkout); this only costs local/worktree rounds.

No fix proposed here; recording the signature and the --force remedy so the next agent recognizes it in one step instead of re-diagnosing per gate.


Generated by Claude Code

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions