Commit Graph
40 Commits
Author SHA1 Message Date
teahubxyz 15f6e39164 PR75: test automatic reservation recovery deterministically through heartbeat
ci / test (pull_request) Successful in 35s
heartbeat / tick (pull_request_review) Canceled after 0s
2026-10-18 01:01:22 +00:00
teahubxyz 175049768c PR75: wait for temporary budget contention and settle reservations atomically
ci / test (pull_request) Failing after 34s
2026-10-18 01:01:03 +00:00
teahubxyz 8edea32279 PR75: retain main regression tests and forward-compatible worker stub
ci / test (pull_request) Successful in 35s
2026-10-18 00:58:03 +00:00
teahubxyz 943e084482 PR75: reconcile landed engine changes and clarify reservation semantics
ci / test (pull_request) Successful in 35s
2026-10-18 00:57:50 +00:00
teahubxyz 38a7006bea ci: run API concurrency and spend reservation tests before venture opt-in exit
ci / test (pull_request) Successful in 35s
2026-10-17 18:42:52 +00:00
teahubxyz 9eb0c833a6 tests: prove concurrent Claude calls and atomic in-flight spend reservations
ci / test (pull_request) Successful in 35s
2026-10-17 18:41:30 +00:00
teahubxyz 3ac25db0ce time: overlap Claude API card workers while preserving receipts and failures 2026-10-17 18:40:48 +00:00
teahubxyz d16c6acab6 time: fill API worker slots before waiting for model completion 2026-10-17 18:40:15 +00:00
teahubxyz 8c27c537c1 time: prepare in-process concurrent model calls with bounded reservations 2026-10-17 18:39:54 +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
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
teahubxyz b13ddff34f Merge pull request 'Ledger README: explain time/ledger/<YYYY-MM>.jsonl' (#50) from time/card-49 into main
venture / tick (push) Successful in 3s
Reviewed-on: #50
2026-10-14 20:53:04 +00:00
teahubxyzandClaude Opus 5.5 f718a14295 ledger README: the cap is checked before every model call; say exactly who opens the andon
ci / test (pull_request) Successful in 35s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fTCFiw6ohysUDcWoPsTys
2026-10-14 20:30:18 +00: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 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 dc2a3e8a05 doctor: ANTHROPIC_API_KEY + spend caps
ci / test (push) Successful in 35s
2026-10-14 19:34:32 +00:00
teahubxyz 6bf0b0411b README: Claude seats and the spend governor
ci / test (push) Successful in 36s
2026-10-14 19:32:32 +00:00
teahubxyz 7c2b6a00a3 venture: ANTHROPIC_API_KEY + spend caps
ci / test (push) Has been cancelled
2026-10-14 19:32:11 +00:00
teahubxyz d05679b11a heartbeat: ANTHROPIC_API_KEY, TIME_DAILY_USD, TIME_MONTHLY_USD
ci / test (push) Has been cancelled
2026-10-14 19:31:54 +00:00
teahubxyz ee0302f763 mention: ANTHROPIC_API_KEY + spend caps
ci / test (push) Has been cancelled
2026-10-14 19:31:41 +00:00
teahubxyz 387fe44e15 time: Claude seats via the Claude API's OpenAI-compatible layer; spend ledger + dollar caps (governor)
ci / test (push) Successful in 37s
2026-10-14 19:25:42 +00:00
teahubxyz 9ffbb793bf seats: Claude seats (haiku, sonnet, opus, fable) with provider and prices
ci / test (push) Successful in 35s
2026-10-14 19:23:25 +00:00
teahubxyz c360639456 Port: Time runs on Gitea (teahub.xyz) (#47)
ci / test (push) Successful in 35s
2026-10-14 06:55:19 +00:00
teahubxyzandclaude 8c6ad054b9 security: a real CI check before auto-merge; .github/ always protected (#46)
- checks(): the worker's own time/worker-run status can block or delay a merge but never counts as green
- dispatch_ci(): with no other check on the head, Time runs TIME_CI_WORKFLOW (ci.yml, workflow_dispatch) on the PR branch and waits; beat ci-dispatched, once
- ci.yml accepts workflow_dispatch
- touches_protected(): .github/ is always protected, whatever TIME_PROTECTED says
- labs-aicharts.yml: deploy URL via env, not ${{ }} in the script
- tests: worker-status-only no longer merges; dispatch once; real context merges


Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6

Co-authored-by: claude <noreply@anthropic.com>
2026-10-13 21:33:35 -07:00
teahubxyzandclaude 17e51a6b08 security: harden Time for a public repo (#45)
- beats_of/verdict/retry: trust only github-actions[bot] and owner/member/collaborator authors (forged state and stranger retries on a public repo)
- touches_protected: paginate pull files and include previous_filename
- browser_check: drop .git after clone, serve only the venture folder, Chrome with no network but localhost
- Hands.run: execute in a docker container when a daemon exists (TIME_RUN_IMAGE), host shell fallback
- tests: logins on fake comments, stranger retry/forged beat cases, paginated files fake


Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6

Co-authored-by: claude <noreply@anthropic.com>
2026-10-13 21:24:42 -07:00
teahubxyzandClaude e52e116815 labs/aicharts: show decision confidences, per-request floor, bench user agent (#41)
Live: Clef answered both probes right in ~0.5 s but at 0.21-0.25 confidence, so
the 0.5 floor sent them to the LLM. Expose every confidence and the weakest
question; a request may set its own floor (only changes cost); bench.py takes
clef@0 for calibration and sends a user agent Cloudflare accepts.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 15:31:05 +00:00
teahubxyzandClaude 2d0f997030 labs/aicharts: Jev / Clef decision brains (choice answers -> spec), LLM as the door (#40)
decide.js asks ~10 choice questions in one call (mark, x, measure, agg, series,
order, top, one filter per text column) and assembles the spec; the validator
still checks it. Weakest needed answer < FLOOR, a failed check or a model error
hands the question to the LLM path, and the response says why. Page: brain
picker, latency/confidence line, 'or as <mark>' from the mark probabilities.
bench.py scores brains on 12 fixed questions.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 15:25:17 +00:00
teahubxyzandClaude 3086cb52ff labs/aicharts: fast non-thinking model for specs (#39)
Live: gemma-4 took 70s+ and returned empty content on harder prompts (budget spent
thinking). Llama 3.3 70B fp8-fast answers the spec directly; still overridable.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 14:01:33 +00:00
teahubxyzandClaude 9e065e416d labs/aicharts: plain prompt first, JSON mode only as fallback (#38)
Live, the json_schema decoder filled every step with the same key soup (order, step)
and dropped agg/by. The prompt's grammar + example steers better.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 13:53:14 +00:00
teahubxyzandClaude 165d499644 labs/aicharts: fix model spelling drift, show the model's answer on failure (#37)
First live run: Workers AI answered specs the validator refused (agg spelling).
normalizeSpec fixes case and common aliases only; on a 422 the response
carries model_said (shown, never run). Smoke now fails on a bad spec.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 13:47:49 +00:00
teahubxyzandClaude 8eff78170b labs/aicharts: live at aicharts.<venture domain>, like ventures (#36)
The account has no workers.dev subdomain; use TIME_VENTURE_DOMAIN when set.
Deploy step fails on its own error (pipefail); smoke waits up to 3 min for the cert.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 13:42:56 +00:00
teahubxyzandClaude ba4174326a labs: AICharts demo Worker (NL -> validated chart spec, D1, workers.dev) (#35)
Library (aicharts.js): spec validator, fixed ops (filter/group/sort/bin/limit),
Chart.js config, attach() for existing charts, <ai-chart> element.
Worker: sample orders in D1, schema/sample/aggregates to Workers AI with
structured output + one repair round, saved_charts, per-IP and daily caps.
deploy.py: workers.dev only, no DNS. For teahub matcha/teahub#93.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 13:35:18 +00:00
teahubxyzandClaude 88f9d509ed venture: escalate the second fix round to kimi code, not grok 4.7 (#34)
grok 4.7 fix rounds (28-54 steps, three at once) were most of a quick $20 of Venice
spend in the first live batch. Kimi's code model is a different model from round one's
Qwen Coder, so escalation still gets a fresh attempt, at a fraction of the cost.
TIME_VENTURE_ESCALATE still overrides.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 12:13:57 +00:00
teahubxyzandClaude c6451370a7 venture: children start the tick they're spawned; briefs claim only what the code does (#33)
Two findings from the first live batch (#26):
- its children waited a tick: GitHub doesn't list a card made a moment ago. spawn()
  now hands its cards to the same tick's card loop.
- every fix round was a page claiming what its code didn't do: promised drops, and
  'builds on' the trending repos the brief asked it to name. The brief now says the
  repos are the wave it rides, forbids promised features, and has the worker re-read
  the page against app.js; fix rounds remove a failing claim instead of building.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 02:57:42 +00:00
teahubxyzandClaude a933c17fdb venture: a new batch card runs as a batch, not a single venture (#25)
GitHub returns labels as objects, and a card made a moment ago isn't listed yet, so
the batch card a tick had just made fell through to the single-venture path (live:
#24). Labels are now read by name, and the tests' fake GitHub returns label objects
and holds a new batch card back from listings for a tick, which reproduces #24.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 01:47:34 +00:00
teahubxyzandClaude fbe1b0c9a2 venture: parallel builds, up to TIME_VENTURE_HEAVY worker runs at once (#23)
A tick runs its top cards in one wave, handing out worker runs in priority order (at
most TIME_VENTURE_HEAVY, default 3; one per card per tick). Made safe for threads: the
folder lock is a per-build Hands subclass instead of a patch on the shared class,
ventures.json is read fresh and written under a lock, and a contents PUT that loses
the race for the branch head (409) is retried. TIME_VENTURE_HEAVY=1 is the old
one-at-a-time.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 01:40:32 +00:00
teahubxyzandClaude bc6f232a56 venture batches: the board's top k as one milestone, launched together (multi-ceremony) (#22)
One batch card scouts once, the seats pitch a field, and the board ranks it; the top k
(each wanted by two seats) become venture cards in the batch's milestone at 'picked'.
Children run the ordinary loop side by side, wait at 'ready' until every sibling is
settled or the hold runs out, then launch together. No child left behind: one batch
retry for a held child, then it is counted dead in the cohort retro, which closes the
card and the milestone. Fix rounds now yield the single worker run per tick to cards
still due their first build, so a failing page can't starve its siblings.


Claude-Session: https://claude.ai/code/session_01VDkN7ukK1kXkqov8FaZxva

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-13 01:20:49 +00:00