Why
The DAG core gate completed its test phases but failed once during SDK generation because the temporary openapi.json file disappeared before cleanup. An immediate rerun and standalone generated-output check passed with no drift. The one-off failure is not a release regression, but it can make mandatory SDK freshness and DAG gates flaky.
What to build
Make OpenAPI generation and temporary-file ownership race-free. Cleanup should be idempotent only after the lifecycle and ownership are understood; it must not hide an earlier generation failure or permit concurrent runs to consume or delete each other’s temporary input.
Reproduction evidence
- During
bun run test:dag-core, SDK generation printed all generated files and then failed while removing openapi.json because the file no longer existed.
- The full gate rerun passed, standalone
bun run check:generated passed, and the worktree remained clean.
- The failure has only been observed once so far; treat the missing-file race as the hypothesis to prove, not an established root cause.
Acceptance criteria
Blocked by
None - can start immediately.
Why
The DAG core gate completed its test phases but failed once during SDK generation because the temporary
openapi.jsonfile disappeared before cleanup. An immediate rerun and standalone generated-output check passed with no drift. The one-off failure is not a release regression, but it can make mandatory SDK freshness and DAG gates flaky.What to build
Make OpenAPI generation and temporary-file ownership race-free. Cleanup should be idempotent only after the lifecycle and ownership are understood; it must not hide an earlier generation failure or permit concurrent runs to consume or delete each other’s temporary input.
Reproduction evidence
bun run test:dag-core, SDK generation printed all generated files and then failed while removingopenapi.jsonbecause the file no longer existed.bun run check:generatedpassed, and the worktree remained clean.Acceptance criteria
bun run check:generatedandbun run test:dag-corepass with a clean worktree after completion.Blocked by
None - can start immediately.