docs(prd): Mosaic Stack PRD draft 0.1 from PRDY round 1; lead decision 45

Round 1 answers fill users, problems, hard limits, hosting and the v1
done measure. Decision 45 raises Sage's seat limit to 4 Opus 5.5 and 4
Sonnet 5.5 sessions.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 14:12:38 -05:00
co-authored by Claude Opus 5.5
parent 8a3e672f4a
commit 9c69f2fba3
3 changed files with 137 additions and 0 deletions
+2
View File
@@ -466,3 +466,5 @@ are never rewritten or removed; corrections are new entries.
2026-10-04T18:52:41Z | Sage (T3 Claude Code, thread 1ef1e4f8) | row 5 r1 routing (#1507) | pushed darkwing's queue commit 5a5013c4 (verify rev 53 ok); woke Dewey (84fb346c, stopped) with B1/B2 rework under decision 42, and Filbert's session restarted on my INFO; Sage-launched sessions running: 2 of 2 (dewey, filbert); one round 2 to both reviewers after rework
2026-10-04T19:00:33Z | Filbert (T3 Claude Code, thread 9cb9731e) | row 5 CHAT-03 I1 review round 1 (#1507) | candidate 1404341e (27 files) verified frozen in a scratch clone and an export; §10 suites green (conductor 17/17 needs a git clone, queue 27 + 2 canonical-only skips); changes requested: B1 terminal Enter concatenation, B2 split paste-start ESC, B3 parallel force-stop escalations corrupt claim phaseStarted, B4 no test kills decision 34, B5 K12 freeze unproven (no-freeze mutant 18/18), B6 K15 missing-path case absent (ENOENT mutant 18/18); 20 notes; comment 26683, recorded rev 54 (filbert-5-r1-changes), committed f0b13a2f via queue-commit.sh, not pushed; review file agents/filbert/work/chat-03-i1-review-r1-2026-10-04.md (0444, uncommitted); REVIEW-RESULT to Dewey, copy to Sage; Darkwing's 26681 is on #1508, not the round's #1507 (flagged to Sage); rev 55 (jason park row 32) left uncommitted
2026-10-04T19:01:37Z | Sage (T3 Claude Code, thread 1ef1e4f8) | foundation ratified, row 32 parked, row 5 r1 records | Jason ratified the foundation direction (lead decision 44; goals page superseded in part); row 32 parked on Jason's word (rev 55, 3270cc4e); row 5 r1 closed with both reviewers requesting changes (darkwing 26681, filbert 26683), both review files committed; pointer comment 26685 on #1507 for darkwing's verdict that landed on #1508; DEFERRED item for review record not checking the comment's issue
2026-10-04T19:12:27Z | Filbert (T3 Claude Code, thread 9cb9731e) | meta-harness survey started (slice 1 step 8, Sage ASSIGNMENT) | research only in agents/filbert/work/; no commits; row 5 round 2 takes priority
2026-10-04T19:12:38Z | Sage (T3 Claude Code, thread 1ef1e4f8) | PRDY round 1, seat launches (decision 45) | PRD draft 0.1 at docs/prd/mosaic-stack.md; launched Researcher (T3 Sonnet 5.5, thread 9bac0794) for the Vikunja and Pocket ID report; assigned Darkwing the slice 1 data model note and Filbert the meta-harness survey (both T3 Opus 5.5, existing threads); Dewey on the row 5 rework; running under the new limits: Opus 3 of 4 (dewey, darkwing, filbert), Sonnet 1 of 4 (researcher)
+27
View File
@@ -665,3 +665,30 @@ which stay with him. Each item names who decided it and what happened.
write-once files (canon invariant 5). The decision and message
tables are append-only: a correction is a new row, never an update.
That keeps invariant 9's rule for logs.
45. **PRDY round 1 answers and more seat sessions (2026-10-04).** Jason,
thread 1ef1e4f8. The answers fill `docs/prd/mosaic-stack.md`
(draft 0.1):
1. Users: "D". Jason alone for now, built so outside users can
install it later.
2. Problems, in order: "A, C, B". Admin falls on Jason; he can't see
what agents are doing or what's waiting on him; agents drift.
3. Hard limits: "all five". No spend without Jason. No speaking
externally as Jason without approval. No founder credentials in
agents. Not a multi-tenant SaaS in v1. It wraps the harnesses and
doesn't replace them.
4. Hosting: "A first". Self-hosted, with cloud not ruled out later.
5. v1 done: "A". Mosaic Stack builds pieces of itself from
one-sentence CLI requests, five in a row, with only gated
decisions reaching Jason and a full trail.
Session limit: "You are now permitted to run more than 2 agent
sessions. ... Opus 5.5 and Sonnet 5.5 should be able to run as many as
4 sessions each." This replaces decision 42's limit of two. Sage may
run up to 4 Opus 5.5 and up to 4 Sonnet 5.5 roster-seat sessions at
once, in T3, in the mosaic-stack project. Sage's own thread isn't
counted. Every other limit from decision 42 stands: roster seats only,
each launch logged in SESSIONS, revocable with one word, and no new
roles, credentials, push or merge. The roster lists Pi for Darkwing,
Dewey, Filbert and Researcher, but their T3 sessions run on Claude
Code. Sage reads Jason's ruling as covering those T3 Claude sessions.
The first launch under it is a Researcher thread on Sonnet 5.5
(9bac0794), researching Vikunja and Pocket ID.
+108
View File
@@ -0,0 +1,108 @@
# PRD: Mosaic Stack
- Status: draft, version 0.1. Jason approves it, and once approved it is
never edited in place. Changes after approval are a new version.
- Owner: Jason. Sage writes it from the PRDY interview.
- Template: PRDY "software" (`v1/packages/prdy/src/templates.ts`), filled
by hand until PRDY is ported.
- Interview record: Sage's thread 1ef1e4f8. Round 1 was answered on
2026-10-04 and is recorded as lead decision 45.
## Introduction
### Objective
Working north star, ratified as lead decision 44: "Jason declares
businesses, projects and roles. Agents in those roles carry the work end
to end under declared policy, and only gated decisions reach him."
### Context
See `docs/plans/2026-10-04_foundation-direction.md`. Agents can already do
real work here, but a person has to launch them, relay between them, hand
them credentials and correct them. There's no CLI or complete WebUI for
Jason, and no place where outstanding decisions collect.
## Users
Jason alone for now. The stack must be built so outside users can install
it later: an installer, no paths or names specific to Jason, and
configuration through the variable layers (round 1, answer D).
## Problem statement
In priority order (round 1):
1. **Admin falls on Jason.** He launches seats, relays between them,
finds credentials and corrects them.
2. **Jason can't see what the agents are doing or what's waiting on
him.**
3. **Agents drift from what the business needs.** Nothing ties a piece of
work to a stated goal.
Credential sprawl wasn't picked as a top problem. The roles work and hard
limit C cover it.
## Scope and non-goals
### Hard limits
Every one of these is a gated decision, or simply not done (round 1,
"all five"):
- A. The stack never spends money without Jason.
- B. It never speaks externally as Jason without his approval.
- C. Agents never hold Jason's personal credentials. Each role gets its own.
- D. It is not a multi-tenant SaaS in v1.
- E. It doesn't replace Claude Code, Codex or Pi. It wraps them.
### Where it runs
Self-hosted first, on Jason's machines and homelab (round 1, "A first").
Cloud workers aren't ruled out later.
### In scope for v1
Slice 1 of the foundation direction:
- roles, variables and credentials per role;
- decision records and messages addressed by role;
- tasks in Vikunja through its API;
- the `mosaic` CLI, then the WebUI;
- the meta-harness.
### Out of scope for v1
To be set in round 2.
## Requirements
To be set in rounds 2 and 3. Each requirement gets a stable id
(`REQ-<area>-<n>`). Every task the stack creates must cite one.
## Acceptance criteria and success measures
v1 is done when Jason gives one-sentence requests in the CLI and Mosaic
Stack builds pieces of itself from them, five pieces in a row. For each
piece:
- only gated decisions reach Jason;
- every step leaves a trail in the CLI and the WebUI.
(Round 1, answer A.)
## Technical considerations
Ratified as lead decision 44:
- Vikunja is integrated through its API, never annexed. Mosaic Stack's
own work uses a dedicated local instance. The installer offers an
existing instance or the bundled one.
- Decisions and messages live in SQLite, in append-only tables. Run
records stay as write-once files.
- People sign in through Pocket ID, wired in after slice 1. Agents use
service tokens per role.
## Risks and open questions
To be set in round 3.
## Milestones
Slice 1 first, in the order on the foundation direction page. The
milestones get set once the requirements exist.