commit 69043125ad764394a38aabd66ed3e36dbf78b04c
parent 75e9dae007999d929ef08583252b1a3e24703db9
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 28 Sep 2026 12:32:04 -0400
export: a `test` script for the 11 unit files no suite ran, named in the gate list and CONTRIBUTING
`pnpm --filter export test` is `tsx --test "app/**/*.test.ts"`: 11 files,
98 tests, all passing. The implementer gate list now names it and the
homepage's unit script (2 tests), and the editor's that W1 adds;
CONTRIBUTING's "Tests" lists every package's script. FACTS amended in the
two places that said export (and common, editor) had none.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
4 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
@@ -51,11 +51,22 @@ scheme and the shared-data caveat.
## Tests
-Unit tests are plain `node:test` files run through `tsx`:
+Unit tests are plain `node:test` files run through `tsx`. Each package's suite has a
+script:
+
+```bash
+pnpm --filter yt-dlp-transcript-common test # common/ (the globs are in its package.json)
+pnpm --filter editor test # editor/app/**/*.test.ts
+pnpm --filter export test # export/app/**/*.test.ts
+pnpm --filter homepage test # homepage/app/**/*.test.ts
+pnpm --filter yt-dlp-transcript-mcp test # mcp/src/*.test.ts
+pnpm run test:scripts # scripts/*.test.mjs, umtool/report-to-video/*.test.mjs
+```
+
+One file on its own:
```bash
node_modules/.bin/tsx --test common/jobs/autoQueuePolicy.test.ts
-node --test scripts/*.test.mjs
```
Playwright covers the editor UI from `editor/e2e/`. Two ways to run it:
diff --git a/export/package.json b/export/package.json
@@ -16,6 +16,7 @@
"build:hub": "tsx ../common/bin/archilyzer.ts build hub",
"start": "serve out",
"lint": "eslint",
+ "test": "tsx --test \"app/**/*.test.ts\"",
"e2e": "node ../scripts/queue-lock.mjs --ports EXPORT_E2E_PORT:3020 -- playwright test",
"e2e:hub": "node ../scripts/queue-lock.mjs --ports HUB_PORT:3041 -- playwright test --config playwright.hub.config.ts",
"e2e:2origin": "node ../scripts/queue-lock.mjs --ports ORIGIN_B_PORT:4610,HUB_A_PORT:4611 -- playwright test --config playwright.2origin.config.ts",
diff --git a/plans/FACTS.md b/plans/FACTS.md
@@ -88,6 +88,12 @@ script (`tsx --test src/*.test.ts`). `common/package.json` has **no `scripts` ke
neither `editor` nor `export` has a `test` script. ~46 `*.test.ts` files across the repo are
unrunnable as a suite today.
+*(Amended 2026-09-28, release 13 slice W2: no longer true. Every package with unit tests has a
+`test` script — `common` (`pnpm --filter yt-dlp-transcript-common test`), `mcp`, `homepage`,
+`export` (added by W2: `tsx --test "app/**/*.test.ts"`, 11 files / 98 tests) and `editor`
+(added by W1 in the same release). The list is in `CONTRIBUTING.md`, "Tests", and the gate list
+in `plans/tools/implementer-rules.md`. Still no vitest or jest.)*
+
### `subsCache.ts` has no IndexedDB
- `common/components/subsCache.ts` — memory + react-query only.
@@ -7052,6 +7058,9 @@ out. O3's facts are the section just above ("O3 — runner lows"). Anchors are a
- `export/app/**/*.test.ts` — 11 files, 98 tests at `e1ef1923` (3 under `ask/`, 8 under `lib/`) —
are in no suite script: `export/package.json` has no `test` script. Run them with
`export/node_modules/.bin/tsx --test`. All 98 passed at O1c's review (2026-09-28).
+ - *Amended 2026-09-28 (release 13, slice W2):* `export/package.json` now has
+ `"test": "tsx --test \"app/**/*.test.ts\""` — `pnpm --filter export test`, 11 files,
+ 98 tests, all passing — and it is named in the implementer gate list.
- **`normalizeSocialSvg` themes a SINGLE-colour icon only** (`common/lib/settingsSchema.ts:1373`).
The solid colours of the root and every child outside a `<mask>` or `<clipPath>` are counted
together (spellings folded by `paintKey` `:1304`: `#FFF`, `#ffffff`, `white`, `rgb(255,255,255)`
diff --git a/plans/tools/implementer-rules.md b/plans/tools/implementer-rules.md
@@ -73,9 +73,13 @@ the Next.js reference for this version.
- `pnpm -r --no-bail --workspace-concurrency=1 exec tsc --noEmit` — clean.
- `pnpm --filter yt-dlp-transcript-common test` (1738 at release 4; record the new count);
- editor unit `pnpm exec tsx --test "app/**/*.test.ts"` run in `editor/` (72); `pnpm run
- test:scripts` (156 + 1 skip); mcp `pnpm --filter yt-dlp-transcript-mcp test` (219) — check
- `package.json` for the exact script names before running.
+ editor unit `pnpm --filter editor test` (the script lands in release 13; before it, `pnpm exec
+ tsx --test "app/**/*.test.ts"` run in `editor/`; 72 at release 4); `pnpm run test:scripts`
+ (156 + 1 skip); mcp `pnpm --filter yt-dlp-transcript-mcp test` (219); export unit `pnpm
+ --filter export test` (11 files, 98 tests at release 13); homepage unit `pnpm --filter
+ homepage test` (2 at release 13) — check `package.json` for the exact script names before
+ running. The export and homepage unit suites take seconds: run them whenever a slice touches
+ `export/`, `homepage/` or the `common/` code they import.
- `pnpm --filter editor exec next build` and `pnpm --filter export exec next build`.
- The slice's e2e spec list (in the prompt), detached and waited on as above.
- The numbers tool the prompt names, diff-empty (or "none", stated).