diff --git a/.kiro/specs/harnessx-removal/spec.json b/.kiro/specs/harnessx-removal/spec.json index c60b559..55dd157 100644 --- a/.kiro/specs/harnessx-removal/spec.json +++ b/.kiro/specs/harnessx-removal/spec.json @@ -1,9 +1,9 @@ { "feature_name": "harnessx-removal", "created_at": "2026-09-30T08:00:00Z", - "updated_at": "2026-09-30T10:30:00Z", + "updated_at": "2026-09-30T11:00:00Z", "language": "en", - "phase": "design-generated", + "phase": "tasks-generated", "approvals": { "requirements": { "generated": true, @@ -11,10 +11,10 @@ }, "design": { "generated": true, - "approved": false + "approved": true }, "tasks": { - "generated": false, + "generated": true, "approved": false } }, diff --git a/.kiro/specs/harnessx-removal/tasks.md b/.kiro/specs/harnessx-removal/tasks.md new file mode 100644 index 0000000..6b98eb8 --- /dev/null +++ b/.kiro/specs/harnessx-removal/tasks.md @@ -0,0 +1,59 @@ +# Implementation Plan + +Order follows the design's commit sequence (Requirement 5): nothing is deleted before its replacement has landed +and passed its fixture test. Every task is a commit gated on the full suite's own exit code, `ruff check`, +`ruff format --check` and `mypy`; the reconciler stays under 500 lines. + +- [ ] 1. Baseline without the extra + - Equality script (design §3) with its `find_spec("harnessx")` and freeze checks; re-sync `.venv` without the + `harnessx` extra first. + - Record `benchmarks/measurements/-harnessx-removal-baseline/`: full suite, `ousast pairs --json`, the + `python-vulnerable` quick benchmark, one standard-mode scan, `ousast improve --dry-run`; the exclusion list + written next to it. + - _Requirements: 3.1, 5.1_ + +- [ ] 2. Memory store and the `remember` task + - `plane/memory.py` (JSON rows per repository + pin, facts by content hash, ingest refuses below 1 GiB free), + `plane/tasks/remember.py` (model-free), `reconciler.mark_done` under the run lock, seed and ingest wiring in + `cli._plane`, generator annotations; fact reuse when repository, pin, candidate set and runner image match. + - Fixture tests: rows from a recorded Run, reuse on an unchanged pin, recompute on a changed one, disk refusal. + - _Requirements: 6.1, 6.4_ + +- [ ] 3. Proposals from memory + - `improve/memory.py` with rules M1 (demote) and M2 (promote) and the advisory disputed-family signal; + `run_round(proposals=...)`; `ousast improve --memory` (opt-in; default output byte-identical); provenance per + proposal in the sidecar and journal; the train-on-test guard (qualification population, gated benchmark cases, + holdout pairs). + - Tests: each rule on crafted rows, the guard drops excluded rows, provenance round-trips, default `improve` + unchanged. + - _Requirements: 6.2, 6.4_ + +- [ ] 4. The loop as a plane Run + - Tasks `alerts`, `measure`, `propose`, `improve` (no Model, zero budget); `--loop` Run generation; fixed-pin + Workspaces; the gate's verdict in `/loop-improve/gate.json`; adoption stays a maintainer commit. + - Fixture tests with the fake ax; one live loop Run on the local ax recorded (no model spend beyond the verify + passes it reuses from memory). + - _Requirements: 6.3_ + +- [ ] 5. Retire the HarnessX scan paths + - `cli.py`, `fusion.py`, `verify_judge.py`, `stage_processors.py` changes; `RetiredConfigError` for + `[models] verifier`, `[fusion] panel_model`/`decider_model`; one warning for a `[harnessx]` section (the only + tagged retirement text allowed in `src`, enforced by a test); tests renamed to the behaviour they assert. + - _Requirements: 1.1, 1.2, 1.3, 3.3_ + +- [ ] 6. Delete HarnessX code and packaging + - Delete `harness_ext.py`, `hunter_harness.py`, `verify_judge.py`'s judge path, the HarnessX-only tests; remove + the extra, the mypy override and the `uv.lock` entry; rename the conftest fixture; audit rows and manifest; the + reference search test (Req 2.4). + - _Requirements: 2.1, 2.2, 2.3, 2.4_ + +- [ ] 7. Equality proof + - Rerun the baseline script; commit the comparison record next to the baseline; any difference outside the + exclusion list blocks the merge. + - _Requirements: 3.2_ + +- [ ] 8. Documentation and specs + - README ax-plane section pointing at `ops/ax/README.md`; `docs/examples.md` §6 and `docs/threat-model.md` + (egress policy, budgets); dated retirement notes in the four specs and `.kiro/steering/overview.md`; release + note naming the silent loss of the second hunter for users who set `[models] hunter`. + - _Requirements: 4.1, 4.2, 4.3_