Context
Operator direction (2026-08-02, relayed): @neo-opus-grace keeps an untracked .claude/launch.json in her clone that gives Claude-Code seats one-command dev-server + browser-pane startup — operator: "we for sure could add something like it for our peers (not just the claude ones)." Filed as the claimable seed that direction invited.
Live latest-open sweep: latest 20 open issues checked at 2026-08-02T12:50Z, no equivalent. A2A herd-window sweep: no overlapping claim.
The Problem
Every seat hand-rolls dev-server startup: raw npm run server-start (which --opens a browser on the OPERATOR's display), ad-hoc ports, and — measured today — cross-seat confusion about WHOSE tree a given port serves. Two live incidents this session: (a) a styling defect was first verified against a stale clone on :8080 purely because that port answered (the #16336 provenance correction), and (b) the resulting port-is-not-provenance rule had to be re-derived per seat until the day's R2 matrix adopted it. A repo-blessed launch shape removes the per-seat re-derivation: own tree, auto port, no operator-browser hijack.
The proven shape (Grace's artifact, untracked in her clone):
{
"version": "0.0.1",
"configurations": [
{
"name": "neo-dev-server",
"runtimeExecutable": "npx",
"runtimeArgs": ["webpack", "serve", "-c", "./buildScripts/webpack/webpack.server.config.mjs"],
"port": 8080,
"autoPort": true
}
]
}autoPort: true already makes it multi-seat-safe — a port collision bumps instead of colliding.
The Architectural Reality
.claude/launch.json is the Claude-Code browser-pane launch surface (the harness preview_start consumes it), and it is TRACKED space in this repo — landing it makes the shape canonical for Claude seats.
- Other harnesses (OpenCode, Kimi CLI, Codex, Gemini) have no
launch.json contract; their parity is a documented one-liner — the same command without the browser hijack, e.g. npm run server-start -- --port <seat-port> --no-open — in whichever seat-facing doc the claimant judges canonical.
- Theme-pipeline fact that bit today and belongs wherever that doc lands: the dev server serves
dist/development/css and does NOT rebuild on SCSS edits; the explicit rebuild is node ./buildScripts/build/themes.mjs -f -n -e dev -t all (the bare npm script dies on an interactive prompt in non-TTY).
The Fix
- Land the launch.json shape as tracked
.claude/launch.json — credit @neo-opus-grace as origin, and coordinate before writing: it is her proven artifact and she may prefer to land it herself.
- Add the per-harness parity line(s) to the canonical seat-facing doc: the no-open + own-port discipline plus the port-is-not-provenance rule (bind measurements to checkout path + SHA, never to "a port that answered").
- Optional, claimant's judgment: a
server-start-agent npm script wrapping the no-open form.
Acceptance Criteria
Out of Scope
- Harness-native launch integrations beyond documentation for non-Claude seats.
- Any
webpack.server.config.mjs change.
Avoided Traps
- Hardcoding per-seat ports in the tracked file —
autoPort already solves collision.
- Duplicating the launch story across every harness doc — one canonical home, pointers elsewhere.
- Landing Grace's artifact without coordination — it is her goodie; first-refusal is hers.
Related
- #16336 — the stale-clone provenance incident this prevents recurring
- D#16304 — the running-plane vs repo divergence family; the dev-server is the same law in another costume
Origin Session ID: cc037e9f-7577-4a11-968d-7a5fe3c8db8d
Retrieval Hint: "dev server launch config agent seats port provenance"
UNASSIGNED — claimable, any family. @neo-opus-grace holds first-refusal by authorship.
Context
Operator direction (2026-08-02, relayed): @neo-opus-grace keeps an untracked
.claude/launch.jsonin her clone that gives Claude-Code seats one-command dev-server + browser-pane startup — operator: "we for sure could add something like it for our peers (not just the claude ones)." Filed as the claimable seed that direction invited.Live latest-open sweep: latest 20 open issues checked at 2026-08-02T12:50Z, no equivalent. A2A herd-window sweep: no overlapping claim.
The Problem
Every seat hand-rolls dev-server startup: raw
npm run server-start(which--opens a browser on the OPERATOR's display), ad-hoc ports, and — measured today — cross-seat confusion about WHOSE tree a given port serves. Two live incidents this session: (a) a styling defect was first verified against a stale clone on:8080purely because that port answered (the #16336 provenance correction), and (b) the resulting port-is-not-provenance rule had to be re-derived per seat until the day's R2 matrix adopted it. A repo-blessed launch shape removes the per-seat re-derivation: own tree, auto port, no operator-browser hijack.The proven shape (Grace's artifact, untracked in her clone):
{ "version": "0.0.1", "configurations": [ { "name": "neo-dev-server", "runtimeExecutable": "npx", "runtimeArgs": ["webpack", "serve", "-c", "./buildScripts/webpack/webpack.server.config.mjs"], "port": 8080, "autoPort": true } ] }autoPort: truealready makes it multi-seat-safe — a port collision bumps instead of colliding.The Architectural Reality
.claude/launch.jsonis the Claude-Code browser-pane launch surface (the harnesspreview_startconsumes it), and it is TRACKED space in this repo — landing it makes the shape canonical for Claude seats.launch.jsoncontract; their parity is a documented one-liner — the same command without the browser hijack, e.g.npm run server-start -- --port <seat-port> --no-open— in whichever seat-facing doc the claimant judges canonical.dist/development/cssand does NOT rebuild on SCSS edits; the explicit rebuild isnode ./buildScripts/build/themes.mjs -f -n -e dev -t all(the bare npm script dies on an interactive prompt in non-TTY).The Fix
.claude/launch.json— credit @neo-opus-grace as origin, and coordinate before writing: it is her proven artifact and she may prefer to land it herself.server-start-agentnpm script wrapping the no-open form.Acceptance Criteria
.claude/launch.jsonwithautoPort, verified by one Claude seat via its preview surface.npm run server-starthuman flow untouched.Out of Scope
webpack.server.config.mjschange.Avoided Traps
autoPortalready solves collision.Related
Origin Session ID: cc037e9f-7577-4a11-968d-7a5fe3c8db8d
Retrieval Hint: "dev server launch config agent seats port provenance"
UNASSIGNED — claimable, any family. @neo-opus-grace holds first-refusal by authorship.