T-ZFM9-the-publish-channel-typechecks-the-snapshot
State: closed/done · Impact: medium · Complexity: small
.github/workflows/publish-lib.yml vendors packages/ts/tsconfig/presets
into every TS snapshot mirror as tsconfig-presets/ and rewrites the
extends specifier with sed. No mirror has ever compiled against the
result — the standalone validation lane runs bun install && bun run build && bun test and optionally bun run smoke, never tsc. The only
check today is a grep -q that the sed matched a string. Add bun run typecheck to the lane so the snapshot’s own compiler config is proven to
work standalone, not just present.
| Location | Role today |
|---|---|
.github/workflows/publish-lib.yml:211-227 | ”Build check (ts)” step: bun install, bun run build, bun test, then bun run smoke if a smoke script exists. No tsc/typecheck step. |
packages/ts/intersect/package.json | scripts has build, test, prepublishOnly — no typecheck. |
packages/ts/agent-call/package.json | scripts has build, typecheck (tsc --noEmit), test, test:live, prepublishOnly. |
packages/ts/command-seam/package.json | scripts has build, test, smoke, prepublishOnly — no typecheck. |
packages/ts/easy-git/package.json | scripts has build, test, smoke, prepublishOnly — no typecheck. |
packages/ts/detect-runners/package.json | scripts has build, test, prepublishOnly — no typecheck. |
packages/ts/waypost/package.json | scripts has build, dev, test, prepublishOnly — no typecheck. |
Proposed
Section titled “Proposed”The “Build check (ts)” step in publish-lib.yml runs bun run typecheck
against the staged snapshot, after bun install and before (or alongside)
bun run build. Every TS library on the channel — all six entries in
publish-libs.json with "lang": "ts" — carries a typecheck script by
the time this step runs, so the step can call it unconditionally rather
than probing for its existence the way the smoke step does. The mirrored
tsconfig-presets/ is now actually exercised by a compile, not just
referenced by a rewritten string.
Approach
Section titled “Approach”- Confirm T-076A-the-script-vocabulary-lands-in-packages-apps-and-sites
has landed a
typecheckscript in all six TS libraries on the publish channel (intersect,agent-call,command-seam,easy-git,detect-runners,waypost).agent-callalready has one; the other five do not today. - In the “Build check (ts)” step of
publish-lib.yml, addbun run typecheckafterbun install, beforebun run buildandbun test. Unlike thesmokestep, do not guard it with an existence probe — every TS library on the channel is expected to have the script, so a missing one should fail the run loudly rather than be skipped. - Rehearse with
gh workflow run publish-lib -f lib=intersect, which runs validation, snapshot assembly, and the standalone build without pushing. Confirm the new step runs and passes.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
.github/workflows/publish-lib.yml | modify | Add a bun run typecheck invocation to the “Build check (ts)” step, run against the staged snapshot. |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
.github/workflows/publish-lib.yml’s “Build check (ts)” step contains abun run typecheckinvocation. - AC-2:
gh workflow run publish-lib -f lib=intersectcompletes with the typecheck step passing (rehearsal only — no push). - AC-3: Removing the
typecheckscript from a staged TS library (e.g. temporarily, locally) makes the “Build check (ts)” step fail, confirming the step is not silently skipped the way thesmokeprobe is.
Out of scope
Section titled “Out of scope”- Adding the
typecheckscript itself to the six TS libraries — that is T-076A-the-script-vocabulary-lands-in-packages-apps-and-sites. - Any change to the Rust validation lane.
cargo testandcargo packageare toolchain built-ins; a mirrored crate’s vocabulary is cargo’s, not this project’s, so it needs no equivalent step. - Vendoring
@sksizer/tsconfigas a real published dependency instead of thetsconfig-presets/copy-and-sed. That is called out inpublish-lib.ymlas future work once the package is published, and is unrelated to this task.
Dependencies
Section titled “Dependencies”- T-076A-the-script-vocabulary-lands-in-packages-apps-and-sites: this task cannot land a working
bun run typecheckstep until 5 of the 6 TS libraries on the channel have atypecheckscript to run.
Depends on
Section titled “Depends on”T-076A-the-script-vocabulary-lands-in-packages-apps-and-sites