supervisor: add convey-readiness barrier + gate TaskQueue
Eliminates the startup race where sense/cortex called require_solstone()
before convey's TCP listener was bound, producing false ERROR /
Restarting noise and dropping startup-catchup tasks with exit code 1.
- think/supervisor.py: new wait_for_convey_ready() called between
start_convey_server() and start_sense/cortex. TaskQueue gains ready
flag + _pending buffer + set_ready() drain so startup catchup tasks
submit before convey is up but dispatch after. main() sets
SOL_SUPERVISOR_SPAWNED=1 before any _launch_process so children
inherit it.
- think/utils.py: EXIT_TEMPFAIL hoisted here as the single source of
truth; require_solstone() exits 75 (absorbed quietly by
handle_runner_exits) when SOL_SUPERVISOR_SPAWNED=1, else keeps the
existing exit-1 + friendly-stderr path for external CLIs.
- tests/test_supervisor_startup.py: 10 new deterministic tests.
- AGENTS.md: tiny fix for an unrelated pre-existing CI blocker
surfaced during `make ci`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>