Venture batches: the board's top k in one milestone, launched together #22

Merged
teahubxyz merged 1 commits from venture-batch into main 2026-10-13 01:20:50 +00:00
Owner

Ceremony 2.0's first consumer: a venture batch. One milestone, k ventures at once.

How it runs

  • A batch card (label venture-batch) scouts once; the seats pitch in rounds until there's a field of 2k; the board ranks the whole field.
  • The top k (each wanted by two seats) become venture cards in the batch's own milestone, starting at picked, so they reuse the existing loop untouched from there.
  • Launch together: a child that passes its checks waits at ready until every sibling is settled (ready, launched, measured or dead) or the hold runs out (TIME_VENTURE_BATCH_HOLD_HOURS, default 6). Stragglers then launch alone when they pass.
  • No child left behind: a held child gets one batch retry (fresh fix rounds). Held again, it's counted dead with its reason and left open for a human /time retry.
  • Retro: once every child is measured or dead, the batch posts a cohort table (signups vs each plan's lines, outcome) and closes the card and milestone.

Fairness fix (found by the test): with one worker run per tick and "furthest along first", a child stuck in fix rounds grabbed the slot every tick and starved its siblings at planned. Fix rounds and retries now yield to cards still due their first build.

Turning it on: TIME_VENTURE_BATCH=3 makes a batch the daily default (replacing the single card), or Actions → venture → Run workflow → "batch". Unset, nothing changes.

Tests: #39 covers the field, top-3 spawn into a milestone, idempotent spawn, hold and release together, the 0h hold with stragglers, batch retry then death, measurement, retro, and milestone close. All 39 pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva


Generated by Claude Code

Ceremony 2.0's first consumer: a **venture batch**. One milestone, k ventures at once. **How it runs** - A batch card (label `venture-batch`) scouts once; the seats pitch in rounds until there's a field of 2k; the board ranks the whole field. - The top k (each wanted by two seats) become venture cards in the batch's own milestone, starting at `picked`, so they reuse the existing loop untouched from there. - **Launch together:** a child that passes its checks waits at `ready` until every sibling is settled (ready, launched, measured or dead) or the hold runs out (`TIME_VENTURE_BATCH_HOLD_HOURS`, default 6). Stragglers then launch alone when they pass. - **No child left behind:** a held child gets one batch retry (fresh fix rounds). Held again, it's counted dead with its reason and left open for a human `/time retry`. - **Retro:** once every child is measured or dead, the batch posts a cohort table (signups vs each plan's lines, outcome) and closes the card and milestone. **Fairness fix (found by the test):** with one worker run per tick and "furthest along first", a child stuck in fix rounds grabbed the slot every tick and starved its siblings at `planned`. Fix rounds and retries now yield to cards still due their first build. **Turning it on:** `TIME_VENTURE_BATCH=3` makes a batch the daily default (replacing the single card), or Actions → venture → Run workflow → "batch". Unset, nothing changes. **Tests:** #39 covers the field, top-3 spawn into a milestone, idempotent spawn, hold and release together, the 0h hold with stragglers, batch retry then death, measurement, retro, and milestone close. All 39 pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva --- _Generated by [Claude Code](https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva)_
Sign in to join this conversation.