T-2CXH-scope-release-roster-off-moon-app-vitest
Status: closed/done · Impact: medium · Complexity: small
The SDLC release roster runs a bare, whole-repo bun test. When a moon-managed
app carrying a vitest suite lands in the monorepo, bun test collects those
vitest files and fails — they need the vitest/Nuxt runtime, and their deps are
not installed for the bun run. Polish (added via the moon-v2 migration) broke
the roster this way and blocked the v0.3.1 release. Scope bun test off
moon-managed suites and gate those suites through their own runner so coverage
is not lost.
| Location | Role today |
|---|---|
sdlc.yaml | quality_checks runs a bare bun test over the whole repo; it collects apps/legacy-polish/src-nuxt/tests/*.test.ts and dies with Cannot find package 'pinia'. |
apps/legacy-polish/src-nuxt/tests/ | Four vitest+Nuxt tests (import from vitest, use ~/stores/* aliases). Meant to run under vitest via moon (polish:test), not bun. |
package.json | Root workspaces excludes apps/legacy-polish, so bun install never installs Polish’s deps (pinia and the rest). |
.github/workflows/release.yml | Runs the roster on a v* tag push; the roster failure aborts the release before the Publish step. |
Proposed
Section titled “Proposed”The roster’s bun test no longer collects moon-managed app suites and passes on
the bun-native corpus. Polish’s vitest suite runs in the gate through its own
runner (moon/vitest) with its deps resolvable, so it is genuinely exercised. A
new moon-managed app with a vitest suite does not reintroduce the break.
Approach
Section titled “Approach”- Unblock (shipped separately): exclude Polish from the roster’s
bun testwith--path-ignore-patterns='**/apps/determined/apps/polish/**'. A release dry-run goes green. This is the immediate fix that gets v0.3.1 out. - Make Polish’s deps resolvable — add
apps/legacy-polish/*to rootworkspaces(or wire moon to install them) sopiniaand peers install. - Add a
moon run polish:test(vitest) verb to the roster so Polish is gated by the correct runner, not merely skipped. - Generalize: pick one rule for moon-managed apps versus the bun-test sweep — a
shared ignore pattern (root
bunfig.toml) or a documented convention — so the next app added does not re-break the roster.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
sdlc.yaml | modify | Scope bun test off moon apps; add the vitest/moon test verb. |
package.json | modify | Add apps/legacy-polish/* to workspaces (or equivalent install wiring). |
bunfig.toml | new | Optional root-level test ignore so every bun test skips moon apps, not just the roster. |
apps/legacy-polish/ | modify | Wire the polish:test moon task / vitest config if not already runnable in CI. |
Status — partially met (roster-scope done; hardening residual open)
Section titled “Status — partially met (roster-scope done; hardening residual open)”The release-blocking roster-scope is resolved: #745 landed the interim
--path-ignore-patterns='**/apps/determined/apps/polish/**' exclusion, then #751 scoped the
roster’s bun test to apps/sdlc (the current sdlc.yaml line), so the release
roster no longer collects Polish’s vitest suite and the release is unblocked
(AC-1). The remaining ACs are follow-up hardening, still open:
- AC-2 — no root-level
bunfig.toml; a barebun testat the repo root would still collectapps/legacy-polish/**. - AC-3 — Polish’s vitest suite is excluded, not gated through its own runner.
- AC-4 — no shared ignore pattern / documented rule for the next moon app.
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: A release dry-run on
mainpasses the quality roster with Polish present — noCannot find package 'pinia'. (#745 → #751) - AC-2: A bare
bun testat the repo root does not collectapps/legacy-polish/**test files. - AC-3: Polish’s vitest suite runs and passes via its own runner (e.g.
moon run polish:test) as part of the gate. - AC-4: Adding a new moon-managed app with a vitest suite does not break the release roster (a shared ignore pattern or a documented rule prevents it).
Out of scope
Section titled “Out of scope”- The markdown-contract bundling fix (shipped in #738) — unrelated to this.
- Migrating Polish off vitest — it stays a vitest/Nuxt app.
Dependencies
Section titled “Dependencies”- none. The step-1 exclusion unblocks the release on its own; steps 2–4 harden it.
Discovery context
Section titled “Discovery context”Surfaced while cutting v0.3.1 (the markdown-contract packaging fix). The moon-v2
migration (#739, #742, #743) brought Polish into the monorepo as a vitest app.
Release dry-runs 29299776278 and 29301707348 both failed at the quality
roster on the Polish vitest sweep.