This repository has been archived on 2026-10-29. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
Epiphany/state/evidence.jsonl
2026-04-24 21:02:56 +01:00

100 lines
48 KiB
JSON

{"ts":"2026-04-23","type":"scaffold","status":"ok","note":"Initialized EpiphanyAgent workspace with typed state files, controller action rules, and an initial experiment map."}
{"ts": "2026-04-23T03:42:27+00:00", "type": "bootstrap", "status": "ok", "note": "Initialized repo, added typed-state scaffold, and verified the tiny CLI runs with bundled Python."}
{"ts": "2026-04-23T03:48:53+00:00", "type": "research", "status": "ok", "note": "Cloned openai/codex, identified collaboration-mode presets as the clean insertion point, and wrote a concrete patch plan note for preset-backed versus enum-backed Epiphany mode."}
{"ts": "2026-04-23T15:28:33+00:00", "type": "handoff", "status": "ok", "note": "Added root AGENTS.md and notes/fresh-workspace-handoff.md so a fresh workspace can continue from repo-local context."}
{"ts": "2026-04-23T15:29:25+00:00", "type": "handoff", "status": "ok", "note": "Added architecture-rationale.md with the typed-state architecture, cheap prototype strategy, eval shape, and DeepSeek research context."}
{"ts": "2026-04-23T15:47:17+00:00", "type": "research", "status": "ok", "note": "Orientation confirmed the preset-backed Codex insertion point and recorded that Phase 1 TUI selection/labeling must compare preset identity, not only ModeKind, because Epiphany rides on Default."}
{"ts": "2026-04-23T15:48:11+00:00", "type": "research", "status": "ok", "note": "App-server collaboration mode list preserves preset name but drops developer_instructions; turn-start fallback currently matches only ModeKind, so duplicate Default-backed presets need explicit preset identity or explicit instructions in non-TUI flows."}
{"ts": "2026-04-23T15:55:06+00:00", "type": "research", "status": "ok", "note": "Cloned stellarlinkco/codex to vendor/opencodex and ymichael/open-codex to vendor/open-codex-cli. The exact-name open-codex fork is terminal-only; vendor/opencodex is the GUI-relevant Rust/Web UI fork served by codex serve."}
{"ts": "2026-04-23T16:17:47+00:00", "type": "research", "status": "ok", "note": "Checked OpenCodex Anthropic/Claude GUI claims. web README and MODEL_OPTIONS mention claude/sonnet/opus, but AgentSelector only exposes codex and serve backend rejects any spawned agent other than codex; Anthropic support appears limited to model_provider config, not GUI agent selection."}
{"ts": "2026-04-23T16:26:11+00:00", "type": "research", "status": "rejected", "note": "Audited imdigitalashish/OpenCodex: it is a Tauri desktop wrapper around vendored opencode, not a Codex fork; the core coding-agent path depends on an external opencode binary and non-interactive CLI mode."}
{"ts": "2026-04-23T16:26:11+00:00", "type": "verification", "status": "partial", "note": "Frontend npm ci and npm run build succeeded for imdigitalashish/OpenCodex; npm audit reports 3 high-severity advisories. Go and Cargo toolchains are not on PATH, so opencode and Tauri backend were not compiled."}
{"ts": "2026-04-23T16:26:11+00:00", "type": "research", "status": "rejected", "note": "imdigitalashish/OpenCodex GUI model IDs are inconsistent with vendored opencode SupportedModels: the GUI advertises/writes Anthropic API IDs like claude-sonnet-4-5-20250929 while opencode accepts symbolic IDs such as claude-4-sonnet."}
{"ts": "2026-04-23T16:31:48+00:00", "type": "decision", "status": "ok", "note": "Removed third-party OpenCodex comparison clones from vendor/opencodex, vendor/open-codex-cli, and vendor/opencodex-imdigitalashish. Decision: build a dedicated GUI wrapper around customized vendored Codex instead of trusting unaudited forks."}
{"ts": "2026-04-23T18:02:11+01:00", "type": "research", "status": "ok", "note": "Mapped vendored Codex end-to-end dataflow in notes/codex-repository-algorithmic-map.md: CLI/TUI choose a surface, app-server is the transport seam, core/session owns prompt assembly and tool execution, and rollouts plus SQLite provide durable thread history and metadata."}
{"ts": "2026-04-23T18:16:47+01:00", "type": "design", "status": "ok", "note": "Defined Epiphany as core-owned structured thread state in notes/epiphany-core-harness-surfaces.md. The spec anchors on existing TurnContextItem and PlanUpdate/TurnDiff patterns: persist Epiphany baselines in rollouts, stream typed updates through app-server, and let the GUI render graphs, invariants, evidence, intent, and churn without becoming the source of truth."}
{"ts": "2026-04-23T18:24:36+01:00", "type": "design", "status": "ok", "note": "Refined the Epiphany harness spec so the machine map is two linked graphs rather than one: an ArchitectureGraph and a DataflowGraph, joined by explicit cross-links and grounded by line-anchored code refs. Replaced the vague node description field with purpose, mechanism, and metaphor so the internal representation carries richer language for both model alignment and human inspection."}
{"ts": "2026-04-23T18:36:52+01:00", "type": "design", "status": "ok", "note": "Updated the Epiphany harness spec to handle repeated compactions during large repo mapping. Added an explicit spine/frontier/scratch model, graph checkpoints as re-entry breadcrumbs, dataflow sharding for large repositories, coverage/provenance status on graph elements, and more resilient code refs with symbol and last-seen revision metadata so resume/compaction does not collapse the map back into prose mush."}
{"ts": "2026-04-23T19:41:43+00:00", "type": "research", "status": "ok", "note": "Inspected Codex session 019db84b-7edd-7843-abc9-76ad2c402bb4 rollout. Failure mode was repeated premature closure on mapping work: assistant repeatedly framed local pass completion as done while user had to restate bar (missing leaves, control flow not file map, hand-waved mechanisms). Four context compactions preserved replacement_history but likely weakened the persistent evaluation bar. Quality improved only when user asked a concrete mechanism question (planetary gravity to visible nebula terrain), which forced an honest admission of a missing seam. Implication for Epiphany: mapping tasks need explicit done criteria based on answering concrete transformation questions, plus durable coverage/frontier/gap state across compactions."}
{"ts": "2026-04-23T19:54:42+00:00", "type": "decision", "status": "ok", "note": "Patched epiphany-core-harness-surfaces.md to make mapping done-criteria explicit. Added durable MechanismQuestion and MechanismGap concepts, separate MappingCompletionState from coverage, preserved active questions/gaps through frontier and checkpoint, and required concrete transformation-question answerability before marking mapping work done. Updated state/map.yaml to carry the same rule into accepted design and next action."}
{"ts": "2026-04-23T20:01:26+00:00", "type": "decision", "status": "ok", "note": "Documented a multi-agent Epiphany harness model in epiphany-core-harness-surfaces.md. Added supervising-harness plus specialist-agent framing, agent registry and role metadata, ownership boundaries for mapper/worker/verifier/coordinator, private-by-default role scratch, subscription-triggered wakeups, protocol/UI surfaces for agent status, and phased specialist-agent scheduling. Updated state/map.yaml to record the shared-state-plane plus role-ownership design and to defer the patch-slice plan until after this broader design pass."}
{"ts": "2026-04-23T20:08:53+00:00", "type": "decision", "status": "ok", "note": "Extended epiphany-core-harness-surfaces.md with a first-class repository retrieval subsystem. Added hybrid retrieval principle (exact path/symbol/lexical plus semantic chunk and graph-linked lookup), repo-local sharded index summaries, diff-driven freshness/invalidation, role-scoped retrieval policies, retrieval lifecycle hooks, protocol/app-server update events, typed retrieval query surface guidance, UI retrieval view, and phased rollout positioning before GUI reflection and specialist-agent scheduling. Updated state/map.yaml to treat retrieval as a core design decision and to keep the next action on broader harness design before a Phase 1 patch-slice plan."}
{"ts": "2026-04-23T20:13:55+00:00", "type": "research", "status": "ok", "note": "Scanned vendored Codex for additional harness blind spots before patch planning. Findings: repo retrieval is still fuzzy-file/CLI-centric; file watchers are wired mainly to skills cache invalidation and fs notifications, not repo-understanding freshness; subagents inherit config and tools but do not share a typed collaboration state plane; the startup memories pipeline explicitly excludes sub-agent sessions; most tool outputs still persist into history as text payloads; and turn diff tracking exposes aggregated unified diff, not impacted symbols/subsystems or semantic invalidation. Implication: Epiphany should reuse watcher/diff/subagent substrate but add typed distillation, freshness tracking, and shared repo knowledge above it."}
{"ts": "2026-04-23T20:23:25+00:00", "type": "decision", "status": "ok", "note": "Patched notes/epiphany-core-harness-surfaces.md after the Codex blind-spot scan. The spec now explicitly reuses existing Codex substrate (watchers, diff stream, subagent lifecycle, memory pipeline) while naming the missing semantic layer above it: code-intelligence-aware hybrid retrieval, semantic invalidation over repo changes, a structured observation/distillation layer between raw tool output and durable state, and a shared knowledge plane for specialist agents that is not replacement_history or prompt osmosis. Synced state/map.yaml with the same observation-layer design."}
{"ts": "2026-04-23T20:33:19+00:00", "type": "decision", "status": "ok", "note": "Revised notes/codex-repository-algorithmic-map.md so the Codex machine map reflects both the main turn loop and the surrounding side channels/limitations. Added watcher and memory actors, extended the top-level flow with compaction and watcher/diff side channels, documented that tool outputs are still mostly transcript-shaped, and added explicit sections for file watching, textual diff tracking, message/config-based subagent coordination, startup memory summarization, and compaction as real dataflow. Conclusion: Codex has useful substrate around the loop, but still lacks a canonical typed repo-understanding layer above it."}
{"ts": "2026-04-23T20:38:04+00:00", "type": "decision", "status": "ok", "note": "Patched epiphany-core-harness-surfaces.md with explicit GUI-first implications. The spec now states that structured thread state, not the transcript, is the primary artifact; chat is one client of that state; GUI steering should use typed updates; resume must restore a working scene; and long-running retrieval/remap/verification/specialist work should surface as typed jobs with progress. Added EpiphanyJobState to the thread model plus EpiphanyJobsUpdated protocol/app-server events, and expanded UI responsibilities and phase notes accordingly. Synced state/map.yaml with the same GUI-first design correction."}
{"ts": "2026-04-23T20:56:56+00:00", "type": "decision", "status": "ok", "note": "Replaced notes/codex-epiphany-mode-plan.md with the actionable Phase 1 implementation plan. The repo now records an internal/dev-usable first slice focused on minimal Epiphany protocol types, SessionState storage, one Epiphany rollout snapshot per real user turn, replay through rollout reconstruction, exhaustive RolloutItem compatibility updates, and persistence/replay tests before prompt integration, presets, protocol notifications, or GUI work. Synced state/map.yaml so the next action is implementation rather than more design passes."}
{"ts": "2026-04-23T21:32:00+01:00", "type": "decision", "status": "ok", "note": "Patched notes/epiphany-core-harness-surfaces.md to make compaction role-specific instead of arbitrary hidden trimming. Added the design rule that compaction is a harness-level state transition with safe points, explicit checkpoints, and role-specific resume packets; documented default policies for worker, mapper, verifier, coordinator, and churn monitor; and added soft versus hard compaction language plus explicit compaction telemetry requirements. Confirmed this does not change the Phase 1 implementation slice, and synced state/map.yaml with the new accepted design."}
{"ts": "2026-04-23T21:36:00+01:00", "type": "decision", "status": "ok", "note": "Updated README.md to reflect the current EpiphanyAgent direction before Phase 1 implementation. Documented the actual target surface (vendored Codex core harness), the two-graph map model, GUI-first typed thread state, specialist-agent plus retrieval direction, role-specific compaction policy, and the intentionally narrow Phase 1 slice focused on durable core state rather than UI or prompt integration."}
{"ts": "2026-04-23T23:12:00+01:00", "type": "implementation", "status": "ok", "note": "Implemented the Phase 1 internal/dev-usable Epiphany core state slice in vendored Codex. Added EpiphanyThreadState and EpiphanyStateItem to the rollout protocol, persisted Epiphany snapshots in SessionState and per-turn rollout metadata after TurnContext, restored the latest surviving snapshot through rollout reconstruction across resume/rollback/compaction, and patched rollout/state/app-server readers plus fork filtering to tolerate the new RolloutItem::EpiphanyState variant."}
{"ts": "2026-04-23T23:12:00+01:00", "type": "verification", "status": "ok", "note": "Installed Rust and Visual Studio Build Tools to verify the Phase 1 slice in a real toolchain. cargo fmt completed; codex-protocol, codex-app-server-protocol, codex-rollout, and codex-state lib test suites passed; and the new codex-core tests for Epiphany persistence and reconstruction passed when CARGO_TARGET_DIR was moved to C: to avoid the v8 crate's Windows cross-drive symlink privilege failure."}
{"ts": "2026-04-23T23:19:29+01:00", "type": "decision", "status": "ok", "note": "Flattened vendor/codex into the parent repository by removing the gitlink/submodule wiring and nested .git metadata so the Codex Phase 1 Epiphany harness changes can be reviewed and committed as ordinary tracked files alongside the project state."}
{"ts": "2026-04-23T23:25:52+01:00", "type": "decision", "status": "ok", "note": "Replaced the stale Phase 1 plan and stale workspace handoff with current persisted guidance. The new notes pin the next slice as Phase 2 prompt integration: render a bounded Epiphany developer-context summary from SessionState.epiphany_state, inject it during Session::build_initial_context, keep activation internal-only via state presence, and verify it with prompt-facing tests and a snapshot before touching GUI or retrieval."}
{"ts": "2026-04-23T22:48:30+00:00", "type": "implementation", "status": "ok", "note": "Implemented the Phase 2 prompt-integration slice in vendored Codex. Added a dedicated EpiphanyStateInstructions developer fragment, rendered a bounded summary from SessionState.epiphany_state, injected it into Session::build_initial_context after collaboration-mode instructions, and added prompt-facing inclusion/omission/resume coverage plus a stable snapshot."}
{"ts": "2026-04-23T22:55:33+00:00", "type": "decision", "status": "ok", "note": "Documented the pre-compaction persistence workflow as an explicit Epiphany design rule. Updated the core harness spec, README, handoff note, and canonical map to state that Epiphany should be an opinionated software development agent: before compaction or handoff it should persist map, evidence, blockers, and next action on purpose rather than relying on transcript continuity."}
{"ts": "2026-04-24T00:39:29+01:00", "type": "decision", "status": "ok", "note": "Delivered Phase 3 as a conservative typed read-surface slice instead of full live event/update exposure. Added optional epiphanyState to hydrated app-server Thread payloads and kept dedicated Epiphany-specific update RPCs and live notifications deferred so the client can read canonical state without scraping prompt text."}
{"ts": "2026-04-24T00:39:29+01:00", "type": "implementation", "status": "ok", "note": "Implemented the Phase 3 typed client exposure slice in vendored Codex. Added a shared core helper to reconstruct the latest surviving EpiphanyThreadState from rollout items, exposed live thread epiphany_state through CodexThread, added optional Thread.epiphany_state in app-server protocol v2, hydrated thread/start, thread/resume, thread/fork, thread/read, thread/unarchive, and detached review-thread startup from live state or rollout, patched exhaustive Thread test fixtures, and documented the new field in app-server/README.md."}
{"ts": "2026-04-24T00:39:29+01:00", "type": "verification", "status": "ok", "note": "Verified the Phase 3 slice with the Windows CARGO_TARGET_DIR workaround. cargo fmt --all passed; cargo test -p codex-core -p codex-app-server-protocol -p codex-app-server -p codex-analytics -p codex-exec -p codex-tui --lib --no-run passed; and targeted tests passed for codex-core latest_epiphany_state_from_rollout_items, codex-app-server load_epiphany_state_from_rollout_path_reads_latest_snapshot, and codex-app-server-protocol serialize_client_response."}
{"ts": "2026-04-24T00:44:53+01:00", "type": "decision", "status": "ok", "note": "Patched the Epiphany spec and handoff workflow to make compaction pressure-aware instead of purely reactive. Added the rule that the harness should detect rising context pressure before the hard limit, checkpoint at the next safe point when pressure is high, and persist immediately when pressure is critical rather than waiting for forced compaction to erase live reasoning."}
{"ts": "2026-04-24T00:47:37+01:00", "type": "decision", "status": "ok", "note": "Updated the repo-local AGENTS.md to carry the operational bootstrap and re-entry protocol explicitly. Fresh sessions and post-compaction resumes should reread the persisted state files, run tools/epiphany_state.py status immediately, restate the persisted next action before edits, and treat rising context pressure as a cue to checkpoint before forced compaction."}
{"ts": "2026-04-24T00:50:33+01:00", "type": "decision", "status": "ok", "note": "Added a dedicated current-state Epiphany algorithmic delta map in notes/epiphany-current-algorithmic-map.md. The note documents only the currently landed divergence from plain Codex: durable Epiphany state in protocol/rollout, replay-aware restoration, prompt injection through build_initial_context, and typed app-server Thread.epiphanyState hydration, while explicitly calling out what has not diverged yet."}
{"ts": "2026-04-24T00:03:39+00:00", "type": "research", "status": "ok", "note": "Recovered from source that existing exact/path lookup substrate already exists through codex_file_search in vendored Codex, currently used by app-server fuzzy search in vendor/codex/codex-rs/app-server/src/fuzzy_file_search.rs."}
{"ts": "2026-04-24T00:03:39+00:00", "type": "research", "status": "ok", "note": "Recovered from source that codex-core already depends on bm25 and uses it in vendor/codex/codex-rs/core/src/tools/handlers/tool_search.rs, so a bounded local BM25 retrieval backend can reuse in-tree library precedent instead of inventing a new search dependency."}
{"ts": "2026-04-24T00:03:39+00:00", "type": "research", "status": "ok", "note": "Preflighted the tracked Phase 4 source corpus using git-tracked files rather than raw working-tree disk usage. At vendor/codex HEAD d45ab10, tracked vendor/codex/codex-rs source is 3642 files / 31.09 MB; raw working-tree size is polluted by build artifacts and should not drive retrieval design."}
{"ts": "2026-04-24T00:03:39+00:00", "type": "decision", "status": "ok", "note": "Chose the first bounded Phase 4 retrieval backend as a query-time hybrid retriever: reuse codex_file_search for exact/path-ish lookup, use workspace-local BM25 chunk search as the initial semantic backend, keep the slice loaded-thread-first and read-only, and defer embeddings, vector stores, persistent indexing, and watcher-driven invalidation."}
{"ts": "2026-04-24T00:03:39+00:00", "type": "implementation", "status": "in_progress", "note": "The current working tree contains an unverified protocol scaffold for Phase 4 in vendor/codex/codex-rs/protocol/src/protocol.rs. It adds EpiphanyThreadState.retrieval plus EpiphanyRetrievalState, EpiphanyRetrievalStatus, and EpiphanyRetrievalShardSummary, but core/app-server wiring and test verification are still pending."}
{"ts": "2026-04-24T00:22:05+00:00", "type": "decision", "status": "ok", "note": "Live hydrated thread epiphanyState now backfills a lightweight retrieval summary when the thread already has Epiphany state but no persisted retrieval metadata yet; this keeps the first slice loaded-thread-first and read-only without inventing a write path."}
{"ts": "2026-04-24T00:22:05+00:00", "type": "implementation", "status": "in_progress", "note": "Phase 4 working tree now wires query-time hybrid retrieval across core and app-server: new core epiphany_retrieval module, CodexThread retrieval entry points, experimental app-server protocol method thread/epiphany/retrieve, and app-server request handling/mapping are all present but not formatted or verified yet."}
{"ts": "2026-04-24T00:22:05+00:00", "type": "verification", "status": "pending", "note": "Phase 4 retrieval wiring still needs cargo fmt and targeted Windows-safe Rust verification for codex-core, codex-app-server-protocol, and codex-app-server; no tests have been run on the current wider diff yet."}
{"ts": "2026-04-24T02:07:46+01:00", "type": "implementation", "status": "ok", "note": "Finished the first bounded Phase 4 query-time hybrid retrieval slice in the working tree. Fixed the live-thread mapping fallout in codex_message_processor.rs, added retrieval: None to the prompt fixture Epiphany state, tightened the exact-hit retrieval test fixture to a genuinely matchable path, and kept the retrieval surface additive and read-only with live retrieval-summary backfill rather than inventing a write path."}
{"ts": "2026-04-24T02:07:46+01:00", "type": "verification", "status": "ok", "note": "Verified the Phase 4 slice with the Windows CARGO_TARGET_DIR workaround. cargo fmt --all passed; cargo test -p codex-core -p codex-app-server-protocol -p codex-app-server --lib --no-run passed; targeted tests passed for codex-core retrieve_workspace_*, codex-app-server-protocol thread_epiphany_retrieve*, and codex-app-server map_epiphany_retrieve_response_preserves_summary_and_results; full cargo test -p codex-app-server-protocol passed after stable schema regeneration."}
{"ts": "2026-04-24T02:07:46+01:00", "type": "decision", "status": "ok", "note": "Stable app-server protocol schema fixtures are the only safe checked-in schema state for the Phase 4 slice. Running write_schema_fixtures with --experimental rewrites the same schema tree, causes stable protocol tests to fail if left in place, and therefore must be followed by stable fixture regeneration before the repo is left in a landed state."}
{"ts": "2026-04-24T02:07:46+01:00", "type": "decision", "status": "ok", "note": "Kept EpiphanyThreadState sparse at the protocol/export boundary. The protocol export test now explicitly exempts EpiphanyThreadState from the optional-nullable params rule because durable thread state intentionally uses optional fields, and flattening it into a fake params-shaped object would be the worse lie."}
{"ts": "2026-04-24T02:11:38+01:00", "type": "decision", "status": "ok", "note": "Deferred durable retrieval-summary persistence beyond the verified Phase 4 slice. EpiphanyState snapshots are still persisted on real user-turn boundaries, so teaching thread/epiphany/retrieve to append durable state now would require a new out-of-band rollout semantic or a fake turn boundary; keep the current slice as the landing zone instead of widening the machine casually."}
{"ts": "2026-04-24T02:11:38+01:00", "type": "decision", "status": "ok", "note": "Adopted Qdrant as the intended first persistent semantic retrieval backend after the verified BM25 baseline. The rationale is practical rather than fashionable: the user is already moving away from a blob-thrashing Postgres/JSON embedding store in adjacent infrastructure, so Epiphany should target a real vector DB for persistent semantic indexing while keeping exact/path search first-class and retaining BM25 as bootstrap/fallback/control rather than going vector-only."}
{"ts": "2026-04-24T02:43:41+01:00", "type": "decision", "status": "ok", "note": "Resolved the remaining backend policy fork before shipping Phase 4 slice 1: Qdrant is the preferred later persistent semantic backend, but not a hard runtime requirement for basic Epiphany use. The verified BM25 retriever remains the no-hassle bootstrap/fallback/control path for users who do not want Qdrant or when Qdrant is unavailable."}
{"ts": "2026-04-24T03:21:18+01:00", "type": "verification", "status": "ok", "note": "Collapsed the temporary phase branch after push so the landed Phase 4 slice now lives directly on main at 360dfea with a clean worktree. Synced map, scratch, plan, and handoff state so the persisted next action is the post-reboot Qdrant-backed persistent-semantic follow-up rather than stale push prep."}
{"ts": "2026-04-24T07:48:38+01:00", "type": "implementation", "status": "ok", "note": "Built the next bounded Phase 4 persistent-semantic follow-up in the working tree. Retrieval stays read-only, a new experimental thread/epiphany/index method now drives explicit semantic indexing, codex-core persists Qdrant index manifests under codex_home, local Ollama embeddings default to qwen3-embedding:0.6b, and retrieval now prefers a fresh Qdrant index while preserving exact/path search and BM25 fallback."}
{"ts": "2026-04-24T07:48:38+01:00", "type": "verification", "status": "ok", "note": "Verified the explicit Qdrant follow-up with the Windows CARGO_TARGET_DIR workaround. cargo fmt --all passed; cargo test -p codex-core --lib epiphany_retrieval passed; cargo test -p codex-app-server-protocol --lib thread_epiphany_ passed; cargo test -p codex-app-server --lib map_epiphany_ passed; full cargo test -p codex-app-server-protocol passed; and cargo test -p codex-core -p codex-app-server-protocol -p codex-app-server --lib --no-run passed on the final working tree."}
{"ts": "2026-04-24T07:48:38+01:00", "type": "decision", "status": "ok", "note": "Kept the persistent-semantic follow-up mechanically honest: no durable EpiphanyState writes were bolted onto thread/epiphany/retrieve, the new Qdrant path only mutates the world through explicit thread/epiphany/index, persistent metadata lives under codex_home instead of workspace sludge, and backend config currently stays env-scoped with support for adjacent VoidBot-style env names as fallbacks."}
{"ts": "2026-04-24T12:35:59+01:00", "type": "decision", "status": "ok", "note": "Drafted a top-level repository licensing policy instead of pretending the vendored Apache surface and the planned Epiphany dual-license model would sort themselves out by osmosis. The new LICENSE file says upstream Codex and other third-party material keep their original licenses, original Epiphany-authored material is intended for a personal-use / commercial dual-license model, mixed upstream files do not lose Apache rights, and the repository as a whole should not be described as OSI Open Source unless the project-authored material is later released under an OSI-approved license too."}
{"ts": "2026-04-24T12:37:21+01:00", "type": "research", "status": "ok", "note": "Grounded the dual-license draft against published models instead of improvising in a vacuum. The LICENSE file now explicitly cites Qt's open-source/commercial dual-licensing overview and Oracle's MySQL GPL/commercial dual-license model as structural references, while also stating honestly that Epiphany's planned personal-use / commercial split is an adaptation of that broader pattern rather than a claim that those projects use the same exact terms."}
{"ts": "2026-04-24T13:20:06+01:00", "type": "implementation", "status": "ok", "note": "Extracted the heavy Epiphany-owned prompt and retrieval/indexing logic into a repo-owned sibling crate at epiphany-core. epiphany-core/src/prompt.rs now renders Epiphany thread state, epiphany-core/src/retrieval.rs owns the hybrid BM25/Qdrant/Ollama retrieval and indexing engine, and vendored codex-core keeps thin adapters plus the typed protocol/thread/app-server seams."}
{"ts": "2026-04-24T13:20:06+01:00", "type": "verification", "status": "ok", "note": "Verified the new extraction boundary cleanly. cargo fmt --manifest-path .\\\\epiphany-core\\\\Cargo.toml passed; cargo test --manifest-path .\\\\epiphany-core\\\\Cargo.toml passed; cargo fmt --all passed in vendor/codex/codex-rs; CARGO_TARGET_DIR=C:\\\\Users\\\\Meta\\\\.cargo-target-codex cargo test -p codex-core -p codex-app-server-protocol -p codex-app-server --lib --no-run passed; and targeted codex-core/app-server-protocol/app-server epiphany tests still passed after swapping vendored logic for thin wrappers and a path dependency."}
{"ts": "2026-04-24T13:44:09+01:00", "type": "implementation", "status": "ok", "note": "Pulled the Phase 3 rollout replay helper into epiphany-core too. epiphany-core/src/rollout.rs now owns latest_epiphany_state_from_rollout_items as generic Epiphany bookkeeping, while vendored codex-core/src/epiphany_rollout.rs is reduced to a thin wrapper that provides Codex's user-turn-boundary predicate."}
{"ts": "2026-04-24T13:44:09+01:00", "type": "verification", "status": "ok", "note": "Re-verified after moving the rollout helper. cargo fmt --manifest-path .\\\\epiphany-core\\\\Cargo.toml passed; cargo fmt --all passed in vendor/codex/codex-rs; cargo test --manifest-path .\\\\epiphany-core\\\\Cargo.toml passed with 9 tests; CARGO_TARGET_DIR=C:\\\\Users\\\\Meta\\\\.cargo-target-codex cargo test -p codex-core --lib epiphany passed; CARGO_TARGET_DIR=C:\\\\Users\\\\Meta\\\\.cargo-target-codex cargo test -p codex-core -p codex-app-server-protocol -p codex-app-server --lib --no-run passed; targeted app-server and app-server-protocol Epiphany tests passed too."}
{"ts": "2026-04-24T13:57:09+01:00", "type": "research", "status": "ok", "note": "Grounded the tightened repository license notice against primary sources instead of inventing another bespoke pseudo-license. The rewrite uses PolyForm Noncommercial 1.0.0 as the operative public license for Project-Authored Material outside vendor/codex, preserves Apache-2.0 boundaries for vendored Codex per ASF guidance on modified Apache distributions, references Qt and MySQL only as structural dual-license examples, and records the Copyright Office / 17 U.S.C. 411 rule that copyright exists automatically but registration is still required before a U.S. infringement suit on a U.S. work."}
{"ts": "2026-04-24T13:57:09+01:00", "type": "implementation", "status": "ok", "note": "Replaced the root LICENSE draft with an operative repository license notice. The new text clearly separates upstream material from Project-Authored Material, pins the public path for non-vendored project-owned material to PolyForm Noncommercial 1.0.0 with the full text included in the file, states the separate written commercial-license path, makes clear that lack of a corporate entity does not forfeit copyright ownership or licensing ability, and warns that mixed Apache files under vendor/codex are not magically converted into a PolyForm-only codebase."}
{"ts": "2026-04-24T14:10:00+01:00", "type": "research", "status": "ok", "note": "Checked established CLA structures before adding Epiphany's contributor agreement. Apache ICLA, Project Harmony, and Canonical all use the same broad pattern that fits this project: contributors retain ownership while granting the project wide rights to distribute, sublicense, and build on contributions; Harmony explicitly documents outbound-license options including broad relicensing, and Canonical documents the rationale that contributors keep copyright while granting the project permission to use contributions."}
{"ts": "2026-04-24T14:10:00+01:00", "type": "implementation", "status": "ok", "note": "Added CONTRIBUTOR_LICENSE_AGREEMENT.md and CONTRIBUTING.md, then updated LICENSE, README, and handoff notes. The CLA keeps contributor ownership but grants the Project Steward perpetual, worldwide, no-charge, royalty-free, irrevocable, transferable, and sublicensable copyright and patent rights, including the right to relicense contributions under open-source, source-available, noncommercial, commercial, proprietary, dual-license, or future terms. Contributions are now documented as unacceptable unless submitted under the CLA or an equivalent written agreement."}
{"ts": "2026-04-24T13:28:36+00:00", "type": "verification", "status": "ok", "note": "Repo sanity pass on 2026-04-24 found the implementation boundary clean: epiphany-core owns prompt/replay/retrieval organs, vendored Codex remains a thin typed host seam, and README/map/plan/handoff/scratch were synchronized to the pushed 80c29e0 baseline. Verification passed for epiphany-core tests plus targeted codex-core, codex-app-server-protocol, and codex-app-server Epiphany tests."}
{"ts": "2026-04-24T13:31:20+00:00", "type": "verification", "status": "ok", "note": "Local retrieval dependency sanity check passed during repo inventory: Qdrant at http://127.0.0.1:6333 returned collections successfully, and Ollama at http://127.0.0.1:11434 exposes qwen3-embedding:0.6b, the default Epiphany embedding model."}
{"ts": "2026-04-24T13:44:16+00:00", "type": "implementation", "status": "ok", "note": "Renamed the live implementation plan from notes/codex-epiphany-mode-plan.md to notes/epiphany-fork-implementation-plan.md and updated active AGENTS, README, handoff, map, and companion notes to frame Epiphany as an opinionated Codex fork with an explicit modeling architecture rather than a Codex mode or preset."}
{"ts": "2026-04-24T13:55:37+00:00", "type": "implementation", "status": "ok", "note": "Updated notes/epiphany-current-algorithmic-map.md so the dedicated Epiphany algorithmic map frames the project as a Codex fork with a typed modeling spine, reflects the landed Phase 4 retrieval/indexing/core-extraction baseline, includes explicit Qdrant indexing in the flow, and no longer undersells the current system as merely a thin mode/overlay."}
{"ts": "2026-04-24T13:56:18+00:00", "type": "implementation", "status": "ok", "note": "Promoted notes/epiphany-current-algorithmic-map.md from a narrow delta-map framing to the dedicated Epiphany algorithmic map in active docs. README, AGENTS, handoff, and state/map.yaml now point to it as the current machine map of the Epiphany fork itself."}
{"ts": "2026-04-24T13:58:50+00:00", "type": "implementation", "status": "ok", "note": "Rewrote notes/epiphany-current-algorithmic-map.md as an actual current control-flow map. It now traces live Epiphany state through protocol shape, session resume, prompt injection, per-turn rollout persistence, thread read hydration, retrieval, explicit indexing, retrieval-summary backfill, and explicitly documents the missing typed state-update/observation-promotion organ."}
{"ts": "2026-04-24T14:00:58+00:00", "type": "implementation", "status": "ok", "note": "Added the missing natural-language modeling layer to notes/epiphany-current-algorithmic-map.md. The map now includes a Natural Language Spine plus per-flow plain-language roles and mental images, so it explains not only what the current control flow does but why each stage exists in the Epiphany model of forcing agents to model their work."}
{"ts": "2026-04-24T14:04:56+00:00", "type": "decision", "status": "ok", "note": "Persisted a mapping-discipline rule after user correction: do not add natural-language explanations or metaphors to algorithmic maps unless the relevant source has first been read into context and the prose is anchored to concrete code references. Metaphor is allowed as compression after source grounding, not as a substitute for understanding."}
{"ts": "2026-04-24T14:09:28+00:00", "type": "implementation", "status": "ok", "note": "Re-audited notes/epiphany-current-algorithmic-map.md against freshly read source context. The pass reread protocol state types, SessionState accessors, core resume reconstruction, epiphany-core rollout replay, prompt rendering, app-server Thread hydration, CodexThread retrieval/indexing bridges, app-server protocol methods, and epiphany-core retrieval/indexing branches, then tightened the map around full-vs-narrow replay, live-vs-stored hydration, Qdrant/BM25 fallback behavior, and explicit indexing semantics."}
{"ts": "2026-04-24T14:21:31+00:00", "type": "verification", "status": "ok", "note": "Live app-server smoke verified the explicit Phase 4 indexing path against real local Qdrant/Ollama. Built codex-app-server.exe with CARGO_TARGET_DIR=C:\\Users\\Meta\\.cargo-target-codex, started an ephemeral loaded thread rooted at E:\\Projects\\EpiphanyAgent\\epiphany-core with isolated CODEX_HOME=.epiphany-smoke/codex-home, preflighted the corpus at 5 tracked files / 106748 bytes, ran thread/epiphany/index forceFullRebuild, received ready qdrant-ollama-v1:qwen3-embedding:0.6b summary for 5 files / 198 chunks, observed Qdrant collection epiphany_workspace_fa24bab116f8d229 and manifest creation, then thread/epiphany/retrieve returned persistent semantic chunks from src/prompt.rs. Env/default backend config is sufficient for this slice; defer first-class config until real operator pain appears."}
{"ts": "2026-04-24T15:05:00+00:00", "type": "implementation", "status": "ok", "note": "Landed the first explicit typed Epiphany state-update surface in the working tree. Added experimental loaded-thread-only thread/epiphany/update, ThreadEpiphanyUpdateParams/Patch/Response protocol DTOs, app-server routing, CodexThread.epiphany_update_state(...), EpiphanyStateUpdate core patch application, immediate RolloutItem::EpiphanyState persistence with rollout flush, and replay support for out-of-band Epiphany snapshots before the first real user turn. The update path appends observations/evidence, replaces bounded map/scratch/churn fields, increments revision, supports optional expectedRevision, and keeps retrieval read-only."}
{"ts": "2026-04-24T15:06:00+00:00", "type": "verification", "status": "ok", "note": "Verified the typed Epiphany update slice with cargo test --manifest-path .\\epiphany-core\\Cargo.toml rollout, cargo test -p codex-core --lib epiphany, cargo test -p codex-app-server-protocol --lib thread_epiphany_, cargo test -p codex-app-server --lib map_epiphany_, regenerated stable app-server protocol fixtures, and ran full cargo test -p codex-app-server-protocol successfully."}
{"ts": "2026-04-24T15:18:00+00:00", "type": "verification", "status": "ok", "note": "Live app-server stdio smoke verified thread/epiphany/update end-to-end. Rebuilt codex-app-server.exe, initialized with experimentalApi, started ephemeral loaded thread 019dbffc-c19a-75e0-bf35-c780bee59a68 rooted at epiphany-core, called thread/epiphany/update with expectedRevision 0 and typed objective/observation/evidence/churn patch, received revision 1, then thread/read returned epiphanyState revision 1 with objective Smoke-test explicit Epiphany update persistence plus observation obs-update-smoke and evidence ev-update-smoke. Smoke result is .epiphany-smoke/update-smoke-result.json. Nested reused Epiphany core DTO fields are snake_case on the wire inside the camelCase app-server envelope."}
{"ts": "2026-04-24T15:47:20+00:00", "type": "implementation", "status": "ok", "note": "Landed the first typed Epiphany distillation/proposal surface in the working tree. Added repo-owned epiphany-core/src/distillation.rs, thin codex-core re-export, experimental loaded-thread-only thread/epiphany/distill protocol DTOs/routing/handler, and deterministic distill_observation(...) proposal generation. The endpoint is read-only: it returns expectedRevision plus a ThreadEpiphanyUpdatePatch containing observation/evidence records, and durable promotion still requires thread/epiphany/update."}
{"ts": "2026-04-24T15:47:21+00:00", "type": "verification", "status": "ok", "note": "Verified the typed Epiphany distillation slice with cargo test --manifest-path .\\epiphany-core\\Cargo.toml distill, cargo test -p codex-core --lib distill, cargo test -p codex-app-server-protocol --lib thread_epiphany_, cargo test -p codex-app-server --lib thread_epiphany, regenerated stable app-server protocol fixtures, ran full cargo test -p codex-app-server-protocol, and built codex-app-server.exe."}
{"ts": "2026-04-24T15:47:21+00:00", "type": "verification", "status": "ok", "note": "Live app-server stdio smoke verified thread/epiphany/distill plus explicit promotion through thread/epiphany/update. Started ephemeral loaded thread 019dc028-99ce-7b03-8f89-65b072cc2cca rooted at epiphany-core, distill returned expectedRevision 0 with observation obs-c9bfcac23d66 and evidence ev-c9bfcac23d66, update advanced state to revision 1, and thread/read returned the promoted records. Smoke result is .epiphany-smoke/distill-smoke-result.json."}
{"ts": "2026-04-24T16:52:21+00:00", "type": "decision", "status": "ok", "note": "Persisted workflow discipline lesson after Phase 5 distill/update work: meticulousness is not ceremony; the effective Epiphany loop is rehydrate first, bound the active slice, source-ground any map/prose in the actual code, make the smallest coherent change, verify the seam that matters, then persist map/evidence/handoff before moving to the next phase."}
{"ts": "2026-04-24T17:27:47+00:00", "type": "implementation", "status": "ok", "note": "Landed the first explicit Epiphany promotion gate in the working tree. Added epiphany-core/src/promotion.rs, thin codex-core re-export, experimental loaded-thread-only thread/epiphany/promote protocol DTOs/routing/handler, and policy evaluation that requires verifier evidence, rejects invalid candidates without mutation, and applies accepted candidates through CodexThread.epiphany_update_state(...)."}
{"ts": "2026-04-24T17:27:48+00:00", "type": "verification", "status": "ok", "note": "Verified the promotion slice with cargo test --manifest-path .\\epiphany-core\\Cargo.toml promotion, cargo test -p codex-core --lib promotion, cargo test -p codex-app-server-protocol --lib thread_epiphany_, cargo test -p codex-app-server --lib thread_epiphany, regenerated stable app-server protocol fixtures, ran full cargo test -p codex-app-server-protocol, and built codex-app-server.exe."}
{"ts": "2026-04-24T17:27:49+00:00", "type": "verification", "status": "ok", "note": "Live app-server stdio smoke verified thread/epiphany/promote. Distilled a promotion smoke patch in ephemeral loaded thread 019dc087-6d3d-7323-9a2f-2487a591ef7a, rejected failed verifier evidence with no state mutation, then accepted ok verifier evidence, promoted through the durable update path to revision 1, and thread/read returned observation obs-77248505f492 plus evidence ev-77248505f492 and ev-promote-smoke-verifier. Smoke result is .epiphany-smoke/promote-smoke-result.json."}
{"ts": "2026-04-24T17:49:26+00:00", "type": "implementation", "status": "ok", "note": "Updated notes/epiphany-current-algorithmic-map.md for the landed thread/epiphany/promote flow. The current model now includes promote as a verifier-backed gate between distill proposals and the durable update path, with source-grounded refs to app-server protocol DTOs, app-server routing/handler code, and epiphany-core promotion policy evaluation."}
{"ts": "2026-04-24T17:52:09+00:00", "type": "decision", "status": "ok", "note": "Documented compact-rehydrate-continue as an explicit Epiphany architecture primitive. The cycle is: compact from a checkpoint when possible, rehydrate from canonical map/handoff/evidence rather than prompt residue, restate the persisted next action, and continue with one bounded move."}
{"ts": "2026-04-24T18:05:25+00:00", "type": "implementation", "status": "ok", "note": "Landed first richer promotion safety layer: state replacement promotions now require explicit observation/evidence records and validate subgoal/invariant/graph/frontier/checkpoint/churn structure in epiphany-core before app-server forwards accepted patches to the durable update path."}
{"ts": "2026-04-24T18:06:30+00:00", "type": "verification", "status": "ok", "note": "Verified richer promotion safety layer with epiphany-core full tests, codex-core epiphany tests, and codex-app-server epiphany tests. Full codex-app-server --lib run compiled but hit an unrelated stack overflow in in_process_start_uses_requested_session_source_for_thread_start; Epiphany-scoped app-server tests passed."}
{"ts": "2026-04-24T18:12:04+00:00", "type": "verification", "status": "warning", "note": "Rechecked codex-app-server stack overflow from full --lib verification: the exact test in_process::tests::in_process_start_uses_requested_session_source_for_thread_start reproduces when run alone. The failing test exercises in-process thread/start session-source mapping in app-server/src/in_process.rs, not the Epiphany promotion handler or epiphany-core policy path touched by bb557d1. Treat it as outside the touched Epiphany path, but not proven pre-existing without checking an older commit."}
{"ts": "2026-04-24T19:00:15+00:00", "type": "verification", "status": "ok", "note": "Traced the codex-app-server stack overflow after bb557d1. The original failing in_process thread/start test overflowed after the processor completed thread/start and before response routing; RUST_MIN_STACK=64MB made exact failures pass. Additional exact failures in guardian and thread-start tracing tests confirmed app-server test-thread stack pressure on Windows rather than one semantic Epiphany path failure. Added Cargo config RUST_MIN_STACK=67108864 and boxed large JSON/in-process request futures plus thread-start/promote futures; full cargo test -p codex-app-server --lib now passes 232/232 without setting RUST_MIN_STACK in the shell."}
{"ts": "2026-04-24T19:23:29+00:00", "type": "verification", "status": "ok", "note": "Reduced the app-server stack fix to the minimal verified culprit. Removed the boxed-future request-dispatch experiments from codex_message_processor.rs, in_process.rs, and message_processor.rs while keeping repo-local Cargo RUST_MIN_STACK=67108864. Exact overflow repros and full cargo test -p codex-app-server --lib pass without shell RUST_MIN_STACK, so the boxes were cruft and should stay gone."}
{"ts": "2026-04-24T19:30:07+00:00", "type": "decision", "status": "ok", "note": "Persisted anti-cruft regression discipline: when a change is made to fix a regression or move a benchmark and it does not fix that regression or move that benchmark, immediately revert it before trying the next hypothesis. Failed hypotheses are not souvenirs; record the rejected path only when the lesson matters."}
{"ts": "2026-04-24T19:38:51+00:00", "type": "implementation", "status": "ok", "note": "Moved the anti-Jenga regression/benchmark discipline from repo prose into runtime Epiphany prompt pressure. epiphany-core::render_epiphany_state now renders an Operating Discipline section in the developer-state block: one measured hypothesis at a time, revert failed regression/benchmark fixes before the next hypothesis, and stop when diff grows while understanding shrinks. Verified with epiphany-core tests and codex-core epiphany tests."}
{"ts": "2026-04-24T19:48:44+00:00", "type": "documentation", "status": "ok", "note": "Source-grounded pass over notes/epiphany-current-algorithmic-map.md. Re-read protocol state, session resume/prompt/persistence, app-server thread hydration and Epiphany RPC handlers, CodexThread update/retrieval host methods, and epiphany-core prompt/rollout/retrieval/distillation/promotion code. Updated the map to include the runtime anti-Jenga operating-discipline prompt section, removed the stale no-update-surface invariant, refreshed moved code anchors, corrected the handoff's outdated Phase 3 no-update-RPC note, and mechanically checked 98 local map links with line anchors."}
{"ts": "2026-04-24T21:02:31+01:00", "type": "documentation", "status": "ok", "note": "Corrected persisted phase memory after rechecking the harness roadmap and evidence log. Phase 4 is the landed retrieval/indexing/core-extraction baseline; Phase 5 is the current semantic distillation/promotion/proposal phase. Updated AGENTS.md, state/map.yaml, state/scratch.md, notes/fresh-workspace-handoff.md, and notes/epiphany-fork-implementation-plan.md so rehydrate/status no longer imply the current work is still a Phase 4 tail or a Qdrant live-smoke follow-up."}