instar 1.3.1024 → 1.3.1025

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.
@@ -42,7 +42,7 @@ export interface DeliveryResult {
42
42
  }
43
43
  export interface GrowthDigestAuditEntry {
44
44
  ts: string;
45
- action: 'sent' | 'send-blocked' | 'dry-run' | 'skipped-standby' | 'skipped-off' | 'skipped-overlap' | 'skipped-calm' | 'error';
45
+ action: 'sent' | 'send-blocked' | 'dry-run' | 'skipped-standby' | 'skipped-off' | 'skipped-overlap' | 'skipped-calm' | 'error' | 'send-deferred' | 'send-exhausted';
46
46
  trigger?: GrowthDigestTrigger;
47
47
  /** ISO of the scheduled window this cycle belongs to. The idempotency key for
48
48
  * catch-up: recorded ONLY on a real post-lease decision (never on a pre-lease
@@ -57,7 +57,65 @@ export interface GrowthDigestAuditEntry {
57
57
  * a SIGNAL (never a cross-component mutation) that the old voice should be
58
58
  * disabled to avoid two voices on the same initiatives. */
59
59
  supersedeConflict?: boolean;
60
+ /** C1: the retry-attempt count carried on a `send-deferred` / `send-exhausted`
61
+ * entry (observability — the audit shows how many times a window was retried). */
62
+ attemptCount?: number;
60
63
  }
64
+ /**
65
+ * The single durable delivery-attempt record for a digest window that hit a
66
+ * RETRYABLE block. It is the shared idempotency ledger the spec's watcher (D,
67
+ * a later increment) also reads/advances — so watcher-drain and cron-retry can
68
+ * never both fire the same window. `state` is `deferred` while it may still
69
+ * retry, `terminal-failed` once it exhausts a ceiling (poison window — stops
70
+ * retrying, but is loudly surfaced, never silently dropped).
71
+ */
72
+ export interface GrowthDigestDeferral {
73
+ windowId: string;
74
+ attemptCount: number;
75
+ firstDeferredAt: string;
76
+ nextAttemptAt: string;
77
+ lastReason: string;
78
+ attentionDedupeKey: string;
79
+ state: 'deferred' | 'terminal-failed';
80
+ }
81
+ /** Durable store for the C1 delivery-attempt records (one per deferred window). */
82
+ export interface GrowthDigestDeferralStore {
83
+ get(windowId: string): GrowthDigestDeferral | undefined;
84
+ upsert(record: GrowthDigestDeferral): void;
85
+ remove(windowId: string): void;
86
+ /** Records still `deferred` whose `nextAttemptAt` is at/before `now`. */
87
+ duePending(now: Date): GrowthDigestDeferral[];
88
+ all(): GrowthDigestDeferral[];
89
+ }
90
+ /**
91
+ * The escalation input the publisher hands to whatever raises operator-facing
92
+ * attention items (wired to `TelegramAdapter.createAttentionItem` at route
93
+ * registration). SECURITY (C1): `reason` is a GENERIC plain-English string only
94
+ * — the publisher NEVER passes the raw rejected digest body or the tone gate's
95
+ * cited offending pattern (which would re-introduce the very leak C2 stripped).
96
+ */
97
+ export interface GrowthDigestAttention {
98
+ /** Stable dedupe id (`<machineId>:growth-digest-defer:<windowId>`). */
99
+ id: string;
100
+ title: string;
101
+ summary: string;
102
+ /** Generic plain-English reason — never the raw body / offending pattern. */
103
+ reason: string;
104
+ priority: 'NORMAL' | 'HIGH';
105
+ windowId: string;
106
+ }
107
+ /**
108
+ * A non-send reason is RETRYABLE (worth deferring + retrying) vs TERMINAL
109
+ * (retrying the same window changes nothing → consume it as today). Retryable =
110
+ * a transient tone-gate block (content may pass on a later window, or the gate
111
+ * fail-closed under transient pressure) or a provider/send failure. Terminal =
112
+ * a structural non-send (no updates topic, telegram not configured, no sender)
113
+ * or a content bug that a retry cannot fix (empty/too-long). Exported so the
114
+ * classification is testable on both sides of the boundary. Unknown → terminal
115
+ * (the SAFE direction: never defer a reason we can't reason about into an
116
+ * open-ended retry).
117
+ */
118
+ export declare function isRetryableSendReason(reason: string | undefined): boolean;
61
119
  export interface GrowthDigestPublisherDeps {
62
120
  /** Bound to the live analyst (`(now) => analyst.buildDigest(now)`). */
63
121
  buildDigest: (now: Date) => GrowthDigest;
@@ -90,6 +148,23 @@ export interface GrowthDigestPublisherDeps {
90
148
  perRuleCap?: number;
91
149
  /** Formatter: per-detail char cap (default 200). */
92
150
  detailCap?: number;
151
+ /** Is the C1 un-droppable-delivery behavior on? Read live per cycle (a rollback
152
+ * needs no restart). When absent OR returns false → LEGACY behavior (a
153
+ * retryable block records `send-blocked` WITH its window = consume-and-drop),
154
+ * so merging the code changes nothing until the flag is on. */
155
+ blockedDigestEscalationEnabled?: () => boolean;
156
+ /** Durable delivery-attempt store (C1's bounded-retry ledger). Absent → the C1
157
+ * path is inert (legacy behavior) even if the flag is on — fail-safe. */
158
+ deferrals?: GrowthDigestDeferralStore;
159
+ /** Raise ONE operator-facing attention item on defer / exhaustion. Absent → the
160
+ * audit still records the defer, but no attention item (degraded, not silent). */
161
+ raiseAttention?: (item: GrowthDigestAttention) => void;
162
+ /** This machine's id (for the dedupe key; default 'single'). */
163
+ machineId?: () => string;
164
+ /** C1 retry-contract ceilings (defaults 5 / 14d / 60s). Injectable for tests. */
165
+ maxAttempts?: number;
166
+ maxAgeMs?: number;
167
+ backoffBaseMs?: number;
93
168
  }
94
169
  export declare class GrowthDigestPublisher {
95
170
  private readonly deps;
@@ -100,7 +175,13 @@ export declare class GrowthDigestPublisher {
100
175
  private readonly settleMs;
101
176
  private readonly perRuleCap;
102
177
  private readonly detailCap;
178
+ private readonly maxAttempts;
179
+ private readonly maxAgeMs;
180
+ private readonly backoffBaseMs;
103
181
  private sender?;
182
+ /** C1: attached at route registration (needs ctx.telegram). Prefer over
183
+ * deps.raiseAttention when set. */
184
+ private attentionRaiser?;
104
185
  private cronTask;
105
186
  private settleTimer;
106
187
  private running;
@@ -108,6 +189,9 @@ export declare class GrowthDigestPublisher {
108
189
  private nowFn;
109
190
  /** Attach the guarded sender after construction (route-registration time). */
110
191
  attachSender(send: (text: string) => Promise<DeliveryResult>): void;
192
+ /** C1: attach the operator-facing attention raiser after construction (needs
193
+ * ctx.telegram, available only at route registration). */
194
+ attachAttention(raise: (item: GrowthDigestAttention) => void): void;
111
195
  /** True once the cron task is scheduled (false if refused by the sanity-floor
112
196
  * or an invalid cron). Used by wiring tests. */
113
197
  isStarted(): boolean;
@@ -120,7 +204,8 @@ export declare class GrowthDigestPublisher {
120
204
  start(): void;
121
205
  /** Stop the cron + cancel a pending catch-up. Idempotent. */
122
206
  stop(): void;
123
- /** Replay a single fire time that elapsed while the box was down/asleep. */
207
+ /** Replay a single fire time that elapsed while the box was down/asleep, and
208
+ * (C1) retry any deferred windows whose backoff has elapsed. */
124
209
  private catchUp;
125
210
  /**
126
211
  * Run ONE cadence cycle. PUBLIC so tests (and a future debug route) can drive a
@@ -129,6 +214,32 @@ export declare class GrowthDigestPublisher {
129
214
  */
130
215
  publishOnce(now: Date, trigger: GrowthDigestTrigger, windowKey?: string): Promise<void>;
131
216
  private record;
217
+ /** Is the C1 un-droppable-delivery behavior on? Fails toward LEGACY (consume +
218
+ * record 'send-blocked') on any read fault — never crashes, never silently
219
+ * drops. */
220
+ private escalationActive;
221
+ private machineIdFn;
222
+ private raise;
223
+ /**
224
+ * Route a non-send. A RETRYABLE reason under active+wired C1 defers the window;
225
+ * anything else (terminal reason, C1 off, no store/window) records
226
+ * `send-blocked` and consumes the window exactly as today (never silent).
227
+ */
228
+ private handleNonSend;
229
+ /**
230
+ * Advance the bounded delivery-attempt contract for a retryable block. Increment
231
+ * the attempt count, and either DEFER (record `send-deferred` WITHOUT a window +
232
+ * one deduped NORMAL attention item) or, when a ceiling is hit, mark the poison
233
+ * window `terminal-failed` (record `send-exhausted` WITH its window so it stops
234
+ * retrying + one HIGH escalated attention item). A store fault falls back to
235
+ * consuming the window (today's behavior) — never a lost signal.
236
+ */
237
+ private deferRetryableBlock;
238
+ /** A successful send decides the window; drop a stale deferral so it can't retry. */
239
+ private clearDeferralOnSuccess;
240
+ /** Retry deferred windows whose backoff has elapsed. Bounded by duePending; a
241
+ * window already decided (present in recordedWindows) is skipped + cleared. */
242
+ private drainDeferrals;
132
243
  /** True if the cadence's two soonest fires are ≥1h apart (or not computable). */
133
244
  private cadenceWithinFloor;
134
245
  /**
@@ -165,4 +276,34 @@ export declare function createGrowthDigestAuditSink(stateDir: string): {
165
276
  recordedWindows: () => Set<string>;
166
277
  logPath: string;
167
278
  };
279
+ /**
280
+ * Map a raw internal non-send reason to a GENERIC plain-English string safe for
281
+ * an operator-facing attention item. It NEVER echoes the raw reason (which can
282
+ * carry the tone gate's cited offending pattern — the very route path / config
283
+ * key C2 stripped), so the escalation can never re-introduce the leak C2 fixed or
284
+ * itself trip the tone gate. The raw detail stays in the local audit only.
285
+ */
286
+ export declare function genericSendReason(reason: string | undefined): string;
287
+ /**
288
+ * C2 preflight (maturation-followthrough-fix §C2) — a deterministic regression
289
+ * guard over FORMATTED digest text. It catches a formatter change that
290
+ * reintroduces an operator-facing leak the tone gate blocks: a raw route path
291
+ * (`GET /x`, `/growth/digest`), a dotted config key (`monitoring.foo.enabled`),
292
+ * or a repo/dot-dir file path (`src/…`, `.instar/config.json`). It is NOT the
293
+ * tone gate (that stays unchanged) — it is a cheap, LLM-free assertion the C2
294
+ * test suite runs over representative digest content so a leak is caught at
295
+ * build time, not by a future live block. `clean:true` ⇒ no leak pattern found.
296
+ */
297
+ export declare function scanFormattedDigestForLeaks(text: string): {
298
+ clean: boolean;
299
+ matches: string[];
300
+ };
301
+ /**
302
+ * File-backed store for the C1 delivery-attempt records. Machine-local BY DESIGN
303
+ * (the digest is emitted only by the awake/serving-lease machine, so its retry
304
+ * ledger is a fact about that machine — never merged from a peer), matching how
305
+ * `growth-digest.jsonl` is machine-local. Bounded: one record per deferred
306
+ * window (window cardinality is tiny), resolved by a send / exhaustion / drain.
307
+ */
308
+ export declare function createGrowthDigestDeferralStore(stateDir: string): GrowthDigestDeferralStore;
168
309
  //# sourceMappingURL=GrowthDigestPublisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GrowthDigestPublisher.d.ts","sourceRoot":"","sources":["../../src/monitoring/GrowthDigestPublisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GrowthDigestPublisher.d.ts","sourceRoot":"","sources":["../../src/monitoring/GrowthDigestPublisher.ts"],"names":[],"mappings":"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"}