# ADR-0008 — The miner proposes; a human curates. Deferred past v1.

**Status:** accepted · **Date:** 2026-07-26

## Context

The brief asks for a git-history task miner: pick a merged PR, revert it, feed the agent the
issue body, compare the produced diff to the real one. It is the most interesting component in
the plan and the most likely to consume two of four weekends.

## Decision

Two-part decision.

1. **Scope:** `ablate mine` *proposes* candidate tasks — filtered, ranked, and written as draft
   YAML with a review checklist. It never produces a suite the tool then treats as validated.
2. **Schedule:** deferred to M5, post-v1. The design is fully specified in
   [04-task-suite.md](../04-task-suite.md) so it can be built quickly if
   [R3](../11-risks.md) (task-authoring friction) fires.

## Rejected: fully automated mining as a v1 feature

Rejected on three specific hard parts, none optional for it to work:

- **Environment reproduction.** Reverting an 8-month-old PR and getting its test suite to run
  needs the historical dependency state. This is what SWE-bench spends its entire layered Docker
  cache on, and [ADR-0002](0002-trial-isolation.md) rules out Docker for v1. The mitigation — a
  hard filter requiring "tests pass at parent, fail after revert" — is correct but costs a full
  suite run per candidate and will reject most PRs.
- **Filtering quality.** Most merged PRs make bad tasks: no tests, multi-concern, underspecified
  bodies. The filter list in [04-task-suite.md](../04-task-suite.md) is a guess and will need
  several iterations against real repos to be useful, which is empirical work, not coding work.
- **Similarity scoring is a trap.** Exact diff matching penalizes correct alternative
  implementations; semantic matching is an LLM judge, excluded by
  [ADR-0004](0004-no-llm-judge.md). The resolution — behaviour (the hidden test) gates, file-set
  Jaccard and hunk-locality are reported diagnostics only — is right, but arriving at it required
  giving up the feature as originally framed.

## Rejected: shipping the miner instead of the ablation engine

Considered seriously, because a good miner would solve the adoption problem. Rejected because
**the task suite is not the differentiator.** Anyone can write five tasks against their own repo
in twenty minutes; nobody else can tell them which config sections earn their keep. Spending
scarce weekends on task acquisition rather than on the thing only this tool does would be
strategically backwards. See [02-scope.md](../02-scope.md).

## Consequences

- v1 depends on hand-authored tasks, which is the largest adoption risk ([R3](../11-risks.md)).
  Mitigated by making `ablate init` templates runnable as-is with zero editing.
- When built, `mine` is explicitly experimental and its output is drafts in
  `.ablate/tasks/proposed/`, which the user moves to `.ablate/tasks/` after review.
- The "tests pass at parent, fail after revert" filter is the single most valuable line of the
  miner and should be built first — it validates both environment reproducibility and assertion
  strength in one check.
