instar 1.3.490 → 1.3.491

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 (95) hide show
  1. package/dashboard/index.html +30 -0
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +146 -1
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/core/GuardPostureStore.d.ts +38 -0
  6. package/dist/core/GuardPostureStore.d.ts.map +1 -0
  7. package/dist/core/GuardPostureStore.js +87 -0
  8. package/dist/core/GuardPostureStore.js.map +1 -0
  9. package/dist/core/MachinePoolRegistry.d.ts +16 -0
  10. package/dist/core/MachinePoolRegistry.d.ts.map +1 -1
  11. package/dist/core/MachinePoolRegistry.js +24 -1
  12. package/dist/core/MachinePoolRegistry.js.map +1 -1
  13. package/dist/core/PeerPresencePuller.d.ts +9 -0
  14. package/dist/core/PeerPresencePuller.d.ts.map +1 -1
  15. package/dist/core/PeerPresencePuller.js +1 -1
  16. package/dist/core/PeerPresencePuller.js.map +1 -1
  17. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  18. package/dist/core/PostUpdateMigrator.js +30 -2
  19. package/dist/core/PostUpdateMigrator.js.map +1 -1
  20. package/dist/core/types.d.ts +29 -0
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/core/types.js.map +1 -1
  23. package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts +8 -0
  24. package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts.map +1 -1
  25. package/dist/monitoring/ActiveWorkSilenceSentinel.js +8 -0
  26. package/dist/monitoring/ActiveWorkSilenceSentinel.js.map +1 -1
  27. package/dist/monitoring/ContextWedgeSentinel.d.ts +8 -0
  28. package/dist/monitoring/ContextWedgeSentinel.d.ts.map +1 -1
  29. package/dist/monitoring/ContextWedgeSentinel.js +8 -0
  30. package/dist/monitoring/ContextWedgeSentinel.js.map +1 -1
  31. package/dist/monitoring/GuardPostureTripwire.d.ts +3 -27
  32. package/dist/monitoring/GuardPostureTripwire.d.ts.map +1 -1
  33. package/dist/monitoring/GuardPostureTripwire.js +8 -76
  34. package/dist/monitoring/GuardPostureTripwire.js.map +1 -1
  35. package/dist/monitoring/GuardRegistry.d.ts +48 -0
  36. package/dist/monitoring/GuardRegistry.d.ts.map +1 -0
  37. package/dist/monitoring/GuardRegistry.js +49 -0
  38. package/dist/monitoring/GuardRegistry.js.map +1 -0
  39. package/dist/monitoring/SessionReaper.d.ts +7 -0
  40. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  41. package/dist/monitoring/SessionReaper.js +9 -0
  42. package/dist/monitoring/SessionReaper.js.map +1 -1
  43. package/dist/monitoring/SessionWatchdog.d.ts +8 -0
  44. package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
  45. package/dist/monitoring/SessionWatchdog.js +8 -0
  46. package/dist/monitoring/SessionWatchdog.js.map +1 -1
  47. package/dist/monitoring/SocketDisconnectSentinel.d.ts +8 -0
  48. package/dist/monitoring/SocketDisconnectSentinel.d.ts.map +1 -1
  49. package/dist/monitoring/SocketDisconnectSentinel.js +8 -0
  50. package/dist/monitoring/SocketDisconnectSentinel.js.map +1 -1
  51. package/dist/monitoring/guardManifest.d.ts +67 -0
  52. package/dist/monitoring/guardManifest.d.ts.map +1 -0
  53. package/dist/monitoring/guardManifest.js +536 -0
  54. package/dist/monitoring/guardManifest.js.map +1 -0
  55. package/dist/monitoring/guardPosture.d.ts +77 -0
  56. package/dist/monitoring/guardPosture.d.ts.map +1 -0
  57. package/dist/monitoring/guardPosture.js +198 -0
  58. package/dist/monitoring/guardPosture.js.map +1 -0
  59. package/dist/monitoring/guardPostureView.d.ts +100 -0
  60. package/dist/monitoring/guardPostureView.d.ts.map +1 -0
  61. package/dist/monitoring/guardPostureView.js +294 -0
  62. package/dist/monitoring/guardPostureView.js.map +1 -0
  63. package/dist/monitoring/probes/GuardPostureProbe.d.ts +82 -0
  64. package/dist/monitoring/probes/GuardPostureProbe.d.ts.map +1 -0
  65. package/dist/monitoring/probes/GuardPostureProbe.js +384 -0
  66. package/dist/monitoring/probes/GuardPostureProbe.js.map +1 -0
  67. package/dist/scaffold/templates.d.ts.map +1 -1
  68. package/dist/scaffold/templates.js +9 -0
  69. package/dist/scaffold/templates.js.map +1 -1
  70. package/dist/scheduler/JobScheduler.d.ts +10 -0
  71. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  72. package/dist/scheduler/JobScheduler.js +12 -0
  73. package/dist/scheduler/JobScheduler.js.map +1 -1
  74. package/dist/server/AgentServer.d.ts +8 -0
  75. package/dist/server/AgentServer.d.ts.map +1 -1
  76. package/dist/server/AgentServer.js +2 -0
  77. package/dist/server/AgentServer.js.map +1 -1
  78. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  79. package/dist/server/CapabilityIndex.js +11 -0
  80. package/dist/server/CapabilityIndex.js.map +1 -1
  81. package/dist/server/peerUrlGuard.d.ts +35 -0
  82. package/dist/server/peerUrlGuard.d.ts.map +1 -0
  83. package/dist/server/peerUrlGuard.js +93 -0
  84. package/dist/server/peerUrlGuard.js.map +1 -0
  85. package/dist/server/routes.d.ts +14 -0
  86. package/dist/server/routes.d.ts.map +1 -1
  87. package/dist/server/routes.js +136 -0
  88. package/dist/server/routes.js.map +1 -1
  89. package/package.json +3 -2
  90. package/scripts/lint-guard-manifest.js +264 -0
  91. package/src/data/builtin-manifest.json +65 -65
  92. package/src/data/state-coherence-registry.json +54 -18
  93. package/src/scaffold/templates.ts +9 -0
  94. package/upgrades/1.3.491.md +37 -0
  95. package/upgrades/side-effects/guard-posture-endpoint.md +101 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Guard-Posture Probe — the structural consumer (GUARD-POSTURE-ENDPOINT-SPEC §2.4).
3
+ *
4
+ * A readable posture surface nobody reads is a wish (Structure > Willpower):
5
+ * on the established probe cadence this probe evaluates the local guard
6
+ * inventory plus every peer's heartbeat-sourced posture and raises ONE
7
+ * aggregated, episode-keyed Attention item when an anomaly persists across
8
+ * consecutive probe ticks.
9
+ *
10
+ * Anomaly classes: `diverged-from-default` offs (the load-shed signature),
11
+ * `off-runtime-divergent` (the in-memory disable class), `on-stale`,
12
+ * `missing`, `errored` — and `flapping` (sub-cadence toggling: a guard whose
13
+ * posture flipped more than K times within the probe's recorded window of its
14
+ * own ticks, even when each individual sighting looks settled or quiet).
15
+ * `dark-default` offs are quiet — never anomalies.
16
+ *
17
+ * Data source rule (spec): heartbeat posture (with its age) is the input for
18
+ * every peer; the deep-read fallback fires ONLY for peers the registry
19
+ * currently believes ONLINE whose heartbeat block is missing or stale — for
20
+ * offline/dark peers the probe evaluates the durable last-known posture
21
+ * directly, NEVER a doomed fan-out (a permanently-dark peer must not buy a
22
+ * timeout on every probe tick forever).
23
+ *
24
+ * Episode semantics (P17/P19): ONE aggregated item per episode under the
25
+ * stable healthKey; while an episode is open the probe never re-emits (the
26
+ * attention layer's healthKey dedup is the backstop, not the mechanism); an
27
+ * episode ends only when ALL anomalies clear; a cleared-then-recurring
28
+ * anomaly set is a NEW episode (new id suffix, same healthKey).
29
+ *
30
+ * Episode state is durable JSON (atomic tmp+rename); a corrupt file
31
+ * re-baselines without crashing.
32
+ */
33
+ import type { Probe } from '../SystemReviewer.js';
34
+ import type { GuardInventoryResult, HeartbeatGuardPosture } from '../guardPostureView.js';
35
+ export declare const __verifyScope: readonly ["guard-posture"];
36
+ /** An anomaly must be seen on this many CONSECUTIVE ticks before alerting. */
37
+ export declare const PERSISTENCE_TICKS = 2;
38
+ /** Flapping threshold K — more than K flips within the window raises `flapping`. */
39
+ export declare const FLAP_K = 3;
40
+ /** Window (in probe ticks) over which posture flips are counted. */
41
+ export declare const FLAP_WINDOW_TICKS = 10;
42
+ /** A peer heartbeat posture older than this counts as stale for the deep-read fallback. */
43
+ export declare const STALE_POSTURE_AGE_MS: number;
44
+ /** Stable episode healthKey — same across episodes so the attention layer dedups per-episode. */
45
+ export declare const GUARD_POSTURE_HEALTH_KEY = "guard-posture-anomalies";
46
+ export type GuardAnomalyClass = 'diverged-from-default' | 'off-runtime-divergent' | 'on-stale' | 'missing' | 'errored' | 'flapping';
47
+ export interface PeerPostureRead {
48
+ machineId: string;
49
+ nickname?: string;
50
+ online: boolean;
51
+ /** Heartbeat-sourced compact block; durable last-known for offline peers. */
52
+ posture: HeartbeatGuardPosture | null;
53
+ /** Receiver-side age of the posture block; null when no posture ever received. */
54
+ postureAgeMs: number | null;
55
+ }
56
+ export interface GuardPostureAttentionItem {
57
+ id: string;
58
+ title: string;
59
+ summary: string;
60
+ category: string;
61
+ priority: 'URGENT' | 'HIGH' | 'NORMAL' | 'LOW';
62
+ sourceContext?: string;
63
+ healthKey?: string;
64
+ }
65
+ export interface GuardPostureProbeDeps {
66
+ /** One-read local inventory (GET /guards source) or null when unavailable. */
67
+ getLocalPosture: () => GuardInventoryResult | null;
68
+ /** Heartbeat-sourced peer postures (durable last-known for offline peers). */
69
+ getPeerPostures: () => PeerPostureRead[];
70
+ /**
71
+ * Optional deep read — used ONLY for peers reported ONLINE whose posture is
72
+ * null or stale. NEVER called for offline peers (spec §2.4).
73
+ */
74
+ deepReadPeer?: (machineId: string) => Promise<unknown>;
75
+ /** Aggregated emit funnel (P17) — ONE item per episode. */
76
+ emitAttention: (item: GuardPostureAttentionItem) => Promise<void>;
77
+ /** Episode state persists at `<stateDir>/state/guard-posture-episodes.json`. */
78
+ stateDir: string;
79
+ now?: () => number;
80
+ }
81
+ export declare function createGuardPostureProbes(deps: GuardPostureProbeDeps): Probe[];
82
+ //# sourceMappingURL=GuardPostureProbe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuardPostureProbe.d.ts","sourceRoot":"","sources":["../../../src/monitoring/probes/GuardPostureProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,aAAa,4BAAwD,CAAC;AAEnF,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,oFAAoF;AACpF,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAChD,iGAAiG;AACjG,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,uBAAuB,GACvB,UAAU,GACV,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,kFAAkF;IAClF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,eAAe,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAC;IACnD,8EAA8E;IAC9E,eAAe,EAAE,MAAM,eAAe,EAAE,CAAC;IACzC;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,2DAA2D;IAC3D,aAAa,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAsND,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,KAAK,EAAE,CAwM7E"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Guard-Posture Probe — the structural consumer (GUARD-POSTURE-ENDPOINT-SPEC §2.4).
3
+ *
4
+ * A readable posture surface nobody reads is a wish (Structure > Willpower):
5
+ * on the established probe cadence this probe evaluates the local guard
6
+ * inventory plus every peer's heartbeat-sourced posture and raises ONE
7
+ * aggregated, episode-keyed Attention item when an anomaly persists across
8
+ * consecutive probe ticks.
9
+ *
10
+ * Anomaly classes: `diverged-from-default` offs (the load-shed signature),
11
+ * `off-runtime-divergent` (the in-memory disable class), `on-stale`,
12
+ * `missing`, `errored` — and `flapping` (sub-cadence toggling: a guard whose
13
+ * posture flipped more than K times within the probe's recorded window of its
14
+ * own ticks, even when each individual sighting looks settled or quiet).
15
+ * `dark-default` offs are quiet — never anomalies.
16
+ *
17
+ * Data source rule (spec): heartbeat posture (with its age) is the input for
18
+ * every peer; the deep-read fallback fires ONLY for peers the registry
19
+ * currently believes ONLINE whose heartbeat block is missing or stale — for
20
+ * offline/dark peers the probe evaluates the durable last-known posture
21
+ * directly, NEVER a doomed fan-out (a permanently-dark peer must not buy a
22
+ * timeout on every probe tick forever).
23
+ *
24
+ * Episode semantics (P17/P19): ONE aggregated item per episode under the
25
+ * stable healthKey; while an episode is open the probe never re-emits (the
26
+ * attention layer's healthKey dedup is the backstop, not the mechanism); an
27
+ * episode ends only when ALL anomalies clear; a cleared-then-recurring
28
+ * anomaly set is a NEW episode (new id suffix, same healthKey).
29
+ *
30
+ * Episode state is durable JSON (atomic tmp+rename); a corrupt file
31
+ * re-baselines without crashing.
32
+ */
33
+ import fs from 'node:fs';
34
+ import path from 'node:path';
35
+ export const __verifyScope = ['guard-posture'];
36
+ /** An anomaly must be seen on this many CONSECUTIVE ticks before alerting. */
37
+ export const PERSISTENCE_TICKS = 2;
38
+ /** Flapping threshold K — more than K flips within the window raises `flapping`. */
39
+ export const FLAP_K = 3;
40
+ /** Window (in probe ticks) over which posture flips are counted. */
41
+ export const FLAP_WINDOW_TICKS = 10;
42
+ /** A peer heartbeat posture older than this counts as stale for the deep-read fallback. */
43
+ export const STALE_POSTURE_AGE_MS = 15 * 60_000;
44
+ /** Stable episode healthKey — same across episodes so the attention layer dedups per-episode. */
45
+ export const GUARD_POSTURE_HEALTH_KEY = 'guard-posture-anomalies';
46
+ function freshState(now) {
47
+ return {
48
+ version: 1,
49
+ tick: 0,
50
+ episodeCounter: 0,
51
+ openEpisodeId: null,
52
+ episodeEmitted: false,
53
+ anomalies: {},
54
+ guardHistory: {},
55
+ updatedAt: now,
56
+ };
57
+ }
58
+ function stateFilePath(stateDir) {
59
+ return path.join(stateDir, 'state', 'guard-posture-episodes.json');
60
+ }
61
+ function loadState(stateDir, now) {
62
+ const file = stateFilePath(stateDir);
63
+ try {
64
+ if (!fs.existsSync(file))
65
+ return freshState(now);
66
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
67
+ if (parsed?.version === 1 &&
68
+ typeof parsed.tick === 'number' &&
69
+ typeof parsed.episodeCounter === 'number' &&
70
+ parsed.anomalies !== null && typeof parsed.anomalies === 'object' &&
71
+ parsed.guardHistory !== null && typeof parsed.guardHistory === 'object') {
72
+ return {
73
+ version: 1,
74
+ tick: parsed.tick,
75
+ episodeCounter: parsed.episodeCounter,
76
+ openEpisodeId: typeof parsed.openEpisodeId === 'string' ? parsed.openEpisodeId : null,
77
+ episodeEmitted: parsed.episodeEmitted === true,
78
+ anomalies: parsed.anomalies,
79
+ guardHistory: parsed.guardHistory,
80
+ updatedAt: typeof parsed.updatedAt === 'number' ? parsed.updatedAt : now,
81
+ };
82
+ }
83
+ }
84
+ catch {
85
+ // Corrupt episode state — re-baseline rather than crash; persistence
86
+ // counting restarts (the safe direction: no alert fires off bad state).
87
+ }
88
+ return freshState(now);
89
+ }
90
+ function saveState(stateDir, state) {
91
+ const file = stateFilePath(stateDir);
92
+ fs.mkdirSync(path.dirname(file), { recursive: true });
93
+ const tmp = `${file}.tmp`;
94
+ /* state-registry: guard-posture-episodes */
95
+ fs.writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf-8');
96
+ fs.renameSync(tmp, file);
97
+ }
98
+ function anomalyKey(machineId, cls, guardKey) {
99
+ return `${machineId}|${cls}|${guardKey ?? '*'}`;
100
+ }
101
+ const HISTORY_SEP = '::';
102
+ /**
103
+ * Evaluate a full inventory (local machine, or a peer deep-read that returned
104
+ * one). Full per-key detail for every class; dark-default offs are quiet.
105
+ */
106
+ function evaluateInventory(machineId, label, inv, anomalies, postures) {
107
+ for (const g of inv.guards) {
108
+ // Posture signature for flap tracking — offClass included so a flip
109
+ // between dark-default-off and on is still a flip.
110
+ const signature = g.effective === 'off' ? `off:${g.offClass ?? 'unknown'}` : g.effective;
111
+ postures.set(`${machineId}${HISTORY_SEP}${g.key}`, signature);
112
+ switch (g.effective) {
113
+ case 'off':
114
+ if (g.offClass === 'diverged-from-default') {
115
+ anomalies.push({
116
+ key: anomalyKey(machineId, 'diverged-from-default', g.key),
117
+ machineId, label, cls: 'diverged-from-default', guardKey: g.key,
118
+ });
119
+ }
120
+ // dark-default offs are quiet — never anomalies.
121
+ break;
122
+ case 'off-runtime-divergent':
123
+ case 'on-stale':
124
+ case 'missing':
125
+ case 'errored':
126
+ anomalies.push({
127
+ key: anomalyKey(machineId, g.effective, g.key),
128
+ machineId, label, cls: g.effective, guardKey: g.key,
129
+ });
130
+ break;
131
+ default:
132
+ break;
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Evaluate a compact heartbeat posture block. Only the two sharpest signals
138
+ * carry per-key detail (offDeviantKeys, offRuntimeDivergentKeys); the other
139
+ * classes are count-only (spec §2.4 last line / §3(f)).
140
+ */
141
+ function evaluateHeartbeat(machineId, label, hb, anomalies, postures, priorHistory) {
142
+ const offDeviant = new Set(Array.isArray(hb.offDeviantKeys) ? hb.offDeviantKeys : []);
143
+ const offRuntime = new Set(Array.isArray(hb.offRuntimeDivergentKeys) ? hb.offRuntimeDivergentKeys : []);
144
+ for (const key of offDeviant) {
145
+ anomalies.push({
146
+ key: anomalyKey(machineId, 'diverged-from-default', key),
147
+ machineId, label, cls: 'diverged-from-default', guardKey: key,
148
+ });
149
+ postures.set(`${machineId}${HISTORY_SEP}${key}`, 'off:diverged-from-default');
150
+ }
151
+ for (const key of offRuntime) {
152
+ anomalies.push({
153
+ key: anomalyKey(machineId, 'off-runtime-divergent', key),
154
+ machineId, label, cls: 'off-runtime-divergent', guardKey: key,
155
+ });
156
+ postures.set(`${machineId}${HISTORY_SEP}${key}`, 'off-runtime-divergent');
157
+ }
158
+ // Previously-tracked keys that are no longer in either list record a
159
+ // 'settled' posture so the flip OUT is observable (flap awareness).
160
+ const prefix = `${machineId}${HISTORY_SEP}`;
161
+ for (const histKey of Object.keys(priorHistory)) {
162
+ if (histKey.startsWith(prefix) && !postures.has(histKey)) {
163
+ postures.set(histKey, 'settled');
164
+ }
165
+ }
166
+ const countOnly = [
167
+ ['on-stale', typeof hb.onStale === 'number' ? hb.onStale : 0],
168
+ ['missing', typeof hb.missing === 'number' ? hb.missing : 0],
169
+ ['errored', typeof hb.errored === 'number' ? hb.errored : 0],
170
+ ];
171
+ for (const [cls, count] of countOnly) {
172
+ if (count > 0) {
173
+ anomalies.push({ key: anomalyKey(machineId, cls), machineId, label, cls, count });
174
+ }
175
+ }
176
+ }
177
+ /** Best-effort interpretation of an untyped deep-read response. */
178
+ function interpretDeepRead(raw) {
179
+ if (!raw || typeof raw !== 'object')
180
+ return null;
181
+ const o = raw;
182
+ if (Array.isArray(o.guards))
183
+ return { inventory: o };
184
+ if (Array.isArray(o.offDeviantKeys))
185
+ return { heartbeat: o };
186
+ return null;
187
+ }
188
+ function formatAnomaly(a) {
189
+ if (a.guardKey)
190
+ return `[${a.label}] ${a.guardKey}: ${a.cls}`;
191
+ return `[${a.label}] ${a.count ?? '?'} guard(s) ${a.cls} (count-only via heartbeat)`;
192
+ }
193
+ // ───────────────────────────────── probe ───────────────────────────────────
194
+ export function createGuardPostureProbes(deps) {
195
+ const tier = 2;
196
+ const feature = 'Guard Posture';
197
+ const probeId = 'instar.guard-posture.anomalies';
198
+ const probeName = 'Guard Posture Anomalies';
199
+ const now = deps.now ?? (() => Date.now());
200
+ async function runTick() {
201
+ const base = { probeId, name: probeName, tier, durationMs: 0 };
202
+ try {
203
+ const state = loadState(deps.stateDir, now());
204
+ const tick = state.tick + 1;
205
+ const current = [];
206
+ const postures = new Map();
207
+ // ── Local machine ──
208
+ const localInv = deps.getLocalPosture();
209
+ if (localInv)
210
+ evaluateInventory('local', 'local', localInv, current, postures);
211
+ // ── Peers ──
212
+ for (const peer of deps.getPeerPostures()) {
213
+ const label = peer.nickname ?? peer.machineId;
214
+ const postureStale = peer.postureAgeMs !== null && peer.postureAgeMs > STALE_POSTURE_AGE_MS;
215
+ let evaluated = false;
216
+ if (peer.online && deps.deepReadPeer && (peer.posture === null || postureStale)) {
217
+ // ONLINE peer with a missing/stale heartbeat block — the only case
218
+ // the deep read may fire (never offline peers: a permanently-dark
219
+ // peer must not buy a timeout on every probe tick forever).
220
+ try {
221
+ const interpreted = interpretDeepRead(await deps.deepReadPeer(peer.machineId));
222
+ if (interpreted?.inventory) {
223
+ evaluateInventory(peer.machineId, label, interpreted.inventory, current, postures);
224
+ evaluated = true;
225
+ }
226
+ else if (interpreted?.heartbeat) {
227
+ evaluateHeartbeat(peer.machineId, label, interpreted.heartbeat, current, postures, state.guardHistory);
228
+ evaluated = true;
229
+ }
230
+ }
231
+ catch {
232
+ // Deep read failed — fall back to last-known posture below.
233
+ }
234
+ }
235
+ if (!evaluated && peer.posture) {
236
+ // Heartbeat (or durable last-known, for offline peers) is the input.
237
+ evaluateHeartbeat(peer.machineId, label, peer.posture, current, postures, state.guardHistory);
238
+ }
239
+ // No posture ever received and no deep read: unknown — no anomaly to
240
+ // raise from nothing (the pool surface renders "guards: unknown").
241
+ }
242
+ // ── Flap awareness — record posture deltas between our own ticks ──
243
+ const nextHistory = {};
244
+ for (const [histKey, signature] of postures) {
245
+ const prev = state.guardHistory[histKey];
246
+ let flips = prev ? prev.flips.filter((t) => t > tick - FLAP_WINDOW_TICKS) : [];
247
+ if (prev && prev.lastPosture !== signature)
248
+ flips = [...flips, tick];
249
+ nextHistory[histKey] = { lastPosture: signature, flips };
250
+ if (flips.length > FLAP_K) {
251
+ const sep = histKey.indexOf(HISTORY_SEP);
252
+ const machineId = histKey.slice(0, sep);
253
+ const guardKey = histKey.slice(sep + HISTORY_SEP.length);
254
+ const label = current.find((a) => a.machineId === machineId)?.label ??
255
+ (machineId === 'local' ? 'local' : machineId);
256
+ current.push({
257
+ key: anomalyKey(machineId, 'flapping', guardKey),
258
+ machineId, label, cls: 'flapping', guardKey,
259
+ });
260
+ }
261
+ }
262
+ state.guardHistory = nextHistory;
263
+ // ── Persistence accounting (≥2 consecutive ticks before alerting) ──
264
+ const nextAnomalies = {};
265
+ for (const a of current) {
266
+ const prev = state.anomalies[a.key];
267
+ if (prev && prev.lastSeenTick === tick - 1) {
268
+ nextAnomalies[a.key] = { firstSeenTick: prev.firstSeenTick, lastSeenTick: tick };
269
+ }
270
+ else {
271
+ nextAnomalies[a.key] = { firstSeenTick: tick, lastSeenTick: tick };
272
+ }
273
+ }
274
+ state.anomalies = nextAnomalies;
275
+ // Flapping is alertable on sight: its >K flips were, by construction,
276
+ // recorded across multiple prior ticks — the persistence intent is
277
+ // already satisfied (each sighting may look settled, that's the point).
278
+ const alertable = current.filter((a) => {
279
+ if (a.cls === 'flapping')
280
+ return true;
281
+ const rec = nextAnomalies[a.key];
282
+ return rec.lastSeenTick - rec.firstSeenTick + 1 >= PERSISTENCE_TICKS;
283
+ });
284
+ // ── Episode lifecycle ──
285
+ let emittedThisTick = false;
286
+ if (current.length === 0) {
287
+ // An episode ends ONLY when ALL anomalies clear.
288
+ state.openEpisodeId = null;
289
+ state.episodeEmitted = false;
290
+ }
291
+ else if (alertable.length > 0) {
292
+ if (!state.openEpisodeId) {
293
+ // Cleared-then-recurring = NEW episode: new id suffix, same healthKey.
294
+ state.episodeCounter += 1;
295
+ state.openEpisodeId = `ep-${state.episodeCounter}`;
296
+ state.episodeEmitted = false;
297
+ }
298
+ if (!state.episodeEmitted) {
299
+ // ONE aggregated item per episode listing all current anomalies
300
+ // across all machines (P17) — never one item per anomaly.
301
+ const lines = [...current]
302
+ .sort((x, y) => x.key.localeCompare(y.key))
303
+ .map(formatAnomaly);
304
+ try {
305
+ await deps.emitAttention({
306
+ id: `guard-posture:${state.openEpisodeId}`,
307
+ title: `Guard posture anomalies (${current.length})`,
308
+ summary: `Guard-posture anomalies persisting across probe ticks:\n` +
309
+ lines.map((l) => `- ${l}`).join('\n'),
310
+ category: 'guard-posture',
311
+ priority: 'HIGH',
312
+ sourceContext: 'guard-posture-probe',
313
+ healthKey: GUARD_POSTURE_HEALTH_KEY,
314
+ });
315
+ state.episodeEmitted = true;
316
+ emittedThisTick = true;
317
+ }
318
+ catch {
319
+ // Emit failed — keep episodeEmitted=false so the next tick retries
320
+ // (still ONE item per episode: same id, attention-layer dedup backstop).
321
+ }
322
+ }
323
+ // Episode already open + emitted: do NOT re-emit while it persists.
324
+ }
325
+ state.tick = tick;
326
+ state.updatedAt = now();
327
+ saveState(deps.stateDir, state);
328
+ const diagnostics = {
329
+ tick,
330
+ currentAnomalies: current.length,
331
+ alertable: alertable.length,
332
+ openEpisode: state.openEpisodeId,
333
+ emittedThisTick,
334
+ };
335
+ if (alertable.length > 0) {
336
+ const lines = alertable
337
+ .sort((x, y) => x.key.localeCompare(y.key))
338
+ .map(formatAnomaly);
339
+ return {
340
+ ...base,
341
+ passed: false,
342
+ description: `Guard-posture anomalies persisting (${alertable.length}): ${lines.join('; ')}`,
343
+ error: `Episode ${state.openEpisodeId}: ${alertable.length} anomaly(ies) across machines`,
344
+ diagnostics,
345
+ remediation: [
346
+ 'Read GET /guards?scope=pool for the full per-machine posture',
347
+ 'A diverged-from-default off is the load-shed signature — re-enable deliberately (send the FULL config block; PATCH /config merges one level deep)',
348
+ 'off-runtime-divergent means the live runtime contradicts an on-config — restart the component or its server',
349
+ ],
350
+ };
351
+ }
352
+ return {
353
+ ...base,
354
+ passed: true,
355
+ description: current.length === 0
356
+ ? 'No guard-posture anomalies across machines'
357
+ : `${current.length} anomaly(ies) observed once — awaiting persistence (no alert yet)`,
358
+ diagnostics,
359
+ };
360
+ }
361
+ catch (err) {
362
+ return {
363
+ ...base,
364
+ passed: false,
365
+ description: 'Guard-posture probe failed to evaluate',
366
+ error: err instanceof Error ? err.message : String(err),
367
+ stack: err instanceof Error ? err.stack : undefined,
368
+ remediation: ['Check guard-posture wiring (getLocalPosture/getPeerPostures deps)'],
369
+ };
370
+ }
371
+ }
372
+ return [
373
+ {
374
+ id: probeId,
375
+ name: probeName,
376
+ tier,
377
+ feature,
378
+ timeoutMs: 10_000,
379
+ prerequisites: () => true,
380
+ run: runTick,
381
+ },
382
+ ];
383
+ }
384
+ //# sourceMappingURL=GuardPostureProbe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuardPostureProbe.js","sourceRoot":"","sources":["../../../src/monitoring/probes/GuardPostureProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,eAAe,CAAqC,CAAC;AAEnF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,oFAAoF;AACpF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AACxB,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,MAAM,CAAC;AAChD,iGAAiG;AACjG,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAwElE,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,CAAC;QACjB,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,KAAK;QACrB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,6BAA6B,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,GAAW;IAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA0B,CAAC;QACnF,IACE,MAAM,EAAE,OAAO,KAAK,CAAC;YACrB,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ;YACzC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YACjE,MAAM,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EACvE,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,aAAa,EAAE,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;gBACrF,cAAc,EAAE,MAAM,CAAC,cAAc,KAAK,IAAI;gBAC9C,SAAS,EAAE,MAAM,CAAC,SAAiD;gBACnE,YAAY,EAAE,MAAM,CAAC,YAA+C;gBACpE,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,wEAAwE;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,KAAmB;IACtD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAeD,SAAS,UAAU,CAAC,SAAiB,EAAE,GAAsB,EAAE,QAAiB;IAC9E,OAAO,GAAG,SAAS,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB;;;GAGG;AACH,SAAS,iBAAiB,CACxB,SAAiB,EACjB,KAAa,EACb,GAAyB,EACzB,SAA2B,EAC3B,QAA6B;IAE7B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,oEAAoE;QACpE,mDAAmD;QACnD,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAE9D,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YACpB,KAAK,KAAK;gBACR,IAAI,CAAC,CAAC,QAAQ,KAAK,uBAAuB,EAAE,CAAC;oBAC3C,SAAS,CAAC,IAAI,CAAC;wBACb,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC,GAAG,CAAC;wBAC1D,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG;qBAChE,CAAC,CAAC;gBACL,CAAC;gBACD,iDAAiD;gBACjD,MAAM;YACR,KAAK,uBAAuB,CAAC;YAC7B,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS,CAAC;YACf,KAAK,SAAS;gBACZ,SAAS,CAAC,IAAI,CAAC;oBACb,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC;oBAC9C,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG;iBACpD,CAAC,CAAC;gBACH,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,SAAiB,EACjB,KAAa,EACb,EAAyB,EACzB,SAA2B,EAC3B,QAA6B,EAC7B,YAA6C;IAE7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAExG,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC;YACb,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,uBAAuB,EAAE,GAAG,CAAC;YACxD,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG;SAC9D,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC;YACb,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,uBAAuB,EAAE,GAAG,CAAC;YACxD,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG;SAC9D,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC5E,CAAC;IAED,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,MAAM,GAAG,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAuC;QACpD,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,iBAAiB,CACxB,GAAY;IAEZ,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAoC,EAAE,CAAC;IACxF,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAqC,EAAE,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAAiB;IACtC,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9D,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,6BAA6B,CAAC;AACvF,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,wBAAwB,CAAC,IAA2B;IAClE,MAAM,IAAI,GAAG,CAAU,CAAC;IACxB,MAAM,OAAO,GAAG,eAAe,CAAC;IAChC,MAAM,OAAO,GAAG,gCAAgC,CAAC;IACjD,MAAM,SAAS,GAAG,yBAAyB,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3C,KAAK,UAAU,OAAO;QACpB,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YAE5B,MAAM,OAAO,GAAqB,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;YAE3C,sBAAsB;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,QAAQ;gBAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE/E,cAAc;YACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;gBAC9C,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC;gBAEzE,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC;oBAChF,mEAAmE;oBACnE,kEAAkE;oBAClE,4DAA4D;oBAC5D,IAAI,CAAC;wBACH,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC/E,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;4BAC3B,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;4BACnF,SAAS,GAAG,IAAI,CAAC;wBACnB,CAAC;6BAAM,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;4BAClC,iBAAiB,CACf,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CACpF,CAAC;4BACF,SAAS,GAAG,IAAI,CAAC;wBACnB,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,4DAA4D;oBAC9D,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC/B,qEAAqE;oBACrE,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;gBAChG,CAAC;gBACD,qEAAqE;gBACrE,mEAAmE;YACrE,CAAC;YAED,qEAAqE;YACrE,MAAM,WAAW,GAAoC,EAAE,CAAC;YACxD,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/E,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;oBAAE,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrE,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACzD,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzD,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK;wBACrD,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC;wBACX,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;wBAChD,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ;qBAC5C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;YAEjC,sEAAsE;YACtE,MAAM,aAAa,GAAyC,EAAE,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC3C,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;gBACnF,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;gBACrE,CAAC;YACH,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;YAEhC,sEAAsE;YACtE,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU;oBAAE,OAAO,IAAI,CAAC;gBACtC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,iBAAiB,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,iDAAiD;gBACjD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC3B,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;YAC/B,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBACzB,uEAAuE;oBACvE,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;oBAC1B,KAAK,CAAC,aAAa,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;oBACnD,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC/B,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC1B,gEAAgE;oBAChE,0DAA0D;oBAC1D,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;yBACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;yBAC1C,GAAG,CAAC,aAAa,CAAC,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,aAAa,CAAC;4BACvB,EAAE,EAAE,iBAAiB,KAAK,CAAC,aAAa,EAAE;4BAC1C,KAAK,EAAE,4BAA4B,OAAO,CAAC,MAAM,GAAG;4BACpD,OAAO,EACL,0DAA0D;gCAC1D,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;4BACvC,QAAQ,EAAE,eAAe;4BACzB,QAAQ,EAAE,MAAM;4BAChB,aAAa,EAAE,qBAAqB;4BACpC,SAAS,EAAE,wBAAwB;yBACpC,CAAC,CAAC;wBACH,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;wBAC5B,eAAe,GAAG,IAAI,CAAC;oBACzB,CAAC;oBAAC,MAAM,CAAC;wBACP,mEAAmE;wBACnE,yEAAyE;oBAC3E,CAAC;gBACH,CAAC;gBACD,oEAAoE;YACtE,CAAC;YAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YACxB,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG;gBAClB,IAAI;gBACJ,gBAAgB,EAAE,OAAO,CAAC,MAAM;gBAChC,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,WAAW,EAAE,KAAK,CAAC,aAAa;gBAChC,eAAe;aAChB,CAAC;YAEF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,SAAS;qBACpB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBAC1C,GAAG,CAAC,aAAa,CAAC,CAAC;gBACtB,OAAO;oBACL,GAAG,IAAI;oBACP,MAAM,EAAE,KAAK;oBACb,WAAW,EAAE,uCAAuC,SAAS,CAAC,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5F,KAAK,EAAE,WAAW,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,MAAM,+BAA+B;oBACzF,WAAW;oBACX,WAAW,EAAE;wBACX,8DAA8D;wBAC9D,mJAAmJ;wBACnJ,6GAA6G;qBAC9G;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,IAAI;gBACZ,WAAW,EACT,OAAO,CAAC,MAAM,KAAK,CAAC;oBAClB,CAAC,CAAC,4CAA4C;oBAC9C,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,mEAAmE;gBAC1F,WAAW;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,wCAAwC;gBACrD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBACnD,WAAW,EAAE,CAAC,mEAAmE,CAAC;aACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;YACzB,GAAG,EAAE,OAAO;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CA24CR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CA2TR"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CAo5CR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CA2TR"}
@@ -399,6 +399,15 @@ This routes feedback to the Instar maintainers automatically. Valid types: \`bug
399
399
  - Also: when a session is autonomously shut down, you get a "your session was shut down — <reason>" notice (recovery-bounces and your own operator kills stay silent). Turn the notice off with \`{"monitoring": {"reapNotify": {"enabled": false}}}\`.
400
400
  - Proactive: user asks "where did my session go?" / "why did X disappear?" / "did something get killed?" → GET /sessions/reap-log and explain the most recent reaped/skipped entries for that session.
401
401
 
402
+ ### Guard Posture — which safety systems are genuinely on (\`GET /guards\`)
403
+
404
+ Every guard (monitoring sentinels, reapers, the scheduler, …) is graded by what can be VERIFIED, never by what the config wishes: \`on-confirmed\` / \`on-unverified\` / \`on-stale\` / \`on-dry-run\` / \`off\` (\`dark-default\` = ships-dark, quiet vs \`diverged-from-default\` = default-on but currently off — the load-shed signature) / \`diverged-pending-restart\` / \`errored\` / \`missing\` / \`off-runtime-divergent\`. Only the "off that shouldn't be off" and runtime-contradiction classes alert — a ships-dark feature that is off is normal, never noise.
405
+ - This machine: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/guards\`
406
+ - Every machine (heartbeat-fresh, or last-known posture with its age for a dark peer): \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/guards?scope=pool"\`
407
+ - **When to use** (PROACTIVE — this is the trigger): "are my guards on?" / "why didn't the watchdog/reaper fire on machine X?" / a post-incident sweep after ANY load-shed → read \`/guards?scope=pool\` and report the deviant rows instead of guessing from config memory. The Machines dashboard tab shows each machine's last-known posture with its age — even for a peer that is currently dark.
408
+ - **HAZARD — re-enabling a guard via \`PATCH /config\`**: send the guard's FULL config block (the merge is one-level-deep and a partial block erases sibling tuning); read the current block from the source machine first (\`GET /guards\` shows posture; the config block itself comes from that machine's config).
409
+ - Three complementary layers, one shared inventory: the Guard-Posture Tripwire covers enabled→disabled transitions at boot (\`logs/guard-posture.jsonl\`); \`/guards\` is the steady-state read; the GuardPostureProbe raises ONE aggregated Attention item when an anomaly persists across consecutive probes.
410
+
402
411
  **Coherence Journal** — The durable "what happened where, and where are the files?" answer for a multi-machine agent. Every machine writes append-only event streams (topic placement + why it moved, session open/close/reap, autonomous runs + their artifact paths); the read API serves a merged view so you answer placement/artifact questions from local disk instead of grepping rotating logs on the right machine.
403
412
  - Read it: \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/coherence/journal?topic=N&kind=topic-placement&limit=50"\` → \`{ entries: [...], streams: {...}, skippedCorrupt }\` (+ a partial-result flag when a read bound was hit). Filters: \`topic\`, \`kind\` (\`topic-placement\`|\`session-lifecycle\`|\`autonomous-run\`), \`machine\`, \`limit\`, \`cursor\`. Read-only; 503 when the journal is not enabled on this agent.
404
413
  - TRUST NOTE: entries tagged \`source: "replica"\` are another machine's copied history — always a little stale (\`stalenessMs\` says how much). NEVER make a kill/spawn/move decision off journal data; it answers questions, the live systems decide.
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
@@ -369,6 +369,16 @@ export declare class JobScheduler {
369
369
  * temporary "full tools" behavior is documented and observable.
370
370
  */
371
371
  private emitAllowlistSignals;
372
+ /** Sync in-memory runtime read for the GuardRegistry (GET /guards).
373
+ * Registration is not life: a load-shed pause reads enabled:false
374
+ * (off-runtime-divergent against an on-config), never healthy. Cheap
375
+ * property reads ONLY — getStatus() lists sessions and must not be
376
+ * called from the guards route. */
377
+ guardStatus(): {
378
+ enabled: boolean;
379
+ jobCount: number;
380
+ pausedJobCount: number;
381
+ };
372
382
  }
373
383
  /** Result of {@link JobScheduler.resolveAllowlist}. Pure-data; no state. */
374
384
  export interface AllowlistResolution {
@@ -1 +1 @@
1
- {"version":3,"file":"JobScheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobScheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JobScheduler.d.ts","sourceRoot":"","sources":["../../src/scheduler/JobScheduler.ts"],"names":[],"mappings":"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"}
@@ -1815,5 +1815,17 @@ export class JobScheduler {
1815
1815
  }
1816
1816
  }
1817
1817
  }
1818
+ /** Sync in-memory runtime read for the GuardRegistry (GET /guards).
1819
+ * Registration is not life: a load-shed pause reads enabled:false
1820
+ * (off-runtime-divergent against an on-config), never healthy. Cheap
1821
+ * property reads ONLY — getStatus() lists sessions and must not be
1822
+ * called from the guards route. */
1823
+ guardStatus() {
1824
+ return {
1825
+ enabled: this.running && !this.paused,
1826
+ jobCount: this.jobs.length,
1827
+ pausedJobCount: this.jobs.filter((j) => !j.enabled).length,
1828
+ };
1829
+ }
1818
1830
  }
1819
1831
  //# sourceMappingURL=JobScheduler.js.map