Skip to content

SoFi rig fixes: a quote's total, a quote's reads, ERA as people count it; CORE receiver checks - #1091

Merged
cryptskii merged 7 commits into
mainfrom
fix/sofi-quote-total-speed-and-display-units
Oct 1, 2026
Merged

cryptskii merged 7 commits into
mainfrom
fix/sofi-quote-total-speed-and-display-units

Conversation

@cryptskii

@cryptskii cryptskii commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes from the 2026-10-01 three-phone rig run, plus CORE's receiver-check branch, in one PR.

The run (proven on real Android devices)

  • A created RIGT and sent B 5,000 RIGT. A and B each opened an ERA/RIGT vault (2,000 RIGT / 40 ERA).
  • C, set up with neither vault, swapped 80 ERA with a minimum out of 1,990 RIGT. The search split it 40.11 / 39.89 across the two vaults, and C received 1,996.99 RIGT. One vault alone gives about 1,332 RIGT, so the minimum needed both.
  • Both owners saw their vaults at generation 1, each moved by its own leg.
  • C paid A 100 RIGT, and A accepted it over C's conditional positions (A8 / P15-9).

Fixed

  1. A split's quote showed one leg as the total, and seeded the minimum out with it.
    • sofi.findRoute now reports the route's shape and what it takes and gives as one operation (SofiFindRouteResponse fields 3–7), by Core's endpoint rule: movement_shape, used by route_endpoints.
    • The SoFi screen shows those figures.
  2. A quote took 1.5–2.5 min. A request read each vault's genesis four times, each a locator scan plus a walk of the owner's lineage.
    • A request's verifiers now share the geneses they accept (AcceptedGeneses), so each is read from the network once per request.
  3. ERA shown in base units. The faucet message and the token wizard's fee and holding now show ERA at its decimals, rendered by Rust (TokenFeeScheduleResponse fields 4–5).
  4. A split trade's history row named one vault. It names every vault the route went through.

Tests (release, Postgres node fleet)

  • SDK node and handler suites. dsm_sdk node_e2e, sender_admission, token_create, faucet_flow, realized_records and sofi_flow: 54 passed, 0 failed.
    • New: a_request_reads_each_vaults_genesis_once, which counts live reads.
    • Extended: the split and chain quotes' shape and totals, the split's history row, and the fee schedule's display strings.
  • Core. dsm sofi::: 236 passed, 0 failed, including movement_shape cases.
  • Static checks. make lint exit 0. real_code_guard clean. conformance_evidence: 805 rows.
  • Mutation controls, each red, then restored byte for byte:
    • the genesis memo bypassed: (4, 4) reads against (1, 1);
    • the total taken from the last hop: the quote reports (2, 31, 236) against (2, 60, 460);
    • the row naming only the first vault.
  • Frontend. tsc clean; the SoFi screen, token-creation dialog and policies tests pass.

Removed tests (frontend)

  • Removed: two SoFi screen quote-and-trade tests, and the fee query's success test.
  • Why: they stubbed findRoute with a hop list and the fee schedule with a boolean, on lines recorded in the real-code guard's baseline. Adapting them to the new shapes would edit recorded lines.
  • What still covers it: the route's shape and totals are tested through the SDK on the node fleet.
  • What has no test now: the screen choosing sofi.trade for one hop and sofi.route for several.

Not fixed here

  • The trade took 13 m 50 s. Per STORAGE, the fleet runs the 09-27 node build, whose mirror sync is unbounded. The bound is on main; the fleet needs the owner's redeploy.
  • Owner vault walks took about 9 min, on the same fleet.
  • A stale "contacts refresh stalled" banner on the trader's phone.

Also included: CORE's receiver-check branch

fix/dsm-core-receiver-checks-and-node-clock-row (3 commits, CORE §6.55):

  • a token the receiver never adopted is held before any register read (MR-DSM-0029 evidence);
  • MR-DSM-0055 → Met;
  • A8 peer-walk start and validation log lines.

Records

  • CONFORMANCE §6.56.
  • Rows MR-SOFI-0349, 0353, 0357 and 0359 updated.
  • VERIFICATION_MATRIX rows; INTENT_MANIFEST rows for movement_shape and route_ends.
  • INTENT_PINS will be repinned once from this PR's Code map.

… rule tested

- **MR-DSM-0029 stays Partial.** The receiver now has evidence that a transfer of a
  token it never adopted is held before any register read. The relationship tip is
  still decided in the staged apply, after the read. Nothing yet drives its
  refusal: that needs a hostile sender signing from a rolled-back state, which
  the harness cannot produce. Recorded in §6.55.
- **MR-DSM-0055 moves Partial to Met.** It is the same requirement as
  MR-STOR-0008, and STORAGE's syn test over every node source is its
  evidence.
- **The §6.8 note on gossip, replication and discovery ticks is resolved:**
  the code and the fields are gone from the tree.

Mutation controls, run and restored:
- The sync's in-hand policy check removed: the adoption test goes red.
  The receiver asked dsm-node-1 for a cell.
- `Instant::now()` added in db/pg.rs: no_node_source_reads_a_clock goes red.

§7 totals regenerated.
On the rig, the A8/P15-9 payment from a trader took about 2.5 minutes,
from pull to apply, and the payee's log could not say where the time went.
peer_lineage logs nothing on success, so prevalidation's walk and the
admission's second walk of the same segment (the known A8 first-contact
cost) were indistinguishable from the storage reads around them.

- The frontier store logs where each walk starts: the recorded frontier
  and its position, or the activation root.
- resolve_peer logs the position it validated.
- A refusal is returned unchanged. Its callers already log it with their
  own context.

With logcat timestamps, the next rig run splits the time per walk.
…enesis once; ERA shown as people count it

From the 2026-10-01 three-phone rig run.

- A split's quote showed one leg as the total and seeded the minimum out
  with it. `sofi.findRoute` now reports the route's shape and what it takes
  and gives as one operation, by Core's rule for a route's endpoints
  (`movement_shape`, used by `route_endpoints`): a chain gives its last
  hop's output, a split the sum of its legs. The SoFi screen shows those.
- A quote took minutes: each request read a vault's genesis four times,
  each a locator scan and a walk of the owner's lineage. A request's
  verifiers now share the geneses they accepted (`AcceptedGeneses`); each
  is still read from the network, once.
- ERA amounts in base units read as whole ERA: the faucet message and the
  token wizard's fee and holding now show ERA at its committed decimals,
  rendered by Rust (`TokenFeeScheduleResponse` display fields).
- A split trade's history row named one vault; it names every vault the
  route went through.

Tests: `a_request_reads_each_vaults_genesis_once` (live reads, counted);
the split and chain quotes' shape and totals; the split row names both
vaults; the fee schedule's display strings. Each change mutation-checked.

Three frontend tests are removed: two SoFi screen tests and a fee-query
test whose stub and boolean lines are recorded in the real-code guard's
baseline. Adapting them to the new shapes would edit recorded lines.
…-node-clock-row' into fix/sofi-quote-total-speed-and-display-units
The three-phone run of 2026-10-01: a split across two vaults of one pair,
realized and seen by both owners, and a payment from the trader accepted
by a device with no frontier for it. The fixes it led to, each with its
mutation control; what it found that this branch does not fix (the old
fleet's unbounded mirror sync, the owners' walks, a stale contacts
banner); and the three frontend tests removed, with what they covered.
Rows MR-SOFI-0349, 0353, 0357 and 0359 cite the new code and tests.
- 2 new rows pinned (`movement_shape`, `route_ends`).
- 616 stale rows repinned, every one code-class.

Evidence, run at ad41539: the 3 tests of the new rows and the 324 tests
of the stale ones (18 runs), all passed. `make requirement-map-intent` on
CI's code map: 0 failing rows, 635 pinned, 0 failing pins.
@cryptskii
cryptskii marked this pull request as ready for review October 1, 2026 10:57
@cryptskii
cryptskii merged commit c74ad8d into main Oct 1, 2026
27 checks passed
@cryptskii
cryptskii deleted the fix/sofi-quote-total-speed-and-display-units branch October 1, 2026 11:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant