discover
Scan the entire git history of a Rust project and identify every bug-fix commit as a mutation candidate
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Scan the entire git history of a Rust project and identify every bug-fix commit as a mutation candidate
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
Turn one fix commit into a full mutation+property+witness workload atom, verify it, and commit it
Build src/bin/etna.rs as a programmatic, framework-agnostic dispatcher over (tool, property) pairs
End-to-end sanity check — etna workload check passes, base builds, every variant is detected, every framework drives its crate
Regenerate BUGS.md and TASKS.md via `etna workload doc` — docs are derived, never hand-edited
استنادا إلى تصنيف SOC المهني
| name | discover |
| description | Scan the entire git history of a Rust project and identify every bug-fix commit as a mutation candidate |
Walk the entire git history of the target project once and classify every commit as either a bug-fix candidate or not. Do not paginate, do not sample, do not stop early. We want every bug we can possibly mine.
git -C <project> log --all --pretty=format:'%H%x00%ai%x00%an <%ae>%x00%s' — iterate every commit.git show --stat <hash> first, then git show <hash> if the stat looks promising) and carry it forward.Do not write a checkpoint file. Hold the candidate list in working memory and hand it directly to the atomize stage.
Accept a commit as a fix when any of these hold:
fix: / fix!: / bugfix: / contains fix, bug, patch, correct, repair, panic, crash, overflow, regression, unsound, incorrect, wrong.close #123, resolves #456).^Merge ), unless they introduce the fix themselves.Every candidate must carry forward:
hash (full)date (ISO 8601)subjectauthorfiles (implementation files changed — strip pure test/doc files for this summary, but remember them for atomize)hunks (approximate count — git show --stat gives this)reason (one short line: why this is a fix)atomize, not here.atomize's job.fix foo, then fix foo, again, record both; atomize will decide whether to compose or split them.The candidate list is an in-memory array, passed directly to atomize. No JSON file. This is intentional — the source tree and git history are the only durable records.
Append to <project>/progress.jsonl (see prompts/run.md for the contract):
| When | Event line |
|---|---|
Before the git log walk starts | {"stage":"discover","event":"start"} |
| Every ~100 commits inspected (optional heartbeat) | {"stage":"discover","event":"progress","commits_scanned":N,"fix_commits_so_far":K} |
| A commit is classified as a fix candidate | {"stage":"discover","event":"candidate","hash":"<short>","subject":"<subject>","files":F,"hunks":H} |
| Walk complete, handing off to atomize | {"stage":"discover","event":"done","commits_scanned":N,"fix_commits":K} |
Always include the ts field on every line. On resume, the presence of a discover.done line means the walk is already complete — do not redo it; re-derive the candidate list from the in-file candidate events (or rewalk; both are cheap).