The final piece that makes the whole runtime genuinely AUTONOMOUS/REPEATING rather than a one-shot tool: on a resolved outcome (merged, or rejected-and-disengaged), automatically re-invoke Phase-1 discovery to select the next candidate, consuming the read-only LoopSummary object (built in the sibling loop-summary issue) as a feedback signal. This is precisely the "fully-closed discovery-loop re-entry" the phase brief calls out as maintainer-only: it is what turns single runs into an unattended repeat loop, and a bug here (e.g. re-entering too fast, ignoring a circuit-breaker, or looping on a permanently-rejected repo) is the top slop-at-scale risk for the whole miner subsystem.
Deliverables
References
packages/gittensory-miner/src/manage/loop-summary.ts (new, from the loop-summary issue) — the feedback object this consumes
packages/gittensory-miner/src/manage/rejection-state-machine.ts (new, from the rejection-state-machine issue) — the terminal disengaged state this respects
src/settings/autonomy.ts (86 lines) — deny-by-default pattern precedent for the rate/session cap
- New:
packages/gittensory-miner/src/manage/loop-reentry.ts
The final piece that makes the whole runtime genuinely AUTONOMOUS/REPEATING rather than a one-shot tool: on a resolved outcome (merged, or rejected-and-disengaged), automatically re-invoke Phase-1 discovery to select the next candidate, consuming the read-only
LoopSummaryobject (built in the sibling loop-summary issue) as a feedback signal. This is precisely the "fully-closed discovery-loop re-entry" the phase brief calls out as maintainer-only: it is what turns single runs into an unattended repeat loop, and a bug here (e.g. re-entering too fast, ignoring a circuit-breaker, or looping on a permanently-rejected repo) is the top slop-at-scale risk for the whole miner subsystem.Deliverables
packages/gittensory-miner/src/manage/loop-reentry.ts— on a terminal outcome event, calls into Phase-1 discovery with theLoopSummaryas input, selecting (or explicitly declining to select) the next candidatedisengaged(rejected) run without the loop-summary's repeated-blocker tally being consulted first — a repo with N consecutive rejections is auto-paused for that repo, not retriedReferences
packages/gittensory-miner/src/manage/loop-summary.ts(new, from the loop-summary issue) — the feedback object this consumespackages/gittensory-miner/src/manage/rejection-state-machine.ts(new, from the rejection-state-machine issue) — the terminaldisengagedstate this respectssrc/settings/autonomy.ts(86 lines) — deny-by-default pattern precedent for the rate/session cappackages/gittensory-miner/src/manage/loop-reentry.ts