Release analysis · v0.2.4
v0.2.4 system analysis
Four reproducible experiments against Hubu’s USD budget accounting, with their setup, scripts, evidence, and limits.
All claims are about Hubu’s own ledger and records, not provider invoices.
- Released source
- v0.2.4 · 5344ab56 ↗
- Kits revision
- f280b3dc ↗
- Recorded
- 2026-10-22 UTC
- Host
- macOS-26.4-arm64-arm-64bit
Four tests. One known gap.
Each claim stands on its own evidence. Caveats and failures are part of the card.
| Claim | Outcome | What the evidence says |
|---|---|---|
| 01 The runaway agent | Holds | 10 ledger postings consumed $0.10. 100 authorization attempts were denied; 0 remained unresolved. |
| 02 The last cent | Holds with caveat | $0.03 recorded against $0.01 authorized; $0.02 overrun visible. 11 new requests were denied. The public claim records owner reconciliation. |
| 03 The unresolved crash | Holds | $0.01 remained frozen after restart. Final accounting contains 1 posting totaling $0.01, with owner and retry checks recorded separately. |
| 04 Many clients, one budget | Holds with caveat | 33 allowed, 67 denied, 0 unresolved. $0.99 reserved during the burst; $0.99 consumed after settlement. |
| 05 Agent identity | Does not hold | Runtime/thread-bound authority is a documented gap in v0.2.4. This row is documentary evidence, not a new experiment. |
What happens after the budget is gone?
The runaway agent
With a fixed $0.10 budget and $0.01 per operation, Hubu stops authorizing new work once the budget is consumed—even after 100 more attempts.
Observed outcome
10 ledger postings consumed $0.10. 100 authorization attempts were denied; 0 remained unresolved.
- Ledger postings
- 10
- Consumed
- $0.10
- Remaining
- $0.00
100 denied attempts recorded. The line shows exported consumption observations.
Read the plotted values
| Attempt | Consumed |
|---|---|
| 0 | $0.00 |
| 1 | $0.01 |
| 2 | $0.02 |
| 3 | $0.03 |
| 4 | $0.04 |
| 5 | $0.05 |
| 6 | $0.06 |
| 7 | $0.07 |
| 8 | $0.08 |
| 9 | $0.09 |
| 10 | $0.10 |
| 110 | $0.10 |
Boundary. The budget and policy stay fixed throughout. These results do not establish authority boundaries for a caller with the broad administrative bearer.
Setup, script & verification
Setup
One synthetic agent. A fresh $0.10 budget. A fixed allow policy. Each authorized operation reports a $0.01 synthetic receipt.
Script
- Complete ten authorize → claim → settle operations.
- Issue 100 new logical authorization attempts after exhaustion.
- Export the final budget, authorization history, and every ledger page.
./break-hubu/ep01-runaway/run.sh --release v0.2.4Read the complete kit ↗Verification
Compare public settlements and exact budget charges with the request trace. Denials need request evidence; an empty ledger alone cannot establish them.
The verifier reads saved public HTTP and CLI evidence using exact integer amounts. It does not read SQLite or import Hubu’s implementation.
Captured terminal excerpt
[2026-10-22T02:03:58.652626+00:00] $ /private/tmp/break-hubu-public-cache/target/release/hubu --url http://127.0.0.1:51578 budget list
[2026-10-22T02:03:58.658507+00:00] budget_id: bgt_1cx0nh5ht4eq agent_id: agt_gg8a347bmse7 status: exhausted
limit: $0.10 consumed: $0.10 frozen: $0.00 remaining: $0.00
current_version_id: bgv_h6b37ft83dwj current_revision: 1
period: 2026-10-21T19:03:57.947645-07:00 -> 2998-12-31T16:00:00-08:00
CLI exit=0
The full transcript and raw exports remain the evidence of record.
Can the ledger tell an uncomfortable truth?
The last cent
A confirmed $0.03 charge against a $0.01 authorization is accounted for in full, the $0.02 overrun is visible, and further positive authorizations stop.
Observed outcome
$0.03 recorded against $0.01 authorized; $0.02 overrun visible. 11 new requests were denied. The public claim records owner reconciliation.
- Ledger postings
- 1
- Consumed
- $0.03
- Remaining
- −$0.02
The public claim records explicit owner reconciliation. Normal settlement and reconciliation are separate steps.
Boundary. Full overrun accounting requires explicit owner reconciliation after lease expiry. A negative remaining budget correctly records the confirmed charge above the estimate.
Setup, script & verification
Setup
A $0.01 budget, a $0.01 claimed authorization, and a synthetic receipt for $0.03. The public short lease is 30 seconds.
Script
- Try normal settlement with the overrun receipt and inspect the retained hold.
- Wait for the returned lease deadline, then use the explicit owner reconciliation path.
- Repeat that reconciliation and probe fresh authorizations; inspect the public ledger.
./break-hubu/ep02-last-cent/run.sh --release v0.2.4Read the complete kit ↗Verification
Inspect the authorized maximum, actual charge, visible overrun, remaining budget, and idempotent posting. The owner action is part of the result.
The verifier reads saved public HTTP and CLI evidence using exact integer amounts. It does not read SQLite or import Hubu’s implementation.
Captured terminal excerpt
[2026-10-22T02:04:30.730061+00:00] $ /private/tmp/break-hubu-public-cache/target/release/hubu --url http://127.0.0.1:51747 budget list
[2026-10-22T02:04:30.736063+00:00] budget_id: bgt_2ds8zy84h7de agent_id: agt_fxr1hptmbnh4 status: exhausted
limit: $0.01 consumed: $0.03 frozen: $0.00 remaining: -$0.02
current_version_id: bgv_m31n5kjgzb7d current_revision: 1
period: 2026-10-21T19:04:00.418797-07:00 -> 2998-12-31T16:00:00-08:00
CLI exit=0
The full transcript and raw exports remain the evidence of record.
Does a restart make an obligation disappear?
The unresolved crash
After Hubu is killed with a claimed operation unresolved, restart preserves its financial obligation; lease expiry does not release it, and replaying a confirmed resolution produces one settlement.
Observed outcome
$0.01 remained frozen after restart. Final accounting contains 1 posting totaling $0.01, with owner and retry checks recorded separately.
- Ledger postings
- 1
- Consumed
- $0.01
- Remaining
- $0.00
- +0.0sClaim confirmed
Public claim state before the crash.
- +0.0sFixture saved
Durable synthetic receipt; no provider call.
- +0.0sFixture saved
Durable synthetic receipt; no provider call.
- +0.0sHubu process killed
SIGKILL; process exit -9.
- +0.1sHubu restarted
Same released binary and database.
- +0.1sPublic state after restart
Frozen $0.01; consumed $0.00.
- +30.0sPublic state after lease expiry
Frozen $0.01; consumed $0.00.
- +30.1sOwner reconciliation
CLI exit 0.
- +30.1sIdentical owner retry
CLI exit 0.
- +30.2sHubu restarted
Same released binary and database.
- +30.2sFinal public state
Frozen $0.00; consumed $0.01.
Boundary. The fault is a Hubu process kill after a confirmed claim and synthetic billed marker, before settlement. Provider execution, disk loss, and Gongbu recovery are outside this test.
Setup, script & verification
Setup
A $0.01 claimed operation and a durable synthetic billed marker outside Hubu’s database. Kill only the kit’s server process before settlement.
Script
- Confirm the claim publicly, write the fixture receipt, and kill the server.
- Restart the same released binary and database; inspect the claim and hold.
- After lease expiry, reconcile the confirmed charge, repeat the resolution, and restart again.
./break-hubu/ep03-crash-recovery/run.sh --release v0.2.4Read the complete kit ↗Verification
Check the same public authorization and claim IDs, the retained hold, rejected unsafe resolution paths, and one final ledger posting.
The verifier reads saved public HTTP and CLI evidence using exact integer amounts. It does not read SQLite or import Hubu’s implementation.
Captured terminal excerpt
[2026-10-22T02:05:02.181048+00:00] $ /private/tmp/break-hubu-public-cache/target/release/hubu --url http://127.0.0.1:51885 budget list
[2026-10-22T02:05:02.189259+00:00] budget_id: bgt_1hcfqkpj5s5h agent_id: agt_8qkzvcn6gb7y status: exhausted
limit: $0.01 consumed: $0.01 frozen: $0.00 remaining: $0.00
current_version_id: bgv_91nd8hk9qv5f current_revision: 1
period: 2026-10-21T19:04:31.749634-07:00 -> 2998-12-31T16:00:00-08:00
CLI exit=0
The full transcript and raw exports remain the evidence of record.
Can a burst reserve more than the budget?
Many clients, one budget
Ten clients sharing a fixed $1 budget cannot obtain more than $0.99 of $0.03 reservations in this 100-request burst; normal settlement records those costs once.
Observed outcome
33 allowed, 67 denied, 0 unresolved. $0.99 reserved during the burst; $0.99 consumed after settlement.
- Ledger postings
- 33
- Consumed
- $0.99
- Remaining
- $0.01
- Allowed
- 33 / 100
- Denied
- 67 / 100
- Unresolved/errors
- 0 / 100
- Reserved after burst
- $0.99
- Consumed after settlement
- $0.99
- Remaining after settlement
- $0.01
Boundary. Ten client processes create the network burst. The released server handles connections serially; this does not measure simultaneous SQLite writers, throughput, or fairness.
Setup, script & verification
Setup
Ten ordinary client processes, each issuing ten real HTTP requests. One agent account and one $1 budget. No paid model or fleet of AI agents.
Script
- Release the clients at a start barrier and claim allowed operations promptly.
- Hold settlement until every burst request has completed; export the reserved budget.
- Settle the accepted receipts and export the final public accounting evidence.
./break-hubu/ep04-many-clients/run.sh --release v0.2.4Read the complete kit ↗Verification
Reconcile allows, denials, and transport errors separately. Compare the held total with final charges; a timeout never counts as a denial.
The verifier reads saved public HTTP and CLI evidence using exact integer amounts. It does not read SQLite or import Hubu’s implementation.
Captured terminal excerpt
[2026-10-22T02:05:03.917504+00:00] $ /private/tmp/break-hubu-public-cache/target/release/hubu --url http://127.0.0.1:52039 budget list
[2026-10-22T02:05:03.923240+00:00] budget_id: bgt_gpcm6mns6tkb agent_id: agt_qgxbfqebvp11 status: active
limit: $1.00 consumed: $0.99 frozen: $0.00 remaining: $0.01
current_version_id: bgv_zxa5jw5wbjfq current_revision: 1
period: 2026-10-21T19:05:03.184779-07:00 -> 2998-12-31T16:00:00-08:00
CLI exit=0
The full transcript and raw exports remain the evidence of record.
Documented limitation · no experiment in this card
The identity gap stays visible.
v0.2.4 does not bind authority to use a registered agent account to an authenticated runtime or thread. These budget experiments do not establish that boundary. This is a known gap that will be addressed in future releases.
The bearer boundary matters too. The normal bearer can access protected administration routes, including budget and policy changes. Each kit fixes those settings; it does not prove a bearer holder cannot raise a budget. Driver and mock-executor separation is not server-enforced role isolation. More narrowly scoped executor authority is planned for future releases. Read the released routing source ↗.
Make it your experiment
Read it. Run it. Compare it.
One deterministic driver is enough. You do not need an LLM subscription or real provider credentials.
Start from the recorded kit
git clone https://github.com/hacker-no-ice/hubu.git
cd hubu
git checkout f280b3dc9488040ff9e6ea9b7b42e3447f7b1021
./break-hubu/run-all.sh --release v0.2.4The entry point builds the exact released source in a separate checkout and starts an isolated instance. It does not replace your installation or select another profile.
Prerequisites and complete instructions ↗Inspect the evidence
Every run retains the real terminal transcript, request trace, public ledger pages, authorization records, budget snapshots, and verification output—even when a claim fails.
Initial qualified host: macOS. Git, Python 3, the pinned Rust toolchain, and platform build prerequisites are required. The first build downloads source and dependencies; the experiment uses loopback.
Download all evidence (ZIP) ↓How to read this card
- Holds
- Complete evidence supports every assertion in the stated claim.
- Holds with caveat
- The claim depends on an explicit condition or intervention shown beside the result.
- Does not hold
- Valid evidence contradicts a required assertion. A later harness failure does not erase it.
- Not tested
- The run is incomplete or evidence is insufficient. It is not a pass.
Fixture receipts let us control cost and timing. They do not establish real invoices, truthful executors, provider-side exactly-once execution, or task quality. Unknown outcomes remain unresolved until evidence supports a resolution.
This is the first published system analysis. No earlier release has been retroactively verified here.