Skip to content

feat(dlv): the trader accepts the bound successor, with its economic admission - #837

Merged
cryptskii merged 1 commit into
mainfrom
feat/market-settle-admitted-advance
Sep 10, 2026
Merged

feat(dlv): the trader accepts the bound successor, with its economic admission#837
cryptskii merged 1 commit into
mainfrom
feat/market-settle-admitted-advance

Conversation

@cryptskii

Copy link
Copy Markdown
Collaborator

Step 4 requirement 6's second half, and requirement 9.

After a qualifying QuorumBind commit the binding is authoritative, so the trader now advances its own chain to the successor the bundle names, with the economic admission attached.

The wrapper

admitted_dlv_settle follows the existing admitted_dlv_create_funded, with two differences that matter.

The credit arm is 0x0026 DlvReserveConsumption — a trader's settle output is funded by consuming an owner vault reserve. Not 0x0027, which is the owner-apply arm; build_write_set refuses that pairing outright, and the plan named the wrong one until it was corrected.

The gate requirement 6 asks for, literally. expected_successor is the exact successor the bundle was bound to, and the advance refuses unless it would commit precisely that. The check runs after the pure prepare and before anything is written, so a device that would diverge leaves nothing persisted, nothing credited, and the fence untouched.

The evidence is built from facts the trader already verified — the exact V_n, the owner's authority evidence, and the owner's economic-proof address from #835. A verifier replays the owner's ancestry rather than trusting this device. Without a locator the trade is refused rather than admitted on an invented one, and the refusal says the trade is bound and needs reconciliation rather than pretending it failed.

What now moves, and what still does not

moves does not
the trader's balances, exactly 1,000 in and 453 out — the constant-product output for that pool and fee the vault's reserves
the trader's head any receipt
the market fold, which stays pending realization
the fence, which is not released

Requirement 9, asserted positively

The test reads the fence on the trader's own chain, keyed on the parent as it stood before this settle, and requires it to still be awaiting acceptance. Ordinary DSM advancement is not a certifying verdict, Ruling V3 gates release on one, and a market verdict cannot certify until 2c-D.

The replay assertion changed direction

Re-submitting an accepted settle is now refused, because the trader's chain has moved and the quorum finds the generation taken. The test asserts the refusal and that the retry moved nothing further — a refusal that had already debited would be worse than an acceptance.

Mutation control

Inverting the bound-successor comparison turns both named market tests red and reaches the "could not admit its own advance" refusal, which shows the gate executes on the happy path rather than being dead. Restored from a byte copy and verified identical.

An earlier attempt replaced the comparand with a constant instead. It did not compile, because the parameter became unused and the crate denies warnings — its own small evidence that the value is genuinely consumed, but not a control.

Verification

dsm_sdk dlv_routes 37/37 · composition 22/22 · bind 7/7 · occupancy 10/10, all serial. dsm dlv::market 15/15 · conformance 12/12. make lint green; production safety checks green.

Still owed in Step 4

Requirement 10's remaining controls: publication below quorum leaving no fence and no bind, and a conflicting value for the same parent staying excluded after commit.

…admission

Step 4 requirement 6's second half, and requirement 9. After a qualifying QuorumBind
COMMIT the binding is authoritative, so the trader now advances its OWN chain to the
successor the bundle names, with the economic admission attached.

admitted_dlv_settle follows admitted_dlv_create_funded, with two differences that
matter.

The credit arm is 0x0026 DlvReserveConsumption: a trader's settle output is funded by
consuming an owner vault reserve. It is NOT 0x0027, which is the owner-apply arm.
build_write_set refuses the pairing outright, and the 5c-2 plan named the wrong one
until it was corrected.

The second is the gate requirement 6 asks for in as many words. `expected_successor` is
the exact B.trader_successor the bundle was BOUND to, and the advance refuses unless it
would commit precisely that. The check runs inside `build`, after the pure prepare and
before anything is written, so a device that would diverge leaves nothing persisted,
nothing credited, and the fence untouched.

The evidence the credit source names is built from facts the trader already verified:
the exact V_n, the owner's authority evidence re-encoded from what the presentation
authenticated, and the owner's economic-proof address. A verifier REPLAYS the owner's
ancestry rather than trusting this device. The locator came from #835; without it a
trade is refused rather than admitted on an invented one, and the refusal says the
trade is bound and needs reconciliation rather than pretending it failed.

WHAT NOW MOVES, AND WHAT STILL DOES NOT. The trader's own balances move — exactly 1,000
in and 453 out in both tests, which is the constant-product output for that pool and
fee — and its head advances. That is what accepting a successor means, and the credit is
foreign-verifiable rather than a raw local one. The vault's reserves do not move, no
receipt is published, the market fold stays PartialPendingRealization, no
bundle-acceptance witness exists to construct, and THE FENCE IS NOT RELEASED.

Requirement 9 is now asserted positively rather than by absence: the test reads the
fence on the TRADER's own chain, keyed on the parent as it stood before this settle, and
requires it to still be CommittedAwaitingAcceptance. Ordinary DSM advancement is not a
certifying verdict, Ruling V3 gates release on one, and a market verdict cannot certify
until 2c-D.

The replay assertion changed direction, and the new one is the more important property.
Re-submitting an accepted settle is now REFUSED, because the trader's chain has moved
and the quorum finds the vault generation taken. The test asserts the refusal AND that
the retry moved nothing further: a refusal that had already debited would be worse than
an acceptance.

Mutation control, restored from a byte copy and verified identical after: inverting the
bound-successor comparison turns both named market tests red and reaches the
"could not admit its own advance" refusal, which shows the gate executes on the happy
path rather than being dead.

An earlier attempt at that control replaced the comparand with a constant instead. It
did not compile, because the parameter became unused and the crate denies warnings —
which is its own small evidence that the value is genuinely consumed, but not a control.

dsm_sdk: dlv_routes 37/37, vault_state_composition 22/22, settlement_bind 7/7,
binding_occupancy 10/10 — all serial. dsm: dlv::market 15/15, conformance 12/12.
make lint green; production safety checks green.

Still owed in Step 4: requirement 10's remaining controls — publication below quorum
leaving no fence and no bind, and a conflicting value for the same parent staying
excluded after COMMIT.
@cryptskii
cryptskii merged commit b561e8c into main Sep 10, 2026
15 of 16 checks passed
@cryptskii
cryptskii deleted the feat/market-settle-admitted-advance branch September 10, 2026 04:13
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.

2 participants