docs(sofi): three operator docs still say the trade settles, and it does not - #822
Merged
Merged
Conversation
…oes not The two-device playbook tells an operator to execute unlockRouted and reports "Trade settled. Reserves refreshed." The LP walkthrough says the unlock proceeds. The cross-device test doc lists "dlv.unlockRouted works for a non-owner trader" as a proven capability. None of that is true on main. The trader's routed settlement is deliberately fail-closed and refuses with "market settlement is deployment-blocked until 5c-2 Step 2 ... was NOT bound and nothing moved". Anyone following the playbook today hits that refusal at the settle step and has no way to tell a deployment block from a broken build or their own misconfiguration. Each doc gets a status banner rather than a rewrite, the same treatment the 5c-2 plan got: the bodies record what was validated when they were written, and rewriting them would destroy that record. Every step before the settle is still correct, so the runbook remains usable up to the trade. The banners state precisely what is refused and what is not. Vault creation and funding, routing advertisement, discovery, quoting and the OWNER close path are all live and unaffected; only the market settle refuses, and it refuses after every eligibility gate passes with nothing stored, fenced, bound, signed or advanced. They also say no setting lifts it, because the failure otherwise reads as configuration. Markdown only. Neither make lint (cargo fmt, clippy, frontend eslint) nor ci/production_safety_checks.sh reads markdown, so neither gate's result can change; CI runs both regardless.
cryptskii
deleted the
docs/sofi-runbooks-market-settle-is-fail-closed
branch
September 9, 2026 20:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
Three operator-facing documents describe market settlement as working:
sofi-two-device-playbook.mdtells an operator to execute the routed unlock, and says the status then reads "Trade settled. Reserves refreshed."sofi-lp-walkthrough.mdsays "the unlock proceeds".cross-device-sofi-test.mdlists "dlv.unlockRoutedworks for a non-owner trader" as a proven capability, adding "The unlock itself proceeds for any caller."None of that is true on
main. The trader's routed settlement is deliberately fail-closed:Anyone following the playbook hits that refusal at the settle step, and nothing in these documents lets them tell a deliberate deployment block from a broken build or their own misconfiguration.
The treatment
A status banner per document, not a rewrite. Same discipline the 5c-2 plan got: the bodies record what was validated when they were written, and rewriting them would destroy that record. Every step before the settle is still correct, so the runbook stays usable right up to the trade.
Each banner states precisely:
0x0031evidence, and today the trader binds before it advances, so no signed successor exists to name. Nothing may be fabricated in its place.Verification
Markdown only. Neither
make lint(cargo fmt, clippy, frontend eslint) norci/production_safety_checks.shreads markdown, so neither gate's result can change; CI runs both regardless. The refusal text and the close path's absence of one were both read fromorigin/main, not from the working tree.