> ## Documentation Index
> Fetch the complete documentation index at: https://gora.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Invoice recovery validation 2026 09 21

# 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/quotes` lists all invoices belonging
  to that owner/app, including instance invoices. The instance equivalent is
  narrower. Both support `/v1`, 50-entry pages and a scoped `before` cursor.
  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. `issued` with 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:

| File | Installed SHA-256 |
| - | - |
| `dev-bridge/server.mjs` | `6b484ffa9cd1f9bf91c5932da234165df4f77ac8bafb88ea3090873163f42303` |
| `dev-bridge/lib/ai-payments.mjs` | `20e87f187d35c20e8138d1ebdce8d669398cd83283c75771722f67f961d2dda6` |

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 records `complete: 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.

| Chain | Original quote | Confirmed credit |
| - | - | - |
| Base | `e2408e1b0fa88d822e1a5b32cad78bd31455a2c1c47462cff286e2cd395e3f6b` | 1 credit for the original 1 GORA transfer in block 47108239 |
| Solana | `89a17c4483f8707095b50c44adfcdf3d59255cd748a3ed4fdc4a4fb6f72c2117` | 1 credit for the original 1 GORA transfer in finalized slot 501849998 |

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](signal-lab-live-invoice-browser-2026-09-21.md).

## Remaining launch gates

The privacy link is configured as `https://gora.io/privacy`, but still returns
404 after redirect. [Explicit AI-sharing consent](ai-sharing-consent-gap-2026-09-21.md), 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](../external/bigman/acceptance/liquidation/README.md)
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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.