/ release notes
← v0.2.4 release notes

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
ClaimOutcomeWhat the evidence says
01 The runaway agent Holds10 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 caveat33 allowed, 67 denied, 0 unresolved. $0.99 reserved during the burst; $0.99 consumed after settlement.
05 Agent identity Does not holdRuntime/thread-bound authority is a documented gap in v0.2.4. This row is documentary evidence, not a new experiment.
01

What happens after the budget is gone?

The runaway agent

Holds

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
Observed cumulative budget consumption by authorization attemptConsumed · USD$0.10 budget$00110Authorization attempt

100 denied attempts recorded. The line shows exported consumption observations.

Read the plotted values
AttemptConsumed
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
v0.2.4 · Observed public evidence · Captured request trace ↗

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

  1. Complete ten authorize → claim → settle operations.
  2. Issue 100 new logical authorization attempts after exhaustion.
  3. Export the final budget, authorization history, and every ledger page.
./break-hubu/ep01-runaway/run.sh --release v0.2.4
Read 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.

02

Can the ledger tell an uncomfortable truth?

The last cent

Holds with caveat

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
Authorized maximum$0.01
Recorded charge$0.03
Visible overrun$0.02

The public claim records explicit owner reconciliation. Normal settlement and reconciliation are separate steps.

v0.2.4 · Observed public evidence · Public authorization and receipt ↗

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

  1. Try normal settlement with the overrun receipt and inspect the retained hold.
  2. Wait for the returned lease deadline, then use the explicit owner reconciliation path.
  3. Repeat that reconciliation and probe fresh authorizations; inspect the public ledger.
./break-hubu/ep02-last-cent/run.sh --release v0.2.4
Read 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.

03

Does a restart make an obligation disappear?

The unresolved crash

Holds

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
  1. +0.0s
    Claim confirmed

    Public claim state before the crash.

  2. +0.0s
    Fixture saved

    Durable synthetic receipt; no provider call.

  3. +0.0s
    Fixture saved

    Durable synthetic receipt; no provider call.

  4. +0.0s
    Hubu process killed

    SIGKILL; process exit -9.

  5. +0.1s
    Hubu restarted

    Same released binary and database.

  6. +0.1s
    Public state after restart

    Frozen $0.01; consumed $0.00.

  7. +30.0s
    Public state after lease expiry

    Frozen $0.01; consumed $0.00.

  8. +30.1s
    Owner reconciliation

    CLI exit 0.

  9. +30.1s
    Identical owner retry

    CLI exit 0.

  10. +30.2s
    Hubu restarted

    Same released binary and database.

  11. +30.2s
    Final public state

    Frozen $0.00; consumed $0.01.

v0.2.4 · Observed public evidence · Process events and public state exports (ZIP) ↗

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

  1. Confirm the claim publicly, write the fixture receipt, and kill the server.
  2. Restart the same released binary and database; inspect the claim and hold.
  3. After lease expiry, reconcile the confirmed charge, repeat the resolution, and restart again.
./break-hubu/ep03-crash-recovery/run.sh --release v0.2.4
Read 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.

04

Can a burst reserve more than the budget?

Many clients, one budget

Holds with caveat

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
v0.2.4 · Observed public evidence · Captured request trace ↗

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

  1. Release the clients at a start barrier and claim allowed operations promptly.
  2. Hold settlement until every burst request has completed; export the reserved budget.
  3. Settle the accepted receipts and export the final public accounting evidence.
./break-hubu/ep04-many-clients/run.sh --release v0.2.4
Read 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.

05

Documented limitation · no experiment in this card

The identity gap stays visible.

Does not hold

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 ↗.

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.4

The 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.