test: run default regressions from source and keep dist smoke

This commit is contained in:
2026-02-21 02:20:48 -08:00
parent c8c7f46a16
commit 5805d774ca
7 changed files with 89 additions and 19 deletions

View File

@@ -42,11 +42,14 @@ jobs:
# Keep explicit typecheck for fast fail before full build/bundle. # Keep explicit typecheck for fast fail before full build/bundle.
run: bun run tsc --noEmit run: bun run tsc --noEmit
- name: Test suite (source)
run: bun run test:fast
- name: Build (bundle) - name: Build (bundle)
run: bun run build run: bun run build
- name: Test suite - name: Dist smoke suite
run: bun run test:fast run: bun run test:smoke:dist
- name: Build docs - name: Build docs
run: bun run docs:build run: bun run docs:build

View File

@@ -44,10 +44,14 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: bun install --frozen-lockfile run: bun install --frozen-lockfile
- name: Build + test - name: Test suite (source)
run: | run: bun run test:fast
bun run build
bun run test:fast - name: Build (bundle)
run: bun run build
- name: Dist smoke suite
run: bun run test:smoke:dist
build-linux: build-linux:
needs: [quality-gate] needs: [quality-gate]

View File

@@ -61,21 +61,22 @@ electron . --background # tray/background mode, minimal de
## Testing ## Testing
```bash ```bash
bun run test:config # Config schema and validation tests (build + run) bun run test:config # Source-level config schema/validation tests
bun run test:core # Core service tests (~67 tests) (build + run) bun run test:core # Source-level core regression tests (default lane)
bun run test:subtitle # Subtitle pipeline tests (build + run) bun run test:subtitle # Subtitle pipeline tests (build + run)
bun run test:fast # Source-level config + core lane (no build prerequisite)
``` ```
All legacy test commands build first, then run via Node's built-in test runner (`node --test`). Dist-level tests are now an explicit smoke lane used to validate compiled/runtime assumptions.
For faster iteration while editing test code: Smoke and optional deep dist commands:
```bash ```bash
bun run build # one-time compile bun run build # compile dist artifacts
bun run test:config:dist # no rebuild bun run test:smoke:dist # explicit smoke scope for compiled runtime
bun run test:core:dist # no rebuild bun run test:config:dist # optional full dist config suite
bun run test:subtitle:dist # no rebuild bun run test:core:dist # optional full dist core suite
bun run test:fast # run all tests without rebuild (assumes build is already current) bun run test:subtitle:dist # subtitle dist lane (currently placeholder)
``` ```
## Config Generation ## Config Generation
@@ -117,6 +118,7 @@ Run `make help` for a full list of targets. Key ones:
- To add or change a config option, update `src/config/definitions.ts` first. Defaults, runtime-option metadata, and generated `config.example.jsonc` are derived from this centralized source. - To add or change a config option, update `src/config/definitions.ts` first. Defaults, runtime-option metadata, and generated `config.example.jsonc` are derived from this centralized source.
- Overlay window/visibility state is owned by `src/core/services/overlay-manager.ts`. - Overlay window/visibility state is owned by `src/core/services/overlay-manager.ts`.
- Main process composition is split across `src/main/` modules plus focused runtime composers under `src/main/runtime/composers/*` (for example AniList tracking and MPV runtime assembly clusters). - Main process composition is split across `src/main/` modules plus focused runtime composers under `src/main/runtime/composers/*` (for example AniList tracking and MPV runtime assembly clusters).
- Runtime composer contracts should use shared helpers in `src/main/runtime/composers/contracts.ts` (`ComposerInputs`, `ComposerOutputs`, and `BuiltMainDeps`) so required deps remain compile-time enforced.
- Runtime domain imports for `src/main.ts` should route through `src/main/runtime/domains/*`; shared domain access point is `src/main/runtime/registry.ts`. - Runtime domain imports for `src/main.ts` should route through `src/main/runtime/domains/*`; shared domain access point is `src/main/runtime/registry.ts`.
- Linux packaged desktop launches pass `--background` using electron-builder `build.linux.executableArgs` in `package.json`. - Linux packaged desktop launches pass `--background` using electron-builder `build.linux.executableArgs` in `package.json`.
- MPV service has been split into transport, protocol, state, and properties layers in `src/core/services/`. - MPV service has been split into transport, protocol, state, and properties layers in `src/core/services/`.

View File

@@ -33,5 +33,8 @@ Read first. Keep concise.
| `opencode-task-94-20260221T033647Z-7ou2` | `opencode-task-94` | `Finish TASK-94 thin composition root refactor and close acceptance criteria` | `done` | `docs/subagents/agents/opencode-task-94-20260221T033647Z-7ou2.md` | `2026-02-21T04:12:45Z` | | `opencode-task-94-20260221T033647Z-7ou2` | `opencode-task-94` | `Finish TASK-94 thin composition root refactor and close acceptance criteria` | `done` | `docs/subagents/agents/opencode-task-94-20260221T033647Z-7ou2.md` | `2026-02-21T04:12:45Z` |
| `codex-task71-round2-20260221T043541Z-k9t3` | `codex-task71-round2` | `Execute TASK-71 round 2 split of main.ts into domain runtime modules` | `done` | `docs/subagents/agents/codex-task71-round2-20260221T043541Z-k9t3.md` | `2026-02-21T04:57:00Z` | | `codex-task71-round2-20260221T043541Z-k9t3` | `codex-task71-round2` | `Execute TASK-71 round 2 split of main.ts into domain runtime modules` | `done` | `docs/subagents/agents/codex-task71-round2-20260221T043541Z-k9t3.md` | `2026-02-21T04:57:00Z` |
| `codex-task85-20260221T051308Z-164g` | `codex-task85-exec` | `Execute TASK-85 remaining AC/DoD with writing-plans and executing-plans flow` | `done` | `docs/subagents/agents/codex-task85-20260221T051308Z-164g.md` | `2026-02-21T05:45:50Z` | | `codex-task85-20260221T051308Z-164g` | `codex-task85-exec` | `Execute TASK-85 remaining AC/DoD with writing-plans and executing-plans flow` | `done` | `docs/subagents/agents/codex-task85-20260221T051308Z-164g.md` | `2026-02-21T05:45:50Z` |
| `codex-review-refactor-20260221T062353Z-p6k2` | `codex-review-refactor` | `Perform code review for current refactor changes and report actionable findings` | `done` | `docs/subagents/agents/codex-review-refactor-20260221T062353Z-p6k2.md` | `2026-02-21T06:25:27Z` | | `codex-review-refactor-20260221T062353Z-p6k2` | `codex-review-refactor` | `Perform code review for current refactor changes and report actionable findings` | `done` | `docs/subagents/agents/codex-review-refactor-20260221T062353Z-p6k2.md` | `2026-02-21T07:16:33Z` |
| `opencode-task93-sync-20260221T070842Z-71c6` | `opencode-task93-sync` | `Synchronize TASK-85 closure tracking and child-task status in Backlog` | `done` | `docs/subagents/agents/opencode-task93-sync-20260221T070842Z-71c6.md` | `2026-02-21T07:11:58Z` | | `opencode-task93-sync-20260221T070842Z-71c6` | `opencode-task93-sync` | `Synchronize TASK-85 closure tracking and child-task status in Backlog` | `done` | `docs/subagents/agents/opencode-task93-sync-20260221T070842Z-71c6.md` | `2026-02-21T07:11:58Z` |
| `opencode-task97-runtime-composer-20260221T094150Z-r8k3` | `opencode-task97-runtime-composer` | `Execute TASK-97 normalize runtime composer contracts end-to-end without commit` | `done` | `docs/subagents/agents/opencode-task97-runtime-composer-20260221T094150Z-r8k3.md` | `2026-02-21T10:06:59Z` |
| `opencode-task96-config-resolve-20260221T094119Z-mbfo` | `opencode-task96-config-resolve` | `Execute TASK-96 split config resolve into domain modules with plan-first workflow` | `planning` | `docs/subagents/agents/opencode-task96-config-resolve-20260221T094119Z-mbfo.md` | `2026-02-21T09:41:19Z` |
| `opencode-task98-source-tests-20260221T094524Z-kzvd` | `opencode-task98-source-tests` | `Execute TASK-98 shift core tests to source level and trim dist coupling without commit` | `blocked` | `docs/subagents/agents/opencode-task98-source-tests-20260221T094524Z-kzvd.md` | `2026-02-21T09:56:47Z` |

View File

@@ -0,0 +1,48 @@
# Agent Session: opencode-task98-source-tests-20260221T094524Z-kzvd
- alias: `opencode-task98-source-tests`
- mission: `Execute TASK-98 shift core tests to source level and trim dist coupling without commit`
- status: `blocked`
- started_utc: `2026-02-21T09:45:24Z`
- backlog_task: `TASK-98`
## Intent
- Load TASK-98 context from Backlog MCP.
- Build execution plan via `writing-plans` skill.
- Execute with `executing-plans` skill.
- Use parallel subagents where slices are independent.
## Planned Files
- `src/**/*.test.ts`
- `scripts/**/*.mjs`
- `package.json`
- `docs/**/*.md`
## Files Touched
- `package.json`
- `.github/workflows/ci.yml`
- `.github/workflows/release.yml`
- `docs/development.md`
- `docs/plans/2026-02-21-task-98-source-tests-dist-smoke-split.md`
- `docs/subagents/INDEX.md`
- `docs/subagents/collaboration.md`
## Assumptions
- Backlog task exists and is actionable.
- No commit requested.
- Existing TASK-96/TASK-97 in-flight workspace changes may affect `bun run build` verification.
## Next Step
- Unblock `bun run build` from unrelated in-flight composer/type errors, then rerun CI-equivalent gate and close TASK-98 DoD #2.
## Heartbeat Log
- `2026-02-21T09:45:24Z` session start; subagent + backlog context loading.
- `2026-02-21T09:51:00Z` plan written to `docs/plans/2026-02-21-task-98-source-tests-dist-smoke-split.md` and recorded in Backlog.
- `2026-02-21T09:55:00Z` migrated default scripts to source lane; added explicit `test:smoke:dist`; rewired CI/release quality gate.
- `2026-02-21T09:56:47Z` verification: source lane PASS; dist smoke PASS; `bun run build` blocked by unrelated pre-existing TS errors in `src/main.ts` and `src/main/runtime/composers/mpv-runtime-composer.test.ts`.

View File

@@ -35,3 +35,8 @@ Shared notes. Append-only.
- [2026-02-21T05:45:50Z] [codex-task85-20260221T051308Z-164g|codex-task85-exec] completed TASK-85 pass: enforced launcher generated-artifact workflow across verifier + CI/release + docs, ran full build/test/guardrails, and finalized TASK-85 status to Done in Backlog MCP. - [2026-02-21T05:45:50Z] [codex-task85-20260221T051308Z-164g|codex-task85-exec] completed TASK-85 pass: enforced launcher generated-artifact workflow across verifier + CI/release + docs, ran full build/test/guardrails, and finalized TASK-85 status to Done in Backlog MCP.
- [2026-02-21T07:08:42Z] [opencode-task93-sync-20260221T070842Z-71c6|opencode-task93-sync] starting TASK-93 backlog synchronization pass: align TASK-85 closure tracking, AC/DoD mapping, and child-task ownership; backlog-only edits expected. - [2026-02-21T07:08:42Z] [opencode-task93-sync-20260221T070842Z-71c6|opencode-task93-sync] starting TASK-93 backlog synchronization pass: align TASK-85 closure tracking, AC/DoD mapping, and child-task ownership; backlog-only edits expected.
- [2026-02-21T07:11:58Z] [opencode-task93-sync-20260221T070842Z-71c6|opencode-task93-sync] completed TASK-93: updated TASK-85 description/notes with explicit AC/DoD ownership + remaining-scope order; finalized TASK-93 AC/DoD and status Done. - [2026-02-21T07:11:58Z] [opencode-task93-sync-20260221T070842Z-71c6|opencode-task93-sync] completed TASK-93: updated TASK-85 description/notes with explicit AC/DoD ownership + remaining-scope order; finalized TASK-93 AC/DoD and status Done.
- [2026-02-21T09:42:20Z] [opencode-task97-runtime-composer-20260221T094150Z-r8k3|opencode-task97-runtime-composer] starting TASK-97 execution: loading backlog context, writing plan via writing-plans, executing via executing-plans, no commit.
- [2026-02-21T10:06:59Z] [opencode-task97-runtime-composer-20260221T094150Z-r8k3|opencode-task97-runtime-composer] completed TASK-97: normalized shared composer contracts across runtime composers, added compile-time contract assertions, updated docs conventions, ran build + fan-in + core-dist gates, and finalized Backlog task as Done.
- [2026-02-21T09:41:19Z] [opencode-task96-config-resolve-20260221T094119Z-mbfo|opencode-task96-config-resolve] starting TASK-96 via Backlog MCP + writing-plans/executing-plans workflow; scope expected around `src/config/resolve.ts`, new config-resolve domain modules, seam tests, and budget checks.
- [2026-02-21T09:45:24Z] [opencode-task98-source-tests-20260221T094524Z-kzvd|opencode-task98-source-tests] starting TASK-98 via Backlog MCP + writing-plans/executing-plans workflow; targeting source-level test entrypoints and dist-coupling cleanup, no commit.
- [2026-02-21T09:56:47Z] [opencode-task98-source-tests-20260221T094524Z-kzvd|opencode-task98-source-tests] TASK-98 implementation pass complete: source test lane (`test:fast`) moved to `bun test` source entrypoints, explicit `test:smoke:dist` added, CI/release updated, docs+timing evidence recorded; blocked final DoD on unrelated pre-existing `bun run build` TS errors from in-flight TASK-96/97 files.

View File

@@ -20,14 +20,19 @@
"check:file-budgets:strict": "bun run scripts/check-file-budgets.ts --strict", "check:file-budgets:strict": "bun run scripts/check-file-budgets.ts --strict",
"check:main-fanin": "bun run scripts/check-main-runtime-fanin.ts", "check:main-fanin": "bun run scripts/check-main-runtime-fanin.ts",
"check:main-fanin:strict": "bun run scripts/check-main-runtime-fanin.ts --strict", "check:main-fanin:strict": "bun run scripts/check-main-runtime-fanin.ts --strict",
"test:config:src": "bun test src/config/config.test.ts src/config/path-resolution.test.ts",
"test:config:dist": "node --test dist/config/config.test.js dist/config/path-resolution.test.js", "test:config:dist": "node --test dist/config/config.test.js dist/config/path-resolution.test.js",
"test:config:smoke:dist": "node --test dist/config/path-resolution.test.js",
"test:core:src": "bun test src/cli/args.test.ts src/cli/help.test.ts src/core/services/cli-command.test.ts src/core/services/field-grouping-overlay.test.ts src/core/services/numeric-shortcut-session.test.ts src/core/services/secondary-subtitle.test.ts src/core/services/mpv-render-metrics.test.ts src/core/services/overlay-content-measurement.test.ts src/core/services/mpv-control.test.ts src/core/services/mpv.test.ts src/core/services/runtime-options-ipc.test.ts src/core/services/runtime-config.test.ts src/core/services/config-hot-reload.test.ts src/core/services/tokenizer.test.ts src/core/services/subsync.test.ts src/core/services/overlay-bridge.test.ts src/core/services/overlay-shortcut-handler.test.ts src/core/services/mining.test.ts src/core/services/anki-jimaku.test.ts src/core/services/jellyfin.test.ts src/core/services/jellyfin-remote.test.ts src/core/services/immersion-tracker-service.test.ts src/core/services/app-ready.test.ts src/core/services/startup-bootstrap.test.ts src/core/services/subtitle-processing-controller.test.ts src/core/services/anilist/anilist-update-queue.test.ts src/renderer/error-recovery.test.ts src/subsync/utils.test.ts src/main/anilist-url-guard.test.ts src/window-trackers/x11-tracker.test.ts",
"test:core:dist": "node --test dist/cli/args.test.js dist/cli/help.test.js dist/core/services/cli-command.test.js dist/core/services/ipc.test.js dist/core/services/field-grouping-overlay.test.js dist/core/services/numeric-shortcut-session.test.js dist/core/services/secondary-subtitle.test.js dist/core/services/mpv-render-metrics.test.js dist/core/services/overlay-content-measurement.test.js dist/core/services/mpv-control.test.js dist/core/services/mpv.test.js dist/core/services/runtime-options-ipc.test.js dist/core/services/runtime-config.test.js dist/core/services/config-hot-reload.test.js dist/core/services/tokenizer.test.js dist/core/services/subsync.test.js dist/core/services/overlay-bridge.test.js dist/core/services/overlay-manager.test.js dist/core/services/overlay-shortcut-handler.test.js dist/core/services/mining.test.js dist/core/services/anki-jimaku.test.js dist/core/services/jellyfin.test.js dist/core/services/jellyfin-remote.test.js dist/core/services/immersion-tracker-service.test.js dist/core/services/app-ready.test.js dist/core/services/startup-bootstrap.test.js dist/core/services/subtitle-processing-controller.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/anilist/anilist-update-queue.test.js dist/renderer/error-recovery.test.js dist/subsync/utils.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/x11-tracker.test.js", "test:core:dist": "node --test dist/cli/args.test.js dist/cli/help.test.js dist/core/services/cli-command.test.js dist/core/services/ipc.test.js dist/core/services/field-grouping-overlay.test.js dist/core/services/numeric-shortcut-session.test.js dist/core/services/secondary-subtitle.test.js dist/core/services/mpv-render-metrics.test.js dist/core/services/overlay-content-measurement.test.js dist/core/services/mpv-control.test.js dist/core/services/mpv.test.js dist/core/services/runtime-options-ipc.test.js dist/core/services/runtime-config.test.js dist/core/services/config-hot-reload.test.js dist/core/services/tokenizer.test.js dist/core/services/subsync.test.js dist/core/services/overlay-bridge.test.js dist/core/services/overlay-manager.test.js dist/core/services/overlay-shortcut-handler.test.js dist/core/services/mining.test.js dist/core/services/anki-jimaku.test.js dist/core/services/jellyfin.test.js dist/core/services/jellyfin-remote.test.js dist/core/services/immersion-tracker-service.test.js dist/core/services/app-ready.test.js dist/core/services/startup-bootstrap.test.js dist/core/services/subtitle-processing-controller.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/anilist/anilist-update-queue.test.js dist/renderer/error-recovery.test.js dist/subsync/utils.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/x11-tracker.test.js",
"test:core:smoke:dist": "node --test dist/cli/help.test.js dist/core/services/runtime-config.test.js dist/core/services/ipc.test.js dist/core/services/overlay-manager.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/startup-bootstrap.test.js dist/renderer/error-recovery.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/x11-tracker.test.js",
"test:smoke:dist": "bun run test:config:smoke:dist && bun run test:core:smoke:dist",
"test:subtitle:dist": "echo \"Subtitle tests are currently not configured\"", "test:subtitle:dist": "echo \"Subtitle tests are currently not configured\"",
"test": "bun run test:config && bun run test:core", "test": "bun run test:config && bun run test:core",
"test:config": "bun run build && bun run test:config:dist", "test:config": "bun run test:config:src",
"test:core": "bun run build && bun run test:core:dist", "test:core": "bun run test:core:src",
"test:subtitle": "bun run build && bun run test:subtitle:dist", "test:subtitle": "bun run build && bun run test:subtitle:dist",
"test:fast": "bun run test:config:dist && bun run test:core:dist", "test:fast": "bun run test:config:src && bun run test:core:src",
"generate:config-example": "bun run build && node dist/generate-config-example.js", "generate:config-example": "bun run build && node dist/generate-config-example.js",
"start": "bun run build && electron . --start", "start": "bun run build && electron . --start",
"dev": "bun run build && electron . --start --dev", "dev": "bun run build && electron . --start --dev",