Original-invoice recovery rollout — 21 September 2026
The recovery API and three corrected app UIs are deployed. Native Base and Solana original-payment recovery, one-time crediting and process-relaunch persistence passed. Algorand original-invoice history-only recovery also passed. This is not full funded native execution or a store-release claim.What changed
- iOS uses persistent WebKit stores isolated by app and normalized bridge origin. Seven native storage/route tests pass, including actual process relaunch and same-origin cross-app isolation. Android route tests: three pass.
- Authenticated GET
/apps/{app}/ai-credits/quoteslists all invoices belonging to that owner/app, including instance invoices. The instance equivalent is narrower. Both support/v1, 50-entry pages and a scopedbeforecursor. Expired originals remain available. Listing has no chain/provider I/O or credit mutation; private verifier configuration is not returned. - Recovered invoices are confirmation-only.
issuedwith a null transaction ID never establishes nonpayment. Existing or corrupt local records are not replaced, and lost history on another agent blocks a fresh payment. - Signal Lab v0.1.4 and Northstar/Harbor v0.1.9 were deployed using the public CLI and their existing developer identities. WASM, chain contracts and signer policies did not change. Bigman remains v0.1.4. The catalogue still contains only Bigman, Northstar and Harbor; no other app/history was deleted.
Verification before rollout
All 133 bridge tests pass. The 67 focused invoice/store/route tests also pass on the VM with its actual installed dependencies. A query-only inspection validated all five existing invoice rows with zero database changes, including the three original native invoices. This was operator inspection, not a substitute for the public/native recovery journey. Signal Lab passes 77 tests and 17 built-browser fixture checks; an extracted source archive installs offline and builds byte-identical UI assets. Each bot passes 52 tests and its production build. Public downloads of Signal Lab’s index, JS and source archive match the reviewed bytes, and all five published UI files match in each bot. The narrow updater and checkpoint suites pass 82 tests each on Linux as the service user and as root (30 updater, 52 checkpoint). Independent review reproduced and fixed a stale-checkpoint admission bug before deployment. The updater now compares current committed schema and typed rows, including queue rowids, to all three saved databases. It retains read-only handles, binds main database inodes and checks DB/WAL fingerprints throughout replacement.Installed source and recovery points
Only these two production source files changed in the guarded source update:
Active source root:
/home/gora-dev-user/gora-azure-build.tzbYSb/apps/gora-node.
The paid-AI Rust binary, dependencies, keys, configuration and financial
databases were not replaced. The exact node-data directory’s mode was tightened
from 0775 to 0755; its owning service user retains write access. No child file
permissions or contents were changed by that step.
Fresh coordinated checkpoint:
/home/gora-dev-user/gora-runtime-checkpoint-4590k0t4.
It includes three SQLite databases, native Algorand donor journal, keys,
configuration, six validators and their actual running executable images.
The earlier checkpoint gora-runtime-checkpoint-b6w8evk9 was retained but the
updater refused it after the 15-minute freshness limit. No guard was relaxed.
Original source backup:
/home/gora-dev-user/gora-invoice-recovery-backup-k4gg8ldv.
The later catalogue update also retained catalog.original.json there. Its new
SHA-256 is e4bb03a1abf6a8c8b5d537df28e02d9c723e597ca611d3e2ea8aa5db20238736.
The reviewed helper/updater tree remains in
/home/gora-dev-user/gora-invoice-recovery-build.ciVkmBF4.
The installed older checkpoint helper was not overwritten; use the reviewed
staged helper when the native donor journal must be included.
Never restore the old free-AI binary or reset journals/allowances to retry.
These checkpoints precede subsequent original-payment confirmations and app
publications; they are not permission to roll financial history backward.
Availability and remaining checks
The maintenance interruption was longer than intended: node/bridge stopped at 10:41:45 UTC, settlement at 10:41:47, and all three resumed at 11:01:10. Manager and validator processes stayed running. This 19-minute interruption means the earlier successful 20-minute freshness observation must not be read as uninterrupted availability across this rollout. At 11:02:43, both on-chain marks were about 27 seconds old. The separate post-update observation passed from 11:04:21.002 to 11:24:35.943 UTC: 1,214.941 continuous healthy seconds, 82 samples, zero failed samples/resets, maximum observed mark age 47.960 seconds and maximum observed update gap 45.174 seconds. The final summary recordscomplete: true and
continuous_healthy_window_observed.
Evidence:
/home/gora-dev-user/gora-post-recovery-monitor.q87Z3tG1/gora-market-freshness-i07r4ifc/summary.json.
Unit: gora-recovery-freshness-20260921.service. This measures sampled on-chain
timestamps, not independent source-exchange truth or a never-stale guarantee.
Final recovered-credit checkpoint and restart limitation
Final private checkpoint:/home/gora-dev-user/gora-runtime-checkpoint-dejc804e.
The contiguous maintenance command verified the reviewed helper/source hashes,
stopped the three financial writers, created the checkpoint, then resumed them.
Node/bridge were stopped 11:25:02–11:25:10 UTC; settlement 11:25:06–11:25:10.
Manager/validator processes were not stopped. No source, dependency, key or
financial-history rollback occurred.
The complete stopped-writer checkpoint includes three databases, 505 retained
files, 11 runtime artifacts, the reviewed catalogue, six validators and seven
running process images. Independent verification checked 511 file digests,
all three SQLite integrity checks and both original payment acknowledgements:
one ledger credit each, available 1/reserved 0, zero native provider attempts.
This is a local private checkpoint, not an off-VM restore rehearsal.
The short service pause nevertheless caused a longer price-delivery gap.
Stopping the node before settlement had fully exited caused in-flight worker
calls to fail. Persisted 120-second processing leases and per-instance FIFO
ordering held the original mark heads until automatic reconciliation. Both
marks were observed 131 seconds old at 11:26:41. Four old mark requests were
then rejected for exceeding their committed execution-age limit; no expired
callback was replaced to force a pass. By 11:28:16 both marks were 44 seconds
old, and at 11:29:00 both were 27 seconds old. No leases, signed bytes or queue
rows were cleared or manually resubmitted.
Thus the successful 20-minute window above does not span this checkpoint.
Planned maintenance needs a verified worker-drain/handoff procedure while the
node remains available; a process restart alone is not a fresh-price guarantee.
At 11:29 the operational monitor still reported the same 321 manual-review
flags and about 3,010 pending settlements, with six manager-reported Running
validators. Those historical queues/flags remain visible.
The final read-only check at 11:32 UTC found both marks advancing: the public
chain sample at 11:32:18 measured 43.654-second-old marks, and the subsequent
operations check measured newly updated marks at 21 seconds old. Node, bridge,
settlement and manager were all active with unchanged PIDs and zero restart
counts. The manager reported six Running validators; that status read is not
a fresh independent child-PID verification. The operations checker continued
to alert on 321 manual-review flags, with 296 failed and 2,991 pending
settlements; spendable operator funds were 308.489921 test ALGO. No further
restart, checkpoint, financial action or provider attempt was performed.
Read-only shutdown review confirms that settlement awaits active jobs on
SIGTERM, but those jobs still need the node API to save progress. The proposed
maintenance order is to stop and drain settlement while the node remains
available, verify completion, then stop the node. The current 30-second worker
shutdown allowance does not guarantee that drain. This recommendation is not
an implemented or tested coordinated handoff; leases must not be cleared to
shorten recovery.
Live original-payment recovery
The real published Signal Lab UI recovered each original Base/Solana invoice, accepted only its original transaction for confirmation, then showed exactly one available credit. Complete invoice/transaction/receipt records survived actual native process termination and relaunch unchanged. Each chain’s native test passed once; no new payment, agent funding or provider attempt occurred.
The root reviewer independently compared both complete public quote hashes and
pre/post-relaunch records, rechecked the original chain transfers and inclusion
windows, and compared the payment DB receipts to the node ledger. Each has
exactly one ledger row, total/available 1, reserved 0 and zero provider attempts
at this checkpoint. The query-only inspection made zero database changes.
The first Base run failed at a test-only long-label selector before restoration
or confirmation. Its failed bundle is retained; the corrected exact-label
selector run passed. This was not a payment retry.
Northstar’s native history-only run recovered original quote
b72ef15772af7590aef86ad21d1cc04cf8ee932ec007369394bacfb880a450cd,
with its original owner, instance, token, amount and timestamps. It remains
uncertain/confirmation-only, with no transaction or receipt, and the instance
remains paused. No replacement quote, payment, vault or trading was enabled.
Server issued/null or expiry alone must not be treated as proof of nonpayment.
Detailed native bundles/attachments and original transaction IDs are in
apps/gora-node/dev-bridge/FUNDED_NATIVE_ACCEPTANCE_2026-09-21.md.
The independent-origin browser run also passed ten checks with the preserved
Solana CLI owner. Actual UI/client app-wide and instance invoice reads returned
the original credited record; anonymous, foreign-app and foreign-owner reads
returned 401. Root inspected its report and screenshot. Across an initial
harness failure and the approved retry, two login-message signatures and zero
financial/provider calls occurred. See
browser evidence.
Remaining launch gates
The privacy link is configured ashttps://gora.io/privacy, but still returns
404 after redirect. Explicit AI-sharing consent, physical-device/store checks,
dependency-advisory work and live isolated liquidation acceptance remain open.
Offline liquidation hardening now passes 39 JS, six Rust and four AVM tests,
including actual AVM inner transactions checked by the independent JavaScript
verifier. The separate handoff
still requires a real isolated market, bound artifact/deployment and live
acceptance. This does not prove a live liquidation. No store upload or mainnet
action occurred.
Dormant native fund/analyze drivers now require exact original identity,
artifact, policy, quote, payment and recent independently reviewed preflight,
plus a retained one-shot marker before wallet/provider action. Four synthetic
latch tests passed. They remain held; the final checkpoint above retains the
newly acknowledged credits. The pre-update checkpoint is historical financial
state and must not be restored over later acknowledgements.