feat(harvest): reforge-harvest — export a run's forge record for triage

Lifecycle step 6 had no tooling: a run's issues, reviews and charter
deliverables stayed inside the root-owned sqlite archive. reforge-harvest
walks every repo in the org and writes per-repo markdown (issues with
comments, PRs with reviews and inline comments), raw API JSON, an INDEX,
and a source-stripped tree of the charter repo (GAMEPLAN.md, CONTRACTS.md).
Read-only on the forge; re-runnable at any point.

Docs: step 6 now names the command and states that harvest is not
optional — run #1 sat unharvested for three months with two Critical
findings live in deployed forks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-10-09 18:45:44 +02:00
commit 109c5e2514
3 changed files with 214 additions and 6 deletions

View file

@ -135,10 +135,17 @@ open Phase B — that switch is a log-worthy moment of the run.
human opens Phase B when Phase A's signal is banked
5. compare reforge-compare
iterate 4 ⇄ 5 until every targeted repo is IDENTICAL
6. harvest GAMEPLAN.md PR'd into charter; issues reviewed + triaged against
the real stack; **refine these instruction sources** (this doc,
the agent briefs, the agenda, the scripts) with what the run
taught — the simulation is meant to improve every iteration
6. harvest reforge-harvest <run-name> [outdir]
(exports every issue, comment, PR and review per repo as
markdown + raw JSON, plus the charter tree — GAMEPLAN.md,
CONTRACTS.md — so the record is readable outside the forge);
commit the export next to the run config, then triage each
<repo>.md against the real stack: LIVE / FIXED / NA per finding,
still-live findings become real issues; **refine these
instruction sources** (this doc, the agent briefs, the agenda,
the scripts) with what the run taught — the simulation is meant
to improve every iteration, and the harvest is the next run's
agenda input
7. close reforge-reset backup <run-name>
(or go straight to the next run's reset, which archives too)
```
@ -146,6 +153,12 @@ open Phase B — that switch is a log-worthy moment of the run.
Archives: `/var/lib/forgejo-sandbox-archive/<name>-<stamp>.tar.gz`; restore
any of them with `reforge-reset restore <tarball>`.
**Harvest is not optional.** An archive preserves a run; only the harvest
makes it *act* on the real stack. A run whose findings stay in the tarball
has produced nothing — the aiolabs run #1 sat unharvested for three months
with two Critical findings live in deployed forks. Harvest before close,
every run.
## Autonomous mode (an agent as orchestrator)
Steps 3–5 (kickoff → rebuild → compare) can be driven by an agent itself