Release notes: BoB 1.283.0
BoB 1.283.0 — release notes
Section titled “BoB 1.283.0 — release notes”Released: 2026-10-17 · Tag: v1.283.0 · Previous: 1.282.0 (2026-10-12)
Highlights
Section titled “Highlights”- BoB can now tell you how many hours its agents worked, per project.
bob labor reportreads the Claude Code transcripts on a machine and turns them into active-hours per project per day. Time between events closer than a gap (default 10 minutes, set once in the operator’sconfig/billing.json) counts as one working span, a tool call waiting for its result is never idle, and parallel sessions on one project count once per wall-clock hour. (#4420) - Hours roll up to a job.
_meta.billingin a project’s manifest names the client job and whether it bills.bob labor report --by jobgroups hours under each job, lists anything unmapped as unbilled so it is never dropped, and treats BoB’s own projects as overhead.bob provision statusprints the billing line per project. (#4423) - Hours and cost across the whole fleet. Every machine’s snapshot carries each project’s hours and list-price token cost for the last 30 days. The fleet view shows them as a Labor table, and
bob labor report --fleetprints the same roll-up, naming a machine whose snapshot is stale or missing and marking the total partial when one is. (#4422) - The token ledger stops missing killed sessions.
bob labor reconcilegives every transcript on a machine one priced ledger record.bob tickruns it each cycle, and the snapshot,bob statusandbob doctorreport how many transcripts are still unrecorded. (#4421)
bob site publishrefuses to deploy when it cannot confirm it holds the live site’s content, so it can no longer wipe pages it does not know about. (#4418)- A multi-item warp run pins its own integration branch at kickoff, so master CI runs once at finalize instead of once per item. (#4405)
bob warp statusreads a state file with no history as no session instead of crashing. (#4163)- Master CI is green again: four suites no longer depend on the farm login account’s state, the committed docs section index is regenerated, and
test-bob-tickpasses on macOS, where TMPDIR ends in a slash. (#4416) - The iBoB tutorial’s farm-run and SSH-fingerprint steps work as written on a real iPhone. (#2292)
Upgrade: every machine
Section titled “Upgrade: every machine”Close every Claude Code window on the machine first. A deploy refuses while a session is live (it would switch off the hooks in running sessions); a refused deploy is queued and runs when the last session ends.
A laptop (dev-laptop)
Section titled “A laptop (dev-laptop)”bob update --to v1.283.0bob doctorA farm worker (farm-worker)
Section titled “A farm worker (farm-worker)”bob update --to v1.283.0bob doctorsystemctl --user list-timers | grep -E 'bob-(tick|snapshot)'The last command should list both the tick timer and the snapshot timer.
A machine (utility-host)
Section titled “A machine (utility-host)”bob update --to v1.283.0bob doctorExpected: bob doctor ends green, and its version line names v1.283.0.
Upgrade: every project
Section titled “Upgrade: every project”In each project checkout on each machine:
cd <project> && bob readyExpected: READY — <project> is warp-drive-ready on this machine.
Action needed
Section titled “Action needed”-
Map each client project to its job, once. Add
_meta.billingto the project’s manifest in the operator repo, for example{"job": "acme", "billable": true}. A project without it still meters hours but reports them under unbilled (unmapped). BoB’s own projects use{"job": "overhead", "billable": false}. Check with:Terminal window bob provision statusExpected: a
billing:line per project naming its job. -
Optional: set the gap. Create
config/billing.jsonin the operator repo with{"gap_minutes": 10}to pin the idle gap; without it the product default of 10 minutes applies and the report namesdefaultas its source.
Breaking changes
Section titled “Breaking changes”None.
Known issues
Section titled “Known issues”- Ledger dollar figures are list-price and notional: the fleet runs on a subscription, so they are a cost signal, not a bill.
Changes
Section titled “Changes”Full change list — 20 commit(s)
Features
Section titled “Features”- bob labor report meters agent active-hours per project from the transcripts here (#4420) (d6ff96f)
- bob labor reconcile prices every transcript the token ledger missed, once each (#4421) (3d64075)
- the fleet snapshot, bob tick, bob status and bob doctor carry the ledger’s unrecorded count (#4421) (110478b)
- the fleet snapshot carries labor hours and COGS per project, and the view rolls them up (#4422) (88f7bb6)
- bob labor report –fleet rolls hours and COGS up from the snapshots, stale and never named, the total partial (#4422) (c679e34)
- _meta.billing maps a project to a client job, and bob labor report –by job groups hours under it (#4423) (8f0c92b)
- bob provision status prints the billing line, the product projects are overhead, the docs name _meta.billing (#4423) (83bf4ac)
Bug Fixes
Section titled “Bug Fixes”- the iBoB-from-iPhone tutorial’s farm run and fingerprint steps work as written (#2292) (3bfc224)
- a multi-item warp run pins its own integration branch and ships it in one push (#4405) (bc47706)
- state-machine.js status reads a state file with no history as no session (#4163) (7e6960f)
- master green after v1.282.0 — cli.md names the release, and one SIGPIPE site in test-warp-auto-stream (7342314)
- bob site publish refuses to deploy over a live site origin does not hold (#4419) (#4418, #4419) (5cfef20)
- the snapshot’s token-ledger keys are token_ledger — the session evidence ledger already owned ledger (#4421) (35d950f)
- docs/reference/index.md regenerated — master CI red on the stale section index since v1.282.0 (30960fc)
- the control terminal tests give tmux a real shell (#4416) (22ed821)
- the labor meter’s gap rule, tool rule and billing.json states are pinned (#4420) (de1ba14)
- the labor meter’s subagent fold is pinned and the suite is complete (#4420) (648cc8c)
- the reconcile’s surfaces are pinned — snapshot, tick digest, bob status and bob doctor (#4421) (b60a39c)
- test-bob-tick normalizes its sandbox path — macOS TMPDIR ends in a slash and the wiki assertions never matched (0e61447)