Skip to content
Open
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
78 changes: 78 additions & 0 deletions docs/2026-08-30-issue-9-roadmap-status.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Psyche Roadmap Status Record — Issue #9 (2026-08-30)

**Record date:** 2026-08-30
**Subject:** OpenCoven/psyche#9 — Roadmap: establish Psyche as OpenCoven's canonical orchestration protocol
**Observed state:** upstream `main` at `1e47b40dbbb9db21962b4884afe49763321f04b0` (authored 2026-08-12)
**Method:** REST-only inspection of the repository, issues, pull requests, check runs, and Actions runs on 2026-08-30; local run of the npm wrapper test suite and `npm pack --dry-run` against a clean clone of `1e47b40`. This record documents status; it does not decide ownership (that decision belongs to #12).

## 1. What exists on `main` today

### 1.1 Contract foundation (present, attested)

- Rust workspace of 8 crates (`psyche-core`, `psyche-config`, `psyche-store`, `psyche-coven`, `psyche-surfaces`, `psyche-runtime`, `psyche-cli`, `psyche-test-support`); 33,805 lines of Rust; workspace version `0.0.0`, MSRV 1.88, edition 2024, MIT, `publish = false` (evidence: `Cargo.toml`).
- Closed v1 schema registry of 16 kinds (`psyche.identity_snapshot.v1` … `psyche.error.v1`) with strict decode: unknown kind, unknown major version, and unknown enum values fail closed into quarantinable documents, never dispatchable records (evidence: `docs/SCHEMAS.md`; enforced by `crates/psyche-core/tests/decode.rs` and checker-pinned in `scripts/check-g2-evidence.py`).
- Canonical identity vocabulary with owned prefixes (`att_`, `del_`, `dlg_`, `qua_`), RFC 8785 canonical JSON, and SHA-256 digest recomputation before authority or persistence accepts a claim (evidence: `docs/SCHEMAS.md`, `crates/psyche-core/src/contracts/`).
- Durable layer: append-only records, append-only transition history, migrations (v1), quarantine with idempotent resolution, retention exclusions, and crash recovery under fault injection (evidence: `crates/psyche-store/tests/{records,migrations,retention,crash}.rs`).
- Typed Coven adapter boundary with golden request digests (evidence: `crates/psyche-coven/tests/request_digest.rs`, fixtures `execution-request-launch.json` / `execution-request-input.json` with pinned SHA-256 values).
- Reusable deterministic conformance suites C-S1…C-S12, fixed-seed property/state-machine testing (2048 cases, seed 0), and a test manifest mapping every atomic evidence command (evidence: `crates/psyche-test-support/`, `scripts/g2-test-manifest.json`, `docs/TESTING.md`).
- CI on Linux/macOS/Windows running format, clippy (`-D warnings`), workspace tests, the fixed-seed G2 suites, plus supply-chain (cargo-deny) and secret guard (gitleaks) jobs; the workflow file is byte-pinned by the evidence checker (`REVIEWED_WORKFLOW_SHA256`, evidence: `.github/workflows/ci.yml`, `scripts/check-g2-evidence.py`).
- Retained G2 attestation record `docs/G2-EVIDENCE.md` (status `passed`, CI run `31565714638`, dated 2026-08-12) — see §4 for a defect in that record.
- npm distribution wrapper `@opencoven/psyche` `0.0.0` (Node ≥ 20, no dependencies, zeroed platform checksums — binary packages unpublished). Local verification 2026-08-30: `npm --prefix packages/psyche-npm test` 16/16 pass; `npm pack --dry-run` yields 5 files.

### 1.2 Public productization surfaces (absent — the gap issue #9 names)

The root of a clean checkout contains no `README.md`, no `AGENTS.md`, no `CONTRIBUTING.md`, no `SECURITY.md`, no `LICENSE` file, no roadmap document, no bootstrap script, and no standalone conformance runner. Compatibility/migration behavior is documented as decode semantics inside `docs/SCHEMAS.md`, but there is no written compatibility, downgrade, deprecation, or rollback policy, and no versioned consumer graduation path. Verification is documented (`docs/TESTING.md`) but there is no single fast/full verification entrypoint script. This matches the issue's "Current baseline" statement: the gap is public productization and ownership clarity, not contract work.

## 2. Phase status against the 90-day plan (as of 2026-08-30)

| Phase | Target window | Issue-exit gate | Current state |
|---|---|---|---|
| 0. Control and agent readiness | Aug 26–Sep 8 | Clean-clone onboarding, root agent contract, deterministic fast/full checks, explicit status/ownership | **In progress, not met on `main`.** Draft PR #15 (opened 2026-08-26, head `8a4ff6d`) adds the root README, `AGENTS.md`, active roadmap, proposed ownership matrix, `agent/manifest.yaml`, and `scripts/agent-bootstrap` / `scripts/agent-check fast\|full`. Its CI is red at the "G2 evidence relationships" step on all three OSes (Actions run `32956215259`); its other checks (dependency audit, secret guard, npm ×2) are green. |
| 1. Protocol v1 publication | Sep 9–Sep 29 | Versioned schemas, golden vectors, compatibility policy, standalone conformance runner, public and repeatable | **Not started on `main`.** Draft PR #17 (opened 2026-08-26, head `54eee3a`) is the prerequisite repair: it preserves the original G2 verifier as `scripts/check-g2-evidence-v1.py` and adds an `psyche.g2-attestation-scope/v1` policy that whitelists ten repository-readiness paths so publication work can land without violating the G2 attestation freeze. Draft, CI unstable. |
| 2. Reference-client canary | Sep 30–Oct 20 | Psyche Build consumes pinned Psyche artifacts and passes positive/denial/restart/downgrade canaries | **Mapping only.** OpenCoven/psyche-build#253 (outcome) is open; OpenCoven/psyche-build#254 (mapping draft PR) was closed unmerged on 2026-08-28. No pinned artifact consumption exists. |
| 3. Lifecycle completion | Oct 21–Nov 10 | Leases, approvals, receipts, cancellation, recovery, cross-surface continuity executable rather than inferred | **Not started.** Cancellation-state vocabulary, termination windows, and O5 acknowledgement evidence exist as G2 contracts (`docs/SCHEMAS.md`); executable lifecycle composition is future work. |
| 4. Release candidate | Nov 11–Nov 24 | Security/release governance, support policy, signed artifacts, migration guidance, retained reference flow | **Not started.** No release artifacts exist (`publish = false`; npm checksums are zero placeholders); the CI security floor (cargo-deny, gitleaks) is the only #14 item present on `main`. |

## 3. Workstream status versus the issue's table

| Outcome | Issue state on 2026-08-30 | Evidence |
|---|---|---|
| #10 repository/agent-readiness (P0, Ph0) | Open; initial implementation in PR #15 (draft, red CI at G2 evidence step) | PR #15, run `32956215259` |
| #11 protocol v1 publication (P0, Ph1) | Open; no publication artifacts on `main` | §2 Phase 1 |
| #12 cross-repo ownership/compatibility (P0, Ph0–1) | Open; ownership matrix only proposed (in PR #15), no approved ADR | PR #15 body |
| #13 Psyche Build conformance (P1, Ph2) | Open; mapping-only; downstream mapping PR closed unmerged | psyche-build#253, psyche-build#254 |
| #14 security/release/governance (P1, Ph0+4) | Open; minimum security floor (audit + secret guard) already green in CI | `.github/workflows/ci.yml` |
| #18 (new, not in the issue's table) adapter for automation-triggered orchestration | Opened 2026-08-30 (P1) | issue #18 |

Issue #9 itself: open, assigned to BunsDev, one maintainer checkpoint comment dated 2026-08-26 recording the move from audit to tracked implementation and the pending conditions for Phase 0 (exact-head CI and clean-checkout execution for #15; ownership/security wording review; #10/#12/#14 evidence merge; ownership approval before #11).

## 4. Control-plane finding: the G2 evidence freeze blocks all content PRs

`docs/G2-EVIDENCE.md` is status `passed` and pins `Tested source commit: f4f242f…`. `scripts/check-g2-evidence.py` requires, for `passed` status, that the diff from the tested commit to a PR head be exactly one modified file (`docs/G2-EVIDENCE.md`) and that the tested commit be the merge-base ancestor of the PR head. On current `main` the pinned tested commit `f4f242f` is a dangling squash of PR #8 — it is not an ancestor of `1e47b40` (verified 2026-08-30: the object is absent from a full clone's history). Consequence, confirmed by PR #15's red runs: the "G2 evidence relationships" CI step cannot pass for any PR that carries content, regardless of author. The repo's own history shows the remedy rhythm (e.g. commit `e12b059` "docs: reset G2 evidence after hardening"): a content PR resets the evidence record to the exact `candidate` placeholder state so remote attestation is skipped, and a docs-only follow-up PR re-attests `passed` against the merged squash commit. PR #17 is the alternative, structural remedy (scope policy). Until one of these lands, every content PR — including any new roadmap or publication work — is red at this step.

## 5. Verdict against issue #9's global acceptance criteria

| Criterion | Verdict on `1e47b40` | Basis |
|---|---|---|
| Every protocol identity and transition has one canonical owner | **Partial** | In-repo ownership is explicit (`docs/ARCHITECTURE.md` dependency arrows; core owns contracts, store owns durable records); the cross-repository ownership matrix exists only as a proposal in draft PR #15; #12 is unresolved. |
| No stable identity depends on a Bead ID, GitHub issue, tmux pane, process, filesystem path, provider session, transport endpoint, or UI component | **Met (contract level)** | Closed owned ID vocabulary with its own prefixes, strict decode, and digest binding (`docs/SCHEMAS.md`, `crates/psyche-core`); no external planner/infra identifier appears in the record contracts. |
| A clean checkout exposes one documented bootstrap path and one fast/full verification interface | **Unmet** | No root README/AGENTS/bootstrap script; `docs/TESTING.md` documents commands but there is no single entrypoint. Draft PR #15 adds both. |
| Protocol schemas and golden vectors are versioned and consumable without copying internal Rust types by hand | **Partial** | Versioned registry and golden digest fixtures are in-tree (`docs/SCHEMAS.md`, `crates/psyche-coven/tests/fixtures/`); no published standalone schema/golden-vector artifact set exists. |
| Unknown major versions, unknown enums, widened authority, stale correlation, and ambiguous effects fail closed | **Met (contract level)** | Unknown kind/major/enum are quarantinable decode failures; request digests are recomputed and stale-digest mutations rejected; ambiguity fencing is asserted by C-S6 and the state-machine suite (`docs/SCHEMAS.md`, `docs/G2-EVIDENCE.md` matrix, `scripts/check-g2-evidence.py` pins). |
| Psyche Build passes a pinned cross-repository conformance canary as the first reference client | **Unmet** | Mapping-only state: psyche-build#253 open; psyche-build#254 closed unmerged 2026-08-28; no pinned artifact consumption. |
| Compatibility, migration, downgrade, deprecation, and rollback policies are explicit | **Partial** | Fail-closed decode and migrations v1 are documented; no written compatibility/deprecation/rollback policy document exists. |
| Release and support claims are tied to immutable artifacts and retained evidence | **Partial** | Retained evidence practice exists (`docs/G2-EVIDENCE.md`) but carries the §4 defect; no release artifacts or support claims exist yet (`publish = false`, zeroed npm checksums). |
| Active work, deferred work, and historical design records are clearly separated | **Unmet** | No root roadmap/status surface on `main`; program state lives in issue #9 and its checkpoint comment; draft PR #15 adds it. |

Overall: the contract foundation named in the issue's baseline is real and CI-attested; none of the nine criteria is fully satisfied at the repository/productization level on `main` today, consistent with the issue's own "primary gap is public productization and ownership clarity."

## 6. What remains, on the critical path

1. Repair or scope the G2 evidence gate (land PR #17, or follow the established candidate-reset rhythm) so content PRs can reach green CI. This is the immediate blocker observable on PR #15.
2. Land #10/#15 — root entrypoint, agent contract, roadmap, bootstrap and fast/full check entrypoints — to close the Phase 0 gate.
3. Approve the #12 ownership/compatibility ADR; the issue's concurrency rules require this before #11 declares a stable consumer profile.
4. #11: publish versioned schemas, golden vectors, compatibility policy, and a standalone conformance runner.
5. #13: pin a Psyche artifact in Psyche Build and pass the four canary classes (only after #11).
6. #14: stable release governance, support policy, signed artifacts, migration guidance (after #11 and #13).

Per the issue, dates are planning targets and do not weaken exit gates; the Phase 0 window (Aug 26–Sep 8) closes before the evidence-gate repair (#17) and the readiness PR (#15) have landed, so Phase 0 slips unless both merge.
Loading