dexbot 1.5.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +4 -3
  3. package/analysis/README.md +1 -2
  4. package/analysis/ama_fitting/fetch_lp_candles.ts +1 -9
  5. package/analysis/ama_fitting/package.json +1 -1
  6. package/analysis/analyze_derivatives.ts +1 -1
  7. package/analysis/bot_usage/discover_bot_accounts.ts +12 -6
  8. package/analysis/resolve_source.ts +11 -1
  9. package/analysis/results/ama_sweep_results_lp_pool_133_1h.json +2455 -0
  10. package/analysis/results/bot_fitting_results_lp_pool_133_1h.json +218 -0
  11. package/analysis/tradingview/README.md +32 -10
  12. package/analysis/tradingview/analyze_tradingview.ts +118 -3
  13. package/analysis/tradingview/h-bts_tradingview.html +1570 -0
  14. package/analysis/tradingview/t-bts_tradingview.html +1570 -0
  15. package/analysis/tradingview/tradingview_uplot_chart_generator.ts +1392 -125
  16. package/analysis/trend_detection/package.json +1 -1
  17. package/claw/docs/DEXBOT2_TUNING_CHEAT_SHEET.md +1 -1
  18. package/claw/modules/dexbot_profiles.ts +22 -2
  19. package/claw/package.json +1 -1
  20. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  21. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  22. package/claw/skills/launcher-ops/references/launcher-workflow.md +1 -1
  23. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  24. package/claw/tests/test_dexbot_profiles.ts +65 -0
  25. package/dist/analysis/ama_fitting/fetch_lp_candles.js +1 -9
  26. package/dist/analysis/ama_fitting/fetch_lp_candles.js.map +1 -1
  27. package/dist/analysis/analyze_derivatives.js +1 -1
  28. package/dist/analysis/bot_usage/discover_bot_accounts.js +11 -6
  29. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -1
  30. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +2 -0
  31. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -1
  32. package/dist/analysis/resolve_source.d.ts +1 -0
  33. package/dist/analysis/resolve_source.d.ts.map +1 -1
  34. package/dist/analysis/resolve_source.js +8 -1
  35. package/dist/analysis/resolve_source.js.map +1 -1
  36. package/dist/analysis/tradingview/analyze_tradingview.d.ts +8 -0
  37. package/dist/analysis/tradingview/analyze_tradingview.d.ts.map +1 -1
  38. package/dist/analysis/tradingview/analyze_tradingview.js +137 -3
  39. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -1
  40. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts +5 -1
  41. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts.map +1 -1
  42. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +1387 -125
  43. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js.map +1 -1
  44. package/dist/bot.js +1 -1
  45. package/dist/bot.js.map +1 -1
  46. package/dist/dexbot.js +3 -3
  47. package/dist/dexbot.js.map +1 -1
  48. package/dist/market_adapter/ama_signal_runner.js +2 -2
  49. package/dist/market_adapter/candle_utils.d.ts +6 -0
  50. package/dist/market_adapter/candle_utils.d.ts.map +1 -1
  51. package/dist/market_adapter/candle_utils.js +6 -0
  52. package/dist/market_adapter/candle_utils.js.map +1 -1
  53. package/dist/market_adapter/core/asymmetric_bounds.d.ts +33 -1
  54. package/dist/market_adapter/core/asymmetric_bounds.d.ts.map +1 -1
  55. package/dist/market_adapter/core/asymmetric_bounds.js +38 -1
  56. package/dist/market_adapter/core/asymmetric_bounds.js.map +1 -1
  57. package/dist/market_adapter/core/kibana_candles.d.ts +17 -1
  58. package/dist/market_adapter/core/kibana_candles.d.ts.map +1 -1
  59. package/dist/market_adapter/core/kibana_candles.js +101 -19
  60. package/dist/market_adapter/core/kibana_candles.js.map +1 -1
  61. package/dist/market_adapter/core/kibana_client.d.ts +2 -0
  62. package/dist/market_adapter/core/kibana_client.d.ts.map +1 -1
  63. package/dist/market_adapter/core/kibana_client.js +31 -4
  64. package/dist/market_adapter/core/kibana_client.js.map +1 -1
  65. package/dist/market_adapter/core/market_adapter_service.d.ts.map +1 -1
  66. package/dist/market_adapter/core/market_adapter_service.js +0 -6
  67. package/dist/market_adapter/core/market_adapter_service.js.map +1 -1
  68. package/dist/market_adapter/inputs/fetch_book_data.d.ts +14 -0
  69. package/dist/market_adapter/inputs/fetch_book_data.d.ts.map +1 -0
  70. package/dist/market_adapter/inputs/fetch_book_data.js +138 -0
  71. package/dist/market_adapter/inputs/fetch_book_data.js.map +1 -0
  72. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +1 -1
  73. package/dist/market_adapter/inputs/fetch_lp_data.d.ts +16 -2
  74. package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -1
  75. package/dist/market_adapter/inputs/fetch_lp_data.js +109 -281
  76. package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -1
  77. package/dist/market_adapter/inputs/kibana_feed_source.d.ts +87 -0
  78. package/dist/market_adapter/inputs/kibana_feed_source.d.ts.map +1 -0
  79. package/dist/market_adapter/inputs/kibana_feed_source.js +570 -0
  80. package/dist/market_adapter/inputs/kibana_feed_source.js.map +1 -0
  81. package/dist/market_adapter/inputs/kibana_source.d.ts.map +1 -1
  82. package/dist/market_adapter/inputs/kibana_source.js +10 -5
  83. package/dist/market_adapter/inputs/kibana_source.js.map +1 -1
  84. package/dist/market_adapter/inputs/window_cache.d.ts +166 -0
  85. package/dist/market_adapter/inputs/window_cache.d.ts.map +1 -0
  86. package/dist/market_adapter/inputs/window_cache.js +500 -0
  87. package/dist/market_adapter/inputs/window_cache.js.map +1 -0
  88. package/dist/market_adapter/interval_utils.d.ts +8 -1
  89. package/dist/market_adapter/interval_utils.d.ts.map +1 -1
  90. package/dist/market_adapter/interval_utils.js +14 -1
  91. package/dist/market_adapter/interval_utils.js.map +1 -1
  92. package/dist/modules/account_bots.d.ts +1 -0
  93. package/dist/modules/account_bots.d.ts.map +1 -1
  94. package/dist/modules/account_bots.js +21 -5
  95. package/dist/modules/account_bots.js.map +1 -1
  96. package/dist/modules/account_orders.d.ts +25 -4
  97. package/dist/modules/account_orders.d.ts.map +1 -1
  98. package/dist/modules/account_orders.js +67 -4
  99. package/dist/modules/account_orders.js.map +1 -1
  100. package/dist/modules/bitshares-native/chain_client.d.ts +2 -0
  101. package/dist/modules/bitshares-native/chain_client.d.ts.map +1 -1
  102. package/dist/modules/bitshares-native/chain_client.js +3 -1
  103. package/dist/modules/bitshares-native/chain_client.js.map +1 -1
  104. package/dist/modules/bitshares-native/subscriptions.d.ts.map +1 -1
  105. package/dist/modules/bitshares-native/subscriptions.js +13 -3
  106. package/dist/modules/bitshares-native/subscriptions.js.map +1 -1
  107. package/dist/modules/bitshares-native/transport.d.ts +2 -0
  108. package/dist/modules/bitshares-native/transport.d.ts.map +1 -1
  109. package/dist/modules/bitshares-native/transport.js +122 -28
  110. package/dist/modules/bitshares-native/transport.js.map +1 -1
  111. package/dist/modules/bitshares_client.d.ts.map +1 -1
  112. package/dist/modules/bitshares_client.js +59 -8
  113. package/dist/modules/bitshares_client.js.map +1 -1
  114. package/dist/modules/bot_settings.d.ts.map +1 -1
  115. package/dist/modules/bot_settings.js +11 -0
  116. package/dist/modules/bot_settings.js.map +1 -1
  117. package/dist/modules/constants.d.ts +13 -0
  118. package/dist/modules/constants.d.ts.map +1 -1
  119. package/dist/modules/constants.js +68 -4
  120. package/dist/modules/constants.js.map +1 -1
  121. package/dist/modules/dexbot_class.d.ts +10 -18
  122. package/dist/modules/dexbot_class.d.ts.map +1 -1
  123. package/dist/modules/dexbot_class.js +57 -2
  124. package/dist/modules/dexbot_class.js.map +1 -1
  125. package/dist/modules/dexbot_cow_runtime.d.ts +62 -37
  126. package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
  127. package/dist/modules/dexbot_cow_runtime.js +797 -569
  128. package/dist/modules/dexbot_cow_runtime.js.map +1 -1
  129. package/dist/modules/dexbot_fill_runtime.d.ts +41 -1
  130. package/dist/modules/dexbot_fill_runtime.d.ts.map +1 -1
  131. package/dist/modules/dexbot_fill_runtime.js +135 -5
  132. package/dist/modules/dexbot_fill_runtime.js.map +1 -1
  133. package/dist/modules/dexbot_maintenance_runtime.d.ts +79 -12
  134. package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
  135. package/dist/modules/dexbot_maintenance_runtime.js +585 -97
  136. package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
  137. package/dist/modules/dexbot_startup_runtime.d.ts.map +1 -1
  138. package/dist/modules/dexbot_startup_runtime.js +13 -0
  139. package/dist/modules/dexbot_startup_runtime.js.map +1 -1
  140. package/dist/modules/dexbot_state_recovery.d.ts +15 -1
  141. package/dist/modules/dexbot_state_recovery.d.ts.map +1 -1
  142. package/dist/modules/dexbot_state_recovery.js +36 -7
  143. package/dist/modules/dexbot_state_recovery.js.map +1 -1
  144. package/dist/modules/fund_registry.d.ts +1 -1
  145. package/dist/modules/fund_registry.js +1 -1
  146. package/dist/modules/node_connect_policy.d.ts +52 -0
  147. package/dist/modules/node_connect_policy.d.ts.map +1 -0
  148. package/dist/modules/node_connect_policy.js +35 -0
  149. package/dist/modules/node_connect_policy.js.map +1 -0
  150. package/dist/modules/node_manager.d.ts +32 -0
  151. package/dist/modules/node_manager.d.ts.map +1 -1
  152. package/dist/modules/node_manager.js +76 -9
  153. package/dist/modules/node_manager.js.map +1 -1
  154. package/dist/modules/order/accounting.d.ts +30 -0
  155. package/dist/modules/order/accounting.d.ts.map +1 -1
  156. package/dist/modules/order/accounting.js +176 -3
  157. package/dist/modules/order/accounting.js.map +1 -1
  158. package/dist/modules/order/export.d.ts.map +1 -1
  159. package/dist/modules/order/export.js +1 -0
  160. package/dist/modules/order/export.js.map +1 -1
  161. package/dist/modules/order/grid.d.ts.map +1 -1
  162. package/dist/modules/order/grid.js +170 -51
  163. package/dist/modules/order/grid.js.map +1 -1
  164. package/dist/modules/order/grid_reconcile.d.ts.map +1 -1
  165. package/dist/modules/order/grid_reconcile.js +5 -3
  166. package/dist/modules/order/grid_reconcile.js.map +1 -1
  167. package/dist/modules/order/grid_reconcile_internal.d.ts.map +1 -1
  168. package/dist/modules/order/grid_reconcile_internal.js +182 -6
  169. package/dist/modules/order/grid_reconcile_internal.js.map +1 -1
  170. package/dist/modules/order/manager.d.ts +66 -3
  171. package/dist/modules/order/manager.d.ts.map +1 -1
  172. package/dist/modules/order/manager.js +238 -12
  173. package/dist/modules/order/manager.js.map +1 -1
  174. package/dist/modules/order/strategy.d.ts +3 -0
  175. package/dist/modules/order/strategy.d.ts.map +1 -1
  176. package/dist/modules/order/strategy.js +79 -7
  177. package/dist/modules/order/strategy.js.map +1 -1
  178. package/dist/modules/order/sync_engine.d.ts.map +1 -1
  179. package/dist/modules/order/sync_engine.js +90 -1
  180. package/dist/modules/order/sync_engine.js.map +1 -1
  181. package/dist/modules/order/utils/math.d.ts +20 -12
  182. package/dist/modules/order/utils/math.d.ts.map +1 -1
  183. package/dist/modules/order/utils/math.js +33 -12
  184. package/dist/modules/order/utils/math.js.map +1 -1
  185. package/dist/modules/order/utils/order.d.ts +308 -28
  186. package/dist/modules/order/utils/order.d.ts.map +1 -1
  187. package/dist/modules/order/utils/order.js +862 -38
  188. package/dist/modules/order/utils/order.js.map +1 -1
  189. package/dist/modules/order/utils/system.d.ts +37 -30
  190. package/dist/modules/order/utils/system.d.ts.map +1 -1
  191. package/dist/modules/order/utils/system.js +130 -101
  192. package/dist/modules/order/utils/system.js.map +1 -1
  193. package/dist/modules/order/utils/validate.d.ts +3 -2
  194. package/dist/modules/order/utils/validate.d.ts.map +1 -1
  195. package/dist/modules/order/utils/validate.js +11 -3
  196. package/dist/modules/order/utils/validate.js.map +1 -1
  197. package/dist/modules/paths.d.ts +2 -0
  198. package/dist/modules/paths.d.ts.map +1 -1
  199. package/dist/modules/paths.js +1 -0
  200. package/dist/modules/paths.js.map +1 -1
  201. package/dist/modules/runtime_settings.d.ts +13 -0
  202. package/dist/modules/runtime_settings.d.ts.map +1 -1
  203. package/dist/modules/runtime_settings.js +20 -0
  204. package/dist/modules/runtime_settings.js.map +1 -1
  205. package/dist/modules/utils/errors.d.ts +16 -0
  206. package/dist/modules/utils/errors.d.ts.map +1 -1
  207. package/dist/modules/utils/errors.js +31 -0
  208. package/dist/modules/utils/errors.js.map +1 -1
  209. package/dist/pm2.js +7 -7
  210. package/dist/scripts/analyze-credit.d.ts.map +1 -1
  211. package/dist/scripts/analyze-credit.js +13 -3
  212. package/dist/scripts/analyze-credit.js.map +1 -1
  213. package/dist/scripts/analyze-orders.js +2 -2
  214. package/dist/scripts/analyze-orders.js.map +1 -1
  215. package/dist/scripts/diagnose-kibana-candles.d.ts.map +1 -1
  216. package/dist/scripts/diagnose-kibana-candles.js +0 -1
  217. package/dist/scripts/diagnose-kibana-candles.js.map +1 -1
  218. package/dist/scripts/test-credit-renewal.js +1 -1
  219. package/dist/scripts/test-credit-renewal.js.map +1 -1
  220. package/dist/scripts/tv.d.ts +24 -2
  221. package/dist/scripts/tv.d.ts.map +1 -1
  222. package/dist/scripts/tv.js +190 -65
  223. package/dist/scripts/tv.js.map +1 -1
  224. package/docs/BITSHARES_ONBOARDING.md +9 -2
  225. package/docs/COW_INVARIANTS.md +18 -1
  226. package/docs/DEXBOT_COMPARISON.md +3 -3
  227. package/docs/EVOLUTION.md +9 -7
  228. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +21 -9
  229. package/docs/GRID_RECALCULATION.md +5 -6
  230. package/docs/GRID_RECONCILE.md +12 -2
  231. package/docs/MPA_CREDIT_USAGE.md +2 -2
  232. package/docs/README.md +5 -6
  233. package/docs/architecture.md +0 -58
  234. package/docs/developer_guide.md +2 -1
  235. package/docs/docker.md +1 -1
  236. package/market_adapter/README.md +4 -0
  237. package/modules/README.md +1 -1
  238. package/package.json +1 -1
  239. package/scripts/README.md +5 -3
  240. package/tests/README.md +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../modules/order/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../modules/order/manager.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,9 @@ import SyncEngine from './sync_engine.js';
27
27
  import { calculateCurrentSpread, checkSpreadCondition, checkGridHealth } from './grid.js';
28
28
  import * as Format from './format.js';
29
29
  import { ORDER_TYPES, ORDER_STATES, REBALANCE_STATES, DEFAULT_CONFIG, TIMING, LOG_LEVEL, PIPELINE_TIMING, COW_PERFORMANCE, COW_ACTIONS, GRID_LIMITS } from '../constants.js';
30
- import { getMinOrderSize, computeChainFundTotals, hasValidAccountTotals, resolveConfigValueWithRegistry, isExplicitZeroAllocation, floatToBlockchainInt, validateBoundaryCommit, resolveGapSlots } from './utils/math.js';
30
+ import { getMinOrderSize, computeChainFundTotals, hasValidAccountTotals, resolveConfigValueWithRegistry, isExplicitZeroAllocation, floatToBlockchainInt, validateBoundaryCommit, resolveGapSlots, resolveGapBand, isSlotInRail } from './utils/math.js';
31
31
  import { validateOrder, validateGridForPersistence, validateWorkingGridFunds, checkFundDrift, reconcileGrid, optimizeRebalanceActions, projectTargetToWorkingGrid, buildStateUpdates, buildAbortedResult, buildSuccessResult, evaluateCommit } from './utils/validate.js';
32
- import { resolveSpreadOrderSide, parseSlotIndex, parseChainOrder, geometryTypeForSlotIndex, isOrderOnChain } from './utils/order.js';
32
+ import { resolveSpreadOrderSide, parseSlotIndex, parseChainOrder, geometryTypeForSlotIndex, isOrderOnChain, resolveReserveCount, resolveLiveReserveEdgeAnchorPrice, compareReserveEdge, collectRefillSlotIds } from './utils/order.js';
33
33
  import { getErrorMessage } from '../utils/errors.js';
34
34
  const { toFiniteNumber } = Format;
35
35
  // ===============================================================================
@@ -133,7 +133,7 @@ class COWRebalanceEngine {
133
133
  this.assets = deps.assets;
134
134
  this.config = deps.config;
135
135
  }
136
- async execute({ masterGrid, gridVersion, boundaryIdx, funds, fills = [], excludeIds = new Set(), gapSlots = null, evacStreaks = null }) {
136
+ async execute({ masterGrid, gridVersion, boundaryIdx, funds, fills = [], excludeIds = new Set(), gapSlots = null, evacStreaks = null, reserveEdgeAnchors = null }) {
137
137
  const startTime = Date.now();
138
138
  const workingGrid = new WorkingGrid(masterGrid, { baseVersion: gridVersion });
139
139
  const strategyParams = {
@@ -146,6 +146,27 @@ class COWRebalanceEngine {
146
146
  currentBoundaryIdx: boundaryIdx
147
147
  };
148
148
  const { targetGrid, boundaryIdx: targetBoundary } = this.strategy.calculateTargetGrid(strategyParams);
149
+ // P4 / unanchored plan: the strategy returns a null boundary paired
150
+ // with an EMPTY target grid only when no numeric center exists to
151
+ // recover from (e.g. GRID-LOAD rejected the persisted boundary AND
152
+ // startPrice is an unresolved mode string). Planning rotations here
153
+ // would fabricate rail-edge geometry — dust-cancel fills included,
154
+ // even though they deliberately carry isDelayedRotationTrigger when
155
+ // the boundary is known. Route to a structural resync instead of
156
+ // broadcasting. (A null boundary with a non-empty target is a
157
+ // hand-built/boundary-less plan — e.g. unit mocks — and proceeds.)
158
+ if ((targetBoundary === null || targetBoundary === undefined) && targetGrid.size === 0) {
159
+ // A genuinely empty grid (no master orders, no fills) has nothing
160
+ // to heal — plain abort. Anything else is stranded without an
161
+ // anchor and needs a rebuild.
162
+ const needsHeal = (masterGrid?.size ?? 0) > 0 || (fills?.length ?? 0) > 0;
163
+ this.logger?.log('[COW] Plan skipped: boundary unrecoverable (no numeric center)' + (needsHeal ? '; requesting structural resync' : ''), 'warn');
164
+ return {
165
+ ...buildAbortedResult('boundary-unrecoverable'),
166
+ evacReady: [],
167
+ ...(needsHeal ? { needsResync: true, resyncReason: 'boundary-unrecoverable' } : {}),
168
+ };
169
+ }
149
170
  let dustThresholdPercent = this.config?.gridLimits?.PARTIAL_DUST_THRESHOLD_PERCENTAGE;
150
171
  const reconcileResult = reconcileGrid(masterGrid, targetGrid, targetBoundary, {
151
172
  logger: (msg, level) => this.logger?.log(msg, level),
@@ -194,6 +215,33 @@ class COWRebalanceEngine {
194
215
  optimizedActions.length = 0;
195
216
  optimizedActions.push(...guarded);
196
217
  }
218
+ // Rail-edge truncation telemetry: when the planned window runs off
219
+ // the rail (sellStart past the last slot), one side can never place
220
+ // — the Sep-10 signature (boundary 209 on a 216-slot rail left 2
221
+ // sell slots, and the ordinal pairing then teleported the buy rail
222
+ // 113 slots). Warn only: the cross-guard, fund validation and
223
+ // boundary-hold still judge the plan; no geometry is refused here.
224
+ {
225
+ const railSize = targetGrid?.size ?? 0;
226
+ const gap = Number(gapSlots) || 0;
227
+ const sellStart = Number(targetBoundary) + gap + 1;
228
+ if (Number.isFinite(sellStart) && railSize > 0 && sellStart >= railSize) {
229
+ this.logger?.log(`[COW] Rail-edge plan: boundary=${targetBoundary} gap=${gap} rail=${railSize} (sellStart=${sellStart}); window truncated, guards still apply`, 'warn');
230
+ }
231
+ }
232
+ // Refill-slot wire (boundary-hold): surviving hole-CREATEs justify this
233
+ // plan's boundary shift (folded CANCEL+CREATE pairs already became
234
+ // stamped UPDATEs above; stale-dropped placements are excluded — a
235
+ // deferred placement justifies nothing). The executor holds the
236
+ // committed boundary when a listed refill is guard-skipped.
237
+ // Reserve-ladder CREATEs are excluded (collectRefillSlotIds): reserves
238
+ // are static edge insurance and their fills never crawl, so a skipped
239
+ // reserve must not pin geometry either.
240
+ const refillSlotIds = collectRefillSlotIds(optimizedActions, {
241
+ config: this.config,
242
+ slots: masterGrid,
243
+ edgeAnchors: reserveEdgeAnchors
244
+ });
197
245
  projectTargetToWorkingGrid(workingGrid, targetGrid, { actions: optimizedActions });
198
246
  const precisions = {
199
247
  buyPrecision: this.assets?.assetB?.precision,
@@ -240,7 +288,8 @@ class COWRebalanceEngine {
240
288
  stateUpdates,
241
289
  workingGrid,
242
290
  workingBoundary: targetBoundary,
243
- planningDuration: duration
291
+ planningDuration: duration,
292
+ refillSlotIds
244
293
  }),
245
294
  evacReady
246
295
  };
@@ -371,12 +420,18 @@ class OrderManager {
371
420
  _gridDirtyAt;
372
421
  _lastStaleTotalsWarnAt;
373
422
  _orphanFillsCreditedAt;
423
+ _fundDriftLedger;
374
424
  _pendingRecovery;
425
+ _pendingFillCrawls;
375
426
  _recentFillKeysSnapshot;
376
427
  _lastFilledBuyPrice;
377
428
  _lastFilledSellPrice;
378
429
  _lastFilledPrice;
379
430
  _lastFilledType;
431
+ _lastFilledAt;
432
+ _deferredRebalanceAt;
433
+ _lastHeldPlanSignature;
434
+ _lastBoundaryHoldResyncAt;
380
435
  _gapEvacStreaks;
381
436
  _gapEvacCancelQueued;
382
437
  // anchor fields removed
@@ -484,13 +539,19 @@ class OrderManager {
484
539
  this._gapSlots = 0;
485
540
  this._gridDirtyAt = null;
486
541
  this._orphanFillsCreditedAt = null;
542
+ this._fundDriftLedger = null;
487
543
  this._pendingRecovery = null;
544
+ this._pendingFillCrawls = [];
488
545
  this._recentFillKeysSnapshot = null;
489
546
  this._lastStaleTotalsWarnAt = {};
490
547
  this._lastFilledBuyPrice = null;
491
548
  this._lastFilledSellPrice = null;
492
549
  this._lastFilledPrice = null;
493
550
  this._lastFilledType = null;
551
+ this._lastFilledAt = 0;
552
+ this._deferredRebalanceAt = 0;
553
+ this._lastHeldPlanSignature = null;
554
+ this._lastBoundaryHoldResyncAt = 0;
494
555
  this._gapEvacStreaks = new Map();
495
556
  this._gapEvacCancelQueued = new Set();
496
557
  this._metrics = {
@@ -636,6 +697,11 @@ class OrderManager {
636
697
  // The caller is released from the refcount contract.
637
698
  this._broadcastingFlag = 0;
638
699
  this._broadcastingStartedAt = 0;
700
+ // A leaked flag never reaches stopBroadcasting, so wake the same
701
+ // region-end listeners it would have: without this, fills
702
+ // enqueued during the hung region are stranded until the next
703
+ // fill event even though the flag is now clear.
704
+ this._fireBroadcastRegionEnd();
639
705
  }
640
706
  }
641
707
  }
@@ -708,8 +774,26 @@ class OrderManager {
708
774
  // this flag is held and its defer branch returns without
709
775
  // rescheduling, so fills enqueued during a long region would
710
776
  // starve indefinitely. Fire once when the last region ends.
777
+ this._fireBroadcastRegionEnd();
778
+ }
779
+ }
780
+ /**
781
+ * Notify runtime listeners that the last broadcast/placement region ended.
782
+ * Called from stopBroadcasting (refcount -> 0) and the stale-flag watchdog
783
+ * (a leaked flag hard-reset to 0). The fill consumer's defer branch returns
784
+ * without rescheduling, so this is the only wake-up for fills enqueued
785
+ * during a region; the watchdog path must fire it too or a hung broadcast's
786
+ * queued fills wait for the next fill event.
787
+ * Guarded so a listener error never escapes into a finally/watchdog frame.
788
+ * @returns {void}
789
+ */
790
+ _fireBroadcastRegionEnd() {
791
+ try {
711
792
  this._onBroadcastRegionEnd?.();
712
793
  }
794
+ catch (err) {
795
+ this.logger?.log?.(`[BROADCAST] Region-end hook failed: ${err?.message || err}`, 'warn');
796
+ }
713
797
  }
714
798
  /**
715
799
  * Reset funds structure to zeroed values. Acquires _fundLock so the
@@ -1138,7 +1222,14 @@ class OrderManager {
1138
1222
  if (options === null || typeof options !== 'object' || Array.isArray(options)) {
1139
1223
  throw new TypeError('Commit options must be an object');
1140
1224
  }
1141
- return { skipRecalc: options.skipRecalc === true };
1225
+ return {
1226
+ skipRecalc: options.skipRecalc === true,
1227
+ // Set by the COW refill hold: the boundary passed to this commit is
1228
+ // the COMMITTED value, not the plan's target, so nothing was
1229
+ // derived into it and owed fill crawls must survive (see the
1230
+ // pending-crawl bookkeeping in _commitWorkingGrid).
1231
+ boundaryHeld: options.boundaryHeld === true
1232
+ };
1142
1233
  }
1143
1234
  async _updateOrder(order, context = 'updateOrder', options = {}) {
1144
1235
  const updateOptions = this._normalizeOrderUpdateOptions(options);
@@ -1345,14 +1436,23 @@ class OrderManager {
1345
1436
  * @param {Object} [options]
1346
1437
  * @returns {Promise<any>}
1347
1438
  */
1348
- async processFilledOrders(orders, excl, _options) {
1439
+ async processFilledOrders(orders, excl, options = {}) {
1349
1440
  // Step 1: Handle Fills (Accounting & State Updates)
1350
1441
  await this.strategy.processFillsOnly(orders, excl);
1351
1442
  // Step 2: Trigger Safe Rebalance only for actual fills.
1352
1443
  const triggerFills = orders.filter((f) => !f.isPartial || f.isDelayedRotationTrigger);
1353
1444
  const shouldRebalance = triggerFills.length > 0;
1354
1445
  if (shouldRebalance) {
1355
- const rebalanceResult = await this.performSafeRebalance(orders, excl);
1446
+ // deferIfBroadcasting: fill processing runs under
1447
+ // _fillProcessingLock, and _awaitBroadcastIdle can sleep 30s —
1448
+ // beyond the lock's 20s acquisition timeout. Defer the rebalance
1449
+ // instead of waiting in-lock; processFillsOnly already recorded
1450
+ // the boundary crawls, so a later derivation applies them. The
1451
+ // region-end hook schedules the deferred rebalance.
1452
+ const rebalanceResult = await this.performSafeRebalance(orders, excl, {
1453
+ ...(options || {}),
1454
+ deferIfBroadcasting: true
1455
+ });
1356
1456
  // Carry the fill set + exclusions on the result so the COW batch
1357
1457
  // executor can re-plan once from fresh master if the plan goes
1358
1458
  // stale between planning and broadcast.
@@ -1387,11 +1487,20 @@ class OrderManager {
1387
1487
  const buyPrecision = this.assets?.assetB?.precision;
1388
1488
  const minSellSizeInt = floatToBlockchainInt(minSellSize, sellPrecision);
1389
1489
  const minBuySizeInt = floatToBlockchainInt(minBuySize, buyPrecision);
1490
+ // Rail membership by geometry (shared isSlotInRail), mirroring the
1491
+ // reconcile pickers (_pickVirtualSlotsToActivate / _pickEdgeReserveSlots).
1492
+ // A freshly generated grid's roles never need this, but the gate keeps
1493
+ // the startup placement path and the runtime activation path from
1494
+ // diverging: a slot whose stored type is stale relative to the current
1495
+ // boundary must not be placed on the wrong rail.
1496
+ const resolved = resolveGapBand(this);
1497
+ const inRailFor = (type, o) => isSlotInRail(resolved.boundaryIdx, resolved.gapSlots, type, o);
1390
1498
  // Get closest virtual sells (lowest prices first = closest to market),
1391
1499
  // selecting up to sellCount orders that pass the minimum-size filter.
1392
1500
  // Scan the full sorted rail instead of slicing first so sub-min slots
1393
1501
  // don't consume activation budget (mirrors _pickVirtualSlotsToActivate).
1394
1502
  const sellsClosestFirst = this.getOrdersByTypeAndState(ORDER_TYPES.SELL, ORDER_STATES.VIRTUAL)
1503
+ .filter((o) => inRailFor(ORDER_TYPES.SELL, o))
1395
1504
  .sort((a, b) => a.price - b.price);
1396
1505
  const validSells = [];
1397
1506
  for (const o of sellsClosestFirst) {
@@ -1406,6 +1515,7 @@ class OrderManager {
1406
1515
  // Get closest virtual buys (highest prices first = closest to market),
1407
1516
  // selecting up to buyCount orders that pass the minimum-size filter.
1408
1517
  const buysClosestFirst = this.getOrdersByTypeAndState(ORDER_TYPES.BUY, ORDER_STATES.VIRTUAL)
1518
+ .filter((o) => inRailFor(ORDER_TYPES.BUY, o))
1409
1519
  .sort((a, b) => b.price - a.price);
1410
1520
  const validBuys = [];
1411
1521
  for (const o of buysClosestFirst) {
@@ -1417,7 +1527,37 @@ class OrderManager {
1417
1527
  }
1418
1528
  // Reverse for placement order (lowest first)
1419
1529
  validBuys.sort((a, b) => a.price - b.price);
1420
- return [...validSells, ...validBuys];
1530
+ // Reserve ladder: edge-pinned orders activate alongside the window
1531
+ // without consuming its budget. Buys pin at the floor (lowest first),
1532
+ // sells at the ceiling (highest first). Same min-size gate as the window.
1533
+ const pickEdgeReserves = (orderType, count, windowed, precision, minSizeInt, ascending) => {
1534
+ const picked = [];
1535
+ if (count <= 0)
1536
+ return picked;
1537
+ const windowedIds = new Set(windowed.map((o) => o.id));
1538
+ // Both edges anchor at the live grid's own edge (ladder/rail extreme).
1539
+ const edgeAnchor = resolveLiveReserveEdgeAnchorPrice(this, ascending ? 'buy' : 'sell');
1540
+ const edge = ascending ? 'floor' : 'ceiling';
1541
+ const edgeFirst = this.getOrdersByTypeAndState(orderType, ORDER_STATES.VIRTUAL)
1542
+ .filter((o) => inRailFor(orderType, o))
1543
+ .filter((o) => parseSlotIndex(o.id) !== null)
1544
+ .sort((a, b) => compareReserveEdge(a, b, edge, edgeAnchor));
1545
+ for (const o of edgeFirst) {
1546
+ if (picked.length >= count)
1547
+ break;
1548
+ if (windowedIds.has(o.id))
1549
+ continue;
1550
+ if (floatToBlockchainInt(o.size, precision) >= minSizeInt) {
1551
+ picked.push(o);
1552
+ windowedIds.add(o.id);
1553
+ }
1554
+ }
1555
+ picked.sort((a, b) => ascending ? a.price - b.price : b.price - a.price);
1556
+ return picked;
1557
+ };
1558
+ const reserveBuys = pickEdgeReserves(ORDER_TYPES.BUY, resolveReserveCount(this.config, 'buy'), validBuys, buyPrecision, minBuySizeInt, true);
1559
+ const reserveSells = pickEdgeReserves(ORDER_TYPES.SELL, resolveReserveCount(this.config, 'sell'), validSells, sellPrecision, minSellSizeInt, false);
1560
+ return [...validSells, ...reserveSells, ...validBuys, ...reserveBuys];
1421
1561
  }
1422
1562
  /**
1423
1563
  * Get orders matching the specified type and state.
@@ -1470,6 +1610,34 @@ class OrderManager {
1470
1610
  this.boundaryIdx = newIdx;
1471
1611
  this._logBoundaryDebug('restore', newIdx);
1472
1612
  }
1613
+ /**
1614
+ * Drop owed fill-crawl records (boundary bookkeeping).
1615
+ *
1616
+ * Records are pushed per shift-eligible fill at intake and consumed when a
1617
+ * derivation commits them. They must be dropped only when the crawl they
1618
+ * encode has been applied — an accepted commit that used the PLAN's target
1619
+ * boundary (or an absolute fill anchor that subsumes every owed delta).
1620
+ * A held boundary (refill guard skip), a gate-rejected boundary, and a
1621
+ * null boundary all leave the records owed, so they are not dropped there.
1622
+ *
1623
+ * Also used when the boundary is (re)anchored outside the fill path (grid
1624
+ * reset / recenter / rejected-snapshot rebuild): those records belong to
1625
+ * the previous generation, and applying their relative deltas onto a fresh
1626
+ * anchor would double-count movement the anchor already contains.
1627
+ *
1628
+ * Marks the grid dirty so the cleared array reaches disk even on paths
1629
+ * that do not otherwise persist.
1630
+ *
1631
+ * @param {string} reason - Log/debug label for the drop
1632
+ */
1633
+ _clearPendingFillCrawls(reason = 'unspecified') {
1634
+ if (!Array.isArray(this._pendingFillCrawls) || this._pendingFillCrawls.length === 0)
1635
+ return;
1636
+ const count = this._pendingFillCrawls.length;
1637
+ this._pendingFillCrawls = [];
1638
+ this._markGridDirty();
1639
+ this.logger?.log?.(`[BOUNDARY] Dropped ${count} owed fill crawl(s) (${reason})`, 'debug');
1640
+ }
1473
1641
  /**
1474
1642
  * Observability (fix #4, docs/CONSOLIDATED_ORPHAN_FIX_SUMMARY.md §2): emit the live
1475
1643
  * boundary whenever roles are (re)assigned, so a silent boundary crawl that
@@ -1540,6 +1708,7 @@ class OrderManager {
1540
1708
  this._lastFilledBuyPrice = price;
1541
1709
  else if (f.type === ORDER_TYPES.SELL)
1542
1710
  this._lastFilledSellPrice = price;
1711
+ this._lastFilledAt = Date.now();
1543
1712
  recorded++;
1544
1713
  lastKind = f?.isPartial === true ? 'partial' : (f?.isPartial === false ? 'full' : 'unknown');
1545
1714
  lastPriceSrc = priceSrc;
@@ -1904,11 +2073,44 @@ class OrderManager {
1904
2073
  async performSafeRebalance(fills = [], excludeIds = new Set(), options = {}) {
1905
2074
  this.logger.log("[SAFE-REBALANCE] Starting with COW...", "info");
1906
2075
  if (!options?.skipBroadcastWait) {
1907
- const idle = await this._awaitBroadcastIdle();
1908
- if (idle.shutdown || this._shuttingDown) {
2076
+ // Shutdown guard applies to every path here (including the
2077
+ // deferIfBroadcasting defer path, which never reaches
2078
+ // _awaitBroadcastIdle): a rebalance must not plan/broadcast while
2079
+ // the bot is shutting down. _awaitBroadcastIdle returns
2080
+ // shutdown:true for this, so keep it explicit when skipping it.
2081
+ if (this._shuttingDown) {
1909
2082
  this.logger.log('[SAFE-REBALANCE] Aborting rebalance: shutdown in progress', 'warn');
1910
2083
  return buildAbortedResult('Shutdown in progress — safe rebalance aborted');
1911
2084
  }
2085
+ // Never sleep on the broadcast flag while holding
2086
+ // _fillProcessingLock (the lock's acquisition timeout is 20s; the
2087
+ // wait is 30s). A fill-driven rebalance defers instead, leaving
2088
+ // the crawls recorded by processFillsOnly for a later derivation.
2089
+ if (options?.deferIfBroadcasting && this.isBroadcastingActive()) {
2090
+ this.logger.log('[SAFE-REBALANCE] Deferred: broadcast/placement activity active; rebalance retries after the region ends', 'info');
2091
+ this._deferredRebalanceAt = Date.now();
2092
+ return { ...buildAbortedResult('broadcast-active-deferred'), deferred: true };
2093
+ }
2094
+ // Identical-held-plan suppression: a fill-less replan whose
2095
+ // boundary, guard pivot and fill timestamp are unchanged since the
2096
+ // last hold can only reproduce the same vetoed plan (INV-COW-007).
2097
+ // Defer instead of spending another broadcast region re-deriving
2098
+ // it; a fresh fill changes _lastFilledAt and re-enables planning.
2099
+ const heldSig = this._lastHeldPlanSignature;
2100
+ if (fills.length === 0 && heldSig
2101
+ && Number(this.boundaryIdx) === Number(heldSig.boundaryIdx)
2102
+ && Number(this._lastFilledPrice) === Number(heldSig.pivot)
2103
+ && Number(this._lastFilledAt) === Number(heldSig.fillsAt)) {
2104
+ this.logger.log('[SAFE-REBALANCE] Deferred: identical held plan (no new fills since last hold); a fill-driven plan will re-derive', 'debug');
2105
+ return { ...buildAbortedResult('held-plan-unchanged-deferred'), deferred: true };
2106
+ }
2107
+ if (!options?.deferIfBroadcasting) {
2108
+ const idle = await this._awaitBroadcastIdle();
2109
+ if (idle.shutdown || this._shuttingDown) {
2110
+ this.logger.log('[SAFE-REBALANCE] Aborting rebalance: shutdown in progress', 'warn');
2111
+ return buildAbortedResult('Shutdown in progress — safe rebalance aborted');
2112
+ }
2113
+ }
1912
2114
  }
1913
2115
  return await this._gridLock.acquire(async () => {
1914
2116
  return await this._applySafeRebalanceCOW(fills, excludeIds);
@@ -1924,6 +2126,13 @@ class OrderManager {
1924
2126
  this._gapEvacStreaks = new Map();
1925
2127
  if (!(this._gapEvacCancelQueued instanceof Set))
1926
2128
  this._gapEvacCancelQueued = new Set();
2129
+ // Live reserve edge anchors, resolved once and shared with the engine's
2130
+ // refill wire so a reserve-ladder CREATE can never be classified as a
2131
+ // hole refill (which would let a skipped reserve pin the boundary).
2132
+ const reserveEdgeAnchors = {
2133
+ buy: resolveLiveReserveEdgeAnchorPrice(this, 'buy'),
2134
+ sell: resolveLiveReserveEdgeAnchorPrice(this, 'sell')
2135
+ };
1927
2136
  const result = await cowEngine.execute({
1928
2137
  masterGrid: this.orders,
1929
2138
  gridVersion: this._gridVersion,
@@ -1932,7 +2141,8 @@ class OrderManager {
1932
2141
  fills,
1933
2142
  excludeIds,
1934
2143
  gapSlots: this._gapSlots,
1935
- evacStreaks: this._gapEvacStreaks
2144
+ evacStreaks: this._gapEvacStreaks,
2145
+ reserveEdgeAnchors
1936
2146
  });
1937
2147
  // Phase 3 safety net: act on stuck in-band orders regardless of the
1938
2148
  // plan outcome — a plan that aborted for unrelated reasons must not
@@ -2002,7 +2212,7 @@ class OrderManager {
2002
2212
  }
2003
2213
  };
2004
2214
  try {
2005
- const { skipRecalc: skipRecalcOpt } = this._normalizeCommitOptions(options);
2215
+ const { skipRecalc: skipRecalcOpt, boundaryHeld } = this._normalizeCommitOptions(options);
2006
2216
  skipRecalc = skipRecalcOpt;
2007
2217
  const stats = workingGrid.getMemoryStats();
2008
2218
  try {
@@ -2065,6 +2275,22 @@ class OrderManager {
2065
2275
  }
2066
2276
  this.orders = Object.freeze(finalMap);
2067
2277
  this._setBoundary(commitBoundary);
2278
+ // Pending-crawl bookkeeping: an accepted non-null commit
2279
+ // incorporates (incremental derivation) or subsumes (absolute
2280
+ // recovery anchor) every fill recorded so far, so all pending
2281
+ // crawl entries are consumed here. A gate-rejected commit keeps
2282
+ // the previous boundary — nothing was derived into it — so
2283
+ // pending entries survive for the next derivation. A null
2284
+ // commit likewise consumes nothing, and neither does a HELD
2285
+ // boundary (boundaryHeld): the refill hold deliberately keeps
2286
+ // the committed boundary over the plan's target, so the shift
2287
+ // those records encode was never applied and must stay owed —
2288
+ // clearing here lost the crawl permanently (no fill evidence
2289
+ // left for the next derivation, holes refilled same-side).
2290
+ if (boundaryCheck.ok && commitBoundary !== null && commitBoundary !== undefined
2291
+ && boundaryHeld !== true) {
2292
+ this._clearPendingFillCrawls('boundary commit');
2293
+ }
2068
2294
  this._gridVersion++;
2069
2295
  committed = true;
2070
2296
  // Track orderIds from successful COW commits for recovery sync protection.