Parent
#15
What to build
Bootstrap the src/runner/ module with empty type shells and land an NDJSON regression test that captures the event stream of a known crawl. The shells compile but route no behavior; the regression test becomes the trip wire that every subsequent slice must keep green.
Type shells to add (in src/runner/mod.rs): JobRunner, JobOutcome, JobTimings, SessionContext, RetryDecision, JobError, FetchSuccess. Shapes per PRD #15 "Implementation Decisions". Send + Sync, no per-call mutable state on self.
NDJSON regression test lives in tests/ and runs a small deterministic crawl against a fixture HTTP server, serializing the emitted NDJSON event stream and asserting byte-equality against a checked-in golden file.
Acceptance criteria
Blocked by
None - can start immediately
Parent
#15
What to build
Bootstrap the
src/runner/module with empty type shells and land an NDJSON regression test that captures the event stream of a known crawl. The shells compile but route no behavior; the regression test becomes the trip wire that every subsequent slice must keep green.Type shells to add (in
src/runner/mod.rs):JobRunner,JobOutcome,JobTimings,SessionContext,RetryDecision,JobError,FetchSuccess. Shapes per PRD #15 "Implementation Decisions".Send + Sync, no per-call mutable state onself.NDJSON regression test lives in
tests/and runs a small deterministic crawl against a fixture HTTP server, serializing the emitted NDJSON event stream and asserting byte-equality against a checked-in golden file.Acceptance criteria
src/runner/mod.rsexists with the listed type shellscargo check --all-targets --all-featuresgreencargo test --all-featuresgreentests/runs a deterministic crawl and asserts NDJSON event stream parity against a golden filetests/fixtures/#[cfg(test)] mod testsblock insrc/runner/mod.rsproving the struct shapes compile and serialize as expectedBlocked by
None - can start immediately