orient.py stale digest | Digest last_updated predates recent sessions | git pull in repo, re-run orient.py |
| Bank too thin (<40 RF questions) | Bank builder returns status: "thin" or "failed" | Offer: (a) trim to 5/batch, or (b) acknowledge + proceed with thin bank |
sample.py returns 0 questions | Empty batch array in output | Verify bank JSON: python3 -c "import json; json.load(open('<bank>'))" |
| Bank JSON malformed | sample.py crashes, JSON parse error | Rebuild bank from scratch (bank-builder protocol) |
| All sources exhausted | Web search returns nothing, RESOURCES.md empty | Alert student — topic needs manual source curation before bank can be built |
| HTML template FILL markers left | grep FILL lesson-*.html returns matches | Re-generate lesson via lesson-writer, verify checklist |
| Gate threshold unreachable | 3 consecutive RF scores < gate_threshold | Offer skip or suggest revisiting lesson before retrying |
progress.json corrupted | orient.py crashes, JSON parse error | Restore from git or rebuild from session history |
No git pull possible (network) | git pull fails | Proceed with local state; warn that repo may be stale |
sample.py no-repeat pool empty | All bank qids in recent-batch exclusion window | Reduce exclusion window to 1 batch or reset cycle |
mn.sh not found / not executable | Bash: command not found or permission denied | chmod +x mn.sh |
Subagent lacks web_search tool | Bank builder subagent fails to execute web searches | Run bank-builder protocol in parent session as fallback |