Skip to content

runner: move per-attempt event/hook emission into JobRunner; cleanup dead helpers in crawler.rs #23

@filipeforattini

Description

@filipeforattini

Parent

#15

What to build

Move per-attempt lifecycle event and hook emission from Crawler into JobRunner. Run-level / decision events stay on the Crawler. Then delete dead helpers in crawler.rs that are no longer reachable.

Fires from JobRunner (inside run()): job_started, fetch_first_byte, render_navigated, challenge_detected, fetch_completed, extract_completed, job_failed.

Stays on Crawler: job_enqueued, job_dequeued, job_admitted, job_rejected, job_retried, job_dropped, job_persisted, frontier_seeded, run_started, run_stopped.

NDJSON event names and payloads must remain byte-for-byte unchanged; only the emitter changes. The regression test from #16 is the trip wire.

After events move, sweep src/crawler.rs for helpers that no longer have callers and delete them.

Acceptance criteria

  • Per-attempt events listed above fire from inside JobRunner::run via the injected Arc<EventSink> / Arc<HookRegistry>
  • Run-level events listed above continue to fire from Crawler
  • NDJSON byte-for-byte parity confirmed by the regression test from runner: bootstrap module shells + NDJSON regression test harness #16
  • Hook firing points (Rust and Lua) unchanged in event names and HookContext payload
  • Dead helpers in crawler.rs deleted (track LOC delta in PR description)
  • cargo test --all-features green
  • cargo clippy --all-targets --all-features -- -D warnings green
  • PR description includes before/after LOC count for src/crawler.rs

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestneeds-triageAwaiting triagerustPull requests that update rust code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions