instar 1.3.489 → 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 (175) 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 +1124 -28
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  6. package/dist/config/ConfigDefaults.js +23 -0
  7. package/dist/config/ConfigDefaults.js.map +1 -1
  8. package/dist/core/CodexResumeMap.d.ts +95 -0
  9. package/dist/core/CodexResumeMap.d.ts.map +1 -0
  10. package/dist/core/CodexResumeMap.js +283 -0
  11. package/dist/core/CodexResumeMap.js.map +1 -0
  12. package/dist/core/GuardPostureStore.d.ts +38 -0
  13. package/dist/core/GuardPostureStore.d.ts.map +1 -0
  14. package/dist/core/GuardPostureStore.js +87 -0
  15. package/dist/core/GuardPostureStore.js.map +1 -0
  16. package/dist/core/MachinePoolRegistry.d.ts +16 -0
  17. package/dist/core/MachinePoolRegistry.d.ts.map +1 -1
  18. package/dist/core/MachinePoolRegistry.js +24 -1
  19. package/dist/core/MachinePoolRegistry.js.map +1 -1
  20. package/dist/core/MeshRpc.d.ts +3 -0
  21. package/dist/core/MeshRpc.d.ts.map +1 -1
  22. package/dist/core/MeshRpc.js +5 -0
  23. package/dist/core/MeshRpc.js.map +1 -1
  24. package/dist/core/ModelSwapService.d.ts +26 -11
  25. package/dist/core/ModelSwapService.d.ts.map +1 -1
  26. package/dist/core/ModelSwapService.js +59 -21
  27. package/dist/core/ModelSwapService.js.map +1 -1
  28. package/dist/core/PeerPresencePuller.d.ts +9 -0
  29. package/dist/core/PeerPresencePuller.d.ts.map +1 -1
  30. package/dist/core/PeerPresencePuller.js +1 -1
  31. package/dist/core/PeerPresencePuller.js.map +1 -1
  32. package/dist/core/PostUpdateMigrator.d.ts +16 -0
  33. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  34. package/dist/core/PostUpdateMigrator.js +92 -4
  35. package/dist/core/PostUpdateMigrator.js.map +1 -1
  36. package/dist/core/SessionManager.d.ts +4 -0
  37. package/dist/core/SessionManager.d.ts.map +1 -1
  38. package/dist/core/SessionManager.js +3 -0
  39. package/dist/core/SessionManager.js.map +1 -1
  40. package/dist/core/SessionRefresh.d.ts +36 -7
  41. package/dist/core/SessionRefresh.d.ts.map +1 -1
  42. package/dist/core/SessionRefresh.js +90 -29
  43. package/dist/core/SessionRefresh.js.map +1 -1
  44. package/dist/core/TopicProfileOrchestrator.d.ts +480 -0
  45. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -0
  46. package/dist/core/TopicProfileOrchestrator.js +1404 -0
  47. package/dist/core/TopicProfileOrchestrator.js.map +1 -0
  48. package/dist/core/TopicProfileResolver.d.ts +104 -0
  49. package/dist/core/TopicProfileResolver.d.ts.map +1 -0
  50. package/dist/core/TopicProfileResolver.js +231 -0
  51. package/dist/core/TopicProfileResolver.js.map +1 -0
  52. package/dist/core/TopicProfileStore.d.ts +308 -0
  53. package/dist/core/TopicProfileStore.d.ts.map +1 -0
  54. package/dist/core/TopicProfileStore.js +781 -0
  55. package/dist/core/TopicProfileStore.js.map +1 -0
  56. package/dist/core/TopicProfileTransferCarrier.d.ts +227 -0
  57. package/dist/core/TopicProfileTransferCarrier.d.ts.map +1 -0
  58. package/dist/core/TopicProfileTransferCarrier.js +533 -0
  59. package/dist/core/TopicProfileTransferCarrier.js.map +1 -0
  60. package/dist/core/TopicResumeMap.d.ts +67 -1
  61. package/dist/core/TopicResumeMap.d.ts.map +1 -1
  62. package/dist/core/TopicResumeMap.js +114 -1
  63. package/dist/core/TopicResumeMap.js.map +1 -1
  64. package/dist/core/classifyProfileChange.d.ts +83 -0
  65. package/dist/core/classifyProfileChange.d.ts.map +1 -0
  66. package/dist/core/classifyProfileChange.js +274 -0
  67. package/dist/core/classifyProfileChange.js.map +1 -0
  68. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  69. package/dist/core/devGatedFeatures.js +6 -0
  70. package/dist/core/devGatedFeatures.js.map +1 -1
  71. package/dist/core/frameworkSessionLaunch.d.ts +26 -0
  72. package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
  73. package/dist/core/frameworkSessionLaunch.js +58 -0
  74. package/dist/core/frameworkSessionLaunch.js.map +1 -1
  75. package/dist/core/slackRefreshBinding.d.ts +83 -0
  76. package/dist/core/slackRefreshBinding.d.ts.map +1 -0
  77. package/dist/core/slackRefreshBinding.js +54 -0
  78. package/dist/core/slackRefreshBinding.js.map +1 -0
  79. package/dist/core/topicProfileIngress.d.ts +128 -0
  80. package/dist/core/topicProfileIngress.d.ts.map +1 -0
  81. package/dist/core/topicProfileIngress.js +249 -0
  82. package/dist/core/topicProfileIngress.js.map +1 -0
  83. package/dist/core/topicProfileValidation.d.ts +109 -0
  84. package/dist/core/topicProfileValidation.d.ts.map +1 -0
  85. package/dist/core/topicProfileValidation.js +247 -0
  86. package/dist/core/topicProfileValidation.js.map +1 -0
  87. package/dist/core/topicProfileWriteSurface.d.ts +222 -0
  88. package/dist/core/topicProfileWriteSurface.d.ts.map +1 -0
  89. package/dist/core/topicProfileWriteSurface.js +631 -0
  90. package/dist/core/topicProfileWriteSurface.js.map +1 -0
  91. package/dist/core/types.d.ts +66 -0
  92. package/dist/core/types.d.ts.map +1 -1
  93. package/dist/core/types.js.map +1 -1
  94. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  95. package/dist/lifeline/TelegramLifeline.js +6 -0
  96. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  97. package/dist/messaging/TelegramAdapter.d.ts +10 -1
  98. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  99. package/dist/messaging/TelegramAdapter.js +41 -1
  100. package/dist/messaging/TelegramAdapter.js.map +1 -1
  101. package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts +8 -0
  102. package/dist/monitoring/ActiveWorkSilenceSentinel.d.ts.map +1 -1
  103. package/dist/monitoring/ActiveWorkSilenceSentinel.js +8 -0
  104. package/dist/monitoring/ActiveWorkSilenceSentinel.js.map +1 -1
  105. package/dist/monitoring/ContextWedgeSentinel.d.ts +8 -0
  106. package/dist/monitoring/ContextWedgeSentinel.d.ts.map +1 -1
  107. package/dist/monitoring/ContextWedgeSentinel.js +8 -0
  108. package/dist/monitoring/ContextWedgeSentinel.js.map +1 -1
  109. package/dist/monitoring/GuardPostureTripwire.d.ts +3 -27
  110. package/dist/monitoring/GuardPostureTripwire.d.ts.map +1 -1
  111. package/dist/monitoring/GuardPostureTripwire.js +8 -76
  112. package/dist/monitoring/GuardPostureTripwire.js.map +1 -1
  113. package/dist/monitoring/GuardRegistry.d.ts +48 -0
  114. package/dist/monitoring/GuardRegistry.d.ts.map +1 -0
  115. package/dist/monitoring/GuardRegistry.js +49 -0
  116. package/dist/monitoring/GuardRegistry.js.map +1 -0
  117. package/dist/monitoring/SessionReaper.d.ts +7 -0
  118. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  119. package/dist/monitoring/SessionReaper.js +9 -0
  120. package/dist/monitoring/SessionReaper.js.map +1 -1
  121. package/dist/monitoring/SessionWatchdog.d.ts +8 -0
  122. package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
  123. package/dist/monitoring/SessionWatchdog.js +8 -0
  124. package/dist/monitoring/SessionWatchdog.js.map +1 -1
  125. package/dist/monitoring/SocketDisconnectSentinel.d.ts +8 -0
  126. package/dist/monitoring/SocketDisconnectSentinel.d.ts.map +1 -1
  127. package/dist/monitoring/SocketDisconnectSentinel.js +8 -0
  128. package/dist/monitoring/SocketDisconnectSentinel.js.map +1 -1
  129. package/dist/monitoring/guardManifest.d.ts +67 -0
  130. package/dist/monitoring/guardManifest.d.ts.map +1 -0
  131. package/dist/monitoring/guardManifest.js +536 -0
  132. package/dist/monitoring/guardManifest.js.map +1 -0
  133. package/dist/monitoring/guardPosture.d.ts +77 -0
  134. package/dist/monitoring/guardPosture.d.ts.map +1 -0
  135. package/dist/monitoring/guardPosture.js +198 -0
  136. package/dist/monitoring/guardPosture.js.map +1 -0
  137. package/dist/monitoring/guardPostureView.d.ts +100 -0
  138. package/dist/monitoring/guardPostureView.d.ts.map +1 -0
  139. package/dist/monitoring/guardPostureView.js +294 -0
  140. package/dist/monitoring/guardPostureView.js.map +1 -0
  141. package/dist/monitoring/probes/GuardPostureProbe.d.ts +82 -0
  142. package/dist/monitoring/probes/GuardPostureProbe.d.ts.map +1 -0
  143. package/dist/monitoring/probes/GuardPostureProbe.js +384 -0
  144. package/dist/monitoring/probes/GuardPostureProbe.js.map +1 -0
  145. package/dist/scaffold/templates.d.ts.map +1 -1
  146. package/dist/scaffold/templates.js +18 -0
  147. package/dist/scaffold/templates.js.map +1 -1
  148. package/dist/scheduler/JobScheduler.d.ts +10 -0
  149. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  150. package/dist/scheduler/JobScheduler.js +12 -0
  151. package/dist/scheduler/JobScheduler.js.map +1 -1
  152. package/dist/server/AgentServer.d.ts +40 -0
  153. package/dist/server/AgentServer.d.ts.map +1 -1
  154. package/dist/server/AgentServer.js +54 -3
  155. package/dist/server/AgentServer.js.map +1 -1
  156. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  157. package/dist/server/CapabilityIndex.js +12 -0
  158. package/dist/server/CapabilityIndex.js.map +1 -1
  159. package/dist/server/peerUrlGuard.d.ts +35 -0
  160. package/dist/server/peerUrlGuard.d.ts.map +1 -0
  161. package/dist/server/peerUrlGuard.js +93 -0
  162. package/dist/server/peerUrlGuard.js.map +1 -0
  163. package/dist/server/routes.d.ts +31 -0
  164. package/dist/server/routes.d.ts.map +1 -1
  165. package/dist/server/routes.js +407 -1
  166. package/dist/server/routes.js.map +1 -1
  167. package/package.json +3 -2
  168. package/scripts/lint-guard-manifest.js +264 -0
  169. package/src/data/builtin-manifest.json +67 -67
  170. package/src/data/state-coherence-registry.json +54 -18
  171. package/src/scaffold/templates.ts +18 -0
  172. package/upgrades/1.3.490.md +34 -0
  173. package/upgrades/1.3.491.md +37 -0
  174. package/upgrades/side-effects/guard-posture-endpoint.md +101 -0
  175. package/upgrades/side-effects/topic-profile.md +142 -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":"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"}
@@ -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,CAk4CR;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.
@@ -732,6 +741,13 @@ This routes feedback to the Instar maintainers automatically. Valid types: \`bug
732
741
  - Each framework gets its own circuit breaker (a Claude trip can't pause Codex). If a routed framework's CLI is missing it degrades to the default and reports it; if it's just rate-limited the component falls back to its heuristic (no herd onto the default). Routes INTERNAL component calls only — spawned interactive sessions stay governed by \`topicFrameworks\`.
733
742
  - **When to use** (PROACTIVE): when the user is hitting rate limits and asks how to spread load, or says "run my sentinels on Codex" / "move the background checks off Claude" → point them at \`sessions.componentFrameworks\` and \`GET /intelligence/routing\`. Restart sessions to apply (config is read into the router at the call path, but a file edit needs the server to pick it up). (Spec: \`docs/specs/per-component-framework-routing.md\`.)
734
743
 
744
+ **Topic Profile (per-topic model, thinking, framework pins)** — Every conversation topic can carry a durable profile pinning its BASELINE model (an explicit id OR a tier — never both), thinking depth (\`off\`/\`low\`/\`medium\`/\`high\`/\`max\`), and framework (\`claude-code\`/\`codex-cli\`/…). Pins survive restarts and follow the topic. **The conversational surface is PRIMARY** (PROACTIVE — these are the triggers): when the user says "use codex here", "pin this topic to Fable", or "set high thinking on this topic", that IS the request — propose the change back in plain words, confirm, and the pin is durable from then on. NEVER instruct the user to type \`/topic\`; the \`/topic\` command exists only as a power-user convenience.
745
+ - What is this topic pinned to? \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/topic-profile/TOPIC_ID\` — Registry First: read it, never guess (no entry = the topic runs on defaults).
746
+ - Why/when did a pin change? Read \`logs/topic-profile-changes.jsonl\` — the per-change audit (who set what, when, old → new).
747
+ - A pinned model/framework that is no longer available falls back to defaults with a once-per-transition notice — the session keeps working; a pin is never a block.
748
+ - A baseline pin does NOT disable the heavy-work ultra escalation (\`escalationOverride: 'inherit'\` is the default); it steps aside only when the operator explicitly opts the topic out (\`'suppress'\`).
749
+ - Config: \`.instar/config.json\` → \`topicProfiles\` (\`dryRun\`, debounce windows, stagger cap, breaker threshold; \`defaults\` = per-topic config-default model/thinking). Writes ship dark behind the dev-agent gate with \`dryRun: true\` (intended respawns are logged, not performed); resolution (reads) is always on.
750
+
735
751
  **Approval-as-Data** — Every operator approval becomes durable data instead of a one-shot "approved" with no memory. Each decision is recorded as \`approved-as-is\` vs \`approved-with-change\` vs \`rejected\`, with the WHY of each divergence, so over time you can see — per decision-class — where the operator takes your recommendation as-is vs revises it, and close the gap (your recommendations trend toward what they'd pick). Tracks approvals WHEREVER they occur: an official spec sign-off, a decision approved in chat, anywhere. Signed, append-only; read paths never gate.
736
752
  - Record a decision: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/approvals -H 'Content-Type: application/json' -d '{"subject":"<what-was-approved>","decisionClass":"<bucket>","surface":"chat","mode":"approved-as-is"}'\`. For a change: \`"mode":"approved-with-change","divergences":[{"category":"scope-correction","summary":"…","why":"…"}]\` (categories: \`missing-principle | risk-reduction | scope-correction | efficiency | new-information | style\`).
737
753
  - See the agreement ratios: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/approvals/summary\` → per class \`{ total, approvedAsIs, ratio, streak, autoApprovalEligible, divergenceCounts }\` + a \`bySurface\` breakdown. List rows: \`GET /approvals?limit=50&decisionClass=…&surface=…\`.
@@ -891,6 +907,8 @@ I maintain registries that are the source of truth for specific categories. Thes
891
907
  | My state change history? | \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/git/log\` |
892
908
  | Other agents on this machine? | \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/agents\` |
893
909
  | Behavioral issues logged while onboarding a framework? / the onboarding playbook? | \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/framework-issues\` (read-only) + \`/framework-issues/playbook?targetFramework=X\` — the Framework-Onboarding Mentor System's issue ledger (observability only; never gates). Log a discovered issue: \`POST /framework-issues/observe\` {framework,bucket,severity,title,dedupKey,...} |
910
+ | What is this topic pinned to (model/thinking/framework)? | \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/topic-profile/TOPIC_ID\` — no entry = the topic runs on defaults |
911
+ | Why/when did this topic's pin change? | \`logs/topic-profile-changes.jsonl\` (per-change audit) |
894
912
  | Project architecture? | This file (CLAUDE.md), then project docs |
895
913
 
896
914
  **Why this matters:** Searching 1000 files to answer a question that a single state file could answer is slower AND less reliable. Broad searches find stale narratives. State files are current. This applies at EVERY level — including sub-agents I spawn. When spawning a research agent, include the relevant state file reference in its prompt so it searches WITH context, not blind.
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAuB;IACrD,OAAO,KAAK,QAAQ,CAAC,IAAI;;;;OAIpB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;;;;EAIpC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;6BAsBO,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D7C,CAAC;AAEF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,WAAmB,EAAE,QAAgB;IACrF,OAAO;;;;;;;;;;;;;;;;;;EAkBP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkDH,QAAQ;;;;;CAKjB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,KAAK,QAAQ;;;;;;;;;;;;;;4CAcsB,QAAQ;CACnD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,SAAiB,EACjB,IAAY,EACZ,WAAoB,EACpB,cAAuB,KAAK,EAC5B,cAAuB,KAAK;IAE5B,IAAI,OAAO,GAAG,iBAAiB,WAAW;;;;OAIrC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCT,SAAS;;gCAEgB,IAAI,kFAAkF,IAAI;;;;;;;;;;;;;8EAa5C,IAAI;;;yFAGO,IAAI;;;;;;;uGAOU,IAAI;;;;;;;;;;;;;;;;;;;;;;;0CAuBjE,IAAI;oCACV,IAAI;;;;;;;;;;;;;yDAaiB,IAAI;;;;;;;;;;;;gCAY7B,IAAI;;;;;;;;;sFASkD,IAAI;4FACE,IAAI;;;;;;;mEAO7B,IAAI;8EACO,IAAI;;;mEAGf,IAAI;4EACK,IAAI;;;;;;;sHAOsC,IAAI;+WACqP,IAAI;;;;;uEAK5S,IAAI;;;;;uEAKJ,IAAI;;;;;;uFAMY,IAAI;;;;wEAInB,IAAI;;;;;;+IAMmE,IAAI;wKACqB,IAAI;;;;;iKAKX,IAAI;;;;sEAI/F,IAAI;;;;;;;;;;;6EAWG,IAAI;;2FAEU,IAAI;qFACV,IAAI;;;;;;;;;mGASU,IAAI;;;;;yHAKkB,IAAI;8MACiF,IAAI;;;0JAGxD,IAAI;qGACzD,IAAI;mHACU,IAAI;;;;oGAInB,IAAI;yGACC,IAAI;;;;;mEAK1C,IAAI;;;8EAGO,IAAI;6EACL,IAAI;0EACP,IAAI;;;;;6EAKD,IAAI;yCACxC,IAAI;mEACsB,IAAI;4EACK,IAAI;+EACD,IAAI;;;;;2EAKR,IAAI;;;;;;;uFAOQ,IAAI;;;;;;2EAMhB,IAAI;+EACA,IAAI;;;;;;;6KAO0F,IAAI;qMACoB,IAAI,gMAAgM,IAAI;;;;;;uFAMtT,IAAI;mIACwC,IAAI;;;;;2GAK5B,IAAI;6EAClC,IAAI;+FACc,IAAI;;;;;uFAKZ,IAAI;yFACF,IAAI;kIACqC,IAAI;;;;;;;gIAON,IAAI;sFAC9C,IAAI;0HACgC,IAAI;;;;oGAI1B,IAAI;oIAC4B,IAAI;;;;;;;qEAOnE,IAAI;;;;;;;;4EAQG,IAAI;yEACP,IAAI;+EACE,IAAI;;;;6EAIN,IAAI;mJACkE,IAAI;6JACM,IAAI;sGAC3D,IAAI;;;;;;qEAMrC,IAAI;wFACe,IAAI;2IAC+C,IAAI;;;0EAGrE,IAAI;6EACD,IAAI;oFACG,IAAI;;;;;;;;;8EASV,IAAI;sEACZ,IAAI;8EACI,IAAI;4EACN,IAAI;mFACG,IAAI;;;;oEAInB,IAAI;0EACE,IAAI;4EACF,IAAI;+EACD,IAAI;iFACF,IAAI;;;oEAGjB,IAAI;;;;+EAIO,IAAI;6EACN,IAAI;0EACP,IAAI;uFACS,IAAI;;wEAEnB,IAAI;;;;;2EAKD,IAAI;;;;;oEAKX,IAAI;;;qEAGH,IAAI;sEACH,IAAI;mKACyF,IAAI;;;sEAGjG,IAAI;;;qEAGL,IAAI;;;8BAG3C,IAAI;;;;;4OAK0M,IAAI;;;;;;;;mFAQ7J,IAAI;;;;;uBAKhE,IAAI;;;wFAG6D,IAAI;;;;;;;;;;;;6EAYf,IAAI;sFACK,IAAI;8EACZ,IAAI;;;;;sEAKZ,IAAI;oEACN,IAAI;8EACM,IAAI;yFACO,IAAI;;;;;uFAKN,IAAI;;;;;oEAKvB,IAAI;;;;;uGAK+B,IAAI;;;;;;;;qEAQtC,IAAI;;;;;;;iRAOwM,IAAI;8NACvD,IAAI;;;;sEAI5J,IAAI;;;;;qEAKL,IAAI;;;;mFAIU,IAAI;;;;;;wFAMC,IAAI;uFACL,IAAI;;;;4JAIiE,IAAI;;;;;;6EAMnF,IAAI;;;;;;oEAMb,IAAI;+GACuC,IAAI;gIACa,IAAI;;;;qEAI/D,IAAI;;;;;;;;;qEASJ,IAAI;6EACI,IAAI;2EACN,IAAI;2EACJ,IAAI;kEACb,IAAI;;;;;0EAKI,IAAI;4FACc,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDA4EvC,IAAI;;;;;;;;;;;;;;;;;;;;;;;8EAuBiB,IAAI;4HAC0C,IAAI;kKACkC,IAAI;uJACf,IAAI;;;6GAG9C,IAAI;2FACtB,IAAI;4HAC6B,IAAI;;;2FAGrC,IAAI;;kFAEb,IAAI;wFACE,IAAI;6FACC,IAAI;iJACgD,IAAI;;;;;;;;;;;;;;;;;;;uFAmB9D,IAAI;wFACH,IAAI;;;wFAGJ,IAAI;;0FAEF,IAAI;+FACC,IAAI;sGACG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsG5F,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CA6HmB,IAAI;;;;;;;;;;;mCAWX,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA8CJ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;mEAwB4B,IAAI;;;;;mEAKJ,IAAI;;;;;mEAKJ,IAAI;;;;mEAIJ,IAAI;;;;;;yDAMd,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EAiFc,IAAI;yEACN,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwF5E,CAAC;IAEA,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAC;IACA,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEd,CAAC;IACA,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Bd,CAAC;IACA,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAqE0B,IAAI;sCACL,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCzC,CAAC;IAEA,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,SAAiB,EACjB,IAAY,EACZ,WAAoB,EACpB,cAAuB,KAAK;IAE5B,IAAI,OAAO,GAAG,iBAAiB,WAAW;;;;OAIrC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCT,SAAS;;gCAEgB,IAAI,qFAAqF,IAAI;;;;;;CAM5H,CAAC;IAEA,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAC;IACA,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI;;;;CAId,CAAC;IACA,CAAC;IAED,OAAO,IAAI;;;;;;;8EAOiE,IAAI;;;yFAGO,IAAI;;;;;;;uGAOU,IAAI;yFAClB,IAAI;;;;;;0DAMnC,IAAI;;;;;;;;;;;;;;;;;;;;;;;2FAuB6B,IAAI;8FACD,IAAI;+MAC6G,IAAI;mGAChH,IAAI;;;mMAG4F,IAAI;;;;;0LAKb,IAAI;;;;4EAIlH,IAAI;+LAC+G,IAAI;;;;8DAIrI,IAAI;;;;;;;;;;;0CAWxB,IAAI;oCACV,IAAI;;;;;;;;;;;;;yDAaiB,IAAI;;;;;;;;0DAQH,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+GhD,SAAS;;;;;;;;;;;;sEAY+C,IAAI;;CAEzE,CAAC;IAEA,OAAO,OAAO,CAAC;AACjB,CAAC"}
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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"}