fix(pair): F6-gate UpdateLimitOrderPrice and CleanLimitBook (#1234) #1288

Merged
PlasticDigits merged 4 commits from fix/1234-f6-reprice-gate into main 2026-09-21 05:21:02 +00:00

Summary

  • Closes a freeze bypass on pair F6: UpdateLimitOrderPrice now calls gate_asset_code_ids after pause + blacklist, before DLL relink.
  • AC4 written choice: freeze means no DLL writes. CleanLimitBook is gated the same way. Keepers resume after unfreeze (same as L6 unpause). Claims stay gated (exit-path keep unchanged).
  • Pin tests cover FoT migrate, whitelist freeze, honest reprice, Refresh-then-reprice, and reject-then-state (order still linked at old price / remaining).
  • Docs + agent playbooks name UpdateLimitOrderPrice on the F6 write-path list. Ops no longer call reprice ungated.
  • make verify-issue-1234 (test + retest). make verify-issue-582 stays green.

Fixes #1234

Acceptance criteria

  • AC1. After F6 drift or whitelist freeze, UpdateLimitOrderPrice aborts with existing asset-code-id errors. Resting order not unlinked/repriced. remaining unchanged (DLL prev/next unchanged).
  • AC2. Honest pinned pair: owner reprice still succeeds (no CW20 / remaining change).
  • AC3. Cancel / swap stay fail-closed on freeze. Exit-path keep not loosened.
  • AC4. CleanLimitBook also calls gate_asset_code_ids (documented: no DLL writes during freeze).
  • AC5. Playbook F6 item 2 and security-model path matrix name UpdateLimitOrderPrice.
  • AC6. Pin tests + make verify-issue-582 + make verify-issue-1234 pass (including retest).

Test plan

  • make verify-issue-1234
  • make verify-issue-582
  • Confirm columbus-5 listed pairs still need a pair wasm migrate onto this build before the gate is live (in-tree cw2 stays 1.17.0; store/migrate is a follow-up ops step, not this MR).
  • dApp: /limits Edit already disabled when code_id_frozen; failed execute still humanizes via toastErrorMessage (no new UI path).

Out of scope

  • Pair cw2 bump / columbus-5 migrate of the listed fleet.
  • Opening cancel/claim/withdraw under freeze (F6 item 7 keep).
  • Reopening #582 / #584 / #585 / #247 / #1227.
## Summary - Closes a freeze bypass on pair **F6**: `UpdateLimitOrderPrice` now calls `gate_asset_code_ids` after pause + blacklist, before DLL relink. - **AC4 written choice:** freeze means **no DLL writes**. `CleanLimitBook` is gated the same way. Keepers resume after unfreeze (same as **L6** unpause). Claims stay gated (exit-path **keep** unchanged). - Pin tests cover FoT migrate, whitelist freeze, honest reprice, Refresh-then-reprice, and reject-then-state (order still linked at old price / remaining). - Docs + agent playbooks name `UpdateLimitOrderPrice` on the F6 write-path list. Ops no longer call reprice ungated. - `make verify-issue-1234` (test + retest). `make verify-issue-582` stays green. Fixes https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/1234 ## Acceptance criteria - [x] **AC1.** After F6 drift or whitelist freeze, `UpdateLimitOrderPrice` aborts with existing asset-code-id errors. Resting order not unlinked/repriced. `remaining` unchanged (DLL prev/next unchanged). - [x] **AC2.** Honest pinned pair: owner reprice still succeeds (no CW20 / remaining change). - [x] **AC3.** Cancel / swap stay fail-closed on freeze. Exit-path keep not loosened. - [x] **AC4.** `CleanLimitBook` also calls `gate_asset_code_ids` (documented: no DLL writes during freeze). - [x] **AC5.** Playbook F6 item 2 and security-model path matrix name `UpdateLimitOrderPrice`. - [x] **AC6.** Pin tests + `make verify-issue-582` + `make verify-issue-1234` pass (including retest). ## Test plan - [ ] `make verify-issue-1234` - [ ] `make verify-issue-582` - [ ] Confirm columbus-5 listed pairs still need a **pair wasm migrate** onto this build before the gate is live (in-tree cw2 stays **1.17.0**; store/migrate is a follow-up ops step, not this MR). - [ ] dApp: `/limits` Edit already disabled when `code_id_frozen`; failed execute still humanizes via `toastErrorMessage` (no new UI path). ## Out of scope - Pair cw2 bump / columbus-5 migrate of the listed fleet. - Opening cancel/claim/withdraw under freeze (F6 item 7 keep). - Reopening #582 / #584 / #585 / #247 / #1227.
fix(pair): F6-gate UpdateLimitOrderPrice and CleanLimitBook
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
f4093f3f75
Maker reprice and keeper book-clean skipped gate_asset_code_ids, so pin
drift or whitelist freeze still allowed DLL writes. Call the existing
helper after pause (and blacklist on reprice). Freeze means no DLL writes;
keepers resume after unfreeze. Pin tests and make verify-issue-1234 cover
fail-closed plus honest reprice.
Author
Owner

drain skip: no occupying job for rebase/fix-pr/CI-wait; remaining continue

drain skip: no occupying job for rebase/fix-pr/CI-wait; remaining continue
Author
Owner

cl8y-agent-control: queued implement job 2e45387f-6cd1-43c0-86df-b0c82f553549 (not executed; no Hetzner VM).

cl8y-agent-control: queued `implement` job `2e45387f-6cd1-43c0-86df-b0c82f553549` (not executed; no Hetzner VM).
Author
Owner

Implement validation (job 2e45387f-6cd1-43c0-86df-b0c82f553549)

Reused open PR #1288 on branch fix/1234-f6-reprice-gate (no sibling issue/1288 head).

Acceptance criteria

AC Status
AC1 reprice fail-closed on drift/whitelist; DLL unchanged Met (asset_code_id_pin_tests)
AC2 honest pinned reprice Met
AC3 cancel/swap stay gated; exit-path keep Met (unchanged arms)
AC4 CleanLimitBook gated; no DLL writes during freeze Met + documented
AC5 F6 item 2 + security path matrix Met
AC6 pin suite + verify harness Met locally

Tests run

  • make verify-issue-1234 / make verify-issue-1288: PASS (5/5 steps, retest included)
  • make verify-issue-582: pin integration PASS; nested verify-issue-584 ops mocks FAIL on this VM (jq missing + DRY_RUN whitelist stub) — CI gap on worker, not pair wasm

Gaps / follow-up

  • columbus-5 pair wasm migrate still required before gate is live on mainnet (out of scope)
  • dApp: /limits Edit remains disabled when code_id_frozen; execute errors humanized via existing toastErrorMessage hook comment (#1234)

Latest commit: verify-issue-1288 Makefile alias → verify-issue-1234.

## Implement validation (job `2e45387f-6cd1-43c0-86df-b0c82f553549`) Reused open PR **#1288** on branch `fix/1234-f6-reprice-gate` (no sibling `issue/1288` head). ### Acceptance criteria | AC | Status | |----|--------| | AC1 reprice fail-closed on drift/whitelist; DLL unchanged | Met (`asset_code_id_pin_tests`) | | AC2 honest pinned reprice | Met | | AC3 cancel/swap stay gated; exit-path keep | Met (unchanged arms) | | AC4 `CleanLimitBook` gated; no DLL writes during freeze | Met + documented | | AC5 F6 item 2 + security path matrix | Met | | AC6 pin suite + verify harness | Met locally | ### Tests run - `make verify-issue-1234` / `make verify-issue-1288`: **PASS** (5/5 steps, retest included) - `make verify-issue-582`: pin integration **PASS**; nested `verify-issue-584` ops mocks **FAIL** on this VM (`jq` missing + DRY_RUN whitelist stub) — **CI gap on worker**, not pair wasm ### Gaps / follow-up - columbus-5 pair wasm migrate still required before gate is live on mainnet (out of scope) - dApp: `/limits` Edit remains disabled when `code_id_frozen`; execute errors humanized via existing `toastErrorMessage` hook comment (#1234) Latest commit: `verify-issue-1288` Makefile alias → `verify-issue-1234`.
chore(qa): add make verify-issue-1288 alias for bundle PR
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
95d893f66e
Bundle PR #1288 implements Forgejo #1234; alias delegates to verify-issue-1234.
PlasticDigits 2026-09-21 04:55:53 +00:00
PlasticDigits deleted branch fix/1234-f6-reprice-gate 2026-09-21 05:21:02 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic!1288
No description provided.