commit c31ee48452e94eb68af9053b39da0a17488c3cde
parent 09bf62e1c8efdccae41348823ec029e62fbe39f1
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Tue, 18 Aug 2026 19:51:16 -0400
umtool: register it as a workspace package and give it a port block
The tool's source was committed; the wiring that makes it runnable from the
repo root was not. A fresh checkout got umtool/ and no way to start it --
pnpm --filter umtool resolved to nothing, and its ports were documented
nowhere.
- pnpm-workspace.yaml lists umtool, and pnpm-lock.yaml gains its importer.
The eslint peer-resolution churn in the lockfile is that same install
re-resolving peers, not a dependency change of its own.
- dev:umtool goes through scripts/worktree.mjs like every other dev script,
so a worktree gets its own ports instead of colliding with the checkout
someone is judging clips in.
- UMTOOL_PORT 3050 / UMTOOL_E2E_PORT 3051 join PORT_BASES and the table in
WORKTREES.md. The three HOMEPAGE_* rows in that table are the same fix a
step earlier: those ports were already in PORT_BASES and had never been
written down.
- .gitignore covers the e2e fixture, the build dir and the e2e server's
SEPARATE build dir. Next refuses two dev servers for one project, so the
suite needs its own -- and running the tests while judging clips is the
normal case here, not an edge one.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat:
6 files changed, 85 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -130,3 +130,12 @@ yarn-error.log*
# Machine-specific and rebuildable with scripts/build-sortformer.sh.
/.diarize/sortformer/
/.diarize/.sortformer-build/
+
+# umtool: the e2e fixture (built by e2e/fixtures/make-fixture.mjs), the build
+# dir, and the e2e dev server's SEPARATE build dir -- it needs its own so it can
+# run alongside a dev server someone is judging clips in (Next refuses two for
+# one project).
+umtool/.e2e-song/
+umtool/.next/
+umtool/.next-e2e/
+umtool/test-results/
diff --git a/WORKTREES.md b/WORKTREES.md
@@ -23,6 +23,11 @@ defaults — nothing changes for the primary checkout.
| `EXPORT_DEV_PORT` | 3000 | export real dev (`pnpm dev:export`) |
| `EXPORT_E2E_PORT` | 3020 | export's own Playwright suite |
| `OLLAMA_STUB_PORT` | 11435 | digest-lane stub server in the editor e2e suite |
+| `HOMEPAGE_DEV_PORT` | 3030 | homepage (hub) real dev (`pnpm dev:homepage`) |
+| `HOMEPAGE_PORT` | 3031 | homepage static `serve out` (`pnpm start:homepage`) |
+| `HOMEPAGE_E2E_PORT` | 3040 | homepage's own Playwright suite |
+| `UMTOOL_PORT` | 3050 | um-clip triage tool real dev (`pnpm dev:umtool`) |
+| `UMTOOL_E2E_PORT` | 3051 | umtool's own Playwright suite |
| `PLAYWRIGHT_BASE_URL` | `http://localhost:3011` | node-side fetches in specs |
So worktree #1 runs editor on **3101**, test server on **3111**, export on **3110**, etc.
diff --git a/package.json b/package.json
@@ -16,6 +16,7 @@
"dev:editor": "node scripts/worktree.mjs run -- pnpm --filter editor run dev",
"dev:export": "node scripts/worktree.mjs run -- pnpm --filter export run dev",
"dev:homepage": "node scripts/worktree.mjs run -- pnpm --filter homepage run dev",
+ "dev:umtool": "node scripts/worktree.mjs run -- pnpm --filter umtool run dev",
"deploy:homepage": "pnpm --filter homepage run deploy",
"e2e": "node scripts/worktree.mjs run -- pnpm --filter editor run e2e",
"wt": "node scripts/worktree.mjs",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
@@ -302,6 +302,43 @@ importers:
specifier: ^5.6.0
version: 5.9.3
+ umtool:
+ dependencies:
+ next:
+ specifier: 16.2.3
+ version: 16.2.3(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react:
+ specifier: 19.2.4
+ version: 19.2.4
+ react-dom:
+ specifier: 19.2.4
+ version: 19.2.4(react@19.2.4)
+ yt-dlp-transcript-common:
+ specifier: workspace:*
+ version: link:../common
+ devDependencies:
+ '@playwright/test':
+ specifier: ^1.59.1
+ version: 1.59.1
+ '@tailwindcss/postcss':
+ specifier: ^4.2.2
+ version: 4.2.4
+ '@types/node':
+ specifier: ^20.19.39
+ version: 20.19.39
+ '@types/react':
+ specifier: ^19.2.14
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.14)
+ tailwindcss:
+ specifier: ^4.2.2
+ version: 4.2.4
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
packages:
'@alloc/quick-lru@5.2.0':
@@ -6306,7 +6343,7 @@ snapshots:
'@next/eslint-plugin-next': 16.2.3
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1))
@@ -6349,7 +6386,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.3
@@ -6364,13 +6401,38 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)):
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.4.3
+ eslint: 9.39.4(jiti@2.6.1)
+ get-tsconfig: 4.14.0
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.16
+ unrs-resolver: 1.11.1
+ optionalDependencies:
+ eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
+ dependencies:
+ debug: 3.2.7
+ optionalDependencies:
+ eslint: 9.39.4(jiti@2.6.1)
+ eslint-import-resolver-node: 0.3.10
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
@@ -6386,7 +6448,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1))
hasown: 2.0.3
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -6415,7 +6477,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
hasown: 2.0.3
is-core-module: 2.16.1
is-glob: 4.0.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
@@ -4,6 +4,7 @@ packages:
- export
- homepage
- mcp
+ - umtool
allowBuilds:
esbuild: true
diff --git a/scripts/worktree.mjs b/scripts/worktree.mjs
@@ -22,6 +22,8 @@ const PORT_BASES = {
HOMEPAGE_DEV_PORT: 3030, // homepage (hub) real dev
HOMEPAGE_PORT: 3031, // homepage static `serve out` (start:homepage)
HOMEPAGE_E2E_PORT: 3040, // homepage's own Playwright suite
+ UMTOOL_PORT: 3050, // um-clip triage tool real dev
+ UMTOOL_E2E_PORT: 3051, // umtool's own Playwright suite
};
const OFFSET_STEP = 100;