Collapse Epiphany CRRC reads into view
This commit is contained in:
parent
53bdea881b
commit
32d6eed2d8
14 changed files with 117 additions and 1169 deletions
|
|
@ -30,14 +30,15 @@ The spine exists in more than twenty-five live paths:
|
|||
- targeted context reflection: app-server declares experimental read-only `thread/epiphany/context`, reads the same live/stored Epiphany state view used by scene/jobs, and derives a bounded state shard containing selected graph nodes/edges, links, active frontier, checkpoint, the full durable investigation-checkpoint packet, observations, direct evidence, linked evidence, and missing requested ids without retrieval, proposal, promotion, notification, mutation, or persistence in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:355), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4253), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4261), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:11152).
|
||||
- graph traversal reflection: app-server declares experimental read-only `thread/epiphany/graphQuery`, reads the same live Epiphany state view used by context, and derives explicit node/edge lookup, path/symbol matches, bounded neighbors, edge-kind matches, and frontier neighborhoods with architecture/dataflow links plus frontier/checkpoint identity, matched selectors, and missing ids without retrieval, proposal, promotion, indexing, notification, mutation, or scheduling in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:379), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4720), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:5060), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:15201).
|
||||
- planning reflection: app-server declares experimental read-only `thread/epiphany/planning`, reads the same live/stored Epiphany state view, and returns typed captures, backlog items, roadmap streams, Objective Drafts, GitHub source refs, count summaries, and the separate active objective without adopting drafts, launching work, notifying, mutating, or scheduling in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:385), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4681), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:5353), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:16295).
|
||||
- context-pressure reflection: core token telemetry carries `model_auto_compact_token_limit` beside total/last usage and `model_context_window`; app-server declares experimental read-only `thread/epiphany/pressure`, reads live token usage or the latest stored rollout `TokenCount`, derives current context pressure from `last_token_usage` rather than cumulative thread spend, treats cumulative-only telemetry as unknown, and raises `shouldPrepareCompaction` at 80% of the active auto-compact/context limit without mutating Epiphany state or scheduling compaction in [protocol.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/protocol/src/protocol.rs:2237), [turn_context.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/core/src/session/turn_context.rs:103), [session/mod.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/core/src/session/mod.rs:2716), [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:360), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4361), [token_usage_replay.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor/token_usage_replay.rs:75), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4306), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:11028).
|
||||
- canonical view lens reflection: app-server declares experimental read-only `thread/epiphany/view` with selectable lenses and uses it as the canonical operator read surface for pressure, reorient, CRRC, and coordinator projections. Those projections no longer have standalone protocol verbs; the separate `reorientLaunch`, `reorientResult`, and `reorientAccept` surfaces remain because they carry authority, result read-back, and review acceptance rather than mere reflection.
|
||||
- context-pressure reflection: core token telemetry carries `model_auto_compact_token_limit` beside total/last usage and `model_context_window`; the `pressure` view lens reads live token usage or the latest stored rollout `TokenCount`, derives current context pressure from `last_token_usage` rather than cumulative thread spend, treats cumulative-only telemetry as unknown, and raises `shouldPrepareCompaction` at 80% of the active auto-compact/context limit without mutating Epiphany state or scheduling compaction in [protocol.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/protocol/src/protocol.rs:2237), [turn_context.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/core/src/session/turn_context.rs:103), [session/mod.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/core/src/session/mod.rs:2716), [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:360), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4361), [token_usage_replay.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor/token_usage_replay.rs:75), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4306), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:11028).
|
||||
- pre-compaction checkpoint intervention: app-server `TokenCount` handling now checks the same pressure mapper, and for loaded Epiphany threads crossing `shouldPrepareCompaction` it steers the active turn once with a bounded CRRC checkpoint directive to bank working context before compaction/reorientation. The per-turn dedupe bit and the pending compact handoff live in listener `ThreadState`; successful steering marks the active turn for a forced compact action at clean turn completion, while aborted turns clear the handoff. The intervention uses existing turn steering and turn-boundary automation rather than a new scheduler in [bespoke_event_handling.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/bespoke_event_handling.rs:1467), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:15405), and [thread_state.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/thread_state.rs:144).
|
||||
- reorientation policy: app-server declares experimental read-only `thread/epiphany/reorient`, reuses the same live/stored thread view plus mapped pressure/freshness/watcher signals, and derives a bounded `resume`/`regather` verdict with checkpoint-path/frontier reasons without mutating, compacting, scheduling, notifying, or continuing work in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:365), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4514), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4394), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:11424).
|
||||
- CRRC coordinator recommendation: app-server declares experimental read-only `thread/epiphany/crrc`, reuses the same pressure/freshness/watcher/reorientation mapping plus the fixed `reorient-worker` binding and result read-back helper, recognizes already accepted reorientation findings so an accepted result is not recommended for acceptance again, and returns one bounded recommendation such as continue, prepare checkpoint, launch worker, wait, review, accept, or regather manually without mutating, launching, accepting, compacting, notifying, scheduling, or silently continuing work in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:370), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4661), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4546).
|
||||
- reorientation policy: the `reorient` view lens reuses the same live/stored thread view plus mapped pressure/freshness/watcher signals, and derives a bounded `resume`/`regather` verdict with checkpoint-path/frontier reasons without mutating, compacting, scheduling, notifying, or continuing work in [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4514), [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4394), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:11424).
|
||||
- CRRC coordinator recommendation: the `crrc` view lens reuses the same pressure/freshness/watcher/reorientation mapping plus the fixed `reorient-worker` binding and result read-back helper, recognizes already accepted reorientation findings so an accepted result is not recommended for acceptance again, and returns one bounded recommendation such as continue, prepare checkpoint, launch worker, wait, review, accept, or regather manually without mutating, launching, accepting, compacting, notifying, scheduling, or silently continuing work in [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4661), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4546).
|
||||
- role ownership projection: app-server declares experimental read-only `thread/epiphany/roles`, reuses the same state/jobs/pressure/reorient/result/CRRC signals as the coordinator loop, and projects implementation, Imagination/planning, modeling/checkpoint, verification/review, and reorientation lanes with owner roles, status, linked jobs, authority scopes, and recommended scene actions without launching, scheduling, accepting, compacting, notifying, or mutating state in [common.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/common.rs:350), [v2.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server-protocol/src/protocol/v2.rs:4161), and [codex_message_processor.rs](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/codex_message_processor.rs:4310).
|
||||
- role specialist launch/read-back/acceptance: app-server declares experimental `thread/epiphany/roleLaunch`, read-only `thread/epiphany/roleResult`, and write-gated `thread/epiphany/roleAccept`. `roleLaunch` accepts fixed Imagination/planning, modeling/checkpoint, and verification/review role ids, builds bounded specialist payloads from authoritative Epiphany state, routes them through the heartbeat-backed `epiphany_launch_job` seam, opens a typed runtime-spine job receipt, and emits the normal `jobLaunch` state update for `jobBindings` only. `roleResult` resolves heartbeat bindings through typed runtime-spine job results and seals legacy `agent_jobs` bindings, projecting structured output as a reviewable finding with verdict, summary, next safe move, inspected files, frontier/evidence ids, optional `statePatch`, optional `selfPatch`, coordinator `selfPersistence` review, raw result, and errors without mutation, promotion, scheduling, or hidden continuation. `selfPatch` is a Ghostlight-shaped lane-memory request, not project truth: the coordinator accepts only role-matched, bounded, evidence-grounded memory/goal/value/private-note mutations and refuses objectives, graphs, checkpoints, scratch, planning, jobs, authority, code edits, or raw transcripts with reasons. `roleAccept` accepts completed heartbeat findings from typed runtime-spine results, accepts completed Imagination findings only when they contain a valid planning-only patch with draft Objective Draft review gates, accepts completed modeling/checkpoint findings only with a modeling-safe `statePatch`, applies accepted project patches through the existing Epiphany state validator, appends audit observation/evidence, and carries the same `selfPersistence` review. GUI/coordinator accept paths then apply accepted `selfPatch` requests to typed CultCache role dossiers in `state/agents.msgpack` through the native `epiphany-agent-memory-store` binary. Implementation stays owned by the main coding agent, verification output remains review-only, and reorientation stays on the CRRC-specific `reorientLaunch` / `reorientResult` / `reorientAccept` path.
|
||||
- shared prompt memory projection and role dossiers: the prompt config now carries `[shared].persistent_memory` in [epiphany_specialists.toml](E:/Projects/EpiphanyAgent/vendor/codex/codex-rs/app-server/src/prompts/epiphany_specialists.toml:2). App-server parses that block, prepends it through `epiphany_agent_prompt_with_memory`, and therefore projects the same Ghostlight-derived memory into fixed role specialist instructions, reorientation-worker instructions, coordinator notes, and CRRC checkpoint steering. The base `<epiphany_state>` doctrine reinforces the Perfect Machine rule through [prompt.rs](E:/Projects/EpiphanyAgent/epiphany-core/src/prompt.rs:31) and [epiphany_doctrine.md](E:/Projects/EpiphanyAgent/epiphany-core/src/prompts/epiphany_doctrine.md:1). Individual Ghostlight-shaped role dossiers now live in typed CultCache `state/agents.msgpack`, and the native `epiphany-agent-memory-store` binary validates, reviews, and applies bounded self-memory patches through the Rust store.
|
||||
- fixed-lane coordinator: app-server declares experimental read-only `thread/epiphany/coordinator`, composes role, pressure, reorient, CRRC, role result, and reorient result signals, and returns one current action without mutation. Review acceptance and implementation clearance are intentionally different: an accepted verification finding clears implementation only when the verifier verdict is `pass`; accepted `needs-evidence`, `needs-review`, or `fail` findings route back toward modeling/checkpoint strengthening before code work resumes. `regatherManually` is now fallback, not a supervisor-puppeteering excuse: completed unaccepted modeling findings stop at `reviewModelingResult`, modeling acceptance precedes verification, and fixed lane actions are considered before manual regather.
|
||||
- fixed-lane coordinator: the `coordinator` view lens composes role, pressure, reorient, CRRC, role result, and reorient result signals, and returns one current action without mutation. Review acceptance and implementation clearance are intentionally different: an accepted verification finding clears implementation only when the verifier verdict is `pass`; accepted `needs-evidence`, `needs-review`, or `fail` findings route back toward modeling/checkpoint strengthening before code work resumes. `regatherManually` is now fallback, not a supervisor-puppeteering excuse: completed unaccepted modeling findings stop at `reviewModelingResult`, modeling acceptance precedes verification, and fixed lane actions are considered before manual regather.
|
||||
- MVP operator view: native `epiphany-mvp-status` launches app-server over stdio, starts or reads one thread, gathers scene, planning, pressure, reorient, jobs, roles, Imagination/modeling/verification role results, reorient result, CRRC responses, heartbeat, and Face bubble artifacts, and renders them as text or JSON so the loop can be dogfooded without Python owning the product surface.
|
||||
- MVP dogfood runner: the old Python runner was cut with the `agent_jobs` path. The replacement must be native Rust/CultCache/CultNet and complete heartbeat-owned runtime-spine job results with operator-safe artifacts.
|
||||
- Agent function/API telemetry: native `epiphany-agent-telemetry` mechanically parses sealed AppServerClient JSONL transcripts into operator-safe telemetry with method counts, request shape, job/status/path fields, and visible function/tool names while sealing text, turn items, raw results, and direct agent messages.
|
||||
|
|
@ -91,16 +92,18 @@ flowchart TD
|
|||
QG --> Q
|
||||
N --> QPLAN["thread/epiphany/planning projects captures/backlog/drafts"]
|
||||
QPLAN --> Q
|
||||
N --> QVIEW["thread/epiphany/view selects read lenses"]
|
||||
QVIEW --> Q
|
||||
A --> QP["TokenUsageInfo stores usage, context window, and auto-compact limit"]
|
||||
QP --> QQ["thread/epiphany/pressure derives read-only context pressure"]
|
||||
QQ --> Q
|
||||
QF --> QR["thread/epiphany/reorient derives read-only resume/regather verdict"]
|
||||
QP --> QQ["view.pressure derives read-only context pressure"]
|
||||
QQ --> QVIEW
|
||||
QF --> QR["view.reorient derives read-only resume/regather verdict"]
|
||||
QQ --> QR
|
||||
QR --> Q
|
||||
QR --> QCRRC["thread/epiphany/crrc recommends the next explicit CRRC action"]
|
||||
QR --> QVIEW
|
||||
QR --> QCRRC["view.crrc recommends the next explicit CRRC action"]
|
||||
QQ --> QCRRC
|
||||
QJ --> QCRRC
|
||||
QCRRC --> Q
|
||||
QCRRC --> QVIEW
|
||||
QR --> QRL["thread/epiphany/reorientLaunch can explicitly consume that verdict"]
|
||||
QRL --> QRLR["thread/epiphany/reorientResult reads back worker findings"]
|
||||
QRLR --> Q
|
||||
|
|
@ -161,7 +164,8 @@ What this means in plain English:
|
|||
- The app-server can expose a targeted read-only context shard for clients that need graph/evidence detail without pulling the full typed state.
|
||||
- The app-server can expose read-only graph traversal for clients and agents that need frontier neighborhoods, path/symbol matches, or local blast-radius walks without turning traversal into proposal or promotion.
|
||||
- The app-server can expose read-only planning state for clients that need captures, backlog, roadmap streams, and Objective Drafts without turning them into active objectives.
|
||||
- The app-server can expose context pressure derived from real token telemetry without starting compaction or pretending vibes are telemetry.
|
||||
- The app-server can expose pressure, reorient, CRRC, and coordinator projections through one canonical read-only view lens surface instead of preserving a private verb zoo.
|
||||
- The pressure lens exposes context pressure derived from real token telemetry without starting compaction or pretending vibes are telemetry.
|
||||
- A loaded thread can ask for a typed observation/evidence proposal without mutating state.
|
||||
- A loaded thread can ask a verifier-backed promotion gate to reject or apply that proposal.
|
||||
- A loaded thread can now accept explicit typed state patches and persist them immediately.
|
||||
|
|
@ -1277,23 +1281,25 @@ The response is a bounded traversal result for agents that need to move around t
|
|||
|
||||
Graph query projection is read-only. It does not run retrieval, draft proposals, index code, promote observations, mutate `SessionState`, append rollout items, schedule work, or emit notifications. It is a map traversal, not a cartographer with a pen.
|
||||
|
||||
## Flow 16: Context Pressure Reflection Control Flow
|
||||
## Flow 16: Context Pressure View Lens Control Flow
|
||||
|
||||
### Input
|
||||
|
||||
A client sends experimental `thread/epiphany/pressure` with:
|
||||
A client sends experimental `thread/epiphany/view` with:
|
||||
|
||||
- `threadId`
|
||||
- `lenses: ["pressure"]`
|
||||
|
||||
### Plain-language role
|
||||
|
||||
Pressure projection is the fourth Phase 6 reflection boundary. It answers "how close is this thread to context pressure?" from runtime telemetry that already drives compaction, not from transcript vibes or user panic.
|
||||
Pressure projection is now a view lens. It answers "how close is this thread to context pressure?" from runtime telemetry that already drives compaction, not from transcript vibes or user panic.
|
||||
|
||||
The useful distinction from automatic CRRC is that this surface only reflects. It reports pressure level, measurement basis, used tokens, remaining budget, ratio, and whether preparation is advisable. It does not compact, schedule, persist state, notify `stateUpdated`, or checkpoint in-flight planning.
|
||||
|
||||
Protocol shape:
|
||||
|
||||
- `threadId`
|
||||
- `lenses`
|
||||
|
||||
Response shape:
|
||||
|
||||
|
|
@ -1330,20 +1336,21 @@ Core telemetry:
|
|||
2. `TurnContext` exposes the same auto-compact limit that the compaction path uses.
|
||||
3. token usage updates, recomputation, and full-window marking carry the threshold into session history and `TokenCount` events.
|
||||
|
||||
The app-server handler:
|
||||
The view handler:
|
||||
|
||||
1. parses the thread id.
|
||||
2. checks whether the thread is loaded.
|
||||
3. reads live `CodexThread::token_usage_info()` for loaded threads.
|
||||
4. falls back to the latest stored rollout `TokenCount` for unloaded threads.
|
||||
5. maps missing telemetry to honest `unknown`.
|
||||
6. maps known telemetry against `model_auto_compact_token_limit` when present, otherwise falls back to `model_context_window`.
|
||||
7. derives `low`, `elevated`, `high`, or `critical` from used tokens over the selected limit.
|
||||
8. sets `shouldPrepareCompaction` only as advice when the selected ratio reaches high pressure.
|
||||
2. selects the `pressure` lens.
|
||||
3. checks whether the thread is loaded.
|
||||
4. reads live `CodexThread::token_usage_info()` for loaded threads.
|
||||
5. falls back to the latest stored rollout `TokenCount` for unloaded threads.
|
||||
6. maps missing telemetry to honest `unknown`.
|
||||
7. maps known telemetry against `model_auto_compact_token_limit` when present, otherwise falls back to `model_context_window`.
|
||||
8. derives `low`, `elevated`, `high`, or `critical` from used tokens over the selected limit.
|
||||
9. sets `shouldPrepareCompaction` only as advice when the selected ratio reaches high pressure.
|
||||
|
||||
### Output
|
||||
|
||||
The response is a read-only gauge. The Phase 6 pressure smoke proved that a fresh live thread reports `unknown`, recommends no compaction prep, emits no `thread/epiphany/stateUpdated`, and does not create Epiphany state. Focused mapper tests cover auto-compact threshold preference and context-window fallback.
|
||||
The response is a read-only gauge under the view response. The Phase 6 pressure smoke proves the `thread/epiphany/view` pressure lens reports `unknown` for a fresh live thread, recommends no compaction prep, emits no `thread/epiphany/stateUpdated`, and does not create Epiphany state. Focused mapper tests cover auto-compact threshold preference and context-window fallback.
|
||||
|
||||
### Invariant
|
||||
|
||||
|
|
@ -1367,7 +1374,7 @@ turn fresh working context into decorative smoke.
|
|||
The app-server event handler:
|
||||
|
||||
1. clones the `TokenUsageInfo` from the `TokenCount` event before forwarding the normal token-usage notification.
|
||||
2. maps it through the same pressure helper used by `thread/epiphany/pressure`.
|
||||
2. maps it through the same pressure helper used by the `pressure` view lens.
|
||||
3. ignores unknown/low/elevated pressure and acts only when `shouldPrepareCompaction` is true.
|
||||
4. requires a loaded thread with existing Epiphany state.
|
||||
5. records one intervention per active turn id in listener `ThreadState`.
|
||||
|
|
@ -1384,37 +1391,39 @@ findings, promote evidence, launch arbitrary specialists, or continue
|
|||
implementation. It is a shove toward persistence, not a new little emperor with
|
||||
a queue.
|
||||
|
||||
## Flow 17: Reorientation Policy Control Flow
|
||||
## Flow 17: Reorientation View Lens Control Flow
|
||||
|
||||
### Input
|
||||
|
||||
A client sends experimental `thread/epiphany/reorient` with:
|
||||
A client sends experimental `thread/epiphany/view` with:
|
||||
|
||||
- `threadId`
|
||||
- `lenses: ["reorient"]`
|
||||
|
||||
### Plain-language role
|
||||
|
||||
Reorientation policy is the fifth Phase 6 reflection boundary. It answers one narrow question after wakeup or during a continuity check: does the current durable checkpoint still deserve `resume`, or has enough relevant drift accumulated that the honest answer is `regather`?
|
||||
Reorientation policy is now a view lens. It answers one narrow question after wakeup or during a continuity check: does the current durable checkpoint still deserve `resume`, or has enough relevant drift accumulated that the honest answer is `regather`?
|
||||
|
||||
The useful distinction from automatic CRRC is that this surface only returns a verdict. It consumes the landed checkpoint, freshness, watcher, and pressure signals, but it does not compact, schedule, mutate, notify, or continue work by itself.
|
||||
|
||||
### Mechanism
|
||||
|
||||
The app-server handler:
|
||||
The view handler:
|
||||
|
||||
1. parses the thread id.
|
||||
2. reads the same live/stored thread view used by the other reflection surfaces.
|
||||
3. reuses live retrieval summary and watcher snapshots for loaded threads when available.
|
||||
4. reuses live token telemetry or the latest stored rollout `TokenCount`.
|
||||
5. maps freshness and pressure through the existing reflection helpers.
|
||||
6. evaluates one bounded verdict:
|
||||
2. selects the `reorient` lens.
|
||||
3. reads the same live/stored thread view used by the other reflection surfaces.
|
||||
4. reuses live retrieval summary and watcher snapshots for loaded threads when available.
|
||||
5. reuses live token telemetry or the latest stored rollout `TokenCount`.
|
||||
6. maps freshness and pressure through the existing reflection helpers.
|
||||
7. evaluates one bounded verdict:
|
||||
- `regather` when state is missing, the checkpoint is missing, the checkpoint explicitly requests re-gather, checkpoint code-ref paths are dirty or newly changed, active frontier watcher hits show live drift, or an unanchored checkpoint sits on top of stale signals.
|
||||
- `resume` when a `resume_ready` checkpoint remains aligned with the current signals.
|
||||
7. returns typed reasons, relevant changed/dirty checkpoint paths, active frontier hits, next action text, and a human-readable note.
|
||||
8. returns typed reasons, relevant changed/dirty checkpoint paths, active frontier hits, next action text, and a human-readable note.
|
||||
|
||||
### Output
|
||||
|
||||
The response is a read-only wakeup verdict. The Phase 6 reorient smoke proved that a fresh live thread regathers when there is no ember, a clean checkpoint resumes, watcher-touched checkpoint paths flip the verdict back to regather, no `thread/epiphany/stateUpdated` notification is emitted, and final thread state revision does not change.
|
||||
The response is a read-only wakeup verdict under the view response. The Phase 6 reorient smoke proves the `thread/epiphany/view` reorient lens regathers when there is no ember, resumes for a clean checkpoint, flips watcher-touched checkpoint paths back to regather, emits no `thread/epiphany/stateUpdated`, and leaves final thread state revision unchanged.
|
||||
|
||||
### Invariant
|
||||
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ Reads authoritative durable state.
|
|||
Revision-gated durable state patch. No runtime lifecycle mutation except stable
|
||||
links/receipts that are project truth.
|
||||
|
||||
### `epiphany/view`
|
||||
### `thread/epiphany/view`
|
||||
|
||||
Reads selected lenses from durable state plus runtime telemetry. It is
|
||||
read-only. The request specifies lenses such as:
|
||||
|
|
@ -267,7 +267,7 @@ Delete because it compensates for bad ownership:
|
|||
|
||||
Collapse:
|
||||
|
||||
- many `thread/epiphany/*` view endpoints into `epiphany/view` lenses
|
||||
- many `thread/epiphany/*` view endpoints into `thread/epiphany/view` lenses
|
||||
- job binding lifecycle fields into runtime-spine jobs/results
|
||||
- public findings into typed projections plus sealed forensic artifacts
|
||||
|
||||
|
|
@ -456,25 +456,26 @@ Commit shape:
|
|||
|
||||
Purpose: restore the operator-safe boundary.
|
||||
|
||||
### 12. Collapse View Endpoints Behind `epiphany/view`
|
||||
### 12. Collapse View Endpoints Behind `thread/epiphany/view`
|
||||
|
||||
Add `epiphany/view` with selectable lenses. Keep old endpoints as wrappers that
|
||||
call the same core view.
|
||||
Add `thread/epiphany/view` with selectable lenses. Keep old endpoints as wrappers
|
||||
only until their consumers have moved; wrappers are quarantine scaffolding, not
|
||||
heirlooms.
|
||||
|
||||
Commit shape:
|
||||
|
||||
- no client break at first
|
||||
- new view endpoint is canonical for new consumers
|
||||
- old wrappers survive only while a named consumer still needs them
|
||||
|
||||
Purpose: stop protocol sprawl without a flag-day break.
|
||||
|
||||
### 13. Migrate Consumers To `epiphany/view`
|
||||
### 13. Migrate Consumers To `thread/epiphany/view`
|
||||
|
||||
Move MVP status/Aquarium/status bridge consumers lens by lens.
|
||||
|
||||
Commit shape:
|
||||
|
||||
- old endpoint wrappers remain
|
||||
- old endpoint wrappers remain only while migration is incomplete
|
||||
- each consumer move is independently reversible
|
||||
|
||||
Purpose: reduce dependency on the exploded API.
|
||||
|
|
@ -487,6 +488,11 @@ Once consumers are off wrappers, remove obsolete endpoints in small groups:
|
|||
- jobs/roles
|
||||
- pressure/freshness/reorient/CRRC/coordinator
|
||||
|
||||
Current scar: pressure, reorient, CRRC, and coordinator standalone read wrappers
|
||||
are already deleted. Their live read surface is `thread/epiphany/view`; the
|
||||
reorient launch/result/accept verbs remain because they are authority and review
|
||||
gates, not duplicate reflection.
|
||||
|
||||
Purpose: actually reduce the surface area instead of preserving a compatibility
|
||||
museum forever.
|
||||
|
||||
|
|
@ -517,7 +523,7 @@ The smallest coherent first implementation slice is:
|
|||
|
||||
1. add `epiphany-core/src/surfaces/`
|
||||
2. move pressure derivation into core
|
||||
3. leave `thread/epiphany/pressure` protocol unchanged as a wrapper
|
||||
3. leave `thread/epiphany/pressure` protocol unchanged as a wrapper only for the first slice
|
||||
4. move pressure policy tests into core
|
||||
5. run the existing pressure smoke
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ remembers doctrine; the branch remembers the blade.
|
|||
- Read `notes/epiphany-ideal-architecture-rebuild-plan.md` immediately after the teardown. It defines the smallest coherent replacement architecture: durable `EpiphanyState`, runtime-spine-owned `RuntimeState`, separate role memory/heartbeat state, `epiphany-core` as policy owner, app-server as adapter, Aquarium as reflector, typed acceptance receipts, and derived view lenses instead of a protocol verb zoo.
|
||||
- Do not continue Aquarium UI, bridge, Face, or dogfood expansion until the teardown has a source-grounded cleanup slice plan. Epiphany is the foundation; patches on patches are not a purification rite, they are how the altar becomes load-bearing garbage.
|
||||
- Phase 1 through Phase 5 are complete enough.
|
||||
- Phase 6 has read-only `thread/epiphany/scene`, `thread/epiphany/jobs`, `thread/epiphany/roles`, `thread/epiphany/freshness`, `thread/epiphany/context`, `thread/epiphany/graphQuery`, `thread/epiphany/planning`, `thread/epiphany/pressure`, `thread/epiphany/reorient`, `thread/epiphany/crrc`, `thread/epiphany/coordinator`, `thread/epiphany/reorientResult`, and `thread/epiphany/roleResult`; durable `jobBindings` are now legacy launcher compatibility while new durable `runtimeLinks` hold the stable runtime-spine association. New `thread/epiphany/jobLaunch`, `thread/epiphany/jobInterrupt`, `thread/epiphany/roleLaunch`, and `thread/epiphany/reorientLaunch` writes open typed runtime-spine job receipts under `state/runtime-spine.msgpack` and do not require the Codex SQLite state runtime. Freshness carries watcher-backed invalidation inputs, graphQuery traverses authoritative typed graph neighborhoods and path/symbol matches without mutation, planning projects typed captures/backlog/roadmap/objective drafts without adopting work, roles project implementation/imagination/modeling/verification/reorientation ownership from existing signals without becoming a scheduler, `roleResult` and `reorientResult` read heartbeat-backed typed runtime-spine job results through runtime links when present, `roleAccept` and `reorientAccept` accept completed heartbeat findings by writing typed acceptance receipts while remaining explicit review gates, `thread/epiphany/crrc` recommends the next explicit CRRC action without launching, accepting, compacting, scheduling, or mutating, and `thread/epiphany/coordinator` composes those signals into a fixed-lane MVP action recommendation without becoming a writer.
|
||||
- Phase 6 has read-only `thread/epiphany/scene`, `thread/epiphany/jobs`, `thread/epiphany/roles`, `thread/epiphany/freshness`, `thread/epiphany/context`, `thread/epiphany/graphQuery`, `thread/epiphany/planning`, canonical `thread/epiphany/view` lenses, `thread/epiphany/reorientResult`, and `thread/epiphany/roleResult`; durable `jobBindings` are now legacy launcher compatibility while new durable `runtimeLinks` hold the stable runtime-spine association. The old standalone pressure, reorient, CRRC, and coordinator read verbs have been deleted; read those projections through the `pressure`, `reorient`, `crrc`, and `coordinator` view lenses. New `thread/epiphany/jobLaunch`, `thread/epiphany/jobInterrupt`, `thread/epiphany/roleLaunch`, and `thread/epiphany/reorientLaunch` writes open typed runtime-spine job receipts under `state/runtime-spine.msgpack` and do not require the Codex SQLite state runtime. Freshness carries watcher-backed invalidation inputs, graphQuery traverses authoritative typed graph neighborhoods and path/symbol matches without mutation, planning projects typed captures/backlog/roadmap/objective drafts without adopting work, roles project implementation/imagination/modeling/verification/reorientation ownership from existing signals without becoming a scheduler, `roleResult` and `reorientResult` read heartbeat-backed typed runtime-spine job results through runtime links when present, and `roleAccept` / `reorientAccept` accept completed heartbeat findings by writing typed acceptance receipts while remaining explicit review gates.
|
||||
- Native `epiphany-mvp-status` is the first dogfood operator view. It starts or reads a thread through app-server and prints scene, planning, pressure, reorient, jobs, roles, Imagination/modeling/verification role result read-backs, reorient result, heartbeat, Face bubbles, and CRRC recommendation as text or machine output. The old Python status module has been cut; native Rust/CultCache/CultNet surfaces are the smoked product path.
|
||||
- Native `epiphany-mvp-coordinator` is the first auditable fixed-lane coordinator runner. It starts or reads a thread through app-server, opens a native runtime-spine session, follows the harness-native coordinator action, can auto-launch modeling, verification, or reorient-worker jobs, records native runtime job/result receipts for terminal launched work, keeps semantic findings review-gated by default, and writes summary, steps, rendered snapshots, transcript, stderr, runtime-spine status, and final next-action artifacts under `.epiphany-dogfood/coordinator` or a caller-provided artifact directory. It refuses direct backend-completion mutation; full completion smoke needs live workers while execution is being cauterized into CultNet.
|
||||
- Native `epiphany-runtime-spine` is the first Codex-independent runtime vertebra. It owns typed CultCache documents for runtime identity, sessions, jobs, job results, and events; opens/completes native jobs; snapshots jobs/results by runtime job id; projects job-result counts; and can emit a framed CultNet hello message advertising the native document and mutation contract surface. Codex app-server launch/read-back/acceptance is now a typed heartbeat/runtime-spine bridge with no Epiphany job-result dependency on the Codex SQLite runtime.
|
||||
|
|
@ -135,7 +135,7 @@ The current spine, blessed but not yet finished:
|
|||
- bounded reorient-guided worker launch through `thread/epiphany/reorientLaunch`
|
||||
- read-only reorient-worker result read-back through `thread/epiphany/reorientResult`
|
||||
- explicit reorient-worker finding acceptance through `thread/epiphany/reorientAccept`
|
||||
- read-only CRRC coordinator recommendation through `thread/epiphany/crrc`
|
||||
- read-only CRRC coordinator recommendation through the `crrc` view lens
|
||||
- CRRC now recognizes already accepted reorientation findings so `reorientAccept` does not leave the operator stuck on a repeat `acceptReorientResult` recommendation.
|
||||
- thin launcher metadata in durable `jobBindings`
|
||||
- `thread/epiphany/jobsUpdated` remains protocol shape only for sealed legacy evacuation telemetry; app-server no longer emits Epiphany updates from old runtime `agent_job_progress` events
|
||||
|
|
@ -147,10 +147,10 @@ The current spine, blessed but not yet finished:
|
|||
- read-only graph traversal through `thread/epiphany/graphQuery`
|
||||
- read-only planning projection through `thread/epiphany/planning`
|
||||
- GUI planning adoption now belongs to Aquarium/backend API surfaces; the old EpiphanyAgent Python GUI action shim has been cut
|
||||
- read-only current-context pressure reflection through `thread/epiphany/pressure`
|
||||
- read-only CRRC reorientation policy through `thread/epiphany/reorient`
|
||||
- read-only CRRC next-action recommendation through `thread/epiphany/crrc`
|
||||
- read-only fixed-lane MVP action recommendation through `thread/epiphany/coordinator`
|
||||
- read-only current-context pressure reflection through the `pressure` view lens
|
||||
- read-only CRRC reorientation policy through the `reorient` view lens
|
||||
- read-only CRRC next-action recommendation through the `crrc` view lens
|
||||
- read-only fixed-lane MVP action recommendation through the `coordinator` view lens
|
||||
- limited turn-complete CRRC automation for coordinator-approved compact and fixed reorient-worker launch actions
|
||||
- token-count pre-compaction checkpoint intervention for loaded Epiphany turns at the `shouldPrepareCompaction` threshold, with a turn-scoped compact handoff consumed after a successful steer
|
||||
- durable investigation checkpoint packet through typed state, prompt, scene, and context
|
||||
|
|
@ -191,10 +191,7 @@ The exact current control flow is documented in
|
|||
- `thread/epiphany/context` is read-only.
|
||||
- `thread/epiphany/graphQuery` is read-only.
|
||||
- `thread/epiphany/planning` is read-only.
|
||||
- `thread/epiphany/pressure` is read-only.
|
||||
- `thread/epiphany/reorient` is read-only.
|
||||
- `thread/epiphany/crrc` is read-only.
|
||||
- `thread/epiphany/coordinator` is read-only.
|
||||
- `thread/epiphany/view` is read-only; its current lenses include pressure, reorient, CRRC, and coordinator projections.
|
||||
- `thread/epiphany/roles` is read-only.
|
||||
- `thread/epiphany/roleResult` is read-only.
|
||||
- `thread/epiphany/roleAccept` is a narrow write surface for completed Imagination/planning and modeling/checkpoint `statePatch` findings only; it must not accept verification output, broad authority fields, job bindings, arbitrary implementation work, or implicit objective adoption.
|
||||
|
|
@ -275,9 +272,8 @@ For the bounded reorient-guided worker launch surface, run:
|
|||
```powershell
|
||||
```
|
||||
|
||||
The same smoke now also covers the read-only `thread/epiphany/crrc`
|
||||
coordinator recommendation over continue, wait, accept, interrupt, and relaunch
|
||||
states.
|
||||
The same smoke now also covers the read-only `crrc` view-lens coordinator
|
||||
recommendation over continue, wait, accept, interrupt, and relaunch states.
|
||||
|
||||
For the fixed-lane MVP coordinator endpoint and runner, run:
|
||||
|
||||
|
|
@ -376,12 +372,14 @@ The next real move is still foundation cleanup. Start from
|
|||
Phase 6 bridge/UI trail. Landed rebuild cuts: `epiphany-core/src/surfaces/`
|
||||
exists, pressure view derivation and tests live in core, live acceptance writes
|
||||
typed receipts keyed by runtime result id, summary-string acceptance identity
|
||||
is gone for live paths, launches dual-write runtime links, and result read-back
|
||||
prefers those runtime links. The next cut is to shrink/delete `jobBindings`
|
||||
lifecycle/backend fields now that `runtimeLinks` can locate runtime-spine jobs,
|
||||
then continue with public `raw_result` removal, `epiphany/view` lens collapse,
|
||||
consumer migration, and heartbeat cognition quarantine. No Agile confetti. No
|
||||
new balcony on the swaying tower.
|
||||
is gone for live paths, launches dual-write runtime links, result read-back
|
||||
prefers those runtime links, normal public `raw_result` is sealed, MVP consumers
|
||||
use `thread/epiphany/view`, heartbeat cognition is quarantined, and the old
|
||||
pressure/reorient/CRRC/coordinator read wrappers are deleted. The next cut is to
|
||||
decide which remaining read verbs deserve to stay as true query surfaces and
|
||||
which should collapse behind view lenses, then keep moving policy out of
|
||||
app-server into `epiphany-core`. No Agile confetti. No new balcony on the
|
||||
swaying tower.
|
||||
|
||||
The Phase 6 freshness slice is landed. It exposes read-only
|
||||
`thread/epiphany/freshness` from live retrieval summaries plus graph
|
||||
|
|
@ -391,10 +389,10 @@ mapped graph/frontier hits, and revision/source identity, but it does not
|
|||
mutate state, schedule refresh work, or perform automatic semantic
|
||||
invalidation.
|
||||
|
||||
The Phase 6 context-pressure slice is also landed. It exposes read-only
|
||||
`thread/epiphany/pressure` from real token telemetry and the recorded
|
||||
auto-compact/context limits. It does not build automatic CRRC, a scheduler, a
|
||||
hidden compaction trigger, or a vibes-based gauge.
|
||||
The Phase 6 context-pressure slice is also landed. It now exposes read-only
|
||||
pressure through `thread/epiphany/view` from real token telemetry and the
|
||||
recorded auto-compact/context limits. It does not build automatic CRRC, a
|
||||
scheduler, a hidden compaction trigger, or a vibes-based gauge.
|
||||
|
||||
The Phase 6 investigation-checkpoint slice is also landed. It banks an
|
||||
authoritative planning/source-gathering packet in typed state, validates linked
|
||||
|
|
@ -418,10 +416,11 @@ action requires an explicit selected draft before writing active
|
|||
objective/subgoal state plus review artifacts. Imported issues still do not
|
||||
become implementation authority by themselves.
|
||||
|
||||
The bounded CRRC coordination/policy layer is now also landed as read-only
|
||||
`thread/epiphany/reorient`. It consumes the landed pressure, freshness,
|
||||
watcher, and investigation-checkpoint signals to decide whether a checkpoint
|
||||
still deserves `resume` or has to admit `regather`.
|
||||
The bounded CRRC coordination/policy layer is now also landed as read-only view
|
||||
lenses. The `reorient` lens consumes pressure, freshness, watcher, and
|
||||
investigation-checkpoint signals to decide whether a checkpoint still deserves
|
||||
`resume` or has to admit `regather`; the `crrc` and `coordinator` lenses compose
|
||||
that verdict into operator actions without becoming writers.
|
||||
|
||||
Also keep the guardrail in mind: a read-only reorientation verdict and read-only
|
||||
CRRC recommendation are still not automatic CRRC execution. Runtime action is
|
||||
|
|
@ -520,8 +519,7 @@ worker, direct-thought feed, random editor launcher, or GUI-as-source-of-truth.
|
|||
|
||||
Live `thread/epiphany/scene`, `thread/epiphany/jobs`, `thread/epiphany/roles`,
|
||||
`thread/epiphany/freshness`, `thread/epiphany/context`,
|
||||
`thread/epiphany/graphQuery`, `thread/epiphany/planning`, `thread/epiphany/pressure`,
|
||||
`thread/epiphany/reorient`, `thread/epiphany/crrc`, `thread/epiphany/coordinator`,
|
||||
`thread/epiphany/graphQuery`, `thread/epiphany/planning`, `thread/epiphany/view`,
|
||||
native `epiphany-mvp-status`, native `epiphany-mvp-coordinator`, and
|
||||
native `epiphany-phase6-graph-query-smoke` / native `epiphany-phase6-planning-smoke`
|
||||
smokes are now guardrails, not the next organs. The architectural teardown says
|
||||
|
|
|
|||
Reference in a new issue