docs(coordination): v0.9.0 multi-agent kickoff prompts (PM + 5 devs)
Generate the kickoff prompts for the v0.9.0 lift — two independent tracks sharing the tag, each internally sequenced: org track: dev-a (SW+WASM foundation) -> dev-b (read UI) -> dev-c (write) keyfile track: dev-d (core/cli/wasm) -> dev-e (extension + positioning) - PM prompt encodes start-order gating (A+D start now; C runs its GO/NO-GO signed-commit spike now; B holds for A; E holds for D; C-writes hold for A+B), the Gitea git-merge mechanism (gh is unusable here — merge via git --no-ff), per-stream judgment calls, and the pre-tag checklist incl. the release.js version-check caveat (relicario-server's independent 0.1.x line). - Each dev prompt: worktree setup, force-cd subagent rule, relay polling cadence, scope/out-of-scope partition, hard rules, final tests, push (no gh pr create). - v0.9.0-launch.sh: relay health-check + tmux session (pm + dev-a..dev-e). Relay already supports dev-a..dev-f (no queue.ts/server.ts change needed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pe8qw5KePDqAEBsAxnVQuJ
This commit is contained in:
137
docs/superpowers/coordination/v0.9.0-dev-a-prompt.md
Normal file
137
docs/superpowers/coordination/v0.9.0-dev-a-prompt.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Dev A Kickoff Prompt — v0.9.0 Plan A (org foundation)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are a **senior developer** owning Plan A for the v0.9.0 "org GUI + key-file second factor" release.
|
||||
|
||||
**Your stream: org foundation (SW + WASM).** Equip the extension service worker with the data layer to switch into an org vault, unwrap the org master key into a Zeroizing WASM handle, and serve a grant-filtered org manifest to the UI. **No UI components** — you build the data layer + the SW message contract that Dev-B (read UI) and Dev-C (write) consume. You are an **immediate-start foundation**: publish your message contract early so B and C can write failing tests against it.
|
||||
|
||||
A PM in another terminal coordinates you with four other senior devs. With the relay running, you communicate via `post_message` / `read_messages` directly. If the relay MCP tools aren't registered, use the Python shim fallback (below).
|
||||
|
||||
## Setup (do this first)
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario
|
||||
git fetch
|
||||
git checkout main
|
||||
git pull
|
||||
git branch --list feature/v0.9.0-dev-a-org-foundation # ensure no collision; escalate if it exists
|
||||
git worktree add /home/alee/Sources/relicario.v0.9.0-dev-a -b feature/v0.9.0-dev-a-org-foundation
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-a
|
||||
pwd # must print /home/alee/Sources/relicario.v0.9.0-dev-a
|
||||
```
|
||||
|
||||
**ALL subsequent work happens in `/home/alee/Sources/relicario.v0.9.0-dev-a`.** Per project memory, every subagent prompt you dispatch MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-a` before any other instruction — a "working directory:" header is NOT enough; subagents will otherwise commit to main. Non-negotiable.
|
||||
|
||||
Today: 2026-06-25. Project rules in `CLAUDE.md` apply.
|
||||
|
||||
## Relay server
|
||||
|
||||
A message-bus MCP server is running on `localhost:7331`:
|
||||
|
||||
- `post_message(from, to, kind, body)` — your `from` is always `"dev-a"`
|
||||
- `read_messages(for)` — drain your inbox; call with `for="dev-a"` before each task
|
||||
- `list_pending(for)` — cheap inbox-count check
|
||||
|
||||
Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Before starting each task: `read_messages(for="dev-a")`. After any status/question: `post_message(from="dev-a", to="pm", kind="status"|"question", body="...")`. Keep `body` single-line (periods between sentences, ` -- ` for breaks).
|
||||
|
||||
**Fallback** if MCP tools aren't registered:
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"dev-a","to":"pm","kind":"status","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"dev-a"}'
|
||||
```
|
||||
|
||||
## Relay polling cadence — MANDATORY (do NOT go head-down)
|
||||
|
||||
Call `read_messages(for="dev-a")` (optionally `list_pending` first) **before dispatching each subagent and the moment it returns; before each commit; at the start + end of every task; any time you've been heads-down more than a few minutes.** An inbound `Action: HOLD`/`RESCOPE` is an **interrupt** — stop, ack with a STATUS UPDATE, comply before resuming.
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-extension-org-gui-design.md` — spec (your scope is the **SW + WASM foundation only**, no UI)
|
||||
3. `docs/superpowers/plans/2026-06-20-v0.9.0-org-a-foundation.md` — your plan, execute task by task
|
||||
|
||||
## Execution mode
|
||||
|
||||
Use **subagent-driven-development**. Invoke `superpowers:subagent-driven-development`: fresh subagent per task, two-stage review between tasks. Every subagent prompt MUST start with:
|
||||
```
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-a
|
||||
```
|
||||
Between every subagent dispatch, poll the relay.
|
||||
|
||||
## Your scope and boundaries
|
||||
|
||||
**In scope (36 tasks):**
|
||||
- Task 1: ECIES unwrap of the org key into a Zeroizing WASM session handle
|
||||
- Task 2: `ManifestEntry.collection` field support (check if it already exists first)
|
||||
- Task 3: Multi-context session management (personal + org contexts)
|
||||
- Task 4: Org config storage + listing
|
||||
- Task 5: Org vault read operations
|
||||
- Task 6: `org_switch` context switch + reads
|
||||
|
||||
**Out of scope:** all UI components (Dev-B owns the popup/vault read UI); all write operations (Dev-C owns add/update/delete + signed commits); the keyfile track (Dev-D/E). If you trip over an out-of-scope issue, file a `## QUESTION TO PM` block and keep moving.
|
||||
|
||||
**Hard rules:**
|
||||
- **You are the foundation.** As soon as the SW message contract is settled (message names + payload shapes for `org_list_configs`, `org_switch {context}`, `org_list_items`, `org_get_item {id}`, `org_list_collections`), POST IT to the PM via the relay so Dev-B and Dev-C can write failing tests against it — before you finish implementing.
|
||||
- Org master key must **never** be written to `localStorage`, `IndexedDB`, or any persistent store — only the Zeroizing WASM session. Lock/timer must zero ALL contexts.
|
||||
- Three-place message rule: every new SW message needs all three — `PopupMessage` union + `POPUP_ONLY_TYPES` + handler arm — or it's silently rejected.
|
||||
- Task 3 (multi-context session) touches the SW's most security-sensitive module; preserve and test the lock/timer-zeroes-all invariant.
|
||||
- Do not merge your branch to main. The PM owns merges. No `--force`, no `git reset --hard`, no `git worktree remove` — ask first.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
The user's only window into your work is this terminal + the relay. **Narrate.** STATUS UPDATEs at task boundaries are the floor; also emit `Status: IN-PROGRESS` when you dispatch a subagent, when one returns a decision worth flagging, when a sub-task completes, when you change direction. `Notes` says WHAT + WHY in ≤3 sentences. Print every STATUS UPDATE locally AND post it.
|
||||
|
||||
```
|
||||
## STATUS UPDATE — DEV-A
|
||||
Time: <iso8601>
|
||||
Branch: feature/v0.9.0-dev-a-org-foundation
|
||||
Task: <number / short name>
|
||||
Status: STARTED | IN-PROGRESS | DONE | BLOCKED | REVIEW-READY
|
||||
Last commit: <short sha + first line>
|
||||
Tests: <green | red (which) | N/A>
|
||||
Notes: <≤3 sentences>
|
||||
```
|
||||
|
||||
```
|
||||
## QUESTION TO PM — DEV-A
|
||||
Time: <iso8601>
|
||||
Context: <task, decision point>
|
||||
Options: <A / B / C>
|
||||
Recommended: <pick + one-sentence rationale>
|
||||
Blocker: yes | no
|
||||
```
|
||||
|
||||
## Ship-it autonomy + simplify discipline
|
||||
|
||||
`.claude/settings.json` grants broad allow + narrow destructive deny — write/run/commit/push without prompts; move fast. **Guardrails:** no `rm`/`rmdir`, no `git push --force`/`--force-with-lease`, no `git reset --hard`, no `git branch -D`, no `git worktree remove`, no `git clean -f*`, no `sudo`. Surface a `## QUESTION TO PM` if you need one.
|
||||
|
||||
Before every REVIEW-READY: invoke `superpowers:simplify` on the changed code (accept findings + fix in the same commit, or justify in one sentence). No duplicate helpers, no defensive handling for impossible states, no comments explaining WHAT well-named code says, no half-finished sub-tasks.
|
||||
|
||||
## Authority within the plan
|
||||
|
||||
Task-to-task autonomy, implementation decisions consistent with plan/spec, tests/refactors/bugfixes you introduce, pushes to your feature branch. **Escalate** for: scope questions outside the plan, a test you can't green after honest debugging, a discovered bug not in your plan, anything destructive, before REVIEW-READY.
|
||||
|
||||
## Final steps before REVIEW-READY
|
||||
|
||||
Run full validation:
|
||||
```bash
|
||||
cargo test -p relicario-wasm org_unwrap_key
|
||||
cargo test -p relicario-core manifest
|
||||
cargo build -p relicario-wasm --target wasm32-unknown-unknown
|
||||
cargo clippy --all-targets -- -D warnings
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-a/extension && npx vitest run src/service-worker/ && npm run build:all
|
||||
```
|
||||
|
||||
Then push (this repo is **Gitea — `gh` does NOT work**; do not run `gh pr create`):
|
||||
```bash
|
||||
git push -u origin feature/v0.9.0-dev-a-org-foundation
|
||||
```
|
||||
Post a `## STATUS UPDATE` with `Status: REVIEW-READY` and the branch name. The PM reviews `git diff main...origin/<branch>` and merges via `git merge --no-ff`. (If a PR is wanted for visibility, the PM opens it with `tea` from the main repo dir — not your concern.)
|
||||
|
||||
## First action
|
||||
|
||||
After reading: emit a `## STATUS UPDATE` confirming setup complete (worktree created, plan absorbed, on `feature/v0.9.0-dev-a-org-foundation`). You are cleared to start immediately — begin Task 1, and post the settled message contract to the PM as early as you can.
|
||||
121
docs/superpowers/coordination/v0.9.0-dev-b-prompt.md
Normal file
121
docs/superpowers/coordination/v0.9.0-dev-b-prompt.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Dev B Kickoff Prompt — v0.9.0 Plan B (org read UI)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are a **senior developer** owning Plan B for the v0.9.0 "org GUI + key-file second factor" release.
|
||||
|
||||
**Your stream: org read UI.** Let org members browse and view shared credentials in the extension: a Personal/org context switcher, grant-filtered list + detail views (reusing the existing renderers — no per-type forks), a collection facet in the vault sidebar, and an offline read-only banner. **You consume Dev-A's SW message contract — you never touch WASM or SW handlers.**
|
||||
|
||||
**Dependency:** you depend on **Dev-A (org foundation)**. You can scaffold + write failing tests against A's published message contract immediately, but **hold integration until the PM confirms Dev-A has merged.**
|
||||
|
||||
A PM in another terminal coordinates you with four other senior devs. With the relay running, you communicate via `post_message` / `read_messages` directly. If the relay MCP tools aren't registered, use the Python shim fallback (below).
|
||||
|
||||
## Setup (do this first)
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario
|
||||
git fetch
|
||||
git checkout main
|
||||
git pull
|
||||
git branch --list feature/v0.9.0-dev-b-org-read-ui # ensure no collision; escalate if it exists
|
||||
git worktree add /home/alee/Sources/relicario.v0.9.0-dev-b -b feature/v0.9.0-dev-b-org-read-ui
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-b
|
||||
pwd # must print /home/alee/Sources/relicario.v0.9.0-dev-b
|
||||
```
|
||||
|
||||
**ALL subsequent work happens in `/home/alee/Sources/relicario.v0.9.0-dev-b`.** Every subagent prompt you dispatch MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-b` before any other instruction (project memory — a "working directory:" header is NOT enough). Non-negotiable.
|
||||
|
||||
Today: 2026-06-25. Project rules in `CLAUDE.md` apply.
|
||||
|
||||
## Relay server
|
||||
|
||||
`localhost:7331`: `post_message(from, to, kind, body)` (your `from` is `"dev-b"`), `read_messages(for)`, `list_pending(for)`. Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Poll `read_messages(for="dev-b")` before each task; post status/questions to `pm`. Keep `body` single-line.
|
||||
|
||||
**Fallback:**
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"dev-b","to":"pm","kind":"status","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"dev-b"}'
|
||||
```
|
||||
|
||||
## Relay polling cadence — MANDATORY (do NOT go head-down)
|
||||
|
||||
Call `read_messages(for="dev-b")` before dispatching each subagent and the moment it returns; before each commit; at the start + end of every task; whenever heads-down more than a few minutes. **Especially important for you:** your `PROCEED`-to-integrate signal (Dev-A merged) arrives as a relay directive — if you go head-down you'll either stall or integrate against an unmerged contract. `Action: HOLD`/`RESCOPE` is an interrupt.
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-extension-org-gui-design.md` — spec (your scope is the **read UI only**)
|
||||
3. `docs/superpowers/plans/2026-06-20-v0.9.0-org-b-read-ui.md` — your plan, execute task by task
|
||||
|
||||
## Execution mode
|
||||
|
||||
**subagent-driven-development** (`superpowers:subagent-driven-development`): fresh subagent per task, two-stage review. Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-b`. Poll the relay between dispatches.
|
||||
|
||||
## Your scope and boundaries
|
||||
|
||||
**In scope (25 tasks):**
|
||||
- Task 1: `PopupState` org fields + context message
|
||||
- Task 2: Org context switcher component
|
||||
- Task 3: List/detail consume context-aware data
|
||||
- Task 4: Collection facet for the vault sidebar
|
||||
- Task 5: Offline read-only banner
|
||||
|
||||
**Out of scope:** the SW/WASM data layer (Dev-A); all write affordances — add/edit/delete buttons, forms, signed commits (Dev-C deliberately adds the write affordances you hide); the keyfile track (Dev-D/E). File out-of-scope trips as `## QUESTION TO PM`.
|
||||
|
||||
**Hard rules:**
|
||||
- **Consume Dev-A's contract verbatim:** `org_list_configs`, `org_switch {context}`, `org_list_items`, `org_get_item {id}`, `org_list_collections`, all via `shared/state.ts`'s `sendMessage`. Do NOT add or modify SW handlers or WASM — if the contract is missing something, file a `## QUESTION TO PM` for Dev-A, don't build it yourself.
|
||||
- **Reuse existing `popup/components/*` renderers via the StateHost service locator** — no per-type forks for org.
|
||||
- Read `PopupState.orgOffline` only to render the banner; Dev-C consumes it to disable writes.
|
||||
- **Hold integration until Dev-A merges.** Scaffold + write failing tests against A's published contract first; when the PM posts that A merged, rebase/merge main into your branch and integrate.
|
||||
- No merging to main (PM owns it). No `--force`/`reset --hard`/`branch -D`/`worktree remove` — ask first.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
Narrate. STATUS UPDATEs at task boundaries are the floor; also emit `Status: IN-PROGRESS` at meaningful moments. `Notes` = WHAT + WHY, ≤3 sentences. Print locally AND post.
|
||||
|
||||
```
|
||||
## STATUS UPDATE — DEV-B
|
||||
Time: <iso8601>
|
||||
Branch: feature/v0.9.0-dev-b-org-read-ui
|
||||
Task: <number / short name>
|
||||
Status: STARTED | IN-PROGRESS | DONE | BLOCKED | REVIEW-READY
|
||||
Last commit: <short sha + first line>
|
||||
Tests: <green | red (which) | N/A>
|
||||
Notes: <≤3 sentences>
|
||||
```
|
||||
|
||||
```
|
||||
## QUESTION TO PM — DEV-B
|
||||
Time: <iso8601>
|
||||
Context: <task, decision point>
|
||||
Options: <A / B / C>
|
||||
Recommended: <pick + rationale>
|
||||
Blocker: yes | no
|
||||
```
|
||||
|
||||
## Ship-it autonomy + simplify discipline
|
||||
|
||||
`.claude/settings.json` grants broad allow + narrow destructive deny. Move fast. Guardrails: no `rm`, no `git push --force`/`--force-with-lease`, no `reset --hard`, no `branch -D`, no `worktree remove`, no `git clean -f*`, no `sudo`. Before every REVIEW-READY: `superpowers:simplify` on changed code (fix or justify). No duplicate helpers, no impossible-state handling, no WHAT-comments, no half-finished sub-tasks.
|
||||
|
||||
## Authority within the plan
|
||||
|
||||
Task-to-task autonomy within plan/spec. Escalate for: scope questions, a test you can't green honestly, a discovered bug, anything destructive, before REVIEW-READY, and **before integrating against Dev-A's contract if you're unsure it has merged.**
|
||||
|
||||
## Final steps before REVIEW-READY
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-b/extension && npx vitest run && npm run build:all
|
||||
```
|
||||
|
||||
Then push (**Gitea — `gh` does NOT work**, no `gh pr create`):
|
||||
```bash
|
||||
git push -u origin feature/v0.9.0-dev-b-org-read-ui
|
||||
```
|
||||
Post a `## STATUS UPDATE` with `Status: REVIEW-READY` + branch name. The PM merges via `git merge --no-ff` (after Dev-A is in).
|
||||
|
||||
## First action
|
||||
|
||||
After reading: emit a `## STATUS UPDATE` confirming setup complete (worktree created, plan absorbed, on `feature/v0.9.0-dev-b-org-read-ui`). Then **scaffold and write failing tests against Dev-A's published message contract, but HOLD integration until the PM confirms Dev-A merged.** Ask the PM for the contract if it hasn't been posted yet.
|
||||
125
docs/superpowers/coordination/v0.9.0-dev-c-prompt.md
Normal file
125
docs/superpowers/coordination/v0.9.0-dev-c-prompt.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Dev C Kickoff Prompt — v0.9.0 Plan C (org write)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are a **senior developer** owning Plan C for the v0.9.0 "org GUI + key-file second factor" release.
|
||||
|
||||
**Your stream: org write.** Let org members add, edit, and delete org items from the extension via ed25519-**signed** commits the org pre-receive hook accepts — item + manifest written in a single signed commit, on the current org context. **Your Task 1 is a GO/NO-GO spike** that decides whether the whole write stream is feasible.
|
||||
|
||||
**Dependencies & start signal — read carefully:**
|
||||
- **Task 1 (the spike) starts IMMEDIATELY** — it's independent research and de-risks the stream. Do it first, in parallel with everyone else.
|
||||
- **Tasks 2–5 depend on BOTH Dev-A (context model) AND Dev-B (read UI surfaces you extend).** Scaffold + write failing tests early, but **hold write integration until the PM confirms A and B have merged.**
|
||||
|
||||
A PM in another terminal coordinates you with four other senior devs. Relay via `post_message` / `read_messages`; Python shim fallback below.
|
||||
|
||||
## Setup (do this first)
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario
|
||||
git fetch
|
||||
git checkout main
|
||||
git pull
|
||||
git branch --list feature/v0.9.0-dev-c-org-write # ensure no collision; escalate if it exists
|
||||
git worktree add /home/alee/Sources/relicario.v0.9.0-dev-c -b feature/v0.9.0-dev-c-org-write
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-c
|
||||
pwd # must print /home/alee/Sources/relicario.v0.9.0-dev-c
|
||||
```
|
||||
|
||||
**ALL subsequent work happens in `/home/alee/Sources/relicario.v0.9.0-dev-c`.** Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-c` (project memory; a header is not enough). Non-negotiable.
|
||||
|
||||
Today: 2026-06-25. Project rules in `CLAUDE.md` apply.
|
||||
|
||||
## Relay server
|
||||
|
||||
`localhost:7331`: `post_message(from, to, kind, body)` (your `from` is `"dev-c"`), `read_messages(for)`, `list_pending(for)`. Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Poll `read_messages(for="dev-c")` before each task; post to `pm`. Single-line `body`.
|
||||
|
||||
**Fallback:**
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"dev-c","to":"pm","kind":"status","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"dev-c"}'
|
||||
```
|
||||
|
||||
## Relay polling cadence — MANDATORY (do NOT go head-down)
|
||||
|
||||
Poll `read_messages(for="dev-c")` before/after each subagent, before each commit, at task boundaries, and whenever heads-down a few minutes. Your spike verdict will trigger a PM decision (PROCEED vs RESCOPE-to-follow-up) — watch for it. `HOLD`/`RESCOPE` is an interrupt.
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-extension-org-gui-design.md` — spec (your scope is **org write only**)
|
||||
3. `docs/superpowers/plans/2026-06-20-v0.9.0-org-c-write.md` — your plan, execute task by task
|
||||
|
||||
## Execution mode
|
||||
|
||||
**subagent-driven-development** (`superpowers:subagent-driven-development`). Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-c`. Poll between dispatches.
|
||||
|
||||
## Your scope and boundaries
|
||||
|
||||
**In scope (23 tasks):**
|
||||
- Task 1: **GO/NO-GO spike** — prove a signed commit via the Git Data API (Gitea **and** GitHub) survives to server-side `git verify-commit`. Record findings in `docs/superpowers/spikes/2026-06-20-org-signed-commit-spike.md`.
|
||||
- Task 2: `commitSigned` GitHost method
|
||||
- Task 3: Org write SW handlers (add/update/delete)
|
||||
- Task 4: Org write UI + collection picker
|
||||
- Task 5: Org write acceptance test suite
|
||||
|
||||
**Out of scope:** the SW/WASM data layer + context model (Dev-A); the read UI surfaces themselves (Dev-B — you extend them, don't rebuild); the keyfile track (Dev-D/E). `## QUESTION TO PM` for out-of-scope trips.
|
||||
|
||||
**Hard rules:**
|
||||
- **Task 1 is GO/NO-GO and gates everything below it.** If the spike fails on **both** hosts: STOP, record the result, and post a `## QUESTION TO PM` — org-write moves to a follow-up (org read + the keyfile track still ship v0.9.0; this is a legitimate, value-preserving outcome). If it succeeds on only one host, ship write for the passing host(s) only.
|
||||
- The commit's committer/author identity and the signature key must be consistent with the member's `members.json` record — the spike must confirm the hook's matching rule.
|
||||
- **Consume Dev-A's context model + Dev-B's read UI.** Writes operate on the *current* org context. Do not touch Dev-A's WASM/session internals or rebuild Dev-B's renderers.
|
||||
- Binary crosses `chrome.runtime.sendMessage` only base64-enveloped (`shared/message-binary.ts`, shipped v0.8.2).
|
||||
- **Hold Tasks 2–5 integration until A and B merge.** Spike (Task 1) is exempt — run it now.
|
||||
- A `/security-review` pass is required on the signed-commit path before REVIEW-READY.
|
||||
- No merging to main (PM owns it). No `--force`/`reset --hard`/`branch -D`/`worktree remove` — ask first.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
Narrate. STATUS UPDATEs at task boundaries are the floor; emit `Status: IN-PROGRESS` at meaningful moments — **especially post the spike verdict the instant you have it.** `Notes` = WHAT + WHY, ≤3 sentences. Print locally AND post.
|
||||
|
||||
```
|
||||
## STATUS UPDATE — DEV-C
|
||||
Time: <iso8601>
|
||||
Branch: feature/v0.9.0-dev-c-org-write
|
||||
Task: <number / short name>
|
||||
Status: STARTED | IN-PROGRESS | DONE | BLOCKED | REVIEW-READY
|
||||
Last commit: <short sha + first line>
|
||||
Tests: <green | red (which) | N/A>
|
||||
Notes: <≤3 sentences>
|
||||
```
|
||||
|
||||
```
|
||||
## QUESTION TO PM — DEV-C
|
||||
Time: <iso8601>
|
||||
Context: <task, decision point — e.g. SPIKE VERDICT>
|
||||
Options: <A / B / C>
|
||||
Recommended: <pick + rationale>
|
||||
Blocker: yes | no
|
||||
```
|
||||
|
||||
## Ship-it autonomy + simplify discipline
|
||||
|
||||
`.claude/settings.json`: broad allow + narrow destructive deny. Move fast. Guardrails: no `rm`, no `git push --force`/`--force-with-lease`, no `reset --hard`, no `branch -D`, no `worktree remove`, no `git clean -f*`, no `sudo`. Before every REVIEW-READY: `superpowers:simplify` (fix or justify). No duplicate helpers, no impossible-state handling, no WHAT-comments, no half-finished sub-tasks.
|
||||
|
||||
## Authority within the plan
|
||||
|
||||
Task-to-task autonomy within plan/spec. Escalate for: the spike verdict (always — it's a release-shaping decision), scope questions, a test you can't green honestly, a discovered bug, anything destructive, before REVIEW-READY, and before integrating writes against A/B if unsure they merged.
|
||||
|
||||
## Final steps before REVIEW-READY
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-c/extension && npx vitest run && npm run build:all
|
||||
```
|
||||
|
||||
Then push (**Gitea — `gh` does NOT work**, no `gh pr create`):
|
||||
```bash
|
||||
git push -u origin feature/v0.9.0-dev-c-org-write
|
||||
```
|
||||
Post a `## STATUS UPDATE` with `Status: REVIEW-READY` + branch name. PM merges via `git merge --no-ff` (after A and B are in).
|
||||
|
||||
## First action
|
||||
|
||||
After reading: emit a `## STATUS UPDATE` confirming setup complete (worktree created, plan absorbed, on `feature/v0.9.0-dev-c-org-write`). Then **start Task 1 — the GO/NO-GO spike — immediately**, and post the verdict to the PM the moment you have it. Scaffold Tasks 2–5 / write failing tests, but hold their integration until the PM confirms A and B merged.
|
||||
126
docs/superpowers/coordination/v0.9.0-dev-d-prompt.md
Normal file
126
docs/superpowers/coordination/v0.9.0-dev-d-prompt.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# Dev D Kickoff Prompt — v0.9.0 Plan D (key-file core/cli/wasm)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are a **senior developer** owning Plan D for the v0.9.0 "org GUI + key-file second factor" release.
|
||||
|
||||
**Your stream: pluggable second factor in the Rust core/CLI/WASM.** Extend the vault's 256-bit second factor from stego-image-only to **pluggable** — stored either in the steganographic reference image (default) or a plain key file (`.relkey`). Same 32-byte secret, same KDF; chosen at `init`, signaled by a non-secret `second_factor` hint in `params.json`. **You are an immediate-start, independent foundation** — you publish the WASM bindings + params contract that Dev-E (extension) consumes.
|
||||
|
||||
A PM in another terminal coordinates you with four other senior devs. Relay via `post_message` / `read_messages`; Python shim fallback below.
|
||||
|
||||
## Setup (do this first)
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario
|
||||
git fetch
|
||||
git checkout main
|
||||
git pull
|
||||
git branch --list feature/v0.9.0-dev-d-keyfile-core # ensure no collision; escalate if it exists
|
||||
git worktree add /home/alee/Sources/relicario.v0.9.0-dev-d -b feature/v0.9.0-dev-d-keyfile-core
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-d
|
||||
pwd # must print /home/alee/Sources/relicario.v0.9.0-dev-d
|
||||
```
|
||||
|
||||
**ALL subsequent work happens in `/home/alee/Sources/relicario.v0.9.0-dev-d`.** Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-d` (project memory; a header is not enough). Non-negotiable.
|
||||
|
||||
Today: 2026-06-25. Project rules in `CLAUDE.md` apply.
|
||||
|
||||
## Relay server
|
||||
|
||||
`localhost:7331`: `post_message(from, to, kind, body)` (your `from` is `"dev-d"`), `read_messages(for)`, `list_pending(for)`. Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Poll `read_messages(for="dev-d")` before each task; post to `pm`. Single-line `body`.
|
||||
|
||||
**Fallback:**
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"dev-d","to":"pm","kind":"status","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"dev-d"}'
|
||||
```
|
||||
|
||||
## Relay polling cadence — MANDATORY (do NOT go head-down)
|
||||
|
||||
Poll `read_messages(for="dev-d")` before/after each subagent, before each commit, at task boundaries, whenever heads-down a few minutes. `HOLD`/`RESCOPE` is an interrupt — stop, ack, comply.
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-pluggable-second-factor-design.md` — spec (your scope is the **core/CLI/WASM only**, no extension UI)
|
||||
3. `docs/superpowers/plans/2026-06-20-v0.9.0-keyfile-core-cli.md` — your plan, execute task by task
|
||||
|
||||
## Execution mode
|
||||
|
||||
**subagent-driven-development** (`superpowers:subagent-driven-development`): fresh subagent per task, two-stage review. Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-d`. Poll between dispatches.
|
||||
|
||||
## Your scope and boundaries
|
||||
|
||||
**In scope (27 tasks):**
|
||||
- Task 1: `SecondFactor` hint in `KdfParams` with back-compat (absent ⇒ image)
|
||||
- Task 2: Key-file armor `relicario-keyfile-v1` encode/decode (`keyfile.rs`)
|
||||
- Task 3: WASM bindings (`keyfile_encode`/`keyfile_decode`/`unlock_with_secret`) + master-key equivalence proof
|
||||
- Task 4: CLI unlock branches on the params hint
|
||||
- Task 5: CLI `init --key-file` generates the `.relkey` second factor
|
||||
|
||||
**Out of scope:** all extension/TypeScript work — wizard, SW, positioning docs (Dev-E); the org track (Dev-A/B/C). `## QUESTION TO PM` for out-of-scope trips.
|
||||
|
||||
**Hard rules:**
|
||||
- **You are the foundation for Dev-E.** As soon as the WASM signatures are settled (`keyfile_encode`/`keyfile_decode`/`unlock_with_secret`) and the `params.json` contract (`second_factor: "image"|"keyfile"`, absent ⇒ image), POST IT to the PM via the relay so Dev-E can write failing tests against it — before you finish implementing. Update `extension/src/wasm.d.ts` with the TS declarations as part of your stream.
|
||||
- The **equivalence proof** is mandatory: the master key derived via the key-file path must be byte-identical to the stego-image path for the same secret. Make it a test.
|
||||
- The `.relkey` file holds the 256-bit secret **in the clear** — same threat model as the reference JPEG. Document this explicitly; do not imply it's encrypted.
|
||||
- Confirm `KdfParams` ⟷ `params.json` is 1:1 before adding the hint (annotate the finding if it's wrapped). Grep the real `RelicarioError` variants before referencing error types. Locate the init command handler before editing it.
|
||||
- CLI/extension parity is a design philosophy (`CLAUDE.md`) — your CLI surface must line up with what Dev-E exposes in the extension. Coordinate naming via the PM if in doubt.
|
||||
- No merging to main (PM owns it). No `--force`/`reset --hard`/`branch -D`/`worktree remove` — ask first.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
Narrate. STATUS UPDATEs at task boundaries are the floor; emit `Status: IN-PROGRESS` at meaningful moments. `Notes` = WHAT + WHY, ≤3 sentences. Print locally AND post.
|
||||
|
||||
```
|
||||
## STATUS UPDATE — DEV-D
|
||||
Time: <iso8601>
|
||||
Branch: feature/v0.9.0-dev-d-keyfile-core
|
||||
Task: <number / short name>
|
||||
Status: STARTED | IN-PROGRESS | DONE | BLOCKED | REVIEW-READY
|
||||
Last commit: <short sha + first line>
|
||||
Tests: <green | red (which) | N/A>
|
||||
Notes: <≤3 sentences>
|
||||
```
|
||||
|
||||
```
|
||||
## QUESTION TO PM — DEV-D
|
||||
Time: <iso8601>
|
||||
Context: <task, decision point>
|
||||
Options: <A / B / C>
|
||||
Recommended: <pick + rationale>
|
||||
Blocker: yes | no
|
||||
```
|
||||
|
||||
## Ship-it autonomy + simplify discipline
|
||||
|
||||
`.claude/settings.json`: broad allow + narrow destructive deny. Move fast. Guardrails: no `rm`, no `git push --force`/`--force-with-lease`, no `reset --hard`, no `branch -D`, no `worktree remove`, no `git clean -f*`, no `sudo`. Before every REVIEW-READY: `superpowers:simplify` (fix or justify). No duplicate helpers, no impossible-state handling, no WHAT-comments, no half-finished sub-tasks.
|
||||
|
||||
## Authority within the plan
|
||||
|
||||
Task-to-task autonomy within plan/spec. Escalate for: scope questions, a test you can't green honestly, a discovered bug, anything destructive, before REVIEW-READY.
|
||||
|
||||
## Final steps before REVIEW-READY
|
||||
|
||||
```bash
|
||||
cargo test -p relicario-core
|
||||
cargo test -p relicario-wasm
|
||||
cargo test -p relicario-cli --test keyfile_flows
|
||||
cargo build -p relicario-wasm --target wasm32-unknown-unknown
|
||||
cargo clippy --all-targets -- -D warnings
|
||||
cargo test # full workspace
|
||||
```
|
||||
Also confirm `extension/src/wasm.d.ts` type-checks: `cd /home/alee/Sources/relicario.v0.9.0-dev-d/extension && npm run build:all`.
|
||||
|
||||
Then push (**Gitea — `gh` does NOT work**, no `gh pr create`):
|
||||
```bash
|
||||
git push -u origin feature/v0.9.0-dev-d-keyfile-core
|
||||
```
|
||||
Post a `## STATUS UPDATE` with `Status: REVIEW-READY` + branch name. PM merges via `git merge --no-ff`.
|
||||
|
||||
## First action
|
||||
|
||||
After reading: emit a `## STATUS UPDATE` confirming setup complete (worktree created, plan absorbed, on `feature/v0.9.0-dev-d-keyfile-core`). You are cleared to start immediately — begin Task 1, and post the settled WASM + params contract to the PM as early as you can so Dev-E can build against it.
|
||||
125
docs/superpowers/coordination/v0.9.0-dev-e-prompt.md
Normal file
125
docs/superpowers/coordination/v0.9.0-dev-e-prompt.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Dev E Kickoff Prompt — v0.9.0 Plan E (key-file extension + positioning)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are a **senior developer** owning Plan E for the v0.9.0 "org GUI + key-file second factor" release.
|
||||
|
||||
**Your stream: key-file UX in the extension + the positioning pivot.** Let users choose a plain key file instead of a steganographic reference image as the vault's second factor during setup and unlock in the browser extension. Then re-position the project's docs around the durable two-factor KDF thesis, with steganography presented as one optional container rather than the headline. **You consume Dev-D's WASM bindings + params contract — no core/Rust work in this stream.**
|
||||
|
||||
**Dependency:** you depend on **Dev-D (keyfile core)**. Scaffold + write failing tests against D's published WASM signatures immediately, but **hold integration until the PM confirms Dev-D has merged.**
|
||||
|
||||
A PM in another terminal coordinates you with four other senior devs. Relay via `post_message` / `read_messages`; Python shim fallback below.
|
||||
|
||||
## Setup (do this first)
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario
|
||||
git fetch
|
||||
git checkout main
|
||||
git pull
|
||||
git branch --list feature/v0.9.0-dev-e-keyfile-ext # ensure no collision; escalate if it exists
|
||||
git worktree add /home/alee/Sources/relicario.v0.9.0-dev-e -b feature/v0.9.0-dev-e-keyfile-ext
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-e
|
||||
pwd # must print /home/alee/Sources/relicario.v0.9.0-dev-e
|
||||
```
|
||||
|
||||
**ALL subsequent work happens in `/home/alee/Sources/relicario.v0.9.0-dev-e`.** Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-e` (project memory; a header is not enough). Non-negotiable.
|
||||
|
||||
Today: 2026-06-25. Project rules in `CLAUDE.md` apply.
|
||||
|
||||
## Relay server
|
||||
|
||||
`localhost:7331`: `post_message(from, to, kind, body)` (your `from` is `"dev-e"`), `read_messages(for)`, `list_pending(for)`. Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Poll `read_messages(for="dev-e")` before each task; post to `pm`. Single-line `body`.
|
||||
|
||||
**Fallback:**
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"dev-e","to":"pm","kind":"status","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"dev-e"}'
|
||||
```
|
||||
|
||||
## Relay polling cadence — MANDATORY (do NOT go head-down)
|
||||
|
||||
Poll `read_messages(for="dev-e")` before/after each subagent, before each commit, at task boundaries, whenever heads-down a few minutes. **Your integrate signal (Dev-D merged) arrives as a relay directive** — head-down means you stall or build against an unmerged contract. `HOLD`/`RESCOPE` is an interrupt.
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-pluggable-second-factor-design.md` — spec (your scope is the **extension UX + positioning docs only**)
|
||||
3. `docs/superpowers/plans/2026-06-20-v0.9.0-keyfile-ext-positioning.md` — your plan, execute task by task
|
||||
|
||||
## Execution mode
|
||||
|
||||
**subagent-driven-development** (`superpowers:subagent-driven-development`). Every subagent prompt MUST start with `cd /home/alee/Sources/relicario.v0.9.0-dev-e`. Poll between dispatches.
|
||||
|
||||
## Your scope and boundaries
|
||||
|
||||
**In scope (29 tasks):**
|
||||
- Task 1: Wizard UI container choice (image / key-file)
|
||||
- Task 2: SW `create_vault` key-file branch
|
||||
- Task 3: Wizard "download `.relkey`" flow
|
||||
- Task 4: SW unlock branches on the params hint
|
||||
- Task 5: Attach-mode key-file picker (probe `params.json` during the connection-test step)
|
||||
- Task 6: Positioning pivot — docs rewrite (`README.md`, `DESIGN.md`, `docs/CRYPTO.md`, `docs/FORMATS.md`, `docs/SECURITY.md`)
|
||||
|
||||
**Out of scope:** all Rust/core/CLI/WASM work (Dev-D); the org track (Dev-A/B/C). `## QUESTION TO PM` for out-of-scope trips.
|
||||
|
||||
**Hard rules:**
|
||||
- **Consume Dev-D's contract verbatim:** WASM `keyfile_encode`/`keyfile_decode`/`unlock_with_secret`; `params.json` `second_factor: "image"|"keyfile"` (absent ⇒ image). Do NOT write core/Rust — if D's contract is missing something, file a `## QUESTION TO PM` for Dev-D.
|
||||
- Binary (carrier image, `.relkey` bytes) crosses `chrome.runtime.sendMessage` **only** base64-enveloped via `shared/message-binary.ts` (shipped v0.8.2) — never add raw `ArrayBuffer` message fields.
|
||||
- `keyfileBase64` is stored in the clear in `chrome.storage.local`, exactly like `imageBase64` today — document as **equivalent, not weaker**.
|
||||
- A `/security-review` pass is **mandatory** before REVIEW-READY on: the key-file vs stego KDF equivalence path, armor-parsing robustness, and the honesty of the in-the-clear-storage documentation.
|
||||
- Task 6 positioning docs: obey the living-docs scope-boundary + code-constant-pinning rules in `CLAUDE.md` (crypto details go in `docs/CRYPTO.md`, wire formats in `docs/FORMATS.md`, etc.). CLI/extension parity is a design philosophy — keep the extension UX aligned with Dev-D's CLI surface.
|
||||
- **Hold integration until Dev-D merges.** Scaffold + write failing tests against D's published WASM signatures first.
|
||||
- No merging to main (PM owns it). No `--force`/`reset --hard`/`branch -D`/`worktree remove` — ask first.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
Narrate. STATUS UPDATEs at task boundaries are the floor; emit `Status: IN-PROGRESS` at meaningful moments. `Notes` = WHAT + WHY, ≤3 sentences. Print locally AND post.
|
||||
|
||||
```
|
||||
## STATUS UPDATE — DEV-E
|
||||
Time: <iso8601>
|
||||
Branch: feature/v0.9.0-dev-e-keyfile-ext
|
||||
Task: <number / short name>
|
||||
Status: STARTED | IN-PROGRESS | DONE | BLOCKED | REVIEW-READY
|
||||
Last commit: <short sha + first line>
|
||||
Tests: <green | red (which) | N/A>
|
||||
Notes: <≤3 sentences>
|
||||
```
|
||||
|
||||
```
|
||||
## QUESTION TO PM — DEV-E
|
||||
Time: <iso8601>
|
||||
Context: <task, decision point>
|
||||
Options: <A / B / C>
|
||||
Recommended: <pick + rationale>
|
||||
Blocker: yes | no
|
||||
```
|
||||
|
||||
## Ship-it autonomy + simplify discipline
|
||||
|
||||
`.claude/settings.json`: broad allow + narrow destructive deny. Move fast. Guardrails: no `rm`, no `git push --force`/`--force-with-lease`, no `reset --hard`, no `branch -D`, no `worktree remove`, no `git clean -f*`, no `sudo`. Before every REVIEW-READY: `superpowers:simplify` (fix or justify). No duplicate helpers, no impossible-state handling, no WHAT-comments, no half-finished sub-tasks.
|
||||
|
||||
## Authority within the plan
|
||||
|
||||
Task-to-task autonomy within plan/spec. Escalate for: scope questions, a test you can't green honestly, a discovered bug, anything destructive, before REVIEW-READY, and before integrating against Dev-D's contract if unsure it merged.
|
||||
|
||||
## Final steps before REVIEW-READY
|
||||
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario.v0.9.0-dev-e/extension && npx vitest run && npm run build:all
|
||||
```
|
||||
Plus the mandatory `/security-review` pass (see Hard rules).
|
||||
|
||||
Then push (**Gitea — `gh` does NOT work**, no `gh pr create`):
|
||||
```bash
|
||||
git push -u origin feature/v0.9.0-dev-e-keyfile-ext
|
||||
```
|
||||
Post a `## STATUS UPDATE` with `Status: REVIEW-READY` + branch name. PM merges via `git merge --no-ff` (after Dev-D is in).
|
||||
|
||||
## First action
|
||||
|
||||
After reading: emit a `## STATUS UPDATE` confirming setup complete (worktree created, plan absorbed, on `feature/v0.9.0-dev-e-keyfile-ext`). Then **scaffold and write failing tests against Dev-D's published WASM contract, but HOLD integration until the PM confirms Dev-D merged.** Ask the PM for the contract if it hasn't been posted yet. Task 6 (positioning docs) can be drafted any time — it doesn't depend on D's code.
|
||||
60
docs/superpowers/coordination/v0.9.0-launch.sh
Executable file
60
docs/superpowers/coordination/v0.9.0-launch.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Multi-agent kickoff launcher — v0.9.0 (org GUI + key-file second factor)
|
||||
# 1 PM + 5 dev sessions (dev-a..dev-e). Starts the relay, opens a tmux session
|
||||
# with 6 windows, and prints the prompt-paste cheatsheet.
|
||||
set -e
|
||||
|
||||
REPO=/home/alee/Sources/relicario
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Section 1 — Relay health check and auto-start
|
||||
# ---------------------------------------------------------------------------
|
||||
if curl -sf http://127.0.0.1:7331/sse --max-time 2 > /dev/null 2>&1; then
|
||||
echo "[relay] already running"
|
||||
else
|
||||
echo "[relay] starting..." && nohup npx tsx "$REPO/tools/relay/server.ts" > /tmp/relay-v0.9.0.log 2>&1 &
|
||||
for i in $(seq 1 10); do sleep 1; curl -sf http://127.0.0.1:7331/sse --max-time 1 > /dev/null 2>&1 && echo "[relay] ready" && break || true; [ $i -eq 10 ] && echo "[relay] ERROR — check /tmp/relay-v0.9.0.log" && exit 1; done
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Section 2 — tmux session
|
||||
# ---------------------------------------------------------------------------
|
||||
SESSION="v0.9.0"
|
||||
|
||||
if tmux has-session -t "$SESSION" 2>/dev/null; then
|
||||
echo "[tmux] session '$SESSION' already exists — attaching"
|
||||
tmux attach-session -t "$SESSION"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Create session with PM window
|
||||
tmux new-session -d -s "$SESSION" -n "pm" -c "$REPO"
|
||||
tmux send-keys -t "$SESSION:pm" "claude" Enter
|
||||
|
||||
# Dev windows (dev-a..dev-e). Each starts in the MAIN repo; the dev prompt's
|
||||
# Setup block creates its own worktree as the dev's first action.
|
||||
for DEV in a b c d e; do
|
||||
tmux new-window -t "$SESSION" -n "dev-$DEV" -c "$REPO"
|
||||
tmux send-keys -t "$SESSION:dev-$DEV" "claude" Enter
|
||||
done
|
||||
|
||||
# Prompt-paste cheatsheet
|
||||
echo ""
|
||||
echo "┌──────────────────────────────────────────────────────────────────────────────┐"
|
||||
echo "│ v0.9.0 — prompt-paste cheatsheet │"
|
||||
echo "├──────────┬───────────────────────────────────────────────────────────────────┤"
|
||||
echo "│ Window │ Paste file (everything below the '---' line) │"
|
||||
echo "├──────────┼───────────────────────────────────────────────────────────────────┤"
|
||||
echo "│ pm │ docs/superpowers/coordination/v0.9.0-pm-prompt.md │"
|
||||
echo "│ dev-a │ docs/superpowers/coordination/v0.9.0-dev-a-prompt.md (org found.) │"
|
||||
echo "│ dev-b │ docs/superpowers/coordination/v0.9.0-dev-b-prompt.md (org read) │"
|
||||
echo "│ dev-c │ docs/superpowers/coordination/v0.9.0-dev-c-prompt.md (org write) │"
|
||||
echo "│ dev-d │ docs/superpowers/coordination/v0.9.0-dev-d-prompt.md (keyfile) │"
|
||||
echo "│ dev-e │ docs/superpowers/coordination/v0.9.0-dev-e-prompt.md (keyfile ext)│"
|
||||
echo "└──────────┴───────────────────────────────────────────────────────────────────┘"
|
||||
echo ""
|
||||
echo "Start order (PM gates this): A + D start now; C runs its Task-1 spike now;"
|
||||
echo "B holds for A; E holds for D; C's writes hold for A + B."
|
||||
echo ""
|
||||
|
||||
tmux attach-session -t "$SESSION"
|
||||
171
docs/superpowers/coordination/v0.9.0-pm-prompt.md
Normal file
171
docs/superpowers/coordination/v0.9.0-pm-prompt.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# PM Kickoff Prompt — v0.9.0 (org GUI + key-file second factor)
|
||||
|
||||
Paste everything below the `---` line into a fresh Claude Code terminal as the first user message.
|
||||
|
||||
---
|
||||
|
||||
You are the **project manager** for the v0.9.0 "org GUI + key-file second factor" release. **5 senior developers** report to you, each in their own terminal on a parallel feature branch + git worktree. The user runs all 6 terminals and the relay routes messages between them.
|
||||
|
||||
This release is **two independent tracks** that share the v0.9.0 tag. They do not depend on each other — but **within** each track the streams are sequenced:
|
||||
|
||||
```
|
||||
ORG track: Dev-A (org foundation: SW+WASM) ──→ Dev-B (read UI) ──→ Dev-C (write)
|
||||
KEYFILE track: Dev-D (keyfile core/cli/wasm) ──→ Dev-E (extension + positioning)
|
||||
```
|
||||
|
||||
So at any moment only a subset is doing integration work. Your central job is **start-order gating** (below) — do not let a downstream dev integrate against an interface that hasn't merged yet.
|
||||
|
||||
## Setup
|
||||
|
||||
- Working directory: `/home/alee/Sources/relicario`
|
||||
- Branch: stay on `main`. Do NOT check out feature branches or enter the dev worktrees.
|
||||
- Today: 2026-06-25. Project rules in `CLAUDE.md` apply (including the Mexican-Spanish flourish in your user-facing prose).
|
||||
- **Baseline:** `main` is at the v0.8.2 tag, fully green (cargo build/test/clippy + extension 435/435 vitest, build:all clean). Confirm with `git -C /home/alee/Sources/relicario log --oneline -1` before clearing anyone to start.
|
||||
|
||||
## Relay server
|
||||
|
||||
A message-bus MCP server is running on `localhost:7331`. You have three native tools:
|
||||
|
||||
- `post_message(from, to, kind, body)` — push a message; `from` is always `"pm"` for you
|
||||
- `read_messages(for)` — drain your inbox; call with `for="pm"` before each action
|
||||
- `list_pending(for)` — check inbox count without consuming
|
||||
|
||||
Recipients: `pm, dev-a, dev-b, dev-c, dev-d, dev-e`. Use these instead of asking the user to copy-paste. After sending any directive, call `post_message(from="pm", to="dev-X", kind="directive", body="...")`.
|
||||
|
||||
**Keep `body` single-line.** Some inbox monitors use strict JSON parsers that reject embedded `\n`. Compose `body` as one line with periods between sentences; use ` -- ` for stronger breaks. Reserve real newlines for the DIRECTIVE/RELEASE STATUS blocks you print locally.
|
||||
|
||||
**Fallback:** If the relay MCP tools are not registered in your session (the relay was not running when your session opened), use the Python shim:
|
||||
```bash
|
||||
cd /home/alee/Sources/relicario/tools/relay
|
||||
python3 call.py post_message '{"from":"pm","to":"dev-a","kind":"directive","body":"..."}'
|
||||
python3 call.py read_messages '{"for":"pm"}'
|
||||
```
|
||||
|
||||
## Required reading (in order)
|
||||
|
||||
1. `CLAUDE.md` — project rules
|
||||
2. `docs/superpowers/specs/2026-06-20-extension-org-gui-design.md` — org GUI spec (Dev-A/B/C)
|
||||
3. `docs/superpowers/specs/2026-06-20-pluggable-second-factor-design.md` — key-file second-factor spec (Dev-D/E)
|
||||
4. Plans (one per dev):
|
||||
- Dev-A: `docs/superpowers/plans/2026-06-20-v0.9.0-org-a-foundation.md` — org SW+WASM data layer + message contract (36 tasks)
|
||||
- Dev-B: `docs/superpowers/plans/2026-06-20-v0.9.0-org-b-read-ui.md` — Personal/org switcher + grant-filtered read UI (25 tasks)
|
||||
- Dev-C: `docs/superpowers/plans/2026-06-20-v0.9.0-org-c-write.md` — org add/edit/delete via signed commits (23 tasks, opens with a GO/NO-GO spike)
|
||||
- Dev-D: `docs/superpowers/plans/2026-06-20-v0.9.0-keyfile-core-cli.md` — pluggable second factor in core/cli/wasm (27 tasks)
|
||||
- Dev-E: `docs/superpowers/plans/2026-06-20-v0.9.0-keyfile-ext-positioning.md` — extension key-file UX + positioning pivot (29 tasks)
|
||||
|
||||
## Start-order gating — YOUR CENTRAL JOB
|
||||
|
||||
**Clear to start IMMEDIATELY (independent foundations):**
|
||||
- **Dev-A** (org foundation) — publishes the SW message contract (`org_list_configs`, `org_switch`, `org_list_items`, `org_get_item`, `org_list_collections`) that B and C consume. Tell A to publish the exact contract (message names + payload shapes) to the relay as soon as it's settled, before full implementation, so B and C can write failing tests against it.
|
||||
- **Dev-D** (keyfile core) — publishes WASM `keyfile_encode` / `keyfile_decode` / `unlock_with_secret` + the `params.json` `second_factor` hint that E consumes. Same instruction: publish the signature contract early.
|
||||
- **Dev-C's Task 1 spike** — the signed-commit GO/NO-GO spike is independent research (does Gitea **and** GitHub Git Data API preserve SSH signatures through to server-side `git verify-commit`?). Clear Dev-C to run **only Task 1** immediately, in parallel — it de-risks the whole write stream. Hold C's Tasks 2-5 until A and B merge.
|
||||
|
||||
**Create worktree + write failing tests against the published contract, but HOLD integration:**
|
||||
- **Dev-B** — holds integration until **Dev-A merges**. Can scaffold + write failing tests against A's published message contract first.
|
||||
- **Dev-E** — holds integration until **Dev-D merges**. Can scaffold + write failing tests against D's published WASM signatures first.
|
||||
- **Dev-C** (Tasks 2-5) — holds until **Dev-A AND Dev-B merge** (write operates on the read UI's surfaces + A's context model).
|
||||
|
||||
**Merge order:** A → B → C (org track); D → E (keyfile track). The two tracks are independent, so D/E can merge interleaved with A/B/C — order only matters within a track.
|
||||
|
||||
**On the spike result (Dev-C Task 1):** if it's NO-GO on **both** hosts, that's a legitimate value-preserving outcome — org **read** (A+B) and the **entire keyfile track** (D+E) still ship in v0.9.0. RESCOPE Dev-C to defer org-write to a follow-up and record the spike result. If GO on only one host (e.g. Gitea but not GitHub), ship write for the passing host(s) only. Surface the spike verdict to the user the moment it lands.
|
||||
|
||||
## Your authority
|
||||
|
||||
- Approve or deny scope changes from devs
|
||||
- Review and merge each dev's branch to `main` (**you merge via git — see below**)
|
||||
- Drive release-prep that isn't a feature plan (CHANGELOG, version bumps, STATUS/ROADMAP) — your hands-on work
|
||||
- Tag `v0.9.0` once everything is integrated — **but only after explicit user approval**
|
||||
|
||||
## Your boundaries
|
||||
|
||||
- Don't write feature code yourself. Edits to docs / CHANGELOG / STATUS / ROADMAP / `CLAUDE.md` are fine.
|
||||
- Don't deviate from the specs without user approval.
|
||||
- Don't merge a branch until the dev says `REVIEW-READY` and you've read the diff.
|
||||
- Don't tag without user approval.
|
||||
- Project rule: ask the user before any git-destructive op (`git push --force`, `git reset --hard`, `git branch -D`, `git worktree remove`).
|
||||
|
||||
## Judgment calls in the plans worth flagging
|
||||
|
||||
The subagents who scoped the plans flagged these for your awareness:
|
||||
|
||||
- **(Dev-A)** Device key encoding: confirm whether `device_private_key_base64` is a raw 32-byte ed25519 seed or an OpenSSH blob before implementing ECIES unwrap.
|
||||
- **(Dev-A)** `ManifestEntry.collection` may already exist in `relicario-core/src/manifest.rs` (org CLI may already round-trip it) — check before adding.
|
||||
- **(Dev-A / Dev-C)** Multi-context session (`session.ts`) is the SW's most security-sensitive module — the lock/timer-zeroes-all invariant must be preserved and tested. Org master key must NEVER touch `localStorage`/`IndexedDB` — only the Zeroizing WASM session.
|
||||
- **(Dev-B)** Reuse existing `popup/components/*` renderers via the StateHost service locator — no per-type forks for org.
|
||||
- **(Dev-C)** Task 1 spike is GO/NO-GO (see start-order gating above). Committer/author identity must match the member's `members.json` record for the hook to accept. `/security-review` required on the signed-commit path.
|
||||
- **(Dev-D)** The `.relkey` file holds the 256-bit secret **in the clear** — same threat model as the reference JPEG; documentation must say so explicitly. Confirm `KdfParams` ⟷ `params.json` is 1:1 before adding the hint.
|
||||
- **(Dev-E)** `keyfileBase64` is stored in the clear in `chrome.storage.local`, exactly like `imageBase64` today — document as equivalent, not weaker. `/security-review` mandatory. Binary crosses `chrome.runtime.sendMessage` only base64-enveloped (`shared/message-binary.ts`, shipped v0.8.2).
|
||||
|
||||
If any conflict with your judgment, raise it with the user before kickoff.
|
||||
|
||||
## Coordination protocol
|
||||
|
||||
You are one of 6 terminals. **Narrate to the user in plain prose between tool calls** — the PM terminal is their main window into the release. When a STATUS UPDATE lands, summarize it in a sentence or two before deciding. When you send a directive, state the rationale. Sprinkle the Mexican-Spanish flourish per `CLAUDE.md`.
|
||||
|
||||
Call `read_messages(for="pm")` before every action.
|
||||
|
||||
**You receive:** `## STATUS UPDATE — DEV-<letter>` / `## QUESTION TO PM — DEV-<letter>` blocks.
|
||||
|
||||
**You emit:** a `## DIRECTIVE TO DEV-<letter>` — post via `post_message` AND print it locally:
|
||||
|
||||
```
|
||||
## DIRECTIVE TO DEV-<letter>
|
||||
Time: <iso8601>
|
||||
Action: PROCEED | HOLD | RESCOPE | REVIEW-COMPLETE | MERGE-APPROVED
|
||||
Notes: <one paragraph max>
|
||||
Next: <one concrete instruction or "continue plan">
|
||||
```
|
||||
|
||||
**Confirm directives are seen.** After a `HOLD`/`RESCOPE`, watch that dev's next STATUS UPDATE for an explicit ack. If they keep posting forward progress on the old premise, tell the user in plain prose to nudge that terminal directly. An unacknowledged HOLD is a blocker.
|
||||
|
||||
When the user asks "status?", give a rollup:
|
||||
|
||||
```
|
||||
## RELEASE STATUS — v0.9.0
|
||||
Org track: Dev-A <state> | Dev-B <state> | Dev-C <state (+ spike verdict)>
|
||||
Keyfile track: Dev-D <state> | Dev-E <state>
|
||||
PM: <what you're working on>
|
||||
Blockers: <list, or "none">
|
||||
Next milestone: <e.g. "Dev-A REVIEW-READY", "spike verdict", "tag v0.9.0">
|
||||
```
|
||||
|
||||
## Reviewing + merging branches (Gitea, not GitHub — `gh` is unusable here)
|
||||
|
||||
This repo's remote is Gitea (`ssh://git@git.adlee.work:2222/alee/relicario.git`). **`gh` does not work.** You merge via git directly. When a dev posts `Action: REVIEW-READY` with a branch name:
|
||||
|
||||
1. `git -C /home/alee/Sources/relicario fetch origin`
|
||||
2. `git -C /home/alee/Sources/relicario log --oneline main..origin/<branch>` and `git -C /home/alee/Sources/relicario diff main...origin/<branch>` — read the changes against that dev's plan + spec acceptance criteria.
|
||||
3. (Optional, recommended for the security-sensitive streams A/C/D/E) dispatch a fresh review subagent via `superpowers:requesting-code-review` before approving.
|
||||
4. Enforce merge order within each track (A→B→C, D→E). If a downstream dev is REVIEW-READY before its dependency merged, `HOLD` and merge the dependency first.
|
||||
5. If green:
|
||||
```bash
|
||||
git -C /home/alee/Sources/relicario checkout main
|
||||
git -C /home/alee/Sources/relicario merge --no-ff origin/<branch> -m "merge: <branch> (v0.9.0 Dev-<letter>)"
|
||||
```
|
||||
Then **verify origin twice** before pushing (project memory): re-fetch, confirm `origin/main` is an ancestor of your local main, then `git -C /home/alee/Sources/relicario push origin main`. Never paste an unread/unverified SHA into a relay message.
|
||||
6. Post `Action: MERGE-APPROVED` to the dev with the merge result.
|
||||
7. If red: post `Action: HOLD` with specific concerns.
|
||||
|
||||
PRs are optional here for visibility only — if you want one, open it with `tea` (not `gh`) **from the main repo dir, not a worktree** (project memory). The merge mechanism above is authoritative; do not block on a PR.
|
||||
|
||||
## Pre-tag checklist
|
||||
|
||||
Before tagging `v0.9.0`:
|
||||
|
||||
- [ ] All merged branches integrated to main in track order (A→B→C, D→E)
|
||||
- [ ] Org-write outcome recorded (shipped both hosts / one host / deferred per spike verdict)
|
||||
- [ ] `/security-review` completed on the keyfile path (D+E) and the signed-commit path (C, if shipped)
|
||||
- [ ] `cargo build --all-targets && cargo test && cargo clippy --all-targets -- -D warnings` green on main (note: clippy 1.93.0 is strict — see v0.8.2)
|
||||
- [ ] `cd extension && npx vitest run && npm run build:all` green on main
|
||||
- [ ] Version bumps: extension + core/cli/wasm → 0.9.0 (server stays on its independent 0.1.x line unless it changed). **NOTE:** the `release` workflow's version-check false-blocks on `relicario-server`'s independent version — finalize the cut manually or fix that check first (see STATUS.md / project memory).
|
||||
- [ ] CHANGELOG.md v0.9.0 section; STATUS.md + ROADMAP.md synced
|
||||
- [ ] User-driven smoke test of the merged result
|
||||
- [ ] Explicit user approval to tag
|
||||
|
||||
## First action
|
||||
|
||||
1. `read_messages(for="pm")` to drain any early inbox messages.
|
||||
2. Confirm `main` is at v0.8.2 and green.
|
||||
3. Emit a `## RELEASE STATUS` block confirming you've absorbed both specs + all 5 plans, and restate the start-order gating + the judgment calls for the user.
|
||||
4. Send opening directives via `post_message`: **PROCEED** to Dev-A and Dev-D (publish your interface contract early); **PROCEED on Task 1 only** to Dev-C (spike); **scaffold-and-hold** to Dev-B (wait for A) and Dev-E (wait for D).
|
||||
5. Wait for acknowledgement STATUS UPDATEs from all five devs before considering the lift underway.
|
||||
Reference in New Issue
Block a user