predictor files → prediction/unreviewed (open issue)
planner actions → prediction/actioned (closed, real issue created)
planner rejects → prediction/dismissed (closed, reasoning in comment)
Memory: the forge issue tracker IS the predictor's memory.
No separate memory file — history of actioned/dismissed
informs focus next run.
Budget: predictor = 5 actions/run (exploit counts as 2)
planner = (predictions_triaged + 1) new issues
Models: predictor = sonnet (fast, adversarial scanning)
planner = opus (deep reasoning, strategic sequencing)
Planner reads .codeberg/ISSUE_TEMPLATE/*.yaml and attempts to fill:
IF affected_files ≤ 3
AND acceptance_criteria ≤ 5
AND single clear approach (no design forks)
THEN → file as "backlog" → gardener validates → dev picks up
ELSE → label "vision" with problem statement
→ architect pitches sprint PR on ops repo
→ human ACCEPT/REJECT via PR comments
→ architect files sub-issues as "backlog"
The planner NEVER files issues past the bottleneck.
Only the top 5 constraints get filed.
Issues blocked on vault items are NOT filed.