Plans and start prompts for every milestone; SPEC v0.2

PLAN-<id>.md for U1, U2, M1, M2a, M2b, M2c-dev, M2c-pi, M3, M4, M5, M6,
M7a-M7f, M8, M9, M10, M11, each with the eleven fixed sections, and a
start prompt per plan in prompts/ plus prompts/README.md (dependency
order and parallel waves).

SPEC v0.2: owner answers D-001 (development-first, M2c split into
M2c-dev and M2c-pi, Gitea registry), D-002 (local backups deleted once
on Drive), D-003 (Splitwise CSV format, English and Swedish variants,
category mapping), OQ-1, OQ-2, OQ-4 answered; M1's readings of
ambiguous contract points stated explicitly in §14.3 to §14.5.
HANDOFF §2 lists the plans.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 21:05:34 +02:00
parent c6df2ab8f5
commit 5e1be38364
46 changed files with 2398 additions and 54 deletions
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M1 Contracts and vectors
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M1: Contracts and vectors. You have no context other than this prompt and the files it names.
Read PLAN-M1.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Already landed as `c6df2ab`; this prompt is on record only.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m1 -b agent-m1 main`; work only there, on branch `agent-m1`; then copy the git-ignored files the plan names.
- Edit only `contracts/**`, `tools/contracts-check.py`; anything else is a contract request to the orchestrator.
- Gate: `python3 tools/contracts-check.py`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M1.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M10 First release
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M10: First release. You have no context other than this prompt and the files it names.
Read PLAN-M10.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Give the keystore parameters (algorithm, size, validity); name this agent as the one on the phone.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m10 -b agent-m10 main`; work only there, on branch `agent-m10`; then copy the git-ignored files the plan names.
- Edit only `infra/README.md`, `infra/RESTORE.md`, `docs/validation/first-release.md`, `docs/validation/restore-drill.md`; anything else is a contract request to the orchestrator.
- Gate: the two validation files complete; server RSS under 100 MB. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M10.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M11 Import history
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M11: Import history. You have no context other than this prompt and the files it names.
Read PLAN-M11.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Settle open points (a) to (c) below.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m11 -b agent-m11 main`; work only there, on branch `agent-m11`; then copy the git-ignored files the plan names.
- Edit only `docs/validation/splitwise-import.md`; anything else is a contract request to the orchestrator.
- Gate: imported balances equal Splitwise's total rows per group. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M11.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M2a Server skeleton and kvitt-domain
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M2a: Server skeleton and kvitt-domain. You have no context other than this prompt and the files it names.
Read PLAN-M2a.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Settle the plan's open points (a) to (f) in the notes below.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m2a -b agent-m2a main`; work only there, on branch `agent-m2a`; then copy the git-ignored files the plan names.
- Edit only `server/Cargo.toml`, `server/rust-toolchain.toml`, `server/Dockerfile`, `server/crates/kvitt-domain/**`, the M2a files of `kvitt-server` (PLAN §4); anything else is a contract request to the orchestrator.
- Gate: `cargo fmt --check && cargo clippy -- -D warnings && cargo test` in `server/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M2a.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M2b Android skeleton and :domain
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M2b: Android skeleton and :domain. You have no context other than this prompt and the files it names.
Read PLAN-M2b.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Settle the plan's open points (a) to (g) in the notes below; say whether this agent may use the phone.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m2b -b agent-m2b main`; work only there, on branch `agent-m2b`; then copy the git-ignored files the plan names.
- Edit only the Gradle root files, `android/build-logic/**`, `android/core/model/**`, `android/domain/**`, `android/core/fakes/**`, the `:app` shell (PLAN §4); anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M2b.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M2c-dev Infra for development (D-001)
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M2c-dev: Infra for development (D-001). You have no context other than this prompt and the files it names.
Read PLAN-M2c-dev.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: State whether the agent may write `infra/secrets/` and `android/app/google-services.json` in the main checkout and run gcloud/firebase.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m2c-dev -b agent-m2c-dev main`; work only there, on branch `agent-m2c-dev`; then copy the git-ignored files the plan names.
- Edit only `infra/**` (dev parts), plus git-ignored secrets in the main checkout if allowed below; anything else is a contract request to the orchestrator.
- Gate: `docker compose -f infra/dev/compose.yaml config`, shellcheck, `/health` from Mac and phone, one local backup. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M2c-dev.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M2c-pi Infra on the Pi (D-001)
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M2c-pi: Infra on the Pi (D-001). You have no context other than this prompt and the files it names.
Read PLAN-M2c-pi.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Give the OQ-3 answers and settle open points (a) to (c) below; runs after M8, before M10.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m2c-pi -b agent-m2c-pi main`; work only there, on branch `agent-m2c-pi`; then copy the git-ignored files the plan names.
- Edit only `infra/**`; anything else is a contract request to the orchestrator.
- Gate: `docker compose -f infra/compose.yaml config`, shellcheck, cert, `/health` on mobile data, Drive backup. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M2c-pi.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M3 Server core API
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M3: Server core API. You have no context other than this prompt and the files it names.
Read PLAN-M3.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Settle the plan's open points (a) to (d) below (M3/M4 coupling first).)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m3 -b agent-m3 main`; work only there, on branch `agent-m3`; then copy the git-ignored files the plan names.
- Edit only the M3 files of `kvitt-server` (PLAN §4); anything else is a contract request to the orchestrator.
- Gate: `cargo fmt --check && cargo clippy -- -D warnings && cargo test` in `server/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M3.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M4 Server sync, audit, push, scheduler
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M4: Server sync, audit, push, scheduler. You have no context other than this prompt and the files it names.
Read PLAN-M4.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Settle the plan's open points (a) to (c) below.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m4 -b agent-m4 main`; work only there, on branch `agent-m4`; then copy the git-ignored files the plan names.
- Edit only the M4 files of `kvitt-server` (PLAN §4); anything else is a contract request to the orchestrator.
- Gate: `cargo fmt --check && cargo clippy -- -D warnings && cargo test` in `server/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M4.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M5 Android data layer
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M5: Android data layer. You have no context other than this prompt and the files it names.
Read PLAN-M5.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Say whether this agent may use the phone (instrumented tests).)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m5 -b agent-m5 main`; work only there, on branch `agent-m5`; then copy the git-ignored files the plan names.
- Edit only `android/data/**`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M5.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M6 Design system
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M6: Design system. You have no context other than this prompt and the files it names.
Read PLAN-M6.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Confirm U2 approval, the §9.7 hex spec change, font clearance, and open point (a) below.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m6 -b agent-m6 main`; work only there, on branch `agent-m6`; then copy the git-ignored files the plan names.
- Edit only `android/core/design/**`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M6.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7a Feature onboarding
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7a: Feature onboarding. You have no context other than this prompt and the files it names.
Read PLAN-M7a.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7a -b agent-m7a main`; work only there, on branch `agent-m7a`; then copy the git-ignored files the plan names.
- Edit only `android/feature/onboarding/**`, `.../fakes/onboarding/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7a.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7b Feature home and account
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7b: Feature home and account. You have no context other than this prompt and the files it names.
Read PLAN-M7b.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7b -b agent-m7b main`; work only there, on branch `agent-m7b`; then copy the git-ignored files the plan names.
- Edit only `android/feature/home/**`, `android/feature/account/**`, `.../fakes/home/`, `.../fakes/account/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7b.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7c Feature expense
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7c: Feature expense. You have no context other than this prompt and the files it names.
Read PLAN-M7c.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7c -b agent-m7c main`; work only there, on branch `agent-m7c`; then copy the git-ignored files the plan names.
- Edit only `android/feature/expense/**`, `.../fakes/expense/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7c.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7d Feature settle
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7d: Feature settle. You have no context other than this prompt and the files it names.
Read PLAN-M7d.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7d -b agent-m7d main`; work only there, on branch `agent-m7d`; then copy the git-ignored files the plan names.
- Edit only `android/feature/settle/**`, `.../fakes/settle/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7d.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7e Feature analytics
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7e: Feature analytics. You have no context other than this prompt and the files it names.
Read PLAN-M7e.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7e -b agent-m7e main`; work only there, on branch `agent-m7e`; then copy the git-ignored files the plan names.
- Edit only `android/feature/analytics/**`, `.../fakes/analytics/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7e.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+23
View File
@@ -0,0 +1,23 @@
# Start prompt: M7f Feature settings
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M7f: Feature settings. You have no context other than this prompt and the files it names.
Read PLAN-M7f.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m7f -b agent-m7f main`; work only there, on branch `agent-m7f`; then copy the git-ignored files the plan names.
- Edit only `android/feature/settings/**`, `.../fakes/settings/`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M7f.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M8 App integration
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M8: App integration. You have no context other than this prompt and the files it names.
Read PLAN-M8.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Confirm the extra `:app` deliverables (PLAN §4 note); name this agent as the one on the phone.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m8 -b agent-m8 main`; work only there, on branch `agent-m8`; then copy the git-ignored files the plan names.
- Edit only `android/adapter/fcm/**`, `android/app/**`; anything else is a contract request to the orchestrator.
- Gate: `PATH=/opt/homebrew/opt/openjdk@25/bin:$PATH ../tools/gradle-serial.sh check` in `android/` plus the on-phone offline test. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M8.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+24
View File
@@ -0,0 +1,24 @@
# Start prompt: M9 Splitwise importer
You are an Opus implementation agent on Kvitt (repository `/Users/jhag/projects/kvitt`), milestone M9: Splitwise importer. You have no context other than this prompt and the files it names.
Read PLAN-M9.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both.
Numbers you may use (from the orchestrator):
- Next free decision id: {{NEXT_DECISION}}
- Spec version for any spec change: {{SPEC_VERSION}}
- Schema version for any schema change: {{SCHEMA_VERSION}}
If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever the number would go and say so in the report.
Orchestrator notes for this run:
(To fill: Say whether the optional real-file dry run (step 7) is allowed.)
{{ORCHESTRATOR_NOTES}}
Essentials (the plan has the detail):
- First step: from the main checkout, `git worktree add .claude/worktrees/agent-m9 -b agent-m9 main`; work only there, on branch `agent-m9`; then copy the git-ignored files the plan names.
- Edit only `server/crates/kvitt-import/**`; anything else is a contract request to the orchestrator.
- Gate: `cargo fmt --check && cargo clippy -- -D warnings && cargo test` in `server/`. Report only results you ran in this session.
- Stop and ask when the plan says so, when a step could touch the owner's real data, or when the spec is ambiguous in a way that changes a decision.
- Commit on your branch when the gate is green, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-M9.md §10: branch, head commit hash, gate result lines, versions chosen with sources, numbering used, how the orchestrator notes were applied, HUMAN steps outstanding (worded for relay), contract requests, open questions and spec gaps with section numbers.
+41
View File
@@ -0,0 +1,41 @@
# Start prompts
One ready-to-paste start prompt per plan (`PLAN-<id>.md` at the repository root), plus `ORCHESTRATOR-prompt.md`. Before pasting, the orchestrator fills `{{NEXT_DECISION}}`, `{{SPEC_VERSION}}`, `{{SCHEMA_VERSION}}` (disjoint ranges for agents that run in parallel, CLAUDE.md › Numbering) and `{{ORCHESTRATOR_NOTES}}` (answers to the plan's open points, phone assignment, overrides). `U2.md` also takes `{{OWNER_PICK_AND_COMMENTS}}`. U1 and U2 run in the owner's own Claude session on branch `agent-ux`.
Dependencies follow SPEC §11.1 and §11.2 (v0.2, D-001). Status as of 2026-10-17: M0 done, M1 landed (`c6df2ab`).
## Dependency order and waves
Plans in the same wave can run in parallel (they own disjoint paths, SPEC §14.7). Android agents share one Gradle build at a time (`tools/gradle-serial.sh`) and one agent on the phone at a time.
| Wave | Plan | Prompt | Depends on | Parallel with |
|---|---|---|---|---|
| 0 | M1 Contracts and vectors | `M1.md` | M0 | done (`c6df2ab`) |
| 0 | U1 UX directions | `U1.md` | M0 | everything in waves 0 to 2 (owner's session) |
| 1 | M2a Server skeleton and `kvitt-domain` | `M2a.md` | M1 | M2b, M2c-dev, U1/U2 |
| 1 | M2b Android skeleton and `:domain` | `M2b.md` | M1 | M2a, M2c-dev, U1/U2 |
| 1 | M2c-dev Infra for development | `M2c-dev.md` | M0 (its health check needs M2a's image) | M2a, M2b, U1/U2 |
| 1 | U2 UX design spec | `U2.md` | U1 and the owner's pick | M2a, M2b, M2c-dev, wave 2 |
| 2 | M3 Server core API | `M3.md` | M2a | M4 (see coupling below), M5, M6 |
| 2 | M4 Server sync, audit, push, scheduler | `M4.md` | M2a | M3, M5, M6 |
| 2 | M5 Android data layer | `M5.md` | M1, M2b | M3, M4, M6 |
| 2 | M6 Design system | `M6.md` | U2 approved, M2b, the §9.7 colour spec change | M3, M4, M5 |
| 3 | M7a Feature onboarding | `M7a.md` | M6 | M7b to M7f, M9 |
| 3 | M7b Feature home and account | `M7b.md` | M6 | M7a, M7c to M7f, M9 |
| 3 | M7c Feature expense | `M7c.md` | M6 | M7a, M7b, M7d to M7f, M9 |
| 3 | M7d Feature settle | `M7d.md` | M6 | M7a to M7c, M7e, M7f, M9 |
| 3 | M7e Feature analytics | `M7e.md` | M6 | M7a to M7d, M7f, M9 |
| 3 | M7f Feature settings | `M7f.md` | M6 | M7a to M7e, M9 |
| 3 | M9 Splitwise importer | `M9.md` | M2a, M4 | M5, M6, M7a to M7f |
| 4 | M8 App integration | `M8.md` | M3, M4, M5, M7a to M7f, M2c-dev | M9 if still running |
| 5 | M2c-pi Infra on the Pi | `M2c-pi.md` | M2c-dev, M8; OQ-3 answered | none needed |
| 6 | M10 First release | `M10.md` | M2c-pi, M3, M4, M8 | none |
| 7 | M11 Import history | `M11.md` | M9, M10 | none |
## Constraints the orchestrator must keep in mind
- **M3 and M4 are coupled** through recurring generation (E-28 generates a due period; §9.5 logic, audit writer and push queue are M4's). Decide the interface before starting both (PLAN-M3 open point a, PLAN-M4 open point b), or land M4's generation function first.
- **M2a and M2b need the stub-file decisions** in their notes before starting (PLAN-M2a open points a to f, PLAN-M2b open points a to g): they create files in directories §14.7 gives to later milestones.
- **M7a to M7f** need M2b's feature convention (Hilt or not, navigation callbacks) and M6's shared components (ledger rows, expense form fields) settled first.
- **Phone:** M2b (one `installDebug`), M5 (only if instrumented tests), M8 and M10 use the phone; only one at a time, named in the notes.
- **Outside the repository:** M2c-dev (gcloud, Firebase, secrets in the main checkout), M2c-pi (SSH to the Pi, Gitea, Drive), M8 (dev server on the Mac), M10 and M11 (production) need the owner's allowance in the notes.
+17
View File
@@ -0,0 +1,17 @@
# Start prompt: U1 UX directions
You are an Opus UX agent on Kvitt (repository `/Users/jhag/projects/kvitt`), working in the owner's own Claude session. Kvitt is a shared-expense Android app for two people in Sweden. You have no context other than this prompt and the files it names: everything you need is in SPEC.md §13 UX sprint and the sections §13 cites, listed in the plan.
Read PLAN-U1.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both. You write no Kotlin.
Numbers (normally none are needed for UX work): next decision {{NEXT_DECISION}}, spec version {{SPEC_VERSION}}, schema version {{SCHEMA_VERSION}}. If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever a number would go.
Setup and limits:
- Work on branch `agent-ux` in the worktree `.claude/worktrees/agent-ux`: from the main checkout, `git worktree add .claude/worktrees/agent-ux -b agent-ux main`, then `git reset --hard main` inside it. Do not use any other branch or worktree (an old `UX-sprint` branch exists elsewhere; ignore it).
- Commit only files under `docs/ux/`. Edit nothing else, SPEC.md and CLAUDE.md included.
- Deliver 2 or 3 directions per SPEC §13.4 phase 1: HTML in a 411 dp phone frame, the six screens S-4, S-7, S-5, S-9, S-11, S-8 in light and dark, Swedish copy, realistic data for Jacob and Anna, PNG exports, and `docs/ux/directions/README.md` with the comparison and your recommendation.
- No external requests except Google Fonts for a font that may be bundled in an Android app. No placeholder text.
- Stop and ask before installing any tool (for example a headless browser for PNG export).
- Commit on `agent-ux`, `git rebase main`. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-U1.md §10: branch, head commit hash, files produced with PNG counts, fonts and licences, your recommendation in one line, open questions and spec gaps with section numbers, and the owner's next step ("Review 2-3 directions, pick one, give comments") with the PNG paths.
+19
View File
@@ -0,0 +1,19 @@
# Start prompt: U2 UX design spec
You are an Opus UX agent on Kvitt (repository `/Users/jhag/projects/kvitt`), working in the owner's own Claude session. Kvitt is a shared-expense Android app for two people in Sweden. You have no context other than this prompt and the files it names: everything you need is in SPEC.md §13 UX sprint and the sections §13 cites, listed in the plan.
Read PLAN-U2.md and follow it; CLAUDE.md rules apply. SPEC.md wins over both. You write no Kotlin.
Numbers (normally none are needed for UX work): next decision {{NEXT_DECISION}}, spec version {{SPEC_VERSION}}, schema version {{SCHEMA_VERSION}}. If a value is still a `{{…}}` placeholder, write `TODO(spec)` wherever a number would go.
The owner's pick and comments on the U1 directions:
{{OWNER_PICK_AND_COMMENTS}}
Setup and limits:
- Work on branch `agent-ux` in `.claude/worktrees/agent-ux`. If that worktree still exists (U1 not landed), continue there and `git rebase main`; otherwise, from the main checkout, `git worktree add .claude/worktrees/agent-ux -b agent-ux main`, then `git reset --hard main` inside it.
- Commit only files under `docs/ux/`. Edit nothing else; the §9.7 colour change is a proposal file, the orchestrator changes SPEC.md.
- Deliver `docs/ux/design-spec.md` (tokens, components, every screen S-1 to S-22 with every §13.3 state or "not applicable"), `docs/ux/strings.csv` (`key,en,sv,notes`, every string), `docs/ux/screens/` PNGs, `docs/ux/colour-tokens-proposal.md`.
- Gate: every string key has `en` and `sv`; every screen has all states of §13.3.
- Stop and ask before installing any tool. Commit on `agent-ux`, `git rebase main`. Never merge, push or remove the worktree.
Report: end with the report described in PLAN-U2.md §10: branch, head commit hash, gate self-check lines, how each owner comment was addressed, the proposed colour values, fonts and licences, open questions and spec gaps with section numbers, and the owner's next step ("Approve the design spec").