Commit Graph
127 Commits
Author SHA1 Message Date
teahubxyzandClaude Opus 5.5 f3bd113c6f test 80: open dependencies and the seat's blocked note hold a card back
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:53:58 +00:00
teahubxyzandClaude Opus 5.5 6f513f65a3 astra: the seat can mark a card blocked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:53:46 +00:00
teahubxyzandClaude Opus 5.5 ceeae72c3b router: a card that waits is never picked and is promoted after the ones that can move
An open Depends on #N holds a card back; so does the seat's `blocked` note (a PR that can't merge, a human).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:53:43 +00:00
teahubxyzandClaude Opus 5.5 d7af27df5d astra.yml: pass TIME_WORKER and TIME_PACE, so the router's money left is the worker's pool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:50:29 +00:00
teahubxyzandClaude Opus 5.5 32943339e1 promote_next counts only moving cards: one waiting on a person holds no ready slot (#183)
sync / sync (push) Canceled after 0s
ci / test (push) Successful in 36s
promote_next counts only moving cards: one waiting on a person holds no ready slot (#183)

Closes #135.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:47:55 +00:00
teahubxyzandClaude Opus 5.5 d235afb7f3 Housekeeping: a null page is an empty one (#182)
ci / test (push) Successful in 37s
sync / sync (push) Successful in 4s
Housekeeping: a null page is an empty one (#182)

Gitea answers an issue nobody reacted to with null; the signal step failed on it today.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:47:24 +00:00
teahubxyzandClaude Opus 5.5 805e20d695 Router: money left is the worker pool's allowance; no repeat cards (#181)
ci / test (push) Successful in 37s
sync / sync (push) Successful in 4s
Router: money left is the worker pool's allowance; no repeat cards (#181)

money_left(): the allowance left in the pool that takes TIME_WORKER's route, else the daily cap's remainder, capped by the month's. The seat sees cards closed in the last 14 days; a new card repeating an open or lately closed one is not written.

Closes #175.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 13:44:30 +00:00
teahubxyzandClaude Opus 5.5 745231844f sync: secret names Gitea accepts (SYNC_GITHUB_KEY, SYNC_GITHUB_TOKEN) (#179)
ci / test (push) Successful in 36s
sync / sync (push) Successful in 4s
sync: secret names Gitea accepts (SYNC_GITHUB_KEY, SYNC_GITHUB_TOKEN) (#179)

Gitea refuses secret names starting GITHUB_ or GITEA_, so the GitHub copy's deploy key is in SYNC_GITHUB_KEY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 04:03:20 +00:00
teahubxyzandClaude Opus 5.5 e34994bbc6 Sync: the GitHub copy over SSH with a deploy key (host keys pinned) (#178)
ci / test (push) Successful in 35s
sync / sync (push) Successful in 2s
Sync: the GitHub copy over SSH with a deploy key, host keys pinned (#178)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 03:33:59 +00:00
teahubxyzandClaude Opus 5.5 ab3c5f5200 Sync: a repo's copies on other forges follow its home (GitHub first, for cloud sessions) (#177)
ci / test (push) Successful in 36s
sync / sync (push) Successful in 3s
Sync: a repo's copies on other forges follow its home (#177)

sync.py + time/sync.json + the sync workflow. One home per repo, one writer per branch: main goes out to every copy
fast-forward only (a diverged copy is a needs-human issue, never overwritten, unless forced once); a copy's claude/*
branches come home as PRs for the council. First copy: github.com/teahubxyz/time, skipped until GITHUB_MIRROR_TOKEN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 03:18:50 +00:00
teahubxyzandClaude Opus 5.5 ec043b2985 Adaptive budget: pace spend to each capacity pool (re-cut of #167 onto main) (#174)
ci / test (push) Successful in 36s
Adaptive budget: pace spend to each capacity pool (#174, re-cut of #167)

The worker's #82 change (sonnet via Time): budget_check(route) paces each call to its capacity pool in
time/pools.json (expiring credit spread over the days left, refilling windows, or TIME_DAILY_USD without a pool);
the monthly cap stays hard. pools.json is read through the API once per run, since every workflow checks out only
.github/time. Ships empty: nothing changes until it is filled in. Closes #82.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 01:10:09 +00:00
teahubxyzandClaude Opus 5.5 b8d52252f4 Router v1: the factory ranks its own next work (dry to start) (#169)
ci / test (push) Successful in 34s
Router v1: the factory ranks its own next work, dry to start (#169)

Astra's seat judges every candidate (kind, value, size); router.py ranks them with the owner's weights per kind
(time/router.json), a restless boost and card age. dry posts the table; live queues from the top within the day's
money and the heartbeat promotes queued cards in ranked order. Astra reads the last 14 days of its log. Closes #168.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-19 01:00:17 +00:00
teahubxyz 3d1865ecb9 Signups count by the venture's name, not only its slug (#159)
ci / test (push) Successful in 35s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-19 00:10:37 +00:00
teahubxyzandClaude Opus 5.5 97e3e1f35f venture: the lead (opus) researches and picks the day's venture alone; fable is out (#164)
ci / test (push) Successful in 35s
venture: the lead (opus) researches and picks the day's venture alone; fable is out (#164)

One seat, TIME_VENTURE_LEAD (opus), runs the day's venture: a research round over the top trending repos (with the
start of their READMEs) and the studio's track record, TIME_VENTURE_FIELD candidates with a verdict each, one pick;
no pitches, no vote. It writes the launch plan alone and judges the build, and hands the launch drafts to its helper
(TIME_VENTURE_HELPER, sonnet). The chair and judge default to opus. Batches keep the board; TIME_VENTURE_LEAD=board
brings it back for the daily venture. Closes #165.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 22:11:50 +00:00
teahubxyzandClaude Opus 5.5 c268e75234 venture: one venture a day, built for quality (#162)
ci / test (push) Successful in 34s
venture: one venture a day, built for quality (#162)

The day's card starts only once every other venture card is launched or held; the board picks one from a field of
TIME_VENTURE_FIELD (6) pitches; opus builds; the judge scores the product 1-10 and a page under TIME_VENTURE_BAR (8)
gets polish rounds (never the last of TIME_VENTURE_FIXES=3), then launches with its score. An open batch card with
no Time beats no longer starts a batch while batches are off. Closes #163.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 22:04:49 +00:00
teahubxyzandClaude Opus 5.5 e6f04f614a venture.yml: install Chromium for the browser pass (#157)
ci / test (push) Successful in 35s
venture.yml: install Chromium for the browser pass (#157)

The first Claude ventures launched without the browser pass (no Chrome on the runner): no headless checks, no
contact sheet for the portfolio. One step installs Chromium in the job image; venture.py's chrome() finds it.
Merged on the owner's word, CI green (run 1014).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 19:46:19 +00:00
teahubxyz f329066a51 Worker: a cut-off tool call is an error the worker reads, not a crash (#155)
ci / test (push) Successful in 35s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 17:52:36 +00:00
teahubxyzandClaude Opus 5.5 8fe83ac05a venture.yml: every 6 hours, Claude seats (#141)
ci / test (push) Successful in 35s
venture.yml: every 6 hours, Claude seats (#141)

Owner's call: the venture loop runs every 6 hours instead of every 20 minutes, on the Claude seats.
The builder is vars.TIME_VENTURE_WORKER || claude:sonnet, decoupled from the heartbeat's worker.
Merged on the owner's word after the council approved the engine half (#140).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 17:25:59 +00:00
teahubxyz ebedc7a5bc Venture loop on Teahub with Claude seats (#140)
ci / test (push) Successful in 35s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 17:24:35 +00:00
teahubxyz 8ab719e2f2 Ponytail on prod: seat workers carry its rules (#145)
ci / test (push) Successful in 36s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 17:24:33 +00:00
teahubxyz 385b1a48d0 A label filter is checked on every row: housekeeping listed all 59 open issues as parked (#138)
ci / test (push) Successful in 35s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 16:22:20 +00:00
teahubxyzandClaude Opus 5.5 0543771a02 Workflows batch: heartbeat knobs, housekeeping.yml, its test in CI (#127)
ci / test (push) Successful in 35s
Workflows batch: heartbeat knobs, housekeeping.yml, its test in CI (#127)

heartbeat.yml passes TIME_CAP_SLACK, TIME_ANTHROPIC_API (the caching kill switch), TIME_REVIEW_TIEBREAK and TIME_REVIEW_QUORUM; housekeeping.yml runs the daily sweep at 13:17 UTC; ci.yml runs test_housekeeping.py. Owner-approved merge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 16:10:58 +00:00
time 4c91878f93 Time retries its own parked cards (error / stuck) (#132)
time/worker-run cd .github/time; sed -n 1120,1190p time.py; grep -n "andon" venture.py | head; grep -n "TIME_MODE" t
ci / test (push) Successful in 35s
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-18 07:17:32 +00:00
teahubxyzandClaude Fable 5.1 bed8743c94 checks(): a status from one of Time's own workflows is not a check (#124)
ci / test (push) Successful in 35s
checks(): a status from one of Time's own workflows is not a check (#124)

A seat's review wakes heartbeat.yml during a heartbeat; the concurrency group cancels the run and Gitea records it as a failure on the PR head. Those statuses neither block nor earn a merge; CI decides. Owner-approved merge.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 05:08:14 +00:00
time b61b185201 Council verdict: TIME_REVIEW takes several seats, votes count per seat, TIME_REVIEW_TIEBREAK on a tie (#122)
ci / test (push) Successful in 34s
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-18 04:59:25 +00:00
teahubxyz 86b1207c4d Worker: build where the card says (Base: <branch>), finish what it starts (the cap gates launches), oldest card first (#121)
ci / test (push) Successful in 34s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 04:59:23 +00:00
teahubxyz bcdc71383e Claude calls go to Anthropic's own Messages API with prompt caching; the ledger prices cached tokens (#120)
ci / test (push) Successful in 34s
Co-authored-by: teahubxyz <boring+teahub@agentmail.to>
2026-10-18 04:59:20 +00:00
time 7a471e39ca Cards adopt an open PR that already closes them (review and land it instead of dispatching a worker) (#110)
time/worker-run cat > /tmp/edit.py <<'PYEOF' import re, json p = ".github/time/time.py" s = open(p).read() def sub(
ci / test (push) Successful in 35s
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-18 04:39:49 +00:00
time 1747f07521 Seats review as themselves: TIME_SEAT_<SEAT> token makes the verdict a real Gitea review (#116)
ci / test (push) Successful in 35s
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-18 04:27:14 +00:00
time f4058061e0 Daily housekeeping: prune merged branches, close spent signals and empty milestones, list the stale (#115)
ci / test (push) Successful in 34s
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-18 04:27:12 +00:00
teahubxyzandClaude Fable 5.1 4f8eda2483 labs/aicharts: fast mode (Clef first, LLM checks) as demo default (#42)
ci / test (push) Successful in 34s
time/worker-run curl -sS -m 15 https://docs.whop.com/.well-known/skills/index.json | head -c 1500; echo; curl -sS -m
labs/aicharts: fast mode (Clef first, LLM checks) as demo default (#42)

Opened 2026-10-14 by a Claude Code session under the owner's login, which is why it read as the operator's PR for three days. Lab-only and reversible: Clef-flash draws first, the LLM checks in parallel, the chart is redrawn only on disagreement; API callers keep the LLM default. The lab's tests pass on the branch (run 652, "aicharts: all good"); its deploy step cannot run from prod, which holds no Cloudflare secrets, so nothing is deployed by this merge.

Squash-merged by the CEO session on the owner's explicit instruction.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-18 00:12:54 +00:00
teahubxyzandClaude Fable 5.1 b539fff1b2 heartbeat: per-seat tokens for haiku, sonnet, opus and fable
ci / test (push) Successful in 35s
One Gitea user per seat (model line); the reviewer's verdict becomes a real review by that seat's own user once #76 lands. TIME_SEAT_CLAUDE stays until then as the umbrella.

On the owner's explicit instruction (CEO session).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-17 22:54:56 +00:00
teahubxyzandClaude Fable 5.1 5c8254cc50 TIME_PROTECTED governs every protected path except the workflow directories (#81)
ci / test (push) Successful in 34s
TIME_PROTECTED governs every protected path except the workflow directories (#81)

touches_protected() hard-coded all of .github/ and .gitea/ on top of TIME_PROTECTED, so the engine under .github/time/ could never land without a human. Only the workflow directories stay hard-coded; DEFAULT_PROTECTED is unchanged. With this repo's TIME_PROTECTED narrowed, card PRs under .github/time/ with a trusted Approve and green checks merge via the time bot.

CI green on 3b757fa. Squash-merged by the CEO session on the owner's explicit instruction.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-17 20:20:12 +00:00
teahubxyzandClaude Fable 5.1 b53016007a heartbeat: 55-minute job, and the claude seat's token for reviews
ci / test (push) Successful in 34s
The job timeout moves from 20 to 55 minutes: workers can overlap inside one run (#75), and at 20 every in-flight worker died together. TIME_SEAT_CLAUDE reaches the heartbeat so the reviewer can post as the `claude` user once #76 lands; until then it is unused.

Both on the owner's explicit instruction (CEO session).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
2026-10-17 20:16:32 +00:00
timeandClaude Fable 5.1 449f89fc38 Reviewer rule wording; no duplicate "Closes #N" in PR bodies (#74)
ci / test (push) Successful in 35s
Reviewer rule wording; no duplicate "Closes #N" in PR bodies (#74)

Reviewer Approve (haiku) on the diff, CI green on 16b369dd. Engine-only change for card #58; squash-merged by the CEO session on the owner's explicit instruction.

Closes #58

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-17 20:13:25 +00:00
timeandClaude Fable 5.1 0e582aa70b Objections go back to the worker, with the review attached (#59)
ci / test (push) Successful in 35s
time/worker-run cd .github/time && sed -n 80,150p test_time.py; sed -n 455,480p test_time.py; grep -n "claude-sonnet
Objections go back to the worker, with the review attached (#59)

Revise loop for `/time retry`: an open PR's reviewer comments go to the worker on the same branch, open_pr updates the open PR, the card returns to `dispatched`, and verdicts older than the last revision no longer count. Check 55 covers it.

Reviewed: Approve by Time's reviewer (haiku); the two confirmation points answered by the steward. Merged by the CEO session on the owner's explicit clearance after eleven steward sign-offs were blocked by a session permission guard.

Closes #53

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
Co-authored-by: Time <time@users.noreply.teahub.xyz>
2026-10-17 17:46:39 +00:00
teahubxyzandClaude Opus 5.5 e705ca00ac refresh: rebuild a gh-pages venture in place, from its own tools/build.sh (#67)
ci / test (push) Successful in 34s
refresh: rebuild a gh-pages venture in place, from its own tools/build.sh (#67)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sekpYMwTXuMdza1isMQA1
2026-10-16 05:18:37 +00:00
teahubxyzandClaude Opus 5.5 721212ba7e seed: land a venture built elsewhere on yolopreneur.lol (#64)
ci / test (push) Successful in 35s
time/worker-run git fetch origin gh-pages 2>&1|tail -1; git show FETCH_HEAD:ventures/dollhouse/app.js | sed -n 140,3
seed: land a venture built elsewhere on yolopreneur.lol (#64)

Actions -> seed -> Run workflow with a slug, the URL(s) of a .tgz whose top folder is the slug, and its sha256
(plus a name and a one-liner for a new venture). seed.py checks the bundle, copies it over ventures/<slug>/ on
gh-pages in one commit, adds or refreshes the venture's line in ventures/ventures.json, and the workflow asks
Teahub pages to pull. Nothing in the bundle runs. test_seed.py runs in CI. Merged at the owner's request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K9wtGiGEeq1H5DA3T88PRe
2026-10-15 23:56:46 +00:00
time 1da01fcd68 Review: show the reviewer the PR check statuses (#56)
ci / test (push) Successful in 35s
time/worker-run cat > /tmp/patch.py <<'PYEOF' p = ".github/time/time.py" s = open(p).read() def sub(old, new): g
venture / tick (push) Successful in 3s
Closes #52

Merged by the steward (Claude, for the operator). Review answered on the PR.

Co-authored-by: Time <time@users.noreply.teahub.xyz>
Co-committed-by: Time <time@users.noreply.teahub.xyz>
2026-10-14 21:39:13 +00:00
teahubxyzandClaude Opus 5.5 97b7667970 astra: queue picks instead of labelling them ready, so they run one at a time behind the existing queue
ci / test (push) Successful in 35s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fTCFiw6ohysUDcWoPsTys
2026-10-14 21:18:36 +00:00
time 195c65cb55 Tests: test_time.py clears the job TIME_* environment before importing time.py (#54)
ci / test (push) Successful in 35s
time/worker-run cd .github/time; python3 - <<'EOF' s=open('time.py').read() s=s.replace('''def review(card: dict, pr
Closes #51

Merged by Claude for the operator (the delegated merger for engine PRs). Reviewer objection answered on the PR: CI was green; the reviewer cannot see checks yet (#52).

Co-authored-by: Time <time@users.noreply.teahub.xyz>
Co-committed-by: Time <time@users.noreply.teahub.xyz>
2026-10-14 21:15:49 +00:00
teahubxyzandClaude Opus 5.5 c2055e85eb time: every write but comments and statuses goes out as the time bot
ci / test (push) Successful in 34s
time/worker-run python3 - <<'EOF' p=".github/time/test_time.py" s=open(p).read() old='import concurrent.futures as c
Gitea 1.24 also refuses the Actions identity label edits (removing a label is a 500), which crashed
promote_next and stalled the queue. gh() now uses TIME_TOKEN for every write except comments (Time's
beats are gitea-actions' comments) and commit statuses; the time user never counts as trusted and
mention replies ignore it; astra.yml gets TIME_TOKEN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fTCFiw6ohysUDcWoPsTys
2026-10-14 14:02:51 -07:00
teahubxyzandClaude Opus 5.5 f3a841a762 heartbeat: put each secret's comment back on its own line
ci / test (push) Successful in 36s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fTCFiw6ohysUDcWoPsTys
2026-10-14 20:22:05 +00:00
teahubxyz bbc62970cb time: PRs open and merge as the time bot (TIME_TOKEN); Gitea denies both to the Actions identity
ci / test (push) Successful in 35s
venture / tick (push) Successful in 3s
2026-10-14 13:11:41 -07:00
teahubxyz e12728c5ff hands: list_files resolves the branch to a sha (trees route rejects refs with a slash)
ci / test (push) Successful in 34s
2026-10-14 12:54:22 -07:00
teahubxyz 0eb9234a7e time: every write is a git push (Gitea refuses the Actions token's API writes); ledger appends; one commit per kept batch
ci / test (push) Successful in 35s
time/worker-run sed -n 262,335p .github/time/time.py
2026-10-14 12:51:52 -07:00
teahubxyz 444b01abca astra: daily planning workflow (off until TIME_ASTRA=on)
ci / test (push) Successful in 36s
2026-10-14 19:49:42 +00:00
teahubxyz 4086657dc8 astra: the daily planner (one call a day; queues cards, never spends beyond its call; guardrails in code)
ci / test (push) Has been cancelled
2026-10-14 19:49:35 +00:00
teahubxyz aecc4ee90d ci: don't retest on ledger commits
ci / test (push) Successful in 34s
2026-10-14 19:46:44 +00:00
teahubxyz c92313b62d doctor: the Cursor key is optional when a seat is the worker
ci / test (push) Successful in 34s
venture / tick (push) Successful in 2s
2026-10-14 12:38:27 -07:00