Ledger README: explain time/ledger/<YYYY-MM>.jsonl #49

Closed
opened 2026-10-14 19:38:57 +00:00 by teahubxyz · 12 comments
Owner

Add time/ledger/README.md (short, plain) describing the spend ledger Time keeps: one JSON line per model call with at (ISO UTC), model, in/out token counts and usd (null for unpriced seats); one file per month; written by Time itself at the end of each run; read by the heartbeat to enforce TIME_DAILY_USD and TIME_MONTHLY_USD. Mention that humans should never edit it by hand and that an andon issue appears when a cap trips.

This is the first card dispatched to the Claude seat; keep it small.

DONE: PR open that adds time/ledger/README.md, tests green.

Add `time/ledger/README.md` (short, plain) describing the spend ledger Time keeps: one JSON line per model call with `at` (ISO UTC), `model`, `in`/`out` token counts and `usd` (null for unpriced seats); one file per month; written by Time itself at the end of each run; read by the heartbeat to enforce `TIME_DAILY_USD` and `TIME_MONTHLY_USD`. Mention that humans should never edit it by hand and that an `andon` issue appears when a cap trips. This is the first card dispatched to the Claude seat; keep it small. DONE: PR open that adds `time/ledger/README.md`, tests green.
teahubxyz added the ready label 2026-10-14 19:38:57 +00:00

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch time/card-49.

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch `time/card-49`. <!-- time {"beat":"dispatched","launched":true,"worker":"anthropic"} -->

⏱️ Time: the worker call failed: POST https://teahub.xyz/api/v1/repos/teahubxyz/time/branches -> 500: {"message":"","url":"https://teahub.xyz/api/swagger"} . Comment /time retry to try again.

⏱️ Time: the worker call failed: `POST https://teahub.xyz/api/v1/repos/teahubxyz/time/branches -> 500: {"message":"","url":"https://teahub.xyz/api/swagger"} `. Comment `/time retry` to try again. <!-- time {"beat":"error"} -->
Author
Owner

/time retry

(The first dispatch failed on Gitea refusing the Actions token's API branch write; Time now pushes over git. Retrying.)

/time retry (The first dispatch failed on Gitea refusing the Actions token's API branch write; Time now pushes over git. Retrying.)

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch time/card-49.

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch `time/card-49`. <!-- time {"beat":"dispatched","launched":true,"worker":"anthropic"} -->

⏱️ Time: the worker call failed: GET https://teahub.xyz/api/v1/repos/teahubxyz/time/git/trees/time/card-49 -> 404: 404 page not found . Comment /time retry to try again.

⏱️ Time: the worker call failed: `GET https://teahub.xyz/api/v1/repos/teahubxyz/time/git/trees/time/card-49 -> 404: 404 page not found `. Comment `/time retry` to try again. <!-- time {"beat":"error"} -->
Author
Owner

/time retry

/time retry

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch time/card-49.

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch `time/card-49`. <!-- time {"beat":"dispatched","launched":true,"worker":"anthropic"} -->

⏱️ Time: the worker call failed: POST https://teahub.xyz/api/v1/repos/teahubxyz/time/pulls -> 403: {"message":"user must be a collaborator","url":"https://teahub.xyz/api/swagger"} . Comment /time retry to try again.

⏱️ Time: the worker call failed: `POST https://teahub.xyz/api/v1/repos/teahubxyz/time/pulls -> 403: {"message":"user must be a collaborator","url":"https://teahub.xyz/api/swagger"} `. Comment `/time retry` to try again. <!-- time {"beat":"error"} -->
Author
Owner

/time retry

(PRs now open and merge as the time bot via TIME_TOKEN; the Actions identity can't hold a PR on Gitea.)

/time retry (PRs now open and merge as the `time` bot via `TIME_TOKEN`; the Actions identity can't hold a PR on Gitea.)

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch time/card-49.

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch `time/card-49`. <!-- time {"beat":"dispatched","launched":true,"worker":"anthropic"} -->

⏱️ Time: sonnet opened PR #50 (12 steps, claude-sonnet-5-5). Review and landing follow on the next beat.

⏱️ Time: `sonnet` opened PR #50 (12 steps, claude-sonnet-5-5). Review and landing follow on the next beat. <!-- time {"beat":"dispatched","worker":"anthropic","pr":50,"steps":12,"seat":"sonnet","model":"claude-sonnet-5-5"} -->

⏱️ Time: PR #50 is up for this card. haiku reviewed it on the PR.

⏱️ Time: PR #50 is up for this card. `haiku` reviewed it on the PR. <!-- time {"beat":"pr","pr":50,"launched":false,"review":"venice","seat":"haiku"} -->
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#49