instar 1.3.258 → 1.3.260
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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +7 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +71 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +144 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/monitoring/StaleSessionBackstop.d.ts +6 -0
- package/dist/monitoring/StaleSessionBackstop.d.ts.map +1 -1
- package/dist/monitoring/StaleSessionBackstop.js +18 -4
- package/dist/monitoring/StaleSessionBackstop.js.map +1 -1
- package/dist/monitoring/sentinelWiring.d.ts +4 -0
- package/dist/monitoring/sentinelWiring.d.ts.map +1 -1
- package/dist/monitoring/sentinelWiring.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +21 -8
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/eli16-pr-description-check.mjs +77 -0
- package/src/data/builtin-manifest.json +46 -46
- package/src/scaffold/templates.ts +2 -0
- package/upgrades/1.3.260.md +72 -0
- package/upgrades/side-effects/eli16-pr-description-gate.md +48 -0
- package/upgrades/side-effects/notification-ux-coherence.md +59 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Side-Effects Review — Notification UX Coherence (PR1: the calm Agent-Health lane)
|
|
2
|
+
|
|
3
|
+
## What changed (mechanically)
|
|
4
|
+
|
|
5
|
+
A new opt-in routing lane in the messaging layer. An attention item may now carry
|
|
6
|
+
`lane:'agent-health'` (+ optional `healthKey`). When set, `createAttentionItem`
|
|
7
|
+
routes it into ONE persistently-named "🩺 Agent Health" forum topic BEFORE (and
|
|
8
|
+
bypassing) the topic-flood guard, suppression-dedups same-`healthKey` re-escalations
|
|
9
|
+
within a window, and never spawns a per-item topic. `StaleSessionBackstop` now emits
|
|
10
|
+
its "looks stuck" escalation into that lane at `NORMAL` (was `HIGH`), with a
|
|
11
|
+
topic-name-resolved, next-step-bearing, reply-able message. The `/attention` route
|
|
12
|
+
carries `lane`/`healthKey` through and lets lane items skip the per-topic outbound
|
|
13
|
+
tone-gate.
|
|
14
|
+
|
|
15
|
+
## Blast radius / who is affected
|
|
16
|
+
|
|
17
|
+
- **Items WITHOUT `lane`**: byte-for-byte unchanged — same guard, same topics, same
|
|
18
|
+
tone-gate. The only caller that sets the lane today is `StaleSessionBackstop`.
|
|
19
|
+
- **The flood guard**: untouched logic; lane items simply never reach it.
|
|
20
|
+
- **The tone-gate**: still runs for every non-lane item; lane items bypass it because
|
|
21
|
+
they don't spawn a per-item topic and are named+CTA-bearing by construction.
|
|
22
|
+
|
|
23
|
+
## Failure modes considered
|
|
24
|
+
|
|
25
|
+
- **Telegram unavailable**: `routeToAgentHealthLane` returns null on topic-create
|
|
26
|
+
failure; the item is still recorded in the attention store (never dropped). Best-
|
|
27
|
+
effort send is `@silent-fallback-ok` (a transient send failure must not crash the
|
|
28
|
+
attention path) — consistent with the existing flood-notice path.
|
|
29
|
+
- **Lane topic deleted out from under us**: the cached `agentHealthTopicId` is cleared
|
|
30
|
+
on send failure so it's recreated next time (same pattern as `floodNoticeByBucket`).
|
|
31
|
+
- **Concurrent first-escalations**: a single in-flight creation promise
|
|
32
|
+
(`agentHealthPending`) prevents a double-create race (covered by integration test).
|
|
33
|
+
- **Unbounded memory**: the dedup ring is hard-capped at `maxTrackedKeys` (default 256),
|
|
34
|
+
oldest-evicted.
|
|
35
|
+
- **A genuinely-stuck session now NORMAL not HIGH**: it still surfaces (in the calm lane
|
|
36
|
+
+ the attention store + the dashboard); it is no longer a per-topic interrupt. The
|
|
37
|
+
global "tmux control plane unreachable" item stays HIGH. PR2 will reduce the
|
|
38
|
+
false-positive RATE; PR1 only changes delivery.
|
|
39
|
+
|
|
40
|
+
## What this does NOT do (explicit non-goals)
|
|
41
|
+
|
|
42
|
+
- Does NOT gate, block, drop, delay, or rewrite any message — pure delivery-shaper.
|
|
43
|
+
- Does NOT change the StaleSessionBackstop's detection logic (PR2).
|
|
44
|
+
- Does NOT touch the "went quiet" / "can't reach…routing" SentinelNotifier paths
|
|
45
|
+
(tracked as fast-follow; they were the older floods).
|
|
46
|
+
|
|
47
|
+
## Reversibility
|
|
48
|
+
|
|
49
|
+
`messaging[].config.agentHealthLane.enabled:false` restores the prior per-item-topic
|
|
50
|
+
behavior for self-health items. No schema migration, no data migration, no on-disk
|
|
51
|
+
format change. Additive type fields only.
|
|
52
|
+
|
|
53
|
+
## Tests
|
|
54
|
+
|
|
55
|
+
Unit (StaleSessionBackstop: lane/healthKey/NORMAL/named-title/next-step + name
|
|
56
|
+
resolution), integration (real TelegramAdapter: N notices → 1 topic, HIGH→lane,
|
|
57
|
+
suppression-dedup + audit, non-lane unaffected), E2E (HTTP /attention: lane+healthKey
|
|
58
|
+
passthrough, tone-gate bypass for lane, no regression for non-lane). 95 related tests
|
|
59
|
+
green; tsc clean.
|