1. Replace the static toy curriculum with a real codebase task adapter
BEFORE
flowchart TD
S[AutonomousScheduler] -->|"random.choice(CURRICULUM)"| T["Toy prompt: 'Write is_palindrome()'"]
T --> D[run_task]
D --> R["Agent produces trivial code"]
R -->|"score=70 (hardcoded)"| SC[ScoreStore]
SC -->|"EMA: 70 → 70 → 70..."| G["Gate: easy → easy → easy"]
classDef leak stroke:#dc2626,stroke-width:2px;
class T,R leak
Static toy dict. Same 30 prompts forever. Agents plateau at "easy" because the curriculum never scales.
AFTER
flowchart TD
GF[github_fetcher] -->|"real issues"| T[triage_classifier]
T -->|"ready-for-agent"| IB[issue_bridge]
IB -->|"issue body as prompt"| D[run_task]
D --> R["Agent reads codebase, writes real fix"]
R --> V[verify_task_output]
V -->|"score=0-100"| SC[ScoreStore]
SC -->|"EMA converges on true skill"| G["Gate: easy → medium → hard"]
classDef deep background:#1e293b,color:#fff;
class GF,T,IB,V deep
Real GitHub issues drive task selection. Verification scores actual output quality. Gates reflect real capability.
Problem: The CURRICULUM dict (autonomous_loop.py:58-197) is 30 static toy problems. Agents have run 50+ rounds producing is_palindrome, factorial, and add(a, b). The EMA score converges to ~70 because every task is trivial and the hardcoded score was 70. The gate system is decorative — no agent ever crosses a gate from real capability growth.
Solution: The issue_bridge already provides real-task drive (GitHub issues). The curriculum should be a fallback, not the primary path. Wire the bridge as the default task source; keep curriculum only for warm-up or when no issues are available. The real fix: agents need to read the codebase before writing code — the issue prompt should include repo context (file paths, existing code), not just the issue title.
- Agents produce real fixes, not toy functions
- Verification scores reflect actual output quality
- Gate crossings become meaningful capability signals
- Delete 140 lines of static CURRICULUM dict