Parent: #245
Context
The standalone modules of relayburn-ingest (pending_stamps, walk,
watch_loop, cursors) and the public verb surface landed in #245. The
per-harness orchestration loops — the bodies of ingest_claude_into,
ingest_codex_into, ingest_opencode_into, and the per-session fast-path
ingest_claude_session — are currently empty stubs that return an empty
report.
Scope
Fill in the orchestration helpers in crates/relayburn-ingest/src/ingest.rs:
ingest_claude_into: walk ~/.claude/projects/<project>/, run
parse_claude_session_incremental per file with cursor + lastUserText
carry-over, append turns/content/events/relationships/toolResultEvents/userTurns,
reconcile cross-file relationships at the end.
ingest_codex_into: walk codex sessions, drive the resume/cumulative
state machine, call resolve_pending_stamps_for_session for fresh
ingests, derive sessionId from filename UUID or first-line hint.
ingest_opencode_into: walk ses_*.json files, derive message dir
mtime, drive parse_opencode_session_incremental with seenMessageIds.
ingest_claude_session: replace the current stub with the real fast-path
body — single parse_claude_session call, append, persist cursor at EOF.
Files
crates/relayburn-ingest/src/ingest.rs — ingest_*_into helpers and
the ingest_claude_session body.
Acceptance
Parent: #245
Context
The standalone modules of
relayburn-ingest(pending_stamps,walk,watch_loop,cursors) and the public verb surface landed in #245. Theper-harness orchestration loops — the bodies of
ingest_claude_into,ingest_codex_into,ingest_opencode_into, and the per-session fast-pathingest_claude_session— are currently empty stubs that return an emptyreport.
Scope
Fill in the orchestration helpers in
crates/relayburn-ingest/src/ingest.rs:ingest_claude_into: walk~/.claude/projects/<project>/, runparse_claude_session_incrementalper file with cursor + lastUserTextcarry-over, append turns/content/events/relationships/toolResultEvents/userTurns,
reconcile cross-file relationships at the end.
ingest_codex_into: walk codex sessions, drive the resume/cumulativestate machine, call
resolve_pending_stamps_for_sessionfor freshingests, derive sessionId from filename UUID or first-line hint.
ingest_opencode_into: walkses_*.jsonfiles, derive message dirmtime, drive
parse_opencode_session_incrementalwith seenMessageIds.ingest_claude_session: replace the current stub with the real fast-pathbody — single
parse_claude_sessioncall, append, persist cursor at EOF.Files
crates/relayburn-ingest/src/ingest.rs—ingest_*_intohelpers andthe
ingest_claude_sessionbody.Acceptance
full parse-and-append path.
ingest_allintegration test: drop a session file under eachharness's session root, run
ingest_all, assert turns appear inthe ledger and cursors are persisted.
ingest_claude_sessiontest: writes one cursor at EOF such that asubsequent
ingest_allskips the file.cargo test -p relayburn-ingestgreen.