Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> **For humans.** Plain language, outcomes first, short on purpose. The deep/agent-grade state lives in [`START-HERE.md`](START-HERE.md) + [`DECISIONS.md`](DECISIONS.md); this page is their product-level projection.
> **Freshness rule:** `/handoff` updates this page whenever something ships. If this page and reality ever disagree, that's a bug — flag it.

_Last updated: 2026-07-21 · Status: **v0.1 "Continuity" in progress — 11 of 15 units shipped**; latest: **U10 BUILDING** — the provisioning engine's first sub-unit (the manifest contract + blueprint loader + shared front-gate) shipped + merged (PR #44, decisions #53–#54). Next: **U10 sub-units U2–U4** (parallel-eligible). · Roadmap postures locked by the 2026-07-10 interview (decisions #32–#41)_
_Last updated: 2026-07-21 · Status: **v0.1 "Continuity" in progress — 11 of 15 units shipped**; latest: **U10 BUILDING** — 2 of 7 provisioning sub-units merged: the manifest contract + loader + shared front-gate (PR #44, decisions #53–#54), and the config-write engine's opaque whole-file `text` write primitive (PR #45). Next: **U10 sub-units U3–U4** (parallel-eligible). · Roadmap postures locked by the 2026-07-10 interview (decisions #32–#41)_

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Advance the roadmap consistently for U4.

The target registry and Cursor scanner introduced by this PR make the current 2/7 checkpoint and U4 “NEXT” instruction stale after merge.

  • docs/PRODUCT.md#L6-L6: update the latest PR and U10 progress to reflect U4 and 3/7.
  • docs/PRODUCT.md#L51-L51: change “1 of 7”/“two sub-units” to the new consistent count and description.
  • docs/PRODUCT.md#L119-L119: update the decoder ring to the same progress.
  • docs/START-HERE.md#L61-L61: point NEXT to the remaining unit(s), not U4 again.
📍 Affects 2 files
  • docs/PRODUCT.md#L6-L6 (this comment)
  • docs/PRODUCT.md#L51-L51
  • docs/PRODUCT.md#L119-L119
  • docs/START-HERE.md#L61-L61
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/PRODUCT.md` at line 6, Advance the U10 roadmap references consistently
for U4: in docs/PRODUCT.md lines 6, 51, and 119, update the latest PR, progress
count, and description to reflect 3 of 7 completed with U4 included; in
docs/START-HERE.md line 61, change NEXT to identify the remaining unit(s) rather
than U4.


## TL;DR

Expand Down Expand Up @@ -48,7 +48,7 @@ _Last updated: 2026-07-21 · Status: **v0.1 "Continuity" in progress — 11 of 1
**Recently shipped:** **U9** inventory scanners (PR #38 — the Observe half) · **#21** config-engine targeted removal (PR #34) · **#24** single-source Codex credential (PR #41 — retired the duplicate token file). *(#21/#24 are follow-up issues, not among the 15 plan units.)* Also **dogfood run 1** (below) — a validation exercise, not a v0.1 unit.

**Still to build:**
- **U10 (building — 1 of 7 sub-units in) — project provisioning:** a project carries one versioned "blueprint" (which roles run in which harness, on which model, with which files), and agent-os pushes it into Claude Code, Codex, and Cursor natively — reversibly, with a dry-run preview and a drift report. First sub-unit shipped (PR #44): the typed manifest contract + a pure/total loader + the shared **front-gate** that certifies a blueprint (valid schema, no secrets, no machine-specific paths) before any provisioning verb runs. Rescoped from the earlier "parity actions" framing by lived dogfood evidence (decision #52).
- **U10 (building — 1 of 7 sub-units in) — project provisioning:** a project carries one versioned "blueprint" (which roles run in which harness, on which model, with which files), and agent-os pushes it into Claude Code, Codex, and Cursor natively — reversibly, with a dry-run preview and a drift report. Two sub-units shipped: the typed manifest contract + a pure/total loader + the shared **front-gate** that certifies a blueprint (valid schema, no secrets, no machine-specific paths) before any provisioning verb runs (PR #44), and the config-write engine's opaque whole-file `text` write primitive the copy/compose transforms need — verbatim, byte-identical, on the same backup/atomic-write/undo discipline as structured configs (PR #45). Rescoped from the earlier "parity actions" framing by lived dogfood evidence (decision #52).
- **U11 — the first screen:** projects + where-they-left-off + the inventory grid + provision buttons.
- **U12 — roster spike:** find the read/write surfaces for Hermes / Cursor / Antigravity / OpenCode (decides their lanes).
- **U15 — always-on:** server survives reboots/crashes (launchd); hooks re-install for keeps; the pending live Codex check runs then.
Expand Down Expand Up @@ -116,7 +116,7 @@ A shared task board across harnesses *and* instances, plus Hermes as the always-
| U7 | `/handoff` rewire | One authoritative continuity record; docs render it | ✅ |
| U8 | Codex integration | Second harness on the shared brain (capture + read + installer) | ✅ *live check pending* |
| U9 | Inventory scanners | See every skill/MCP server/plugin across harnesses — CC + Codex now; others join as one-line registry rows as they enter rotation | ✅ *PR #38* |
| U10 | Provisioning engine | Blueprint → native harness setup (roles/models/files), with undo | 🔨 building (1/7 — contract + loader + front-gate in) |
| U10 | Provisioning engine | Blueprint → native harness setup (roles/models/files), with undo | 🔨 building (2/7 — contract+loader+front-gate, whole-file write primitive in) |
| U11 | Thin human view | The first screen | ⏳ |
| U12 | Roster lane spike | What's possible for Hermes / Cursor / Antigravity / OpenCode | ⏳ |
| U15 | Always-on (launchd) | Server survives reboots; hooks installed for keeps; live Codex check | ⏳ |
Expand Down
3 changes: 2 additions & 1 deletion docs/START-HERE.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ Jarod's own **Agent OS**: a local-first personal control plane that **acts** on
- ✅ **SIDE QUEST — handoff HARDENED (Phases 1–2 DONE)** (2026-07-20, decision **#51**; plan [`docs/plans/2026-07-20-002-harden-handoff-port-from-agent-hud.md`](plans/2026-07-20-002-harden-handoff-port-from-agent-hud.md)). Ported agent-hud's crash-safety hooks (Stop `session-breadcrumb.sh` + SessionStart `session-resume-check.sh` → local-only in gitignored `.claude/`, both verified by direct run) and **reframed `/handoff` substrate-OPTIONAL**: START-HERE ▶ NEXT IS the record today, the substrate becomes primary at U15 — **retiring the every-handoff "substrate not written" apology** (the noise that triggered this side quest). `/handoff` also made **model-invocable** + given an **idempotence guard**; decision #8 amended (#51); the substrate-first solution doc reconciled. **This very handoff dogfoods the reframe — no apology emitted.** **Phase 3 (promote to `~/.claude`) deferred — later.**
- ✅ **U10 PLANNED — the provision engine is implementation-ready** (2026-07-20, decision **#52**; plan [`docs/plans/2026-07-20-003-feat-u10-provisioning-engine-plan.md`](plans/2026-07-20-003-feat-u10-provisioning-engine-plan.md)). One session ran the full pipeline: **ce-brainstorm** (Jarod's felt moment: scaffold/adopt a project and assign roles+harnesses+models per workflow; 4 forks locked — apply + **seed template** · **role-bundle manifest** (roles → harness + model + files, file-ops only) · **Cursor joins as the third target** (amends #45; its own trigger fired at run 1) · **CLI + propose-only MCP** (supersedes slice-1 KTD7)) → **interactive ce-doc-review** (6 personas; 9 findings folded — headline: the run-1 fixture alone would have shipped an overfit engine, secret hygiene made enforced-not-aspirational, `transform` type demoted to extension point) → **ce-plan enrichment** (7 units U1–U7 · 10 KTDs — opaque `text` format on the U14 engine, batch undo, semantic diff, shared front-gate with the secret classifier, no-lock scoped decision · the lived ceremony = acceptance fixture AE1 + generalization AE7; 3 research agents grounded it in verified code surfaces) → **headless round-2 review** (5 personas). **Naming ruling: the cross-harness run file is `RUN_STATE.md`** (was the dogfood's `HANDOFF.md`) — "handoff" now means ONLY session-to-session continuity. `CONCEPTS.md` gained the provisioning vocabulary. All 7 round-2 findings were folded the same session (headline adds: **KTD11** — a known-projects registry so the propose MCP tools never path-join a caller string, closing the P1; batch identity moved INTO the undo journal; `apply` acts on the semantic diff verdict; verbatim `text` writes; the foreign-key `mcp.json` merge fixture). **The plan is build-ready.**
- ✅ **U10 U1 — manifest contract + blueprint loader + front-gate SHIPPED + MERGED** (PR #44, merge `e0d3b3a`, 2026-07-21; decisions **#53–#54**). The typed blueprint the Act half (U2–U7) inherits: a discriminated-union `Manifest` schema in the contract seam (KTD10) + a **pure/total loader** + the shared **front-gate** every verb runs (KTD5: version-compat → cardinality preflight → strict parse → secret + machine-abspath scan → typed `BlueprintLoad`, never throws; bounded reads mirror `src/scan`/`src/codex-credential`). Full loop: ce-work (opus subagent) → simplify → **ce-code-review (6 reviewers incl. the redaction-boundary-reviewer)** → **Codex gate 4 rounds + a logged Option-B marker advance** (companion hung twice mid-session; the only un-gated delta was the path-containment fold = codex's own round-4 recommendation, Jarod-authorized). **Two proof-first bug fixes** — JSON-escaped-secret **R4 gate bypass** (empirically reproduced by the redaction reviewer: raw-byte scan misses `\uXXXX`, `JSON.parse` decodes it into `loaded.manifest` → now scans raw **and** normalized forms) and **`schemaVersion≤0` misroute**. **Folds**: manifest cardinality preflight (no-hang) + schema-level path containment (R1/R9, POSIX-only). **Reverted**: the classifier ReDoS `{0,64}` quantizer-bound (regressive false-negative + whack-a-mole) → linear-scanner **#42**; config-source effective-form scan (copy+merge) → **#43** (owner U5/apply). Bots folded (doc accuracy) or declined-with-rationale (Windows-path + symlink, both #45-scoped). **527 tests green, tsc clean.** Learning compounded → `docs/solutions/architecture-patterns/content-safety-gate-scan-effective-form-bound-the-work.md`; `CONCEPTS.md` gains **Front-gate**.
- ⏳ **▶ NEXT — `/unit-loop U2`** of the [U10 plan](plans/2026-07-20-003-feat-u10-provisioning-engine-plan.md), **in a FRESH session** — the codex companion hung twice this session; the adversarial gate needs a clean CC session (2 hangs, 0 output; a CLI re-login won't clear it). **U2, U3, U4 are parallel-eligible** (each depends only on the now-merged U1 — run any, or parallelize), then U5 (needs U2–U4), then U6 ∥ U7. Run each unit's gate with the decision-#45 threat-model pointer, and **keep backticks out of the gate focus text** (they command-substitute in the wrapper's shell and wedge codex — cost 2h+ this session). Don't re-litigate U1's rulings: **POSIX-only paths**; **R4 secret-detection is best-effort per the plan's own spec** (completeness tracked in **#42** + **#43**); the `Manifest` schema is contract-frozen at `schemaVersion 1`. **U15** (launchd always-on) follows; the **MVP-definition session** lands before/at **U11**. Deferred, unchanged: handoff **Phase 3** (→ `~/.claude`); the ClaudeOS delta walkthrough; the feature-catalog `Call` pass; **the CE salience-layer investigation** (memory-captured 2026-07-21 — the checkpoint rule loads but doesn't fire mid-task; wants an active hook trigger).
- ✅ **U10 U2 — config-write engine opaque whole-file `text` format SHIPPED + MERGED** (PR #45, merge `fa9e4b2`, 2026-07-21). The whole-file write primitive U10's copy/compose transforms need (R7/KTD1/KTD2): a 4th `ConfigFormat` `text` + **`writeTextFile`** (verbatim, byte-identical, format forced) on the shared `publish()` core, an `allowText` guard keeping `text` off the merge/removal paths, and optional recorded-only `batchId`/`projectRoot` on `UndoEntry`/`MergeOptions` (U5 batch-undo consumer). Full loop: ce-work → simplify (**0 findings**) → **ce-code-review (10-persona full roster; 9 clean + 1 P2 header doc-drift folded)** → **Codex gate — no-ship #1 caught 2 real findings** (batch write/read schema asymmetry made a partial/non-string batch value applied-but-un-undoable → **fail-closed both-or-neither guard**; a lossy-utf8 no-op broke byte-identity → **byte-exact `text` compare**; re-run **APPROVED**) → **CodeRabbit (Major: guard now rejects truthy non-strings) + Copilot (×3 doc rewording) folded**. **546 tests green, tsc clean.** Learning compounded → `docs/solutions/architecture-patterns/byte-identity-contract-needs-byte-exact-noop-not-just-verbatim-serialize.md` (a byte-identity contract must be byte-exact on BOTH the serialize AND the no-op-read sides — the *inverse* of presence-semantics on the same no-op surface; both surfaced by the adversarial gate escalating an in-process residual).
- ⏳ **▶ NEXT — `/unit-loop U3`** (render + diff) **or `/unit-loop U4`** (target registry + Cursor scanner row) of the [U10 plan](plans/2026-07-20-003-feat-u10-provisioning-engine-plan.md), **in a FRESH session**. **U3 and U4 are both parallel-eligible** — each depends only on the now-merged U1 (U2 is merged too); run either, or parallelize. Then **U5** (needs U2–U4), then **U6 ∥ U7**. Run each unit's gate with the decision-#45 threat-model pointer, and **keep backticks AND parens out of the gate focus text** (they command-substitute in the wrapper's shell). Don't re-litigate settled rulings: **POSIX-only paths**; **R4 secret-detection is best-effort per the plan spec** (completeness → **#42** + **#43**); the `Manifest` schema is contract-frozen at `schemaVersion 1`; the `text` format's byte-identity + batch-field guards are settled. **U4 execution note:** re-verify Cursor's `.cursor/agents` / `.cursor/skills` / `.cursor/mcp.json` shapes against a live install + current docs before encoding descriptors (run-1 evidence is days old; a mismatch is a stop condition). **U10 wrap-up (at U7 complete, not before):** log the 3 decision-ledger rows — Cursor roster (amends #45), trigger surface (supersedes KTD7), `RUN_STATE.md` naming. **U15** (launchd always-on) follows; the **MVP-definition session** lands before/at **U11**. Deferred, unchanged: handoff **Phase 3** (→ `~/.claude`); the ClaudeOS delta walkthrough; the feature-catalog `Call` pass; **the CE salience-layer investigation** (checkpoint rule loads but doesn't fire mid-task; wants an active hook trigger).

## Read next (in order)
1. `docs/plans/2026-07-01-001-feat-slice-1-substrate-parity-plan.md` — THE plan (scan headings: Goal Capsule → unit index → U13).
Expand Down
Loading