diff --git a/docs/fleet/NORTH_STAR.md b/docs/fleet/NORTH_STAR.md index 3c6b37f..193559e 100644 --- a/docs/fleet/NORTH_STAR.md +++ b/docs/fleet/NORTH_STAR.md @@ -7,7 +7,7 @@ ## Mission -A self-driving Mosaic delivery fleet that 24/7 unattended converts a machine-readable goal set into merged, CI-green, budget-bounded change — looping plan→backlog→assign→execute→verify→merge→reassess — on Mosaic's OWN native backlog/dispatch engine. +A self-driving Mosaic system that 24/7 unattended converts a machine-readable goal set into merged, CI-green, budget-bounded change — looping plan→backlog→assign→execute→verify→merge→reassess — on Mosaic's OWN native backlog/dispatch engine. Mosaic is general-purpose: the user declares the system type they want (software delivery, personal assistant, research, business/operations, …) and the orchestrator provisions the matching persona roster and structure; the delivery fleet is one profile among many. ## Substrate @@ -23,6 +23,7 @@ The Mosaic Backlog is the backlog of record + dispatch engine, built on Mosaic's - **NS-6** — Context cleared between tasks for ephemeral runners (reset_between_tasks); persona+mission re-injected per task. - **NS-7** — Meta-loop (session-review + enhancer) continuously proposes small fleet-improvement PRs. - **NS-8** — Single operator-flippable PAUSE kill-switch (fleet/run/PAUSED) honored before every dispatch and every merge. +- **NS-9** — Mosaic is a general-purpose multi-agent system: the user declares the SYSTEM TYPE to run (e.g. software delivery, personal assistant, research, business/operations) and the orchestrator provisions the matching persona roster and org structure from a cross-domain baseline persona library; the delivery/coding fleet is one profile among many. ## Success criteria @@ -31,38 +32,46 @@ The Mosaic Backlog is the backlog of record + dispatch engine, built on Mosaic's - **AC-NS-3** — No PR merges with failure/error/no-status/timeout CI, and none bypass pr-merge.sh. - **AC-NS-4** — TTL is enforced on claims; token caps remain advisory until a real meter exists. - **AC-NS-5** — Flipping fleet/run/PAUSED halts dispatch and merges within one tick. +- **AC-NS-6** — A user can declare a system type and the fleet provisions the matching persona roster + topology from the baseline library, with no code change. +- **AC-NS-7** — A user-customized persona (edited or added via the orchestrator) survives `mosaic update`: baseline reseed never clobbers user overrides. ## Workstreams -| id | title | -| --- | ---------------------------------------------------------------- | -| A | Substrate — Mosaic Backlog on native Postgres storage service | -| B | Supervisor — movement guarantee, two-agent floor, dispatch/claim | -| C | Planner — goal decomposition into independently-shippable cards | -| D | Merge-gate — single approver, pr-merge.sh after CI wait | -| E | Meta-loop — session-review + enhancer improvement PRs | -| F | Safety-rails — TTL claims, advisory spend, PAUSE kill-switch | +| id | title | +| --- | ----------------------------------------------------------------------------------------------------------- | +| A | Substrate — Mosaic Backlog on native Postgres storage service | +| B | Supervisor — movement guarantee, two-agent floor, dispatch/claim | +| C | Planner — goal decomposition into independently-shippable cards | +| D | Merge-gate — single approver, pr-merge.sh after CI wait | +| E | Meta-loop — session-review + enhancer improvement PRs | +| F | Safety-rails — TTL claims, advisory spend, PAUSE kill-switch | +| H | Personas & system profiles — cross-domain library, system-type provisioning, update-surviving customization | ## Goals (backlog projection) -| id | title | phase | priority | depends_on | -| --- | ---------------------------------------------------------------------- | ----- | ----------- | ---------- | -| A1 | Machine-readable NORTH_STAR.yaml + Markdown projection | 1 | must-have | — | -| A2 | Mosaic Backlog schema + storage-service card store (drizzle/PGlite) | 1 | must-have | A1 | -| A3a | Card lifecycle — create/claim/release with stable ids + depends_on DAG | 1 | must-have | A2 | -| A3b | TTL-bounded claim enforcement (wall-clock) on cards | 1 | must-have | A3a | -| A4 | Advisory spend projection per card (degrades to TTL, no real meter) | 1 | should-have | A3a | -| B1 | Supervisor tick — readiness scan, two-agent-floor health check | 2 | must-have | A3a | -| B2 | Native dispatch/claim — assign ready dependency-satisfied work | 2 | must-have | A3b, B1 | -| B3a | Planner decompose — goal added to YAML → cards | 2 | must-have | A2, B1 | -| B3b | Replan request on empty backlog; escalate on no-decompose | 2 | should-have | B3a | -| G1 | PAUSE kill-switch + merge-gate honored before dispatch and merge | 2 | must-have | B2 | +| id | title | phase | priority | depends_on | +| --- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | ----------- | ---------- | +| A1 | Machine-readable NORTH_STAR.yaml + Markdown projection | 1 | must-have | — | +| A2 | Mosaic Backlog schema + storage-service card store (drizzle/PGlite) | 1 | must-have | A1 | +| A3a | Card lifecycle — create/claim/release with stable ids + depends_on DAG | 1 | must-have | A2 | +| A3b | TTL-bounded claim enforcement (wall-clock) on cards | 1 | must-have | A3a | +| A4 | Advisory spend projection per card (degrades to TTL, no real meter) | 1 | should-have | A3a | +| B1 | Supervisor tick — readiness scan, two-agent-floor health check | 2 | must-have | A3a | +| B2 | Native dispatch/claim — assign ready dependency-satisfied work | 2 | must-have | A3b, B1 | +| B3a | Planner decompose — goal added to YAML → cards | 2 | must-have | A2, B1 | +| B3b | Replan request on empty backlog; escalate on no-decompose | 2 | should-have | B3a | +| G1 | PAUSE kill-switch + merge-gate honored before dispatch and merge | 2 | must-have | B2 | +| H1 | Cross-domain baseline persona library (exec, marketing, ops, research, assistant + engineering roles) | 1 | must-have | A1 | +| H2 | System-type profiles — declarative mapping of system type to persona roster + topology | 2 | must-have | H1 | +| H3 | System-type provisioning — user declares type; orchestrator instantiates the matching roster + structure | 2 | must-have | H2 | +| H4 | Update-surviving persona customization — ad-hoc edits/additions persisted in a PRESERVE-protected override layer (baseline merged with overrides) | 2 | must-have | H1 | ## Assumptions (vetoable) - **ASM-1** (vetoable) — The Mosaic Backlog on the native Postgres storage service is the backlog of record. - **ASM-2** (vetoable) — Claude gate roles have no native busy status, so readiness = pane-idle + heartbeat. - **ASM-3** (vetoable) — Two-agent floor = 1 orchestrator + >=1 enhancer. +- **ASM-4** (vetoable) — Baseline personas ship in framework/fleet/roles/ (reseeded on update); user overrides live in a separate PRESERVE_PATHS-protected layer and win on merge. ## Spend diff --git a/docs/fleet/NORTH_STAR.yaml b/docs/fleet/NORTH_STAR.yaml index 0dba1b2..3e10b20 100644 --- a/docs/fleet/NORTH_STAR.yaml +++ b/docs/fleet/NORTH_STAR.yaml @@ -12,10 +12,13 @@ version: 1 mission: >- - A self-driving Mosaic delivery fleet that 24/7 unattended converts a - machine-readable goal set into merged, CI-green, budget-bounded change — - looping plan→backlog→assign→execute→verify→merge→reassess — on Mosaic's OWN - native backlog/dispatch engine. + A self-driving Mosaic system that 24/7 unattended converts a machine-readable + goal set into merged, CI-green, budget-bounded change — looping + plan→backlog→assign→execute→verify→merge→reassess — on Mosaic's OWN native + backlog/dispatch engine. Mosaic is general-purpose: the user declares the + system type they want (software delivery, personal assistant, research, + business/operations, …) and the orchestrator provisions the matching persona + roster and structure; the delivery fleet is one profile among many. substrate: note: >- @@ -59,6 +62,13 @@ standing_objectives: text: >- Single operator-flippable PAUSE kill-switch (fleet/run/PAUSED) honored before every dispatch and every merge. + - id: NS-9 + text: >- + Mosaic is a general-purpose multi-agent system: the user declares the + SYSTEM TYPE to run (e.g. software delivery, personal assistant, research, + business/operations) and the orchestrator provisions the matching persona + roster and org structure from a cross-domain baseline persona library; the + delivery/coding fleet is one profile among many. success_criteria: - id: AC-NS-1 @@ -80,6 +90,14 @@ success_criteria: - id: AC-NS-5 text: >- Flipping fleet/run/PAUSED halts dispatch and merges within one tick. + - id: AC-NS-6 + text: >- + A user can declare a system type and the fleet provisions the matching + persona roster + topology from the baseline library, with no code change. + - id: AC-NS-7 + text: >- + A user-customized persona (edited or added via the orchestrator) survives + `mosaic update`: baseline reseed never clobbers user overrides. workstreams: - id: A @@ -94,6 +112,8 @@ workstreams: title: Meta-loop — session-review + enhancer improvement PRs - id: F title: Safety-rails — TTL claims, advisory spend, PAUSE kill-switch + - id: H + title: Personas & system profiles — cross-domain library, system-type provisioning, update-surviving customization goals: - id: A1 @@ -146,6 +166,26 @@ goals: phase: 2 priority: must-have depends_on: [B2] + - id: H1 + title: Cross-domain baseline persona library (exec, marketing, ops, research, assistant + engineering roles) + phase: 1 + priority: must-have + depends_on: [A1] + - id: H2 + title: System-type profiles — declarative mapping of system type to persona roster + topology + phase: 2 + priority: must-have + depends_on: [H1] + - id: H3 + title: System-type provisioning — user declares type; orchestrator instantiates the matching roster + structure + phase: 2 + priority: must-have + depends_on: [H2] + - id: H4 + title: Update-surviving persona customization — ad-hoc edits/additions persisted in a PRESERVE-protected override layer (baseline merged with overrides) + phase: 2 + priority: must-have + depends_on: [H1] assumptions: - id: ASM-1 @@ -161,6 +201,12 @@ assumptions: - id: ASM-3 vetoable: true text: 'Two-agent floor = 1 orchestrator + >=1 enhancer.' + - id: ASM-4 + vetoable: true + text: >- + Baseline personas ship in framework/fleet/roles/ (reseeded on update); + user overrides live in a separate PRESERVE_PATHS-protected layer and win + on merge. spend: advisory: true diff --git a/packages/mosaic/src/commands/fleet-north-star.spec.ts b/packages/mosaic/src/commands/fleet-north-star.spec.ts index 14bb08e..fe30fb2 100644 --- a/packages/mosaic/src/commands/fleet-north-star.spec.ts +++ b/packages/mosaic/src/commands/fleet-north-star.spec.ts @@ -25,7 +25,8 @@ describe('NORTH_STAR.yaml', () => { it('parses to a typed object with the required top-level keys', async () => { const ns = await loadParsed(); expect(ns.version).toBeTypeOf('number'); - expect(ns.mission).toContain('self-driving Mosaic delivery fleet'); + expect(ns.mission).toContain('self-driving Mosaic system'); + expect(ns.mission).toContain('Mosaic is general-purpose'); expect(ns.substrate.note).toBeTruthy(); expect(ns.standing_objectives.length).toBeGreaterThan(0); expect(ns.success_criteria.length).toBeGreaterThan(0);