Work #72

Open
opened 2026-10-17 17:53:34 +00:00 by time · 2 comments
Collaborator
  1. Read actual Time source/workflows/tests and linked issues. Reuse the existing scheduler, board, worker and acceptance path; avoid a second orchestrator or porting the entire legacy Ceremony.
  2. Implement a bounded restless router across authorized internal and external candidates, current seats/resources, active jobs, deadlines, evidence and spend. Rerank after meaningful events. Keep the selection policy replaceable: initial transparent heuristic, with future Jev/Clef (Cloudflare's Jev), Beth (Betty renamed), and Fable restless-bandit math as possible policies.
  3. Support normal, sprint, stress as explicit modes. Normal permits factory-level NOOP. Sprint reroutes after task-level NOOP until bounded exhaustion. Stress measures concurrency, saturation and recovery with deliberate test workloads and receipts; never bypass limits/permissions. No fabricated value required.
  4. Reuse the venture board's independent multi-seat deliberation for consequential internal decisions, without substituting votes for deterministic checks and independent acceptance.
  5. Preserve trust, idempotency, concurrency/WIP bounds, leases, stop/resume, review objections, CI, protected paths, model spend and ANDON. Never publish externally without approval. Keep prod independent from Mac.
  6. Tests: NOOP reroute, exhaustion, parallel dispatch, failed review, budget stop, interruption/retry, restart/resume and stress receipts. Demonstrate a dry-run end-to-end and only then a bounded authorized live internal-work run.

Part of #68 (step 1/1).

DONE: Time autonomously selects, executes, reviews and reranks bounded internal work with no intervening operator allocation; provide SHA, tests, Action run, accepted-work evidence and blockers. Split into minimal executable cards through existing spec flow. Keep #48 as a separate dependency for live ventures.

1. Read actual Time source/workflows/tests and linked issues. Reuse the existing scheduler, board, worker and acceptance path; avoid a second orchestrator or porting the entire legacy Ceremony. 2. Implement a bounded **restless router** across authorized internal and external candidates, current seats/resources, active jobs, deadlines, evidence and spend. Rerank after meaningful events. Keep the selection policy replaceable: initial transparent heuristic, with future Jev/Clef (Cloudflare's Jev), Beth (Betty renamed), and Fable restless-bandit math as possible policies. 3. Support **normal**, **sprint**, **stress** as explicit modes. Normal permits factory-level NOOP. Sprint reroutes after task-level NOOP until bounded exhaustion. Stress measures concurrency, saturation and recovery with deliberate test workloads and receipts; never bypass limits/permissions. No fabricated value required. 4. Reuse the venture board's independent multi-seat deliberation for consequential internal decisions, without substituting votes for deterministic checks and independent acceptance. 5. Preserve trust, idempotency, concurrency/WIP bounds, leases, stop/resume, review objections, CI, protected paths, model spend and ANDON. Never publish externally without approval. Keep prod independent from Mac. 6. Tests: NOOP reroute, exhaustion, parallel dispatch, failed review, budget stop, interruption/retry, restart/resume and stress receipts. Demonstrate a dry-run end-to-end and only then a bounded authorized live internal-work run. Part of #68 (step 1/1). DONE: Time autonomously selects, executes, reviews and reranks bounded internal work with no intervening operator allocation; provide SHA, tests, Action run, accepted-work evidence and blockers. Split into minimal executable cards through existing `spec` flow. Keep #48 as a separate dependency for live ventures.
time added the queued label 2026-10-17 17:53:34 +00:00
teahubxyz added planned and removed queued labels 2026-10-18 04:01:30 +00:00
Owner

queued → planned: this is #68's whole spec in one card (a router with three modes, a replaceable policy, eight kinds of tests), not something a worker finishes in 40 turns. It stays as the parent; the executable cards come out of it one at a time (the first candidate is the smallest slice: rerank the ready set after a merge, with a test). Until then it must not be promoted into the worker queue.

`queued` → `planned`: this is #68's whole spec in one card (a router with three modes, a replaceable policy, eight kinds of tests), not something a worker finishes in 40 turns. It stays as the parent; the executable cards come out of it one at a time (the first candidate is the smallest slice: rerank the `ready` set after a merge, with a test). Until then it must not be promoted into the worker queue.
Owner

CEO, 2026-10-19. The owner's call is to pause the venture loop and get the factory picking its own work across ventures, features, refinement and optimization, balanced and tunable. This card is now split:

  • #168 (PR #169): router v1.
    • The seat judges every candidate and router.py ranks them with the owner's weights per kind (time/router.json), a restless boost per kind and a little lift for card age.
    • The Astra log shows the table.
    • dry queues nothing.
    • live queues from the top within the day's money, and the heartbeat promotes queued cards in ranked order.
    • It starts dry.
  • #170: a new venture starts only when the router picks it (TIME_VENTURE=router), and a v2 of a venture with signal is a candidate too.
  • #171: optimization candidates found from the ledger, CI failures and parked cards.
  • #172: each pick's outcome is recorded (merged, days, spend, signups), the reward data a bandit policy (Beth, Jev, Fable) needs.
  • #173: the spine's (teahubxyz/teahub) cards are ranked too: shown, not queued.

#170–#173 are unlabelled on purpose. They are candidates, and the router will rank them alongside everything else. Normal, sprint and stress modes stay for after the router has a week of live data. This card stays planned as the parent.

CEO, 2026-10-19. The owner's call is to pause the venture loop and get the factory picking its own work across ventures, features, refinement and optimization, balanced and tunable. This card is now split: - **#168 (PR #169): router v1.** - The seat judges every candidate and `router.py` ranks them with the owner's weights per kind (`time/router.json`), a restless boost per kind and a little lift for card age. - The Astra log shows the table. - `dry` queues nothing. - `live` queues from the top within the day's money, and the heartbeat promotes queued cards in ranked order. - It starts `dry`. - **#170:** a new venture starts only when the router picks it (`TIME_VENTURE=router`), and a v2 of a venture with signal is a candidate too. - **#171:** optimization candidates found from the ledger, CI failures and parked cards. - **#172:** each pick's outcome is recorded (merged, days, spend, signups), the reward data a bandit policy (Beth, Jev, Fable) needs. - **#173:** the spine's (`teahubxyz/teahub`) cards are ranked too: shown, not queued. #170–#173 are unlabelled on purpose. They are candidates, and the router will rank them alongside everything else. Normal, sprint and stress modes stay for after the router has a week of live data. This card stays `planned` as the parent.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#72