@senpi/runtime 3.0.69 → 3.0.70

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.
@@ -1 +1 @@
1
- {"version":3,"file":"floor-store.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAcxD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,CA+B7F"}
1
+ {"version":3,"file":"floor-store.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAcxD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,CAgE7F"}
@@ -25,7 +25,20 @@ export function createDslNotifiedFloorStore(stateManager) {
25
25
  const state = await stateManager.getDslStateByAsset(ev.address, ev.asset);
26
26
  return state?.active ? state.lastNotifiedStopFloor : undefined;
27
27
  },
28
- async stampNotifiedStopFloor(ev, floor, direction) {
28
+ // Announced-state snapshot for the stop-trail debounce (notifications 2.6):
29
+ // the floor plus the cooldown anchor and the breakeven latch, so the cadence
30
+ // survives rebuilds and restarts alongside the baseline itself.
31
+ async getNotifiedStopMeta(ev) {
32
+ const state = await stateManager.getDslStateByAsset(ev.address, ev.asset);
33
+ if (!state?.active)
34
+ return undefined;
35
+ return {
36
+ floor: state.lastNotifiedStopFloor,
37
+ atMs: state.lastNotifiedStopAtMs,
38
+ breakevenAnnounced: state.stopBreakevenAnnounced,
39
+ };
40
+ },
41
+ async stampNotifiedStopFloor(ev, floor, direction, meta) {
29
42
  if (!Number.isFinite(floor))
30
43
  return;
31
44
  // Resolve the row first (events carry no dex), then RMW under its own key
@@ -39,16 +52,32 @@ export function createDslNotifiedFloorStore(stateManager) {
39
52
  if (!current?.active)
40
53
  return;
41
54
  const next = advanceFavorably(current.lastNotifiedStopFloor, floor, direction);
42
- // Skip the write when the baseline would not move (a retreat, or an equal
43
- // floor) — avoids churning the state file on every re-anchor.
44
- if (next === current.lastNotifiedStopFloor)
55
+ // The debounce meta only ever moves forward: the cooldown anchor takes the
56
+ // newest timestamp and the breakeven latch never un-latches.
57
+ const nextAtMs = meta?.atMs !== undefined && Number.isFinite(meta.atMs)
58
+ ? Math.max(current.lastNotifiedStopAtMs ?? 0, meta.atMs)
59
+ : current.lastNotifiedStopAtMs;
60
+ const nextBreakeven = (current.stopBreakevenAnnounced ?? false) || (meta?.breakevenAnnounced ?? false);
61
+ // Skip the write when nothing would move (a retreat with no meta change) —
62
+ // avoids churning the state file on every re-anchor.
63
+ if (next === current.lastNotifiedStopFloor &&
64
+ nextAtMs === current.lastNotifiedStopAtMs &&
65
+ nextBreakeven === (current.stopBreakevenAnnounced ?? false)) {
45
66
  return;
46
- await stateManager.set(key, { ...current, lastNotifiedStopFloor: next });
67
+ }
68
+ await stateManager.set(key, {
69
+ ...current,
70
+ lastNotifiedStopFloor: next,
71
+ lastNotifiedStopAtMs: nextAtMs,
72
+ stopBreakevenAnnounced: nextBreakeven,
73
+ });
47
74
  logger.debug("[dsl-notifications] stamped lastNotifiedStopFloor", {
48
75
  address: resolved.address,
49
76
  asset: resolved.asset,
50
77
  floor: next,
51
78
  direction,
79
+ atMs: nextAtMs,
80
+ breakevenAnnounced: nextBreakeven,
52
81
  });
53
82
  });
54
83
  },
@@ -1 +1 @@
1
- {"version":3,"file":"floor-store.js","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAE/D,uFAAuF;AACvF,SAAS,gBAAgB,CACvB,IAAwB,EACxB,KAAa,EACb,SAA2B;IAE3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,YAA0B;IACpE,OAAO;QACL,KAAK,CAAC,wBAAwB,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS;YAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;YACpC,0EAA0E;YAC1E,4EAA4E;YAC5E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAI,CAAC,QAAQ,EAAE,MAAM;gBAAE,OAAO;YAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;gBAC7C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAW,GAAG,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO,EAAE,MAAM;oBAAE,OAAO;gBAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/E,0EAA0E;gBAC1E,8DAA8D;gBAC9D,IAAI,IAAI,KAAK,OAAO,CAAC,qBAAqB;oBAAE,OAAO;gBACnD,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzE,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE;oBAChE,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,KAAK,EAAE,IAAI;oBACX,SAAS;iBACV,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"floor-store.js","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import type { SenpiEventBus } from "../events/index.js";
5
5
  import type { NotificationPayload, NotificationService } from "../../types/notification.js";
6
+ import { type NotifiedStopMeta } from "./stop-raise-debounce.js";
6
7
  export interface DslNotificationSubscriber {
7
8
  dispose(): void;
8
9
  }
@@ -23,11 +24,27 @@ export interface DslNotifiedFloorStore {
23
24
  /**
24
25
  * Record `floor` as announced, advancing the persisted baseline favorably only
25
26
  * (higher LONG / lower SHORT). A no-op when it would retreat the baseline.
27
+ *
28
+ * `meta` (notifications 2.6) carries the debounce bookkeeping stamped with the
29
+ * same announcement: the cooldown anchor and the breakeven latch. Optional so
30
+ * pre-2.6 store implementations (and test fakes) remain valid.
26
31
  */
27
32
  stampNotifiedStopFloor(ev: {
28
33
  address: string;
29
34
  asset: string;
30
- }, floor: number, direction: "LONG" | "SHORT"): Promise<void>;
35
+ }, floor: number, direction: "LONG" | "SHORT", meta?: {
36
+ atMs?: number;
37
+ breakevenAnnounced?: boolean;
38
+ }): Promise<void>;
39
+ /**
40
+ * Full announced-state snapshot for the debounce gate (floor + cooldown anchor
41
+ * + breakeven latch). Optional: a store without it degrades to the floor-only
42
+ * read and the debounce seeds its timing in-memory.
43
+ */
44
+ getNotifiedStopMeta?(ev: {
45
+ address: string;
46
+ asset: string;
47
+ }): Promise<NotifiedStopMeta | undefined>;
31
48
  }
32
49
  export declare function createDslNotificationSubscriber(bus: SenpiEventBus, notifier: NotificationService, store?: DslNotifiedFloorStore): DslNotificationSubscriber;
33
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAoB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AA8B9G,MAAM,WAAW,yBAAyB;IACxC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAClC,IAAI,CAWN;AAoFD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,wBAAwB,CAAC,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9F;;;OAGG;IACH,sBAAsB,CACpB,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACtC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,OAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AA4BD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,CAAC,EAAE,qBAAqB,GAC5B,yBAAyB,CAiK3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAoB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAgB9G,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAelC,MAAM,WAAW,yBAAyB;IACxC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAClC,IAAI,CAWN;AAoFD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,wBAAwB,CAAC,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9F;;;;;;;OAOG;IACH,sBAAsB,CACpB,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACtC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CACrG;AAqCD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,CAAC,EAAE,qBAAqB,GAC5B,yBAAyB,CAkO3B"}
@@ -7,6 +7,7 @@ import { randomUUID } from "node:crypto";
7
7
  import { formatDslCreated, formatDslTierAdvanced, formatDslSlUpdated, } from "./formatter.js";
8
8
  import { RaiseCorrelator, raiseKey } from "./raise-correlator.js";
9
9
  import { StopRaiseRatchet } from "./stop-raise-ratchet.js";
10
+ import { StopRaiseDebounce, debounceConfig, } from "./stop-raise-debounce.js";
10
11
  /**
11
12
  * Baseline key for the favorable-floor ratchet. Prefer the instance-scoped
12
13
  * `correlationId` (fresh per DSL rebuild → auto-resets the baseline); fall back
@@ -116,6 +117,14 @@ function beatsPersistedFloor(floor, baseline, direction) {
116
117
  return floor < baseline;
117
118
  return true;
118
119
  }
120
+ /**
121
+ * Event timestamp as epoch ms for the debounce cooldown anchor; falls back to
122
+ * the wall clock when the ISO string is unparsable (never NaN into state).
123
+ */
124
+ function eventMs(timestamp) {
125
+ const ms = Date.parse(timestamp);
126
+ return Number.isFinite(ms) ? ms : Date.now();
127
+ }
119
128
  /** Ensures formatter + notify never throw back into `bus.emit` (would break DSL callers). */
120
129
  function runNotificationHandler(fn) {
121
130
  try {
@@ -130,11 +139,11 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
130
139
  safeNotify(notifier, input);
131
140
  }
132
141
  /** Fire-and-forget persisted-baseline stamp; never throws back into a handler. */
133
- function stampFloor(ev, floor, direction) {
142
+ function stampFloor(ev, floor, direction, meta) {
134
143
  if (store === undefined || (direction !== "LONG" && direction !== "SHORT"))
135
144
  return;
136
145
  void store
137
- .stampNotifiedStopFloor(ev, floor, direction)
146
+ .stampNotifiedStopFloor(ev, floor, direction, meta)
138
147
  .catch((err) => logger.warn("[dsl-notifications] failed to stamp lastNotifiedStopFloor", { err }));
139
148
  }
140
149
  // PF-2: a single DSL raise must yield EITHER "Profit locked" OR "Stop raised",
@@ -150,6 +159,13 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
150
159
  // Sits alongside the PF-2 correlator; the two gates are independent (this one
151
160
  // is additional).
152
161
  const stopRaiseRatchet = new StopRaiseRatchet();
162
+ // Gate 4 (notifications 2.6): materiality + cooldown on top of the genuine-raise
163
+ // gates. On a trending winner every 30s re-quote is a GENUINE raise, so gates
164
+ // 1–3 alone let a push through per re-quote (~120/hour worst case). This gate
165
+ // announces only the first raise, a breakeven cross, a ≥threshold ROE step, or
166
+ // a cooldown flush. Flag-gated (DSL_STOP_RAISE_DEBOUNCE, default off): when the
167
+ // flag is off it is never consulted and behaviour is identical to today.
168
+ const stopRaiseDebounce = new StopRaiseDebounce();
153
169
  // DSL attached at position open → "DSL activated". Gated to fresh opens only:
154
170
  // resize/flip/rebuild (position_increased/decreased/flipped/adopted) re-emit
155
171
  // dsl.created for bookkeeping but must not re-announce activation.
@@ -181,8 +197,15 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
181
197
  }));
182
198
  // Announcing this locked floor advances the persisted baseline, so the
183
199
  // paired (correlator-suppressed) SL and any later re-anchor at/below it
184
- // cannot re-fire as a fresh raise across a rebuild or restart.
185
- stampFloor({ address: ev.address, asset: ev.asset }, ev.newFloorPrice, ev.direction);
200
+ // cannot re-fire as a fresh raise across a rebuild or restart. It also
201
+ // resets the debounce cooldown: a profit-lock announces the same
202
+ // real-world progress a stop-raise would, and a positive lock means the
203
+ // stop cleared entry, so the breakeven latch is set with it.
204
+ stopRaiseDebounce.recordAnnounced(key, ev.newFloorPrice, true);
205
+ stampFloor({ address: ev.address, asset: ev.asset }, ev.newFloorPrice, ev.direction, {
206
+ atMs: eventMs(ev.timestamp),
207
+ breakevenAnnounced: true,
208
+ });
186
209
  }
187
210
  else {
188
211
  // Else branch: nothing locked ("+$0.00"). Suppress the Profit-locked
@@ -195,14 +218,48 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
195
218
  });
196
219
  };
197
220
  /** Emit the "Stop raised" notification and stamp the persisted announced floor. */
198
- function sendStopRaise(ev) {
221
+ function sendStopRaise(ev, breakevenAnnounced) {
199
222
  const copy = formatDslSlUpdated(ev);
200
223
  // The SL-updated event carries no book, so the seed omits `dex`.
201
224
  notify(buildOpenablePayload(copy, "DSL_STOP_RAISE", ev.address, ev.timestamp, ev.asset, undefined, {
202
225
  uniqueKeys: [stopRaiseUniqueKey(ev)],
203
226
  idempotencyKey: stopRaiseUniqueKey(ev),
204
227
  }));
205
- stampFloor({ address: ev.address, asset: ev.asset }, ev.newSLPrice, ev.direction);
228
+ stopRaiseDebounce.recordAnnounced(raiseKey(ev), ev.newSLPrice, breakevenAnnounced);
229
+ stampFloor({ address: ev.address, asset: ev.asset }, ev.newSLPrice, ev.direction, {
230
+ atMs: eventMs(ev.timestamp),
231
+ breakevenAnnounced,
232
+ });
233
+ }
234
+ /**
235
+ * Gate 4 (notifications 2.6): judge a genuine raise for materiality. Returns
236
+ * `{ deliver, breakevenAnnounced }`; with the flag off it is a constant pass so
237
+ * behaviour is byte-identical to pre-2.6.
238
+ */
239
+ function judgeMateriality(ev, persisted) {
240
+ if (!debounceConfig().enabled || ev.direction === undefined) {
241
+ return { deliver: true, breakevenAnnounced: false };
242
+ }
243
+ const verdict = stopRaiseDebounce.evaluate(raiseKey(ev), {
244
+ newSLPrice: ev.newSLPrice,
245
+ direction: ev.direction,
246
+ entryPrice: ev.entryPrice,
247
+ leverage: ev.leverage,
248
+ }, persisted);
249
+ if (verdict.announce) {
250
+ logger.debug("[dsl-notifications] stop-raise materiality passed", {
251
+ asset: ev.asset,
252
+ reason: verdict.reason,
253
+ newSLPrice: ev.newSLPrice,
254
+ });
255
+ return { deliver: true, breakevenAnnounced: verdict.breakevenAnnounced };
256
+ }
257
+ logger.debug("[dsl-notifications] stop-raise suppressed: immaterial trail step", {
258
+ asset: ev.asset,
259
+ newSLPrice: ev.newSLPrice,
260
+ detail: verdict.suppressDetail,
261
+ });
262
+ return { deliver: false, breakevenAnnounced: verdict.breakevenAnnounced };
206
263
  }
207
264
  const onSlUpdated = (e) => {
208
265
  runNotificationHandler(() => {
@@ -226,10 +283,13 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
226
283
  });
227
284
  return;
228
285
  }
229
- // The in-memory ratchet passed. Without a persisted store, deliver now —
230
- // identical to the pre-baseline behavior (fully synchronous).
286
+ // The in-memory ratchet passed. Without a persisted store, deliver on the
287
+ // in-memory debounce alone — with the flag off this is exactly the
288
+ // pre-baseline behavior (fully synchronous).
231
289
  if (store === undefined) {
232
- sendStopRaise(ev);
290
+ const verdict = judgeMateriality(ev, undefined);
291
+ if (verdict.deliver)
292
+ sendStopRaise(ev, verdict.breakevenAnnounced);
233
293
  return;
234
294
  }
235
295
  // With a store, add a cross-rebuild/restart gate: the in-memory ratchet
@@ -238,7 +298,10 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
238
298
  // MORE favorable than the last floor we actually ANNOUNCED (persisted).
239
299
  void (async () => {
240
300
  try {
241
- const baseline = await store.getLastNotifiedStopFloor({ address: ev.address, asset: ev.asset });
301
+ const meta = store.getNotifiedStopMeta
302
+ ? await store.getNotifiedStopMeta({ address: ev.address, asset: ev.asset })
303
+ : undefined;
304
+ const baseline = meta?.floor ?? (await store.getLastNotifiedStopFloor({ address: ev.address, asset: ev.asset }));
242
305
  if (!beatsPersistedFloor(ev.newSLPrice, baseline, ev.direction)) {
243
306
  logger.debug("[dsl-notifications] stop-raise suppressed: not beyond persisted announced floor", {
244
307
  asset: ev.asset,
@@ -248,7 +311,9 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
248
311
  });
249
312
  return;
250
313
  }
251
- sendStopRaise(ev);
314
+ const verdict = judgeMateriality(ev, meta ?? { floor: baseline });
315
+ if (verdict.deliver)
316
+ sendStopRaise(ev, verdict.breakevenAnnounced);
252
317
  }
253
318
  catch (err) {
254
319
  logger.warn("[dsl-notifications] persisted stop-raise gate error (delivering isolated)", { err });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Materiality + cooldown gate for "Stop raised" (notifications 2.6) — Gate 4.
3
+ *
4
+ * The three existing gates (RaiseCorrelator, StopRaiseRatchet, persisted
5
+ * announced-floor) all answer "is this a REAL raise?". On a trending winner every
6
+ * 30s re-quote IS a real raise (~0.15% price / ~0.75% ROE per step on the reported
7
+ * $SPCX 5× case), so every one of them notified: 4 pushes in 4 minutes, worst case
8
+ * ~120/hour on a single winning position. This gate answers the question none of
9
+ * them asked: "is it worth a push?"
10
+ *
11
+ * The ticket's whitelist is literal — "only emit a push on a material stop
12
+ * event": Phase-1 armed, breakeven cross, tier upgrade, or a ≥threshold move,
13
+ * plus a per-position cooldown/rate-limit. Armed and tier upgrades have their
14
+ * own subtypes (DSL_ACTIVATED / DSL_PROFIT_LOCK), so this gate announces a
15
+ * genuine raise in exactly two cases:
16
+ *
17
+ * 1. BREAKEVEN CROSS — the stop crosses entry (ROE-at-stop turns positive):
18
+ * "you can no longer lose on this trade". Fires once per instance
19
+ * (latched), immediately — it is its own whitelist entry, so the cooldown
20
+ * does not apply to it.
21
+ * 2. MATERIAL STEP, RATE-LIMITED — ROE-at-stop improved by
22
+ * ≥ DSL_STOP_RAISE_MIN_ROE_STEP_PCT (default 5 ROE points ≈ "another 5% of
23
+ * margin locked") since the last announced floor, AND
24
+ * ≥ DSL_STOP_RAISE_COOLDOWN_S (default 900s) since the last announcement.
25
+ * The threshold defines material; the cooldown hard-caps the rate at one
26
+ * trail push per position per window (worst case 4/hour). ROE-based so
27
+ * leverage does not change the cadence; price-% fallback when
28
+ * entry/leverage are unavailable.
29
+ *
30
+ * Everything else stays silent — including the first raise of a fresh instance
31
+ * (the armed notification already covered "a stop exists") and sub-threshold
32
+ * drift, however long it accumulates. Batching is free: a push announces the
33
+ * CURRENT floor, so every suppressed micro-step is summarized by the next
34
+ * announcement.
35
+ *
36
+ * Suppression NEVER advances the announced baseline — only announcements do
37
+ * (mirroring the stamp-on-send semantics of the persisted floor store). That is
38
+ * what makes accumulated micro-steps eventually cross the threshold.
39
+ *
40
+ * The gate is flag-gated (DSL_STOP_RAISE_DEBOUNCE, default OFF): flag off means
41
+ * `evaluate` is never called and behaviour is byte-identical to today. Env is
42
+ * read call-time so tests and fleet config can flip it without re-imports.
43
+ */
44
+ /** Call-time env config (mirrors the whyLine/enrichment convention). */
45
+ export declare function debounceConfig(): {
46
+ enabled: boolean;
47
+ minRoeStepPct: number;
48
+ minPriceStepPct: number;
49
+ cooldownMs: number;
50
+ };
51
+ /** Announced-state snapshot persisted alongside the floor (see floor-store). */
52
+ export interface NotifiedStopMeta {
53
+ floor?: number;
54
+ atMs?: number;
55
+ breakevenAnnounced?: boolean;
56
+ }
57
+ export type AnnounceReason = "breakeven" | "material-step";
58
+ export interface DebounceVerdict {
59
+ announce: boolean;
60
+ reason: AnnounceReason | null;
61
+ /** Human-readable suppression detail for the debug log. */
62
+ suppressDetail?: string;
63
+ /** Latch value to stamp with the announcement (true once the stop clears entry). */
64
+ breakevenAnnounced: boolean;
65
+ }
66
+ export interface StopRaiseDebounceOptions {
67
+ now?: () => number;
68
+ ttlMs?: number;
69
+ maxEntries?: number;
70
+ }
71
+ /**
72
+ * In-memory announced-state per position instance (same keying, TTL and LRU
73
+ * discipline as StopRaiseRatchet). The persisted meta, when available, seeds a
74
+ * missing entry so restarts/rebuilds do not reset the cadence.
75
+ */
76
+ export declare class StopRaiseDebounce {
77
+ private readonly entries;
78
+ private readonly now;
79
+ private readonly ttlMs;
80
+ private readonly maxEntries;
81
+ constructor(opts?: StopRaiseDebounceOptions);
82
+ /**
83
+ * Judge a genuine raise (gates 1–3 already passed) for materiality. Does NOT
84
+ * mutate the announced baseline — call {@link recordAnnounced} after actually
85
+ * sending. `persisted` (when the caller has a store) seeds a missing in-memory
86
+ * entry so the cadence survives restarts.
87
+ */
88
+ evaluate(key: string, ev: {
89
+ newSLPrice: number;
90
+ direction: "LONG" | "SHORT";
91
+ entryPrice?: number;
92
+ leverage?: number;
93
+ }, persisted: NotifiedStopMeta | undefined): DebounceVerdict;
94
+ /**
95
+ * Commit an announcement: advance the announced floor/timestamp and the
96
+ * breakeven latch. Also called for "Profit locked" announcements — a tier
97
+ * upgrade announces the same real-world progress, so it resets the trail
98
+ * cooldown (and a lock > 0 implies the stop cleared entry).
99
+ */
100
+ recordAnnounced(key: string, floor: number, breakevenAnnounced: boolean): void;
101
+ /** Test/observability helper. */
102
+ size(): number;
103
+ /** Refresh recency; drop an idle-expired entry. Returns the live entry, if any. */
104
+ private touch;
105
+ private write;
106
+ }
107
+ /** Shared logger handle so the caller's suppress log matches the module family. */
108
+ export declare const debounceLogger: import("../../utils/logger.js").Logger;
109
+ //# sourceMappingURL=stop-raise-debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-raise-debounce.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/stop-raise-debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAOH,wEAAwE;AACxE,wBAAgB,cAAc,IAAI;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAWA;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAWD,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,CAAC,EAAE,wBAAwB;IAM3C;;;;;OAKG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,EAAE,EAAE;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EACD,SAAS,EAAE,gBAAgB,GAAG,SAAS,GACtC,eAAe;IA6ElB;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI;IAU9E,iCAAiC;IACjC,IAAI,IAAI,MAAM;IAId,mFAAmF;IACnF,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,KAAK;CAQd;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,wCAAS,CAAC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Materiality + cooldown gate for "Stop raised" (notifications 2.6) — Gate 4.
3
+ *
4
+ * The three existing gates (RaiseCorrelator, StopRaiseRatchet, persisted
5
+ * announced-floor) all answer "is this a REAL raise?". On a trending winner every
6
+ * 30s re-quote IS a real raise (~0.15% price / ~0.75% ROE per step on the reported
7
+ * $SPCX 5× case), so every one of them notified: 4 pushes in 4 minutes, worst case
8
+ * ~120/hour on a single winning position. This gate answers the question none of
9
+ * them asked: "is it worth a push?"
10
+ *
11
+ * The ticket's whitelist is literal — "only emit a push on a material stop
12
+ * event": Phase-1 armed, breakeven cross, tier upgrade, or a ≥threshold move,
13
+ * plus a per-position cooldown/rate-limit. Armed and tier upgrades have their
14
+ * own subtypes (DSL_ACTIVATED / DSL_PROFIT_LOCK), so this gate announces a
15
+ * genuine raise in exactly two cases:
16
+ *
17
+ * 1. BREAKEVEN CROSS — the stop crosses entry (ROE-at-stop turns positive):
18
+ * "you can no longer lose on this trade". Fires once per instance
19
+ * (latched), immediately — it is its own whitelist entry, so the cooldown
20
+ * does not apply to it.
21
+ * 2. MATERIAL STEP, RATE-LIMITED — ROE-at-stop improved by
22
+ * ≥ DSL_STOP_RAISE_MIN_ROE_STEP_PCT (default 5 ROE points ≈ "another 5% of
23
+ * margin locked") since the last announced floor, AND
24
+ * ≥ DSL_STOP_RAISE_COOLDOWN_S (default 900s) since the last announcement.
25
+ * The threshold defines material; the cooldown hard-caps the rate at one
26
+ * trail push per position per window (worst case 4/hour). ROE-based so
27
+ * leverage does not change the cadence; price-% fallback when
28
+ * entry/leverage are unavailable.
29
+ *
30
+ * Everything else stays silent — including the first raise of a fresh instance
31
+ * (the armed notification already covered "a stop exists") and sub-threshold
32
+ * drift, however long it accumulates. Batching is free: a push announces the
33
+ * CURRENT floor, so every suppressed micro-step is summarized by the next
34
+ * announcement.
35
+ *
36
+ * Suppression NEVER advances the announced baseline — only announcements do
37
+ * (mirroring the stamp-on-send semantics of the persisted floor store). That is
38
+ * what makes accumulated micro-steps eventually cross the threshold.
39
+ *
40
+ * The gate is flag-gated (DSL_STOP_RAISE_DEBOUNCE, default OFF): flag off means
41
+ * `evaluate` is never called and behaviour is byte-identical to today. Env is
42
+ * read call-time so tests and fleet config can flip it without re-imports.
43
+ */
44
+ import { createLogger } from "../../utils/logger.js";
45
+ import { RATCHET_IDLE_TTL_MS, RATCHET_MAX_ENTRIES } from "./stop-raise-ratchet.js";
46
+ const logger = createLogger("[senpi-core][dsl-notifications]");
47
+ /** Call-time env config (mirrors the whyLine/enrichment convention). */
48
+ export function debounceConfig() {
49
+ const num = (raw, fallback) => {
50
+ const v = Number(raw);
51
+ return Number.isFinite(v) && v > 0 ? v : fallback;
52
+ };
53
+ return {
54
+ enabled: process.env.DSL_STOP_RAISE_DEBOUNCE === "true",
55
+ minRoeStepPct: num(process.env.DSL_STOP_RAISE_MIN_ROE_STEP_PCT, 5),
56
+ minPriceStepPct: num(process.env.DSL_STOP_RAISE_MIN_PRICE_STEP_PCT, 1),
57
+ cooldownMs: num(process.env.DSL_STOP_RAISE_COOLDOWN_S, 900) * 1_000,
58
+ };
59
+ }
60
+ /**
61
+ * In-memory announced-state per position instance (same keying, TTL and LRU
62
+ * discipline as StopRaiseRatchet). The persisted meta, when available, seeds a
63
+ * missing entry so restarts/rebuilds do not reset the cadence.
64
+ */
65
+ export class StopRaiseDebounce {
66
+ entries = new Map();
67
+ now;
68
+ ttlMs;
69
+ maxEntries;
70
+ constructor(opts) {
71
+ this.now = opts?.now ?? Date.now;
72
+ this.ttlMs = opts?.ttlMs ?? RATCHET_IDLE_TTL_MS;
73
+ this.maxEntries = opts?.maxEntries ?? RATCHET_MAX_ENTRIES;
74
+ }
75
+ /**
76
+ * Judge a genuine raise (gates 1–3 already passed) for materiality. Does NOT
77
+ * mutate the announced baseline — call {@link recordAnnounced} after actually
78
+ * sending. `persisted` (when the caller has a store) seeds a missing in-memory
79
+ * entry so the cadence survives restarts.
80
+ */
81
+ evaluate(key, ev, persisted) {
82
+ const cfg = debounceConfig();
83
+ const nowMs = this.now();
84
+ const mem = this.touch(key, nowMs);
85
+ const baselineFloor = mem?.floor ?? persisted?.floor;
86
+ const lastAtMs = mem?.atMs ?? persisted?.atMs;
87
+ const latched = (mem?.breakevenAnnounced ?? false) || (persisted?.breakevenAnnounced ?? false);
88
+ // ROE-at-stop (sign only needs entry; magnitude needs leverage too).
89
+ const entryUsable = typeof ev.entryPrice === "number" && Number.isFinite(ev.entryPrice) && ev.entryPrice > 0;
90
+ const stopAboveEntry = entryUsable
91
+ ? ev.direction === "LONG"
92
+ ? ev.newSLPrice > ev.entryPrice
93
+ : ev.newSLPrice < ev.entryPrice
94
+ : false;
95
+ const breakevenNext = latched || stopAboveEntry;
96
+ // First raise of a fresh instance: seed the measuring baseline SILENTLY.
97
+ // The ticket's whitelist has no "trailing started" event — the armed
98
+ // notification already said a stop exists — so the first raise anchors the
99
+ // threshold and says nothing. (In-memory until the first announcement
100
+ // persists a floor; after a restart the seed re-anchors on the next raise,
101
+ // which can only delay a push, never duplicate one.) The breakeven latch
102
+ // seeds too: a stop that was NEVER below entry has no cross to announce.
103
+ if (baselineFloor === undefined) {
104
+ this.write(key, {
105
+ floor: ev.newSLPrice,
106
+ atMs: undefined,
107
+ breakevenAnnounced: breakevenNext,
108
+ touchedAtMs: nowMs,
109
+ });
110
+ return {
111
+ announce: false,
112
+ reason: null,
113
+ suppressDetail: "baseline seeded (first raise of the instance)",
114
+ breakevenAnnounced: breakevenNext,
115
+ };
116
+ }
117
+ // 1. Breakeven cross: its own whitelist entry — fires once, immediately,
118
+ // regardless of step size or cooldown.
119
+ if (!latched && stopAboveEntry) {
120
+ return { announce: true, reason: "breakeven", breakevenAnnounced: true };
121
+ }
122
+ // 2. Material step AND cooldown elapsed. The threshold defines material,
123
+ // the cooldown hard-caps the rate; sub-threshold drift never announces.
124
+ const leverageUsable = typeof ev.leverage === "number" && Number.isFinite(ev.leverage) && ev.leverage > 0;
125
+ const priceDelta = Math.abs(ev.newSLPrice - baselineFloor);
126
+ let material;
127
+ let stepDetail;
128
+ if (entryUsable && leverageUsable) {
129
+ const roeStepPct = (priceDelta / ev.entryPrice) * ev.leverage * 100;
130
+ material = roeStepPct >= cfg.minRoeStepPct;
131
+ stepDetail = `roeStep=${roeStepPct.toFixed(2)}% (min ${cfg.minRoeStepPct}%)`;
132
+ }
133
+ else {
134
+ const priceStepPct = baselineFloor > 0 ? (priceDelta / baselineFloor) * 100 : Number.POSITIVE_INFINITY;
135
+ material = priceStepPct >= cfg.minPriceStepPct;
136
+ stepDetail = `priceStep=${priceStepPct.toFixed(3)}% (min ${cfg.minPriceStepPct}%, roe basis unavailable)`;
137
+ }
138
+ const coolingDown = lastAtMs !== undefined && nowMs - lastAtMs < cfg.cooldownMs;
139
+ if (material && !coolingDown) {
140
+ return { announce: true, reason: "material-step", breakevenAnnounced: breakevenNext };
141
+ }
142
+ const sinceS = lastAtMs === undefined ? -1 : Math.round((nowMs - lastAtMs) / 1_000);
143
+ return {
144
+ announce: false,
145
+ reason: null,
146
+ suppressDetail: `${stepDetail}${material ? " [met, cooling down]" : ""}, sinceLastAnnounce=${sinceS}s (cooldown ${Math.round(cfg.cooldownMs / 1_000)}s)`,
147
+ breakevenAnnounced: breakevenNext,
148
+ };
149
+ }
150
+ /**
151
+ * Commit an announcement: advance the announced floor/timestamp and the
152
+ * breakeven latch. Also called for "Profit locked" announcements — a tier
153
+ * upgrade announces the same real-world progress, so it resets the trail
154
+ * cooldown (and a lock > 0 implies the stop cleared entry).
155
+ */
156
+ recordAnnounced(key, floor, breakevenAnnounced) {
157
+ const nowMs = this.now();
158
+ this.write(key, {
159
+ floor,
160
+ atMs: nowMs,
161
+ breakevenAnnounced,
162
+ touchedAtMs: nowMs,
163
+ });
164
+ }
165
+ /** Test/observability helper. */
166
+ size() {
167
+ return this.entries.size;
168
+ }
169
+ /** Refresh recency; drop an idle-expired entry. Returns the live entry, if any. */
170
+ touch(key, nowMs) {
171
+ const entry = this.entries.get(key);
172
+ if (!entry)
173
+ return undefined;
174
+ if (nowMs - entry.touchedAtMs > this.ttlMs) {
175
+ this.entries.delete(key);
176
+ return undefined;
177
+ }
178
+ entry.touchedAtMs = nowMs;
179
+ // Delete-then-set keeps LRU ordering (map head = least recently touched).
180
+ this.entries.delete(key);
181
+ this.entries.set(key, entry);
182
+ return entry;
183
+ }
184
+ write(key, entry) {
185
+ if (!this.entries.has(key) && this.entries.size >= this.maxEntries) {
186
+ const oldest = this.entries.keys().next().value;
187
+ if (oldest !== undefined)
188
+ this.entries.delete(oldest);
189
+ }
190
+ this.entries.delete(key);
191
+ this.entries.set(key, entry);
192
+ }
193
+ }
194
+ /** Shared logger handle so the caller's suppress log matches the module family. */
195
+ export const debounceLogger = logger;
196
+ //# sourceMappingURL=stop-raise-debounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-raise-debounce.js","sourceRoot":"","sources":["../../../src/dsl/notifications/stop-raise-debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,MAAM,MAAM,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAE/D,wEAAwE;AACxE,MAAM,UAAU,cAAc;IAM5B,MAAM,GAAG,GAAG,CAAC,GAAuB,EAAE,QAAgB,EAAU,EAAE;QAChE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM;QACvD,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,CAAC;QAClE,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,CAAC,CAAC;QACtE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,GAAG,CAAC,GAAG,KAAK;KACpE,CAAC;AACJ,CAAC;AAmCD;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACX,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3C,GAAG,CAAe;IAClB,KAAK,CAAS;IACd,UAAU,CAAS;IAEpC,YAAY,IAA+B;QACzC,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,mBAAmB,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,mBAAmB,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CACN,GAAW,EACX,EAKC,EACD,SAAuC;QAEvC,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEnC,MAAM,aAAa,GAAG,GAAG,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,CAAC;QACrD,MAAM,QAAQ,GAAG,GAAG,EAAE,IAAI,IAAI,SAAS,EAAE,IAAI,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,kBAAkB,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,IAAI,KAAK,CAAC,CAAC;QAE/F,qEAAqE;QACrE,MAAM,WAAW,GACf,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,WAAW;YAChC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,MAAM;gBACvB,CAAC,CAAC,EAAE,CAAC,UAAU,GAAI,EAAE,CAAC,UAAqB;gBAC3C,CAAC,CAAC,EAAE,CAAC,UAAU,GAAI,EAAE,CAAC,UAAqB;YAC7C,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,aAAa,GAAG,OAAO,IAAI,cAAc,CAAC;QAEhD,yEAAyE;QACzE,qEAAqE;QACrE,2EAA2E;QAC3E,sEAAsE;QACtE,2EAA2E;QAC3E,yEAAyE;QACzE,yEAAyE;QACzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBACd,KAAK,EAAE,EAAE,CAAC,UAAU;gBACpB,IAAI,EAAE,SAAS;gBACf,kBAAkB,EAAE,aAAa;gBACjC,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,IAAI;gBACZ,cAAc,EAAE,+CAA+C;gBAC/D,kBAAkB,EAAE,aAAa;aAClC,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,uCAAuC;QACvC,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;YAC/B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;QAED,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,cAAc,GAClB,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,CAAC;QAC3D,IAAI,QAAiB,CAAC;QACtB,IAAI,UAAkB,CAAC;QACvB,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,CAAC,UAAU,GAAI,EAAE,CAAC,UAAqB,CAAC,GAAI,EAAE,CAAC,QAAmB,GAAG,GAAG,CAAC;YAC5F,QAAQ,GAAG,UAAU,IAAI,GAAG,CAAC,aAAa,CAAC;YAC3C,UAAU,GAAG,WAAW,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,aAAa,IAAI,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACvG,QAAQ,GAAG,YAAY,IAAI,GAAG,CAAC,eAAe,CAAC;YAC/C,UAAU,GAAG,aAAa,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,eAAe,2BAA2B,CAAC;QAC5G,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;QAChF,IAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACxF,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;QACpF,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,uBAAuB,MAAM,eAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI;YACxJ,kBAAkB,EAAE,aAAa;SAClC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,GAAW,EAAE,KAAa,EAAE,kBAA2B;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,KAAK;YACL,IAAI,EAAE,KAAK;YACX,kBAAkB;YAClB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAC1B,0EAA0E;QAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,GAAW,EAAE,KAAoB;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChD,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC"}
@@ -166,6 +166,20 @@ export interface DslState {
166
166
  * favorable polarity inverts). See {@link ../dsl/notifications/index.ts}.
167
167
  */
168
168
  lastNotifiedStopFloor?: number;
169
+ /**
170
+ * Wall-clock (epoch ms) of the last "Stop raised" / "Profit locked"
171
+ * announcement — the cooldown anchor for the stop-trail debounce
172
+ * (notifications 2.6). Stamped in the same locked RMW as the floor.
173
+ */
174
+ lastNotifiedStopAtMs?: number;
175
+ /**
176
+ * Breakeven latch (notifications 2.6): true once a stop at/above entry (below,
177
+ * for a SHORT) has been announced for this position, so the "you can no longer
178
+ * lose" moment fires exactly once. A rebuilt position already past breakeven
179
+ * never re-crosses, so the latch needs no explicit reset; a direction flip
180
+ * resets it alongside the floor.
181
+ */
182
+ stopBreakevenAnnounced?: boolean;
169
183
  }
170
184
  export type HandoffStatus = "pending" | "ok" | "aborted";
171
185
  export type DslTickAction = "none" | "close";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  "id": "runtime",
3
3
  "name": "Senpi Runtime",
4
4
  "description": "Senpi runtime plugin for OpenClaw. Orchestrates scanners, LLM-based trade decisions, and a DSL trailing stop-loss exit engine.",
5
- "version": "3.0.69",
5
+ "version": "3.0.70",
6
6
  "commandAliases": [
7
7
  {
8
8
  "name": "senpi"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@senpi/runtime",
3
- "version": "3.0.69",
3
+ "version": "3.0.70",
4
4
  "description": "Senpi runtime plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",