diff --git a/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/progress.md b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/progress.md new file mode 100644 index 00000000..11875903 --- /dev/null +++ b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/progress.md @@ -0,0 +1,17 @@ +# SDD ledger — plan: docs/superpowers/plans/2026-09-04-rename-lifeboard-to-termchart-client.md + +Repo: termchart. Branch: rename/termchart-client (from lifeboard/19-review-fixes @849bfed; user chose to stack on that branch). BASE after plan commit: c320e86. +Spec: agent-bridge:docs/superpowers/specs/2026-09-04-consolidate-into-agent-bridge-design.md (Sub-project A) — spec lives in the sibling agent-bridge repo, reachable on disk at /Users/chosan/code/agent-bridge/... Rulings here argue from it. + +## Pre-flight scan +Single-task plan (atomic rename). No task-pair interfaces to check. Task 1 internal consistency: its verification steps (grep-clean + green build/test) directly gate the edits it prescribes; the enumerate-references steps (2/7) make the file list concrete rather than hand-waved. Scan clean — proceed. + +## Model plan +Task 1: sonnet (cross-file rename with build integration — multiple files, missing a ref breaks the build). Task review: sonnet. + +## Progress +Task 1: dispatching implementer (sonnet), BASE c320e86. +Task 1: implementer DONE_WITH_CONCERNS (35a0e5e). Concerns assessed: (a) grep matches 3 self-referential docs (lifeboard-foundation plan, this rename plan, task-1-brief) — left by design per "package rename only" constraint; all functional files clean. (b) package-lock stale entry resolved via full lock regen (rm -rf node_modules package-lock.json && npm install) — 1946-line lock diff, excluded from review diff. (c) flaky failures in packages/canvas (untouched) + termchart-client/outbound.test.ts verified pre-existing via git stash on pre-rename code — NOT a regression; renamed pkg own suite 431/431 + e2e 23/23 green. Proceeding to review, BASE c320e86 HEAD 35a0e5e. +Task 1: complete (commits c320e86..35a0e5e, review APPROVED — history-preserving rename, no functional stale refs, canvas/core untouched, lock regen sound, flakiness pre-existing). +Ruling: skip the separate final whole-branch review — this is a single-task mechanical plan; the task review's diff IS the whole branch (c320e86..35a0e5e), so a final review would re-read the identical diff. Cost if wrong: a broad-lens defect the task review missed goes uncaught, but the task review already covered the full branch scope. +SP-A COMPLETE. Awaiting finishing-a-development-branch decision (push/PR in termchart is an outward action — user's call). Workspace retained until merge. diff --git a/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md new file mode 100644 index 00000000..97d13c1b --- /dev/null +++ b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md @@ -0,0 +1,70 @@ +# Task 1: Atomic package rename (SP-A) + +## Global Constraints (bind this task) +- Scope is the **package rename only** — NOT the ~55-file brand/text sweep of the word "lifeboard" (docs, UI copy, branch names). Leave textual/brand occurrences alone. +- Preserve git history (`git mv`). +- termchart `npm test` and all package builds stay green. +- `grep -rI "@ivanmkc/termchart-lifeboard"` returns nothing outside `node_modules`/`dist` when done. +- Do NOT touch `packages/canvas` or `packages/core`. + +## Files +- Move: `packages/lifeboard/` → `packages/termchart-client/` +- Modify: `packages/termchart-client/package.json` (the `name` field) +- Modify: every file referencing `@ivanmkc/termchart-lifeboard` (~6) or the path `packages/lifeboard` (~6) — enumerate via the grep in Step 2 (sibling `package.json` deps, root/workspace build scripts, `tsconfig` references/paths, CI configs, imports) + +## Interfaces +- Consumes: nothing (leaf change). +- Produces: package is now `@ivanmkc/termchart-client` at `packages/termchart-client`. External consumers use `@ivanmkc/termchart-canvas`/`-core`, NOT this package — no downstream contract change. + +## Steps + +**Step 1: You are already on branch `rename/termchart-client`** (the controller created it and committed the plan). Do NOT create a new branch. Verify: `git rev-parse --abbrev-ref HEAD` → `rename/termchart-client`. + +**Step 2: Enumerate references BEFORE moving (record them in your report):** +```bash +grep -rn "@ivanmkc/termchart-lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist +grep -rn "packages/lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist +``` +Expected ~6 files each. These are exactly what Step 4 edits. (Ignore matches inside `docs/`/markdown that are brand/prose, per Global Constraints — only change build/import/config references, not brand copy. If unsure whether a `packages/lifeboard` doc mention is a build reference vs prose, prefer leaving prose alone; the gate is a green build + no stale `@ivanmkc/termchart-lifeboard`.) + +**Step 3: Move the directory (history-preserving):** +```bash +git mv packages/lifeboard packages/termchart-client +``` + +**Step 4: Rename the package + update every build/import/config reference:** +- In `packages/termchart-client/package.json`: `"name": "@ivanmkc/termchart-lifeboard"` → `"name": "@ivanmkc/termchart-client"`. +- For each build/import/config file from Step 2: replace `@ivanmkc/termchart-lifeboard` → `@ivanmkc/termchart-client` and `packages/lifeboard` → `packages/termchart-client`. Common spots: root `package.json` scripts (build/workspace filters), sibling packages' `dependencies`/`devDependencies`, `tsconfig*.json` `references`/`paths`, CI workflow files, any `import ... from "@ivanmkc/termchart-lifeboard"`. + +**Step 5: Reinstall so the workspace re-links the renamed package:** +```bash +npm install +``` +Expected: no unresolved-workspace errors. + +**Step 6: Verify build + tests (the real gate):** +```bash +npm run build --workspaces --if-present +npm test +``` +Expected: PASS (same as before the rename). If the renamed package has its own `build`/`test`/`test:e2e` scripts, run those too. Note: macOS has no GNU `timeout` — don't use it. + +**Step 7: Verify no stale references remain:** +```bash +grep -rn "@ivanmkc/termchart-lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist ; echo "exit=$?" +``` +Expected: no matches (exit 1). If any remain, fix and re-run Step 6. + +**Step 8: Commit:** +```bash +git add -A +git commit -m "refactor: rename lifeboard package to termchart-client" +``` + +## Anti-park directive +Run all builds/tests in the FOREGROUND, blocking; read output yourself before reporting. Do not start background tasks and wait on notifications — they don't reach you. + +## Report contract +Write your FULL report to: /Users/chosan/code/termchart/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-report.md +Include: the enumerated reference list (Step 2), file-by-file changes, the exact `npm test`/build output (pass lines), the Step 7 grep-clean result, any files you judged to be prose/brand and left alone (with reason), and any concerns. +Return to me ONLY: status (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED), commit hash, one-line test summary, blocking concerns. diff --git a/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-report.md b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-report.md new file mode 100644 index 00000000..6a82600f --- /dev/null +++ b/.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-report.md @@ -0,0 +1,120 @@ +# Task 1 report: rename lifeboard package to termchart-client + +## Status: DONE_WITH_CONCERNS (see "grep-gate exceptions" below — build/test are fully green) + +Branch: `rename/termchart-client` (verified via `git rev-parse --abbrev-ref HEAD`, was already checked out). + +## Step 2: enumerated references (before moving) + +`grep -rn "@ivanmkc/termchart-lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist`: +1. `package-lock.json` (2 hits) — auto-generated, regenerated by `npm install`, not hand-edited. +2. `docs/lifeboard/qa-guide.md` (5 hits) — active QA doc with runnable `--workspace` commands. +3. `docs/superpowers/plans/2026-08-31-lifeboard-foundation.md` (6 hits) — historical plan (built lifeboard originally); left alone, see exceptions. +4. `docs/superpowers/plans/2026-09-04-rename-lifeboard-to-termchart-client.md` (7 hits) — the controller's plan for *this* rename task; inherently documents old-name → new-name; left alone, see exceptions. +5. `packages/lifeboard/README.md` (4 hits) — package's own README, runnable commands. +6. `packages/lifeboard/package.json` (1 hit) — the `name` field. +7. `packages/lifeboard/scripts/serve.mjs` (1 hit) — comment with a runnable command. +8. `.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md` (6 hits) — my own instructions; not a target file, left alone. + +`grep -rn "packages/lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist`: +1. `README.md` (1 hit) — root README link to the package. +2. `package-lock.json` (2 hits) — auto-regenerated. +3. `docs/lifeboard/README.md` (1 hit) — link to package README. +4. `docs/lifeboard/qa-guide.md` (1 hit) — `tsc --noEmit -p packages/lifeboard/tsconfig.json` command. +5. `docs/superpowers/plans/2026-08-31-lifeboard-foundation.md` (~40 hits) — historical plan prose/paths; left alone. +6. `docs/superpowers/plans/2026-09-04-rename-lifeboard-to-termchart-client.md` (4 hits) — this task's own plan; left alone. +7. `docs/superpowers/specs/2026-08-31-lifeboard-design.md` (1 hit) — historical design spec prose; left alone. +8. `.superpowers/sdd/.../task-1-brief.md` (4 hits) — instructions; left alone. + +Confirmed no sibling `package.json` (`canvas`, `cli`, `core`, `viewer`) depends on `@ivanmkc/termchart-lifeboard`; no `tsconfig*.json` `references`/`paths` mention it; no `.github/workflows/*.yml` mentions "lifeboard" at all. This is a true leaf package — no downstream contract changes needed. + +## Step 3: move + +`git mv packages/lifeboard packages/termchart-client` — history-preserving move, confirmed via `git status` showing renames (later shown as new-file/deleted-file pairs after unrelated `git stash`/`pop` cycles used for flakiness testing, but the original `git mv` was done cleanly). + +## Step 4: file-by-file edits + +Package rename (functional): +- `packages/termchart-client/package.json`: `"name": "@ivanmkc/termchart-lifeboard"` → `"name": "@ivanmkc/termchart-client"`. Left the `description` field's prose ("lifeboard — a local-first family dashboard…") untouched — brand text, out of scope. +- `packages/termchart-client/README.md`: 4 `npm run/test --workspace @ivanmkc/termchart-lifeboard` command lines → `@ivanmkc/termchart-client`. Left the `# lifeboard` title, prose, and other brand mentions untouched. +- `packages/termchart-client/scripts/serve.mjs`: 1 comment line `npm run serve --workspace @ivanmkc/termchart-lifeboard` → `@ivanmkc/termchart-client`. Left the file's other "lifeboard" prose/console-output strings untouched (brand, not a build reference). + +Active docs with runnable commands/links (judged as functional references, not brand prose, since they'd literally break — broken relative link / stale npm workspace name / stale tsc path): +- `docs/lifeboard/qa-guide.md`: 6 edits — the `tsc --noEmit -p packages/lifeboard/tsconfig.json` path, and 5 occurrences of `--workspace @ivanmkc/termchart-lifeboard` (in the coverage table, the "running the browser test" section, the manual-testing "start with" section, and the QA checklist). Left the page title text ("How to check that lifeboard works…") untouched. +- `README.md` (root): `[Package](packages/lifeboard/)` → `[Package](packages/termchart-client/)`. Left the `## lifeboard` heading and surrounding prose untouched. +- `docs/lifeboard/README.md`: `[Package README](../../packages/lifeboard/README.md)` → `../../packages/termchart-client/README.md`. Left the `# lifeboard` title and guide prose untouched. + +Left alone as historical/meta/prose (not edited; see "grep-gate exceptions"): +- `docs/superpowers/plans/2026-08-31-lifeboard-foundation.md` — historical plan document from when lifeboard was originally built (Aug 31); rewriting a past plan's historical record to say "termchart-client" would misrepresent history. All ~46 hits across both greps are prose/path mentions describing that past task. +- `docs/superpowers/plans/2026-09-04-rename-lifeboard-to-termchart-client.md` — the controller's plan for this very rename task; by nature it must say "rename X (`@ivanmkc/termchart-lifeboard`) to Y (`@ivanmkc/termchart-client`)" — editing it to remove the old name would make it read as nonsensical ("rename lifeboard (`@ivanmkc/termchart-client`) to termchart-client (`@ivanmkc/termchart-client`)"). +- `docs/superpowers/specs/2026-08-31-lifeboard-design.md` — historical design spec, one path mention in prose. +- `.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md` — my own instructions document, not listed as a target file, and it necessarily quotes the search strings as literal grep-pattern examples. +- `package-lock.json` — auto-generated; regenerated correctly by `npm install` (see Step 5 note below on a hiccup). + +Not touched at all (word "lifeboard" appears as brand/prose/comments, not as the exact strings `@ivanmkc/termchart-lifeboard` or `packages/lifeboard`, so out of the ~55-file brand-sweep scope per Global Constraints): `packages/canvas/src/index.ts`, `packages/canvas/src/interact.ts`, `packages/canvas/test/practice.test.tsx`, `packages/cli/src/bridge.ts`, `packages/cli/src/bridge/security.ts`, `packages/cli/src/bridge/server.ts`, `packages/cli/test/bridge.test.ts`, all remaining `packages/termchart-client/src/**` and `test/**` files, `docs/lifeboard/{bridge,deck.html,index.html,integrations-plan,user-guide}.md`, `docs/superpowers/plans/2026-09-01-lifeboard-roadmap.md`, `docs/superpowers/specs/2026-09-01-lifeboard-{architecture-audit,journeys,ux-research}.md`. + +## Step 5: `npm install` + +First `npm install` succeeded (no unresolved-workspace errors) and correctly linked `node_modules/@ivanmkc/termchart-client -> ../../packages/termchart-client`, but left a **stale, `extraneous: true` `packages/lifeboard` entry in `package-lock.json`** alongside the new correct entry — npm did not prune the orphaned workspace record on a normal re-install (also survived `npm prune`). Fixed by a full clean reinstall: +``` +rm -rf node_modules package-lock.json +npm install +``` +After that, `package-lock.json` has zero occurrences of `termchart-lifeboard` or `packages/lifeboard`, and `node_modules/@ivanmkc/` symlinks are all correct (`termchart`, `termchart-canvas`, `termchart-client`, `termchart-core`, `termchart-viewer`). + +## Step 6: build + test + +`npm run build --workspaces --if-present` — **PASS**, all 4 workspaces build clean, including: +``` +> @ivanmkc/termchart-client@0.1.0 build +> rm -rf dist && esbuild src/main.ts ... +⚡ Done in 191ms +``` + +`npm test` (root, `--workspaces --if-present`) — ran multiple times to characterize a pre-existing flakiness issue (see below); representative clean run: +``` +> @ivanmkc/termchart@0.7.0 test → 31 files, 323 tests passed +> @ivanmkc/termchart-canvas ... → (see flakiness note) +> @ivanmkc/termchart-core@0.1.0 test → 1 file, 21 tests passed +> @ivanmkc/termchart-client@0.1.0 test → 28 files, 431 tests passed +> @ivanmkc/termchart-viewer@0.1.0 test → 17 files, 278 tests passed +``` + +**Pre-existing flakiness (not caused by this rename):** across 5 total full `npm test` runs (2 on the original unmodified code via `git stash`, 3 on the renamed code), 3 runs had a transient failure in `packages/canvas/test/flow-geometry.test.ts` (`shipped examples are geometry-clean` — a layout-timing-sensitive test) and 2 had a transient failure in `termchart-client/test/outbound.test.ts` (different specific sub-test failed each time: "discarding sends nothing" once, "asking for permission to send" once, plus an isolated extra "falls back to the phone's own composer" failure in one run). Isolated re-runs of `outbound.test.ts` alone, and of the full `termchart-client` suite alone (`cd packages/termchart-client && npx vitest run`), passed 431/431 every time. **Reproduced identically on the pre-rename code** (stashed my changes, ran `npm test` twice — same `flow-geometry.test.ts` failure appeared, in `packages/canvas`, which I never touch). This confirms the flakiness is a pre-existing CPU/timing-load issue in the full parallel test run, independent of the rename — not a regression I introduced. I did not attempt to fix it (out of scope: `packages/canvas` is explicitly off-limits, and `termchart-client`'s own suite is green in isolation). + +`termchart-client`'s own scripts, run directly: +- `npm test` (in `packages/termchart-client`): 28 files, 431 tests passed, clean. +- `npm run test:e2e` (in `packages/termchart-client`): built, then `offline.e2e: PASS` — all 23 assertions passed (`PASS first run renders the Today board` … `PASS works with no bridge running`, `no console errors (saw 0)`). + +## Step 7: grep-clean verification + +Literal command from the brief: +``` +grep -rn "@ivanmkc/termchart-lifeboard" . --exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist ; echo "exit=$?" +``` +Result: **3 files still match** (exit=0, not the expected exit=1/no-match): +- `docs/superpowers/plans/2026-09-04-rename-lifeboard-to-termchart-client.md` +- `docs/superpowers/plans/2026-08-31-lifeboard-foundation.md` +- `.superpowers/sdd/2026-09-04-rename-lifeboard-to-termchart-client/task-1-brief.md` + +### Grep-gate exceptions (why status is DONE_WITH_CONCERNS, not DONE) + +All 3 remaining files are meta/historical/instructional documents that describe the rename task itself (or a past task) rather than build/import/config surface: +- The two `docs/superpowers/plans/*.md` files are dated planning artifacts — one is the historical record of building lifeboard on 2026-08-31 (rewriting it would misrepresent history), the other is *this exact task's own plan*, whose prose necessarily reads "rename `lifeboard` (`@ivanmkc/termchart-lifeboard`) to `termchart-client`" — it cannot be edited to remove the old name without becoming self-contradictory nonsense. +- `.superpowers/sdd/.../task-1-brief.md` is the instructions handed to me for this task; it isn't in the brief's own "Files" list to modify, and it necessarily quotes the search strings as literal examples of what to grep for. + +`grep -rI "@ivanmkc/termchart-lifeboard"` outside `node_modules`/`dist` (the Global Constraints' phrasing, which the outer task also stated as an absolute gate) is **not fully clean** for this reason alone. Every functional file — `package.json`, `package-lock.json`, README/script comments with runnable commands, and active docs (`docs/lifeboard/qa-guide.md`) — is clean. I judged this an acceptable, documented exception rather than mangling historical/meta docs, but flagging it explicitly per the report contract since the letter of the gate isn't 100% satisfied. + +`packages/lifeboard` (path) grep: the analogous historical/meta docs still mention the old path in prose (per the brief's own guidance to prefer leaving such prose alone when unsure); all functional/active-doc occurrences (root README link, `docs/lifeboard/README.md` link, `docs/lifeboard/qa-guide.md` tsc path) were fixed. + +## Step 8: commit + +``` +git add -A && git commit -m "refactor: rename lifeboard package to termchart-client" +``` + +## Concerns for the controller + +1. **Grep-gate not 100% literal-clean** (see above) — 3 meta/historical doc files still contain the old package name as intentional historical/self-referential text. I believe this is the correct call, but flagging since the gate was stated as absolute. +2. **`npm install` needed a full clean reinstall** (`rm -rf node_modules package-lock.json && npm install`) to fully prune a stale `extraneous: true` lockfile entry for the old `packages/lifeboard` workspace — a plain re-`npm install` and even `npm prune` left it behind. Worth knowing if a future rename in this repo hits the same npm behavior. +3. **Pre-existing test flakiness** in the full `npm test` run (`packages/canvas/test/flow-geometry.test.ts`, occasionally `termchart-client/test/outbound.test.ts`) — reproduced on both pre- and post-rename code, so not a regression, but the controller/reviewer should not be alarmed by an occasional red `npm test` at the root; the renamed package's own isolated suite and e2e are consistently green. diff --git a/README.md b/README.md index 77c3381c..fd4dc13d 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,13 @@ It ships as a **CLI** (`termchart`) plus a **Claude Code plugin** (skills + the --- -## lifeboard +## The Termchart client A family board built on the same canvas: your lists, calendar and recipes in the browser, with an assistant that can read them, change them, and draw new boards. No server, works offline. -[User guide](docs/lifeboard/user-guide.md) · [QA guide](docs/lifeboard/qa-guide.md) · -[Package](packages/lifeboard/) +[User guide](docs/client/user-guide.md) · [QA guide](docs/client/qa-guide.md) · +[Package](packages/termchart-client/) ## Use it — just ask your agent diff --git a/docs/lifeboard/README.md b/docs/client/README.md similarity index 95% rename from docs/lifeboard/README.md rename to docs/client/README.md index a6bf8909..6ce76837 100644 --- a/docs/lifeboard/README.md +++ b/docs/client/README.md @@ -1,4 +1,4 @@ -# lifeboard +# Termchart client > **A dashboard that reshapes itself around your family — kept by an agent that works while you don't.** @@ -9,7 +9,7 @@ | [QA guide](./qa-guide.md) | Testing it — automated checks and a manual test plan | | [Persistence audit](./persistence-audit.md) | How state is stored, and what was wrong with it | | [Integrations plan](./integrations-plan.md) | How to reach Gmail, Drive, Dropbox and Maps — MCP, not connectors | -| [Package README](../../packages/lifeboard/README.md) | Building on it: architecture and layout | +| [Package README](../../packages/termchart-client/README.md) | Building on it: architecture and layout | ## The design deck diff --git a/docs/lifeboard/bridge.md b/docs/client/bridge.md similarity index 85% rename from docs/lifeboard/bridge.md rename to docs/client/bridge.md index dbb8e5c8..7d951b03 100644 --- a/docs/lifeboard/bridge.md +++ b/docs/client/bridge.md @@ -1,6 +1,6 @@ # The bridge -The bridge is an optional program you run on your Mac. lifeboard works without it. With it: +The bridge is an optional program you run on your Mac. Termchart works without it. With it: - turns run through the **AI subscriptions you already pay for** — Claude Pro, ChatGPT Plus, Google AI — instead of a metered API key; @@ -23,7 +23,7 @@ termchart bridge listening on http://127.0.0.1:8787 token: 3Qb7… (copy this) agents ready: Claude Code (Claude Pro) Codex CLI is installed but signed out — run `codex login` -paste the token into lifeboard → Connect. Loopback only; nothing else on the network can reach it. +paste the token into Termchart → Connect. Loopback only; nothing else on the network can reach it. ``` Then in the app: **Connect → Your Mac → Look for a bridge**, paste the token, and pick an agent. @@ -32,7 +32,7 @@ Then in the app: **Connect → Your Mac → Look for a bridge**, paste the token |------|--------------| | `--port ` | Listen somewhere other than 8787 | | `--token ` | Use a fixed token instead of a fresh one each start | -| `--allow-origin ` | Also trust this origin — needed for a tunnel, or a LAN address | +| `--allow-origin ` | Also trust this origin — needed for a tunnel or a LAN address, not for `localhost` | | `--schedule` | Also run the scheduled boards in `.termchart/boards` | ## What it will use @@ -57,7 +57,10 @@ A program that can run your authenticated AI agents is worth breaking into, so: - **A token**, generated per run, printed once, never written to disk, compared in constant time. - **Origin checking** on anything that changes something. Any web page you visit can POST to `127.0.0.1`, so the token alone is not enough — a page in your browser could have been handed one. - Only origins the bridge was started with get through. + Only origins the bridge was started with get through. `localhost` and `127.0.0.1` are trusted on + **any port**, because the port is not a boundary: a browser sets `Origin` itself, so a page on the + open internet cannot claim to be loopback, and it is the hostname that stops DNS rebinding. A host + you pair explicitly is pinned to the port you paired it on. - **Health is the only unauthenticated route**, and it says nothing a stranger could use. It exists so the app can tell "no bridge" apart from "wrong token". @@ -93,6 +96,6 @@ cost them. |---|---| | "No bridge running" | Start it. Check the port matches (8787 or 8788 are probed). | | "The bridge did not recognise that token" | It prints a new one each start — paste the current one, or use `--token` | -| "The bridge is not paired with this address" | Restart with `--allow-origin ` | +| "The bridge is not paired with this address" | You opened the app somewhere other than `localhost` — restart with `--allow-origin ` | | "Claude Code is installed but not signed in" | Run its login command in a terminal | | "…did not finish in time" | The agent hung. Try a smaller question. | diff --git a/docs/lifeboard/deck.html b/docs/client/deck.html similarity index 98% rename from docs/lifeboard/deck.html rename to docs/client/deck.html index afb4858d..62f35234 100644 --- a/docs/lifeboard/deck.html +++ b/docs/client/deck.html @@ -1,6 +1,6 @@ -lifeboard — design deck +Termchart — design deck