Skip to content

T-IUES-add-a-determined-typecheck-moon-task-ci-gate-nuxi-typecheck

Status: planning/draft · Impact: high · Complexity: medium

The determined shell/frame packages and products have no typecheck task in moon or CI, so nothing runs vue-tsc over their assembled layer graph. An 8-PR shell-refactor epic (#897–#908) merged to main with zero build/typecheck of its Vue/Nuxt code as a result. Add a moon typecheck task on a canary product plus a path-scoped CI gate, so a shell/frame/experience change can’t merge without nuxi typecheck passing.

LocationRole today
packages/ts/shell/@determined/shell — no moon.yml, no check/typecheck task
packages/ts/app-frame/@sksizer/app-frame — no moon.yml, no check/typecheck task
packages/ts/ui/@determined/ui — no moon.yml, no check/typecheck task
solutions/determined/products/workbench/extends @determined/shell + all 20 experiences; has nuxt (so nuxi is available) but no typecheck script/moon target; not a registered moon project
package.jsonThe repo-root manifest. Per-solution explicit enrollment (T-C9RD convention): solutions/determined/{apps,experiences,products,packages}/* are root Bun workspace members, so workbench installs from the root lockfile
.moon/workspace.ymlproject globs cover apps/* + packages/ts/* + per-solution augmented entries; determined projects are pinned as explicit sources: at solutions/determined/...solutions/determined/products/* (incl. workbench) is NOT among them
.moon/tasks/rust.yml, tauri.yml, ts-lib.yml — ts-lib’s inherited check (bunx tsc --noEmit) covers backend TS libraries only; no inherited Vue/Nuxt typecheck
.github/workflows/determined-rust-ci.ymlthe only determined-scoped CI gate; its paths: filter is solutions/determined/crates/** (+ platform-core, Cargo manifests) — Rust tests/lints only, never the Vue/Nuxt tier
.github/workflows/polish-ci.ymlthe pattern to mirror: a path-scoped (apps/legacy-polish/**) Nuxt nuxi typecheck gate for polish only

workbench (the maximal product — shell → app-frame → ui + all 20 experiences) exposes a moon run workbench:typecheck task that runs nuxi typecheck over the assembled layer graph. A CI workflow runs that task on PRs touching packages/ts/{shell,app-frame,ui}/** or solutions/determined/{experiences,products}/**, blocking merge on failure — mirroring how polish-ci gates polish.

  1. Register the canary product as a moon project (add solutions/determined/products/workbench to .moon/workspace.yml sources, joining the existing per-solution determined entries there, or add its own moon.yml — pick whichever matches the repo’s existing product-registration convention).
  2. Add a typecheck task to workbench’s moon.yml: nuxi typecheck (runFromWorkspaceRoot: false so it runs in the product dir; toolchains: system; dep on install). Canary = workbench for maximal coverage.
  3. Add .github/workflows/determined-ci.yml: pull_request scoped to packages/ts/{shell,app-frame,ui}/** + solutions/determined/experiences/** + solutions/determined/products/** + the workflow file; runs bun install --frozen-lockfile then moon run workbench:typecheck. Mirror polish-ci (concurrency group, bun/node setup) and determined-rust-ci (which path-filters on solutions/determined/crates/**).
  4. Verify: introduce a deliberate type error in packages/ts/shell (or app-frame), confirm moon run workbench:typecheck and the CI job fail; revert.

Note: nuxi typecheck spawns the nuxi/vite worker fleet, which kills the local harness executor (see vue-tsc-kills-host-executor); local runs go through scripts/with-cleanup.sh. CI runs on a fresh runner, so no wrapper needed there.

LocationKindChange
solutions/determined/products/workbench/moon.ymlnewtypecheck task running nuxi typecheck
.moon/workspace.ymlmodifyregister workbench (products) as a moon project source, if not already resolved by a glob
.github/workflows/determined-ci.ymlnewpath-scoped CI gate running moon run workbench:typecheck
  • AC-1: moon run workbench:typecheck runs nuxi typecheck over the shell → app-frame → ui + experiences graph and exits non-zero on a type error in any of those layers.
  • AC-2: a CI workflow runs that typecheck on PRs touching packages/ts/{shell,app-frame,ui}/** or solutions/determined/{experiences,products}/**, and blocks merge on failure.
  • AC-3: a deliberately introduced type error in packages/ts/shell (or app-frame) is caught by the gate, then reverted (demonstrated in the PR).
  • The general per-project-type quality-check system (the “Per-project-type quality-check moon task” backlog item, and B-VW5Z-quality-checks-by-glob-patterns) — this task is the determined-typecheck slice only; folding it into that system is the follow-on.
  • Fixing any pre-existing type errors the gate surfaces on first run — triage separately (finding them is the point).
  • none

Surfaced 2026-07-18 while validating the app-frame pane-shell stack (#897–#908): no moon or CI task typechecks the determined shell/frame, so the epic merged unbuilt. Relates to the “Per-project-type quality-check moon task” backlog item (the broader per-project-type system this is the first slice of).


← Back to Tasks