Part of #72 (and #68). The owner, 2026-10-18: pause the venture loop and get back to the factory picking what it works on, whether that's a venture, new functionality, refinement or optimization. Balanced and tunable.
Changes:
router.py (new, pure):
The candidates: each open card with a DONE: line that isn't a parent, a human's or the venture loop's own, plus "start a new venture".
Kinds: venture / feature / refinement / optimization, with a fallback guess when the seat gives none.
The score: weight[kind] × restless(kind) × age × (value + 0.5 × waiting) / size.
An L is never queued (split it first). pick takes cards within the day's money left. Plus order and the table.
time/router.json (new): the owner's dials (mode, weights, restless, cost_usd). It starts with mode: dry.
astra.py, router path:
The seat judges every candidate (kind, value, size, why) and code ranks them. The log shows the ranked table.
dry touches nothing.
live queues from the top and writes the seat's new cards unqueued.
Astra now reads the last 14 days of its log; before, it read the thread's first twenty comments forever.
time.py:promote_next promotes queued cards in the latest live ranking's order, then oldest first.
DONE: PR merged with test_time.py green in CI; the next Astra run posts a dry ranking on the Astra log.
Part of #72 (and #68). The owner, 2026-10-18: pause the venture loop and get back to the factory picking what it works on, whether that's a venture, new functionality, refinement or optimization. Balanced and tunable.
Changes:
- **`router.py` (new, pure):**
- The candidates: each open card with a `DONE:` line that isn't a parent, a human's or the venture loop's own, plus "start a new venture".
- Kinds: venture / feature / refinement / optimization, with a fallback guess when the seat gives none.
- The score: `weight[kind] × restless(kind) × age × (value + 0.5 × waiting) / size`.
- An L is never queued (split it first). `pick` takes cards within the day's money left. Plus `order` and the table.
- **`time/router.json` (new):** the owner's dials (mode, weights, restless, cost_usd). It starts with `mode: dry`.
- **`astra.py`, router path:**
- The seat judges every candidate (kind, value, size, why) and code ranks them. The log shows the ranked table.
- `dry` touches nothing.
- `live` queues from the top and writes the seat's new cards unqueued.
- Astra now reads the last 14 days of its log; before, it read the thread's first twenty comments forever.
- **`time.py`:** `promote_next` promotes queued cards in the latest live ranking's order, then oldest first.
- **Tests:** test 80.
PR: #169
DONE: PR merged with test_time.py green in CI; the next Astra run posts a dry ranking on the Astra log.
teahubxyz
added the ready label 2026-10-19 00:58:21 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #72 (and #68). The owner, 2026-10-18: pause the venture loop and get back to the factory picking what it works on, whether that's a venture, new functionality, refinement or optimization. Balanced and tunable.
Changes:
router.py(new, pure):DONE:line that isn't a parent, a human's or the venture loop's own, plus "start a new venture".weight[kind] × restless(kind) × age × (value + 0.5 × waiting) / size.picktakes cards within the day's money left. Plusorderand the table.time/router.json(new): the owner's dials (mode, weights, restless, cost_usd). It starts withmode: dry.astra.py, router path:drytouches nothing.livequeues from the top and writes the seat's new cards unqueued.time.py:promote_nextpromotes queued cards in the latest live ranking's order, then oldest first.PR: #169
DONE: PR merged with test_time.py green in CI; the next Astra run posts a dry ranking on the Astra log.