Conversation
Captures the CI gap surfaced during slice-9 #882 post-merge audit on 2026-04-30: a real TS2322 strict-typecheck error shipped to main because gate.yml runs `dotnet build` for F#/C# but no `tsc --noEmit` for TypeScript scripts under `tools/**`. ESLint with typed-linting catches most issues but not all assignability narrowings. The specific bug fix shipped as PR #887. This row tracks the *missing gate* — adding `lint (tsc tools)` to gate.yml is S-effort follow-up modeled after `lint-shell` / `lint-markdown`. Composes with B-0086 (TS+Bun migration). The script surface under `tools/` is at 32 ported files and growing — without the tsc gate, this class of error will recur silently.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
Adds a new P2 backlog row documenting a missing CI gate: TypeScript strict typechecking (tsc --noEmit) for tools/** TypeScript scripts, motivated by a TS2322 error that reached main due to the current gate.yml not running tsc.
Changes:
- Add
docs/backlog/P2/B-0106-tsc-noemit-gate-job-for-ts-tools-2026-04-30.mdcapturing the CI gap and proposed gate-job scope/acceptance criteria.
| id: B-0106 | ||
| priority: P2 | ||
| status: open | ||
| title: Add `tsc --noEmit` gate job for tools/**.ts so type errors fail CI |
There was a problem hiding this comment.
The glob in the title looks off: tools/**.ts won’t match nested directories the same way tools/**/*.ts does. Since this row is about gating TS scripts under tools/, consider updating the pattern to tools/**/*.ts (or tools/**/*.ts + tools/**/*.tsx if applicable) to avoid ambiguity later.
| tags: [ci-lint, factory-hygiene, ts-bun-migration, mechanical-guard, missing-gate] | ||
| --- | ||
|
|
||
| # `tsc --noEmit` gate job for tools/**.ts |
There was a problem hiding this comment.
Same glob issue in the H1: tools/**.ts is ambiguous/unusual for matching tools/ subdirectories. Suggest tools/**/*.ts to reflect the intended target set for the CI typecheck gate.
| 1. Runs `./tools/setup/install.sh` (three-way-parity, GOVERNANCE §24). | ||
| 2. Runs `bun install --frozen-lockfile` to materialize `node_modules` | ||
| for `typescript@6.0.3` (already in `package.json` devDeps). | ||
| 3. Runs `bun --bun tsc --noEmit -p tsconfig.json`. |
There was a problem hiding this comment.
The repo docs and checklists use bun x tsc --noEmit (and package.json has a typecheck script), but this row calls out bun --bun tsc ..., which doesn’t appear elsewhere in the repo. To reduce confusion when implementing the gate job, consider switching this to the established invocation (bun x tsc --noEmit / bun run typecheck, optionally with -p tsconfig.json if needed).
| 3. Runs `bun --bun tsc --noEmit -p tsconfig.json`. | |
| 3. Runs `bun x tsc --noEmit -p tsconfig.json`. |
Summary
Adds
docs/backlog/P2/B-0106-tsc-noemit-gate-job-for-ts-tools-2026-04-30.md— captures the CI gap surfaced during slice-9 #882 post-merge audit on 2026-04-30: a real TS2322 strict-typecheck error shipped to main becausegate.ymlrunsdotnet buildfor F#/C# but notsc --noEmitfor TypeScript scripts undertools/**.The specific bug fix shipped as #887. This row is the missing gate.
Composes with
Effort
S (small) — ~30 lines of YAML modeled after
lint-shell/lint-markdown. Toolchain (TypeScript 6.0.3 in package.json devDeps + bun via mise) already pinned. No new external action to SHA-pin.Test plan
docs/backlog/P2/B-0106-…mdfollows the per-row schema (frontmatter + body).🤖 Generated with Claude Code