You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[G3] Cutover: relayhistory becomes the default and only source; delete the harness readers, walkers, cursors and fs watcher; ship as a major release #562
Part of #553 (group 3 — depends on every burn group-2 issue (#557, #558, #559, #561) and on relayhistory #183's parity report showing 100% identity match for Claude and Codex; parallel with #560/#563).
Scope
Default flip: relayhistory-source feature becomes non-optional; BackendChoice::Builtin removed; IngestRoots removed from the public API (lib.rs:132-139 re-exports) — replaced by a thin SessionStoreOptions (db path, provider roots override passthrough for tests) that maps onto ai-hist's StoreOptions. Env: RELAYBURN_SOURCE removed; AI_HIST_DB honoured; BURN_CLAUDE_PROJECTS_DIR removed (was a second root injection point — burn [G1] Remove vestigial ingest surface before the swap: opencode-stream cursor, legacy harnesses/ adapters, stale reader docs #556).
Delete (with their tests): crates/relayburn-sdk/src/reader/claude.rs + claude/{incremental,parent_chain,relationships,tool_results,subagents,tests}.rs, reader/codex.rs + codex/{incremental,tests}.rs, reader/opencode.rs + opencode/tests.rs, ingest/{walk,cursors,fs_events,gap,reingest}.rs (gap logic moves to the backend per [G2] Watch mode, --hook claude, pending stamps and gap warnings over the relayhistory backend #558), ingest/backend/builtin.rs, crates/relayburn-cli/src/harnesses/, the notify/memchr deps if unused. Keep: reader/types.rs, reader/{classifier,user_turn,inference,fidelity,git,hash}.rs, reader/claude/span_tree.rs, reader/codex/span_tree.rs (they consume records, not logs — consider renaming reader/ → model/), everything under analyze/, ledger/, ingest/{pending_stamps,watch_loop}.rs as adapted.
Fixtures: tests/fixtures/{claude,codex,opencode} stay as the input to the parity/ledger-snapshot suites (relayhistory Add --provider filter to burn compare (closes #138) #163 owns the canonical copy; add a tests/fixtures/README.md saying so and a CI check that burn's copy is byte-identical to relayhistory's tagged copy, or fetch them from the pinned relayhistory tag).
Migration for users (docs/migrating-to-5.md + README.md "Quick Start"): npm i -g relayburn now depends on the relayhistory store; first run performs the [G2] Identity and fingerprint compatibility, cursor migration, and state rebuild from the relayhistory store #561 reconciliation; burn ingest = "sync relayhistory then pull"; --hook claude unchanged; burn state rebuild needs the relayhistory DB, not the logs; what happens if the relayhistory DB is missing (bootstrap it: SessionStore::open + sync with default roots — burn must not require the ai-hist CLI to be installed).
Versioning: workspace version = "5.0.0"; packages/* bumped by the publish workflow; relayburn-sdk crate major bump; pin ai-hist = "=x.y.z" (exact — the crate version is the contract) and add the reverse contract-drift job from relayhistory Wire provider rendering through analyze #183 to ci.yml (parity suite against the pinned published crate). Adopting a new ai-hist version is a deliberate PR that bumps the pin and re-runs parity.
Verification before publish: on three real machines, burn summary --since 30d --json before and after upgrade — totals, per-model tokens and cost identical (or differences enumerated in the release notes with root cause). Include the positive control from CLAUDE.md's "verifying claims" discipline in the release checklist.
Acceptance
grep -rn "parse_claude_session\|parse_codex_session\|parse_opencode_session\|notify::" crates/ → no matches.
Part of #553 (group 3 — depends on every burn group-2 issue (#557, #558, #559, #561) and on relayhistory #183's parity report showing 100% identity match for Claude and Codex; parallel with #560/#563).
Scope
relayhistory-sourcefeature becomes non-optional;BackendChoice::Builtinremoved;IngestRootsremoved from the public API (lib.rs:132-139re-exports) — replaced by a thinSessionStoreOptions(db path, provider roots override passthrough for tests) that maps ontoai-hist'sStoreOptions. Env:RELAYBURN_SOURCEremoved;AI_HIST_DBhonoured;BURN_CLAUDE_PROJECTS_DIRremoved (was a second root injection point — burn [G1] Remove vestigial ingest surface before the swap: opencode-stream cursor, legacy harnesses/ adapters, stale reader docs #556).crates/relayburn-sdk/src/reader/claude.rs+claude/{incremental,parent_chain,relationships,tool_results,subagents,tests}.rs,reader/codex.rs+codex/{incremental,tests}.rs,reader/opencode.rs+opencode/tests.rs,ingest/{walk,cursors,fs_events,gap,reingest}.rs(gap logic moves to the backend per [G2] Watch mode,--hook claude, pending stamps and gap warnings over the relayhistory backend #558),ingest/backend/builtin.rs,crates/relayburn-cli/src/harnesses/, thenotify/memchrdeps if unused. Keep:reader/types.rs,reader/{classifier,user_turn,inference,fidelity,git,hash}.rs,reader/claude/span_tree.rs,reader/codex/span_tree.rs(they consume records, not logs — consider renamingreader/→model/), everything underanalyze/,ledger/,ingest/{pending_stamps,watch_loop}.rsas adapted.tests/fixtures/{claude,codex,opencode}stay as the input to the parity/ledger-snapshot suites (relayhistory Add --provider filter to burn compare (closes #138) #163 owns the canonical copy; add atests/fixtures/README.mdsaying so and a CI check that burn's copy is byte-identical to relayhistory's tagged copy, or fetch them from the pinned relayhistory tag).docs/migrating-to-5.md+README.md"Quick Start"):npm i -g relayburnnow depends on the relayhistory store; first run performs the [G2] Identity and fingerprint compatibility, cursor migration, andstate rebuildfrom the relayhistory store #561 reconciliation;burn ingest= "sync relayhistory then pull";--hook claudeunchanged;burn state rebuildneeds the relayhistory DB, not the logs; what happens if the relayhistory DB is missing (bootstrap it:SessionStore::open+syncwith default roots — burn must not require theai-histCLI to be installed).README.mdfirst paragraph andburn ingestsection;AGENTS.mdlayout section (dropreader/), "Adding ingest support" replaced by "Session sourcing lives in relayhistory";CHANGELOG.md[Unreleased]→5.0.0narrative: breaking (env vars,IngestRoots,IngestOptions.harnesssemantics), added (Cursor/Grok via [G3] Harness expansion through relayhistory: Cursor and Grok in burn (SourceKind, pricing, TOOL_ALIASES, overhead mapping, fidelity policy) and collector-backlog transfer #560), fixed (Codex turn accounting collapses many API requests into one turn #504/Attribution and grouping gaps: subagent spend, project rollups, harness split, session token column #506 via [G3] Accounting fixes unlocked by shared evidence: Codex per-request turns (#504), subagent project rollups and harness split (#506),sessions listtoken column #563).version = "5.0.0";packages/*bumped by the publish workflow;relayburn-sdkcrate major bump; pinai-hist = "=x.y.z"(exact — the crate version is the contract) and add the reverse contract-drift job from relayhistory Wire provider rendering through analyze #183 toci.yml(parity suite against the pinned published crate). Adopting a newai-histversion is a deliberate PR that bumps the pin and re-runs parity.burn summary --since 30d --jsonbefore and after upgrade — totals, per-model tokens and cost identical (or differences enumerated in the release notes with root cause). Include the positive control fromCLAUDE.md's "verifying claims" discipline in the release checklist.Acceptance
grep -rn "parse_claude_session\|parse_codex_session\|parse_opencode_session\|notify::" crates/→ no matches.cargo test --workspacegreen; ledger snapshot suite ([G1] Characterization lock: ledger golden snapshots for the full fixture corpus and aburn state parityledger differ #555) and parity suite pass with relayhistory as the only source; golden CLI tests unchanged except documented help-text edits.npm i -g relayburn && burn summaryworks with no relayhistory CLI installed.Out of scope
New analytics.