Two engine gaps found in today's wave, both in the worker loop:
Every worker branched from main whatever the card said. The ventures live on gh-pages (an orphan branch; the two share no history), so #60 and #63 ran out of turns searching, #95 died at 43 steps ("find the build reference"), and #109 opened the right three files against the wrong branch. Fix: a Base: <branch> line in a card. Hands cuts the worker's branch from that base, names it time/card-N-<base> (so a stale branch cut from main is never resumed by mistake), the worker's rules say where the files live, and open_pr targets the base. Cards without the line behave exactly as before.
The daily spend cap killed runs mid-flight.#87's worker was launched at $3.80 of $5 and stopped at step 27 when the cap crossed: the whole run's spend was lost and nothing came of it. Fix: the cap gates launches; a run that began within budget finishes, up to TIME_CAP_SLACK x the cap (default 1.5), and a PR that is already open gets its review on a capped day too. The monthly cap stays hard everywhere. TIME_CAP_SLACK=1 restores the old stop.
Also: the tick takes the oldest ready card first (the API lists newest first), the same order promote_next uses, so a card promoted first is built first.
Tests: 14b (the base) and 57 (the slack, the launch gate, the monthly cap inside a run, the review on a capped day, the order), both offline against World. CHANGELOG under Added.
DONE: PR open with the Base: support, the slack and the oldest-first order; python3 .github/time/test_time.py prints ALL OK 57; CI green.
Two engine gaps found in today's wave, both in the worker loop:
1. **Every worker branched from `main` whatever the card said.** The ventures live on `gh-pages` (an orphan branch; the two share no history), so #60 and #63 ran out of turns searching, #95 died at 43 steps ("find the build reference"), and #109 opened the right three files against the wrong branch. Fix: a `Base: <branch>` line in a card. `Hands` cuts the worker's branch from that base, names it `time/card-N-<base>` (so a stale branch cut from `main` is never resumed by mistake), the worker's rules say where the files live, and `open_pr` targets the base. Cards without the line behave exactly as before.
2. **The daily spend cap killed runs mid-flight.** #87's worker was launched at $3.80 of $5 and stopped at step 27 when the cap crossed: the whole run's spend was lost and nothing came of it. Fix: the cap gates *launches*; a run that began within budget finishes, up to `TIME_CAP_SLACK` x the cap (default 1.5), and a PR that is already open gets its review on a capped day too. The monthly cap stays hard everywhere. `TIME_CAP_SLACK=1` restores the old stop.
Also: the tick takes the oldest `ready` card first (the API lists newest first), the same order `promote_next` uses, so a card promoted first is built first.
Tests: 14b (the base) and 57 (the slack, the launch gate, the monthly cap inside a run, the review on a capped day, the order), both offline against `World`. CHANGELOG under Added.
PR: #121
DONE: PR open with the `Base:` support, the slack and the oldest-first order; `python3 .github/time/test_time.py` prints ALL OK 57; CI green.
⏱️ Time: adopted PR #121, built outside the worker. haiku reviewed it on the PR.
⏱️ Time: adopted PR #121, built outside the worker. `haiku` reviewed it on the PR.
<!-- time {"beat":"pr","pr":121,"adopted":true,"launched":false,"review":"venice","seat":"haiku","as":"seat"} -->
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.
Two engine gaps found in today's wave, both in the worker loop:
mainwhatever the card said. The ventures live ongh-pages(an orphan branch; the two share no history), so #60 and #63 ran out of turns searching, #95 died at 43 steps ("find the build reference"), and #109 opened the right three files against the wrong branch. Fix: aBase: <branch>line in a card.Handscuts the worker's branch from that base, names ittime/card-N-<base>(so a stale branch cut frommainis never resumed by mistake), the worker's rules say where the files live, andopen_prtargets the base. Cards without the line behave exactly as before.TIME_CAP_SLACKx the cap (default 1.5), and a PR that is already open gets its review on a capped day too. The monthly cap stays hard everywhere.TIME_CAP_SLACK=1restores the old stop.Also: the tick takes the oldest
readycard first (the API lists newest first), the same orderpromote_nextuses, so a card promoted first is built first.Tests: 14b (the base) and 57 (the slack, the launch gate, the monthly cap inside a run, the review on a capped day, the order), both offline against
World. CHANGELOG under Added.PR: #121
DONE: PR open with the
Base:support, the slack and the oldest-first order;python3 .github/time/test_time.pyprints ALL OK 57; CI green.⏱️ Time: adopted PR #121, built outside the worker.
haikureviewed it on the PR.⏱️ Time: approved, but checks are failing on PR #121. Waiting for a fix.
⏱️ Time: approved and green, merged PR #121. Card done.