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,536 @@
1
+ /**
2
+ * guardManifest — the STATIC DECLARED MANIFEST of every guard this codebase
3
+ * ships (GUARD-POSTURE-ENDPOINT-SPEC §2.1).
4
+ *
5
+ * The authoritative discovery boundary for the /guards inventory: the shared
6
+ * extractor (guardPosture.ts) covers config-shaped guards generically; this
7
+ * manifest declares the rest — guards with no config key at all (default-ON
8
+ * in code), guards living outside `monitoring.*`, sub-guards that must not
9
+ * hide inside an on-confirmed parent, and out-of-process (lifeline) guards —
10
+ * plus per-guard metadata the honest-state derivation needs (expected tick
11
+ * cadence for staleness, liveConfig divergence suppression, dry-run paths).
12
+ *
13
+ * The companion `NOT_A_GUARD` list classifies every other boot-constructed
14
+ * component that LOOKS guard-shaped but deliberately is not in the inventory,
15
+ * with a reason. scripts/lint-guard-manifest.js enforces that every candidate
16
+ * component appears in exactly one of the two lists — a future guard cannot
17
+ * be forgotten (Structure > Willpower; the lint follows the
18
+ * lint-dev-agent-dark-gate.js + exclusions-list precedent).
19
+ */
20
+ export const GUARD_MANIFEST = [
21
+ // ── Session lifecycle guards ──
22
+ {
23
+ key: 'monitoring.sessionReaper.enabled',
24
+ kind: 'config',
25
+ configPath: 'monitoring.sessionReaper.enabled',
26
+ defaultEnabled: false,
27
+ dryRunConfigPath: 'monitoring.sessionReaper.dryRun',
28
+ expectedTickMs: 120_000,
29
+ process: 'server',
30
+ expectRuntime: true,
31
+ component: 'SessionReaper',
32
+ description: 'Pressure-aware reaper of idle-but-alive sessions (the guard the Mini ran without for a week).',
33
+ },
34
+ {
35
+ key: 'monitoring.reapNotify.enabled',
36
+ kind: 'config',
37
+ configPath: 'monitoring.reapNotify.enabled',
38
+ defaultEnabled: true,
39
+ process: 'server',
40
+ expectRuntime: false,
41
+ component: 'ReapNotify',
42
+ description: 'User-facing notice when a session is autonomously shut down.',
43
+ },
44
+ {
45
+ key: 'monitoring.watchdog.enabled',
46
+ kind: 'config',
47
+ configPath: 'monitoring.watchdog.enabled',
48
+ defaultEnabled: true,
49
+ expectedTickMs: 30_000,
50
+ liveConfig: true,
51
+ process: 'server',
52
+ expectRuntime: true,
53
+ component: 'SessionWatchdog',
54
+ description: 'Stuck-process detection + escalating kill sequence.',
55
+ },
56
+ {
57
+ key: 'monitoring.socketDisconnectSentinel.enabled',
58
+ kind: 'config',
59
+ configPath: 'monitoring.socketDisconnectSentinel.enabled',
60
+ defaultEnabled: true,
61
+ expectedTickMs: 15_000,
62
+ process: 'server',
63
+ expectRuntime: true,
64
+ component: 'SocketDisconnectSentinel',
65
+ description: 'Detects sessions that silently dropped their socket.',
66
+ },
67
+ {
68
+ key: 'monitoring.activeWorkSilenceSentinel.enabled',
69
+ kind: 'config',
70
+ configPath: 'monitoring.activeWorkSilenceSentinel.enabled',
71
+ defaultEnabled: true,
72
+ expectedTickMs: 60_000,
73
+ process: 'server',
74
+ expectRuntime: true,
75
+ component: 'ActiveWorkSilenceSentinel',
76
+ description: 'Detects sessions frozen mid-task (active work gone silent).',
77
+ },
78
+ {
79
+ key: 'monitoring.contextWedgeSentinel.enabled',
80
+ kind: 'config',
81
+ configPath: 'monitoring.contextWedgeSentinel.enabled',
82
+ defaultEnabled: true,
83
+ expectedTickMs: 20_000,
84
+ process: 'server',
85
+ expectRuntime: true,
86
+ component: 'ContextWedgeSentinel',
87
+ description: 'Detects the thinking-block/AUP wedge that permanently kills a session.',
88
+ },
89
+ {
90
+ // Sub-guard (spec §2.1): the destructive fresh-respawn arm inside the
91
+ // wedge sentinel. Its own inventory row so "autoRecovery silently off
92
+ // inside an on-confirmed sentinel" cannot hide. Default is the runtime
93
+ // fallback in server.ts (deliberately OMITTED from ConfigDefaults).
94
+ key: 'monitoring.contextWedgeSentinel.autoRecovery.enabled',
95
+ kind: 'config',
96
+ configPath: 'monitoring.contextWedgeSentinel.autoRecovery.enabled',
97
+ defaultEnabled: false,
98
+ dryRunConfigPath: 'monitoring.contextWedgeSentinel.autoRecovery.dryRun',
99
+ process: 'server',
100
+ expectRuntime: true,
101
+ component: 'ContextWedgeSentinel',
102
+ description: 'Auto-recovery (kill + fresh respawn) arm of the context-wedge sentinel.',
103
+ },
104
+ {
105
+ key: 'monitoring.agentWorktreeReaper.enabled',
106
+ kind: 'config',
107
+ configPath: 'monitoring.agentWorktreeReaper.enabled',
108
+ defaultEnabled: false,
109
+ dryRunConfigPath: 'monitoring.agentWorktreeReaper.dryRun',
110
+ expectedTickMs: 86_400_000,
111
+ process: 'server',
112
+ expectRuntime: false,
113
+ component: 'AgentWorktreeReaper',
114
+ description: 'Reclaims merged+clean+unused agent worktrees.',
115
+ },
116
+ {
117
+ key: 'monitoring.mcpProcessReaper.enabled',
118
+ kind: 'config',
119
+ configPath: 'monitoring.mcpProcessReaper.enabled',
120
+ defaultEnabled: false,
121
+ expectedTickMs: 1_800_000,
122
+ process: 'server',
123
+ expectRuntime: false,
124
+ component: 'McpProcessReaper',
125
+ description: 'Reaps orphaned MCP server processes.',
126
+ },
127
+ {
128
+ key: 'monitoring.staleBackstop.enabled',
129
+ kind: 'config',
130
+ configPath: 'monitoring.staleBackstop.enabled',
131
+ defaultEnabled: true,
132
+ process: 'server',
133
+ expectRuntime: false,
134
+ component: 'StaleBackstop',
135
+ description: 'Backstop cleanup for stale session state.',
136
+ },
137
+ {
138
+ key: 'monitoring.agentSleep.enabled',
139
+ kind: 'config',
140
+ configPath: 'monitoring.agentSleep.enabled',
141
+ defaultEnabled: false,
142
+ process: 'server',
143
+ expectRuntime: false,
144
+ component: 'AgentSleep',
145
+ description: 'Agent sleep/idle power management.',
146
+ },
147
+ // ── Liveness / health guards ──
148
+ {
149
+ key: 'monitoring.bootHealthBeacon.enabled',
150
+ kind: 'config',
151
+ configPath: 'monitoring.bootHealthBeacon.enabled',
152
+ defaultEnabled: false,
153
+ process: 'server',
154
+ expectRuntime: false,
155
+ component: 'BootHealthBeacon',
156
+ description: 'Boot-time health beacon endpoint.',
157
+ },
158
+ {
159
+ key: 'monitoring.rateLimitSentinel.enabled',
160
+ kind: 'config',
161
+ configPath: 'monitoring.rateLimitSentinel.enabled',
162
+ defaultEnabled: true,
163
+ process: 'server',
164
+ expectRuntime: false,
165
+ component: 'RateLimitSentinel',
166
+ description: 'Detects provider rate-limit walls and schedules recovery.',
167
+ },
168
+ {
169
+ key: 'monitoring.parallelWorkSentinel.enabled',
170
+ kind: 'config',
171
+ configPath: 'monitoring.parallelWorkSentinel.enabled',
172
+ defaultEnabled: false,
173
+ process: 'server',
174
+ expectRuntime: false,
175
+ component: 'ParallelWorkSentinel',
176
+ description: 'Cross-topic overlap councilor (ships dark, Phase B).',
177
+ },
178
+ {
179
+ key: 'monitoring.resourceLedger.enabled',
180
+ kind: 'config',
181
+ configPath: 'monitoring.resourceLedger.enabled',
182
+ defaultEnabled: true,
183
+ process: 'server',
184
+ expectRuntime: false,
185
+ component: 'ResourceLedger',
186
+ description: 'CPU/memory sampling + rate-limit-event ledger (read-only observability).',
187
+ },
188
+ {
189
+ key: 'monitoring.memoryMonitoring',
190
+ kind: 'config',
191
+ configPath: 'monitoring.memoryMonitoring',
192
+ defaultEnabled: true,
193
+ process: 'server',
194
+ expectRuntime: false,
195
+ component: 'MemoryPressureMonitor',
196
+ description: 'Memory-pressure sampling that feeds load-shed decisions.',
197
+ },
198
+ {
199
+ key: 'monitoring.quotaTracking',
200
+ kind: 'config',
201
+ configPath: 'monitoring.quotaTracking',
202
+ defaultEnabled: true,
203
+ process: 'server',
204
+ expectRuntime: false,
205
+ component: 'QuotaTracker',
206
+ description: 'Threshold-based LLM quota tracking + load shedding.',
207
+ },
208
+ {
209
+ key: 'monitoring.telemetry.enabled',
210
+ kind: 'config',
211
+ configPath: 'monitoring.telemetry.enabled',
212
+ defaultEnabled: true,
213
+ process: 'server',
214
+ expectRuntime: false,
215
+ component: 'TelemetryCollector',
216
+ description: 'Job/session telemetry collection.',
217
+ },
218
+ {
219
+ key: 'monitoring.burnDetection.enabled',
220
+ kind: 'config',
221
+ configPath: 'monitoring.burnDetection.enabled',
222
+ // Defaults deliberately OMITTED from ConfigDefaults (shipped defaults live
223
+ // in AgentServer); absence preserves default-ON.
224
+ defaultEnabled: true,
225
+ process: 'server',
226
+ expectRuntime: false,
227
+ component: 'BurnDetector',
228
+ description: 'Per-component token-burn share/rate alerts.',
229
+ },
230
+ {
231
+ key: 'monitoring.sentinelTelegramEscalation',
232
+ kind: 'config',
233
+ configPath: 'monitoring.sentinelTelegramEscalation',
234
+ defaultEnabled: false,
235
+ process: 'server',
236
+ expectRuntime: false,
237
+ component: 'SentinelEscalationFlag',
238
+ description: 'Opt-in Telegram delivery of coalesced sentinel escalations.',
239
+ },
240
+ // ── Triage / learning guards ──
241
+ {
242
+ key: 'monitoring.triage.enabled',
243
+ kind: 'config',
244
+ configPath: 'monitoring.triage.enabled',
245
+ defaultEnabled: true,
246
+ process: 'server',
247
+ expectRuntime: false,
248
+ component: 'StallTriageNurse',
249
+ description: 'Stall triage nurse (classification of stuck sessions).',
250
+ },
251
+ {
252
+ key: 'monitoring.triageOrchestrator.enabled',
253
+ kind: 'config',
254
+ configPath: 'monitoring.triageOrchestrator.enabled',
255
+ defaultEnabled: true,
256
+ process: 'server',
257
+ expectRuntime: false,
258
+ component: 'TriageOrchestrator',
259
+ description: 'Orchestrates triage outcomes into recovery actions.',
260
+ },
261
+ {
262
+ key: 'monitoring.failureLearning.enabled',
263
+ kind: 'config',
264
+ configPath: 'monitoring.failureLearning.enabled',
265
+ defaultEnabled: false,
266
+ process: 'server',
267
+ expectRuntime: false,
268
+ component: 'FailureLearningLoop',
269
+ description: 'Failure-Learning Loop capture + pattern surfacing.',
270
+ },
271
+ {
272
+ key: 'monitoring.correctionLearning.enabled',
273
+ kind: 'config',
274
+ configPath: 'monitoring.correctionLearning.enabled',
275
+ defaultEnabled: false,
276
+ process: 'server',
277
+ expectRuntime: false,
278
+ component: 'CorrectionLearningLoop',
279
+ description: 'Correction & preference learning sentinel.',
280
+ },
281
+ {
282
+ // Sub-guard: plain-boolean flag INSIDE the correctionLearning block (not
283
+ // `.enabled`-shaped, so the generic extractor cannot see it).
284
+ key: 'monitoring.correctionLearning.selfViolationSignal',
285
+ kind: 'config',
286
+ configPath: 'monitoring.correctionLearning.selfViolationSignal',
287
+ defaultEnabled: false,
288
+ process: 'server',
289
+ expectRuntime: false,
290
+ component: 'CorrectionLearningLoop',
291
+ description: 'Self-violation observe-only signal inside correction learning.',
292
+ },
293
+ {
294
+ key: 'monitoring.apprenticeshipCycleSla.enabled',
295
+ kind: 'config',
296
+ configPath: 'monitoring.apprenticeshipCycleSla.enabled',
297
+ defaultEnabled: false,
298
+ process: 'server',
299
+ expectRuntime: false,
300
+ component: 'ApprenticeshipCycleSlaMonitor',
301
+ description: 'Observe-only overdue-apprenticeship-cycle signal.',
302
+ },
303
+ {
304
+ key: 'monitoring.geminiCapacityEscalation.enabled',
305
+ kind: 'config',
306
+ configPath: 'monitoring.geminiCapacityEscalation.enabled',
307
+ defaultEnabled: false,
308
+ process: 'server',
309
+ expectRuntime: false,
310
+ component: 'GeminiCapacityEscalation',
311
+ description: 'Gemini capacity escalation monitor.',
312
+ },
313
+ {
314
+ key: 'monitoring.releaseReadiness.enabled',
315
+ kind: 'config',
316
+ configPath: 'monitoring.releaseReadiness.enabled',
317
+ defaultEnabled: false,
318
+ expectedTickMs: 21_600_000,
319
+ process: 'server',
320
+ expectRuntime: false,
321
+ component: 'ReleaseReadinessSentinel',
322
+ description: 'Stalled-release watchdog (maintainer environments).',
323
+ },
324
+ {
325
+ key: 'monitoring.promptGate.enabled',
326
+ kind: 'config',
327
+ configPath: 'monitoring.promptGate.enabled',
328
+ defaultEnabled: true,
329
+ process: 'server',
330
+ expectRuntime: false,
331
+ component: 'PromptGate',
332
+ description: 'Prompt-quality gate on outbound LLM calls.',
333
+ },
334
+ // ── Dev-gated observability guards (enabled omitted; gate-resolved) ──
335
+ {
336
+ key: 'monitoring.growthAnalyst.enabled',
337
+ kind: 'config',
338
+ configPath: 'monitoring.growthAnalyst.enabled',
339
+ defaultEnabled: false,
340
+ process: 'server',
341
+ expectRuntime: false,
342
+ component: 'GrowthMilestoneAnalyst',
343
+ description: 'Proactive growth & milestone analyst (dev-gated).',
344
+ },
345
+ {
346
+ key: 'monitoring.blockerLedger.enabled',
347
+ kind: 'config',
348
+ configPath: 'monitoring.blockerLedger.enabled',
349
+ defaultEnabled: false,
350
+ process: 'server',
351
+ expectRuntime: false,
352
+ component: 'BlockerLedger',
353
+ description: 'Blocker ledger resolution pipeline (dev-gated).',
354
+ },
355
+ // ── Non-monitoring roots ──
356
+ {
357
+ key: 'scheduler.enabled',
358
+ kind: 'config',
359
+ configPath: 'scheduler.enabled',
360
+ defaultEnabled: true,
361
+ process: 'server',
362
+ expectRuntime: true,
363
+ component: 'JobScheduler',
364
+ description: 'Cron job scheduler (registration is not life: runtime carries lastTickAt/jobCount/pausedJobCount).',
365
+ },
366
+ {
367
+ key: 'models.tierEscalation.enabled',
368
+ kind: 'config',
369
+ configPath: 'models.tierEscalation.enabled',
370
+ defaultEnabled: false,
371
+ dryRunConfigPath: 'models.tierEscalation.dryRun',
372
+ process: 'server',
373
+ expectRuntime: false,
374
+ component: 'ModelTierEscalation',
375
+ description: 'Model-tier escalation policy (COST-INCREASING enable).',
376
+ },
377
+ {
378
+ // Out-of-process guard (spec §2.1): config-derived states ONLY
379
+ // (`on-unverified` at best) — the sync in-memory getter contract cannot
380
+ // cross processes, so this entry must never carry expectRuntime.
381
+ key: 'lifeline.driftPromoter.enabled',
382
+ kind: 'config',
383
+ configPath: 'lifeline.driftPromoter.enabled',
384
+ defaultEnabled: true,
385
+ process: 'lifeline',
386
+ expectRuntime: false,
387
+ component: 'LifelineDriftPromoter',
388
+ description: 'Lifeline version-drift self-restart promoter (runs in the lifeline process).',
389
+ },
390
+ {
391
+ key: 'multiMachine.secretSync.enabled',
392
+ kind: 'config',
393
+ configPath: 'multiMachine.secretSync.enabled',
394
+ defaultEnabled: false,
395
+ process: 'server',
396
+ expectRuntime: false,
397
+ component: 'SecretSync',
398
+ description: 'Cross-machine secret sync, receive side (dev-gated).',
399
+ },
400
+ {
401
+ key: 'multiMachine.sessionPool.enabled',
402
+ kind: 'config',
403
+ configPath: 'multiMachine.sessionPool.enabled',
404
+ defaultEnabled: false,
405
+ process: 'server',
406
+ expectRuntime: false,
407
+ component: 'SessionPool',
408
+ description: 'Multi-machine session pool (ships dark behind stage).',
409
+ },
410
+ {
411
+ key: 'multiMachine.coherenceJournal.enabled',
412
+ kind: 'config',
413
+ configPath: 'multiMachine.coherenceJournal.enabled',
414
+ defaultEnabled: false,
415
+ process: 'server',
416
+ expectRuntime: false,
417
+ component: 'CoherenceJournal',
418
+ description: 'Cross-machine coherence journal (dev-gated).',
419
+ },
420
+ // ── Code-default guards (no config key; default-ON in code) ──
421
+ {
422
+ key: 'messaging.attentionTopicGuard',
423
+ kind: 'code-default',
424
+ defaultEnabled: true,
425
+ process: 'server',
426
+ expectRuntime: false,
427
+ component: 'AttentionTopicGuard',
428
+ description: 'Topic-Flood Guard — per-source attention-topic circuit breaker (default-ON in code; tunable via messaging[].config.attentionTopicGuard).',
429
+ },
430
+ {
431
+ key: 'messaging.topicCreationBudget',
432
+ kind: 'code-default',
433
+ defaultEnabled: true,
434
+ process: 'server',
435
+ expectRuntime: false,
436
+ component: 'TopicCreationBudget',
437
+ description: 'Bounded Notification Surface — last-resort budget on every auto-created topic (default-ON in code).',
438
+ },
439
+ ];
440
+ export const NOT_A_GUARD = [
441
+ { component: 'GuardPostureTripwire', reason: 'The boot-transition detector OVER the guard inventory — meta-layer, not a guard itself; always-on, no enabled flag.' },
442
+ { component: 'GuardRegistry', reason: 'Infrastructure of this feature: the runtime-getter registry the inventory reads; not a guard.' },
443
+ { component: 'GuardPostureProbe', reason: 'Consumer of the inventory (probe family); its cadence rides SystemReviewer, not an own enabled switch.' },
444
+ { component: 'SystemReviewer', reason: 'Probe scheduler/aggregator — operational reviewer, not a behavior-protecting guard; covered indirectly by its probes.' },
445
+ { component: 'CompactionSentinel', reason: 'Always-on internal recovery lifecycle with no config enabled switch; recovery engine, not an operator-flippable guard.' },
446
+ { component: 'SessionMonitor', reason: 'Event-driven session bookkeeping with no enabled switch; pure observability plumbing.' },
447
+ { component: 'WorktreeMonitor', reason: 'Always-active worktree scan plumbing, no enabled switch, takes no protective action.' },
448
+ { component: 'CoherenceMonitor', reason: 'Multi-machine coherence bookkeeping rides multiMachine gating; no own guard switch.' },
449
+ { component: 'CommitmentSentinel', reason: 'Rides the commitments feature lifecycle; commitment bookkeeping, not a safety guard with an operator switch.' },
450
+ { component: 'SleepWakeDetector', reason: 'Always-on OS sleep/wake event detector; pure signal source with no enabled switch.' },
451
+ { component: 'PresenceProxy', reason: 'Standby heartbeat messenger; messaging-liveness feature, tuned not toggled — no guard semantics.' },
452
+ { component: 'PromiseBeacon', reason: 'Commitment follow-through heartbeats; user-facing feature behavior, not a protective guard.' },
453
+ { component: 'CommitmentTracker', reason: 'Commitment lifecycle store; data layer, no guard semantics.' },
454
+ { component: 'LlmQueue', reason: 'Rate-limited LLM call queue; shared infrastructure, not an operator-flippable guard.' },
455
+ { component: 'HelperWatchdog', reason: 'Signal-only subagent stall detector wired into SubagentTracker; no config enabled switch, consumers own actions.' },
456
+ { component: 'DeliveryFailureSentinel', reason: 'Telegram relay recovery engine; delivery-robustness layer, always-on with the relay, no guard switch.' },
457
+ { component: 'TemplatesDriftVerifier', reason: 'Deployed-script drift lint; CI-style verifier, not a runtime guard.' },
458
+ { component: 'TokenLedger', reason: 'Read-only token observability (never gates); the spec class-precedent for always-on read-only features.' },
459
+ { component: 'TokenLedgerPoller', reason: 'Background scanner feeding TokenLedger; observability plumbing.' },
460
+ { component: 'CrashLoopPauser', reason: 'Auto-pause of runaway jobs is scheduler-internal mechanics; surfaced via scheduler.enabled + job state, not its own guard.' },
461
+ { component: 'QuotaTrackerPoller', reason: 'Polling arm of QuotaTracker; covered by monitoring.quotaTracking.' },
462
+ { component: 'StuckSignatureClassifier', reason: 'Pure classifier (standby honesty); signal-only, no enabled switch, no action.' },
463
+ { component: 'MessageSentinel', reason: 'Emergency-stop message classifier; inbound-dispatch mechanics inseparable from messaging, no operator switch.' },
464
+ { component: 'TelegramAdapter', reason: 'Platform transport adapter; messaging infrastructure, not a guard.' },
465
+ { component: 'SlackAdapter', reason: 'Platform transport adapter; messaging infrastructure, not a guard.' },
466
+ { component: 'WhatsAppAdapter', reason: 'Platform transport adapter; messaging infrastructure, not a guard.' },
467
+ { component: 'IMessageAdapter', reason: 'Platform transport adapter; messaging infrastructure, not a guard.' },
468
+ { component: 'MessageRouter', reason: 'Topic→adapter routing; messaging infrastructure, not a guard.' },
469
+ { component: 'DeliveryRetryManager', reason: 'Delivery retry mechanics; messaging infrastructure, not a guard.' },
470
+ { component: 'PendingRelayStore', reason: 'Durable relay queue; storage layer, not a guard.' },
471
+ { component: 'MessageStore', reason: 'Message persistence; storage layer, not a guard.' },
472
+ { component: 'SpawnRequestManager', reason: 'Cross-session spawn coordination; session mechanics, not a guard.' },
473
+ { component: 'SessionManager', reason: 'Core session lifecycle engine; the thing guards act ON, not a guard.' },
474
+ { component: 'StateManager', reason: 'Core state persistence; storage layer.' },
475
+ { component: 'SourceTreeGuard', reason: 'Hard invariant on destructive ops against the source tree — always-on by design with NO off switch, so posture (on/off) is meaningless for it.' },
476
+ { component: 'SafeGitExecutor', reason: 'Single-funnel for destructive git ops; hard invariant, no off switch, posture meaningless.' },
477
+ { component: 'SafeFsExecutor', reason: 'Single-funnel for destructive fs ops; hard invariant, no off switch, posture meaningless.' },
478
+ { component: 'UpdateChecker', reason: 'Auto-update polling; lifecycle infrastructure, not a protective guard.' },
479
+ { component: 'SleepWakeCoordinator', reason: 'Multi-machine awake/standby lease mechanics; coordination layer, not an operator-flippable guard.' },
480
+ { component: 'MachinePoolRegistry', reason: 'In-memory pool state from heartbeats; data layer this feature reads, not a guard.' },
481
+ { component: 'PendingInjectStore', reason: 'Durable inject ledger; storage layer.' },
482
+ { component: 'LifelineProbe', reason: 'Server→lifeline health probe in the probe family; rides SystemReviewer cadence.' },
483
+ { component: 'LifelineDriftMonitor', reason: 'Version-handshake observer feeding the driftPromoter (which IS the guard, declared in the manifest).' },
484
+ // ── lint-guard-manifest backfill (spec §2.1 "complete backfill" sweep) ──
485
+ { component: 'A2ARedeliverySentinel', reason: 'A2A delivery-loop closer (redelivery + per-peer escalation) gated by monitoring.a2aRedelivery, default-OFF; threadline delivery-robustness mechanics, deliberately not in the protective-guard inventory.' },
486
+ { component: 'AgentWorktreeDetector', reason: 'One-shot per-startup worktree-convention scan emitting at most one aggregated attention item; no running lifecycle or enabled switch, so posture is not expressible.' },
487
+ { component: 'FeedbackAnomalyDetector', reason: 'In-memory rate/burst screening of feedback submissions; feedback-service input validation, not a session-protecting guard.' },
488
+ { component: 'FrameworkParitySentinel', reason: 'Parity-rules registry consumer surfacing framework-native drift; mentor/parity feature mechanics riding enabledFrameworks, not an operator-flippable protective guard.' },
489
+ { component: 'GeminiCapacityEscalationMonitor', reason: 'Implementation file of the manifest guard monitoring.geminiCapacityEscalation.enabled — declared there under component name GeminiCapacityEscalation; this entry classifies the file-basename alias only.' },
490
+ { component: 'HandoffSentinel', reason: 'Planned-handoff lifecycle state machine (multi-machine coordination mechanics); coordination layer, not an operator-flippable guard.' },
491
+ { component: 'HomeostasisMonitor', reason: 'Work-velocity awareness suggesting pause prompts during long sessions; advisory session-quality feature, takes no protective action.' },
492
+ { component: 'InputGuard', reason: 'Inbound provenance/injection screening that warns-never-blocks before messages reach sessions; messaging-ingress mechanics with no operator enabled switch.' },
493
+ { component: 'IntentDriftDetector', reason: 'Pure deterministic analyzer over decision-journal windows (alignment scoring); computation library with no boot lifecycle or switch.' },
494
+ { component: 'JargonDetector', reason: 'Signal-only jargon classifier feeding MessagingToneGate (the authority); pure function, never blocks, no posture.' },
495
+ { component: 'LedgerParaphraseDetector', reason: 'Signal-only paraphrase cross-check against SharedStateLedger feeding MessagingToneGate; observability data, never blocks.' },
496
+ { component: 'LifelineHealthWatchdog', reason: 'Lifeline-internal stuck-loop signal source for the RestartOrchestrator (the authority); always-on self-health mechanics in the lifeline process, no operator switch.' },
497
+ { component: 'OrphanProcessReaper', reason: 'Always-on untracked-CLI-process hygiene started unconditionally at boot with no config enabled switch; on/off posture is not expressible (CompactionSentinel class).' },
498
+ { component: 'OverlapGuard', reason: 'Work-overlap detection wrapper around WorkLedger for the intelligent-sync feature; sync mechanics, not a boot-constructed posture guard.' },
499
+ { component: 'PeerVisibilityGuard', reason: 'Pure hygiene-signal helpers over the machine registry (improper-revocation detection); stateless functions, no lifecycle or switch.' },
500
+ { component: 'PrincipalGuard', reason: 'Pure-logic cross-principal crediting detector consumed by the principal-coherence pipeline; library code, the observe-only wiring rides monitoring.principalCoherence.' },
501
+ { component: 'ProactiveSwapMonitor', reason: 'Pre-limit subscription-account swap engine (subscriptionPool.proactiveSwap); quota-continuity feature lever, not a failure-protecting guard.' },
502
+ { component: 'PromptGuard', reason: 'Prompt-injection defense helpers (filtering/output validation) for LLM conflict resolution; pure library, no boot lifecycle.' },
503
+ { component: 'QuotaExhaustionDetector', reason: 'Post-mortem classifier of why a dead session died (pattern-matching over tmux output); pure library, no lifecycle or switch.' },
504
+ { component: 'ReapGuard', reason: 'Stateless KEEP-check helper consulted by the single ReapAuthority before any terminate; precondition logic inside the reap path, not a posture guard itself.' },
505
+ { component: 'RevertDetector', reason: 'Read-only git revert scan feeding the FailureLedger; failure-learning ingestion plumbing, fail-open, no operator switch.' },
506
+ { component: 'SelfViolationDetector', reason: 'Observe-only detector arm of the correctionLearning.selfViolationSignal sub-guard, which IS declared in the manifest under component CorrectionLearningLoop.' },
507
+ { component: 'SessionActivitySentinel', reason: 'Mid-session activity digests + completion synthesis; session observability/digest feature, takes no protective action.' },
508
+ { component: 'SessionServerGuard', reason: 'Pure decision helper validating session-server actions; stateless validation logic, no boot lifecycle or enabled switch.' },
509
+ { component: 'SessionSummarySentinel', reason: 'Real-time session summaries for intelligent message routing (session: "best"); routing-quality plumbing, not a protective guard.' },
510
+ { component: 'StaleProcessGuard', reason: 'Stale-state detection helpers (version/config drift checks); meta-infrastructure library, no boot-constructed lifecycle.' },
511
+ { component: 'StaleSessionBackstop', reason: 'Implementation file of the manifest guard monitoring.staleBackstop.enabled — declared there under component name StaleBackstop; this entry classifies the file-basename alias only.' },
512
+ { component: 'StallDetector', reason: 'Platform-agnostic stall/promise-tracking helper embedded in messaging adapters; adapter plumbing with no own lifecycle.' },
513
+ { component: 'StuckInputSentinel', reason: 'Always-on restart-safe recovery sweep for messages wedged at the tmux prompt; injection-delivery mechanics inseparable from session messaging, no enabled switch.' },
514
+ { component: 'UltraSessionCapMonitor', reason: 'Mid-run ultra-token-cap watcher inside model-tier escalation; rides models.tierEscalation (declared in the manifest as ModelTierEscalation), no own switch.' },
515
+ { component: 'WorktreeReaper', reason: 'Dormant parallel-dev-isolation orphan-worktree reaper — exported but constructed nowhere (no importer); nothing runs, so there is no posture until it is wired.' },
516
+ { component: 'claudeForbiddenGuard', reason: 'Hard invariant enforcing Codex-only agents never invoke Claude; always-on by design with no off switch, posture meaningless (SourceTreeGuard class).' },
517
+ { component: 'registryReplayGuard', reason: 'Pure validation of pulled registry entries (replay/epoch/unknown-key checks); stateless function, not a runtime guard.' },
518
+ ];
519
+ /** Lookup helpers (used by the lint's unit test and the registry reconciliation). */
520
+ export function manifestByKey() {
521
+ const map = new Map();
522
+ for (const entry of GUARD_MANIFEST)
523
+ map.set(entry.key, entry);
524
+ return map;
525
+ }
526
+ export function manifestComponents() {
527
+ const set = new Set();
528
+ for (const entry of GUARD_MANIFEST)
529
+ if (entry.component)
530
+ set.add(entry.component);
531
+ return set;
532
+ }
533
+ export function notAGuardComponents() {
534
+ return new Set(NOT_A_GUARD.map(e => e.component));
535
+ }
536
+ //# sourceMappingURL=guardManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardManifest.js","sourceRoot":"","sources":["../../src/monitoring/guardManifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * guardPosture — the SINGLE shared definition of "what is a guard and what
3
+ * does the config say about it" (GUARD-POSTURE-ENDPOINT-SPEC §2.1).
4
+ *
5
+ * Consumed by BOTH the boot-time GuardPostureTripwire (transition alarms) and
6
+ * the GET /guards endpoint (steady-state readability). Never re-derive this
7
+ * extraction elsewhere — the SafeGitExecutor single-funnel lesson: two copies
8
+ * of "what counts as a guard" WILL drift, and the drifted one is always the
9
+ * one watching when the next Mini incident happens.
10
+ *
11
+ * Also home of resolveGuardConfigSnapshot(): the one-disk-read resolved-config
12
+ * snapshot the endpoint derives everything from. Disk, not the in-memory
13
+ * config object, because the original incident (2026-06-05) was an emergency
14
+ * DIRECT DISK EDIT invisible to in-memory config until restart.
15
+ */
16
+ import { type AgentType } from '../config/ConfigDefaults.js';
17
+ export type GuardPosture = Record<string, boolean>;
18
+ export interface GuardPostureDiff {
19
+ /** Guards that were enabled last boot and are disabled now. */
20
+ disabled: string[];
21
+ /** Guards that were disabled last boot and are enabled now. */
22
+ enabled: string[];
23
+ }
24
+ /** Posture keys whose false→true transition is COST-INCREASING and must be
25
+ * surfaced as loudly as a guard-disable (FABLE-MODEL-ESCALATION-SPEC §10). */
26
+ export declare const COST_INCREASING_ENABLE_KEYS: ReadonlySet<string>;
27
+ /**
28
+ * Extract the guard posture from a resolved config object.
29
+ *
30
+ * Covered surface (generic by design — a future guard is covered the moment
31
+ * it follows the `monitoring.<key>.enabled` convention, with no change here):
32
+ * - `monitoring.<key>.enabled` (boolean) → `monitoring.<key>.enabled`
33
+ * - `monitoring.<key>` (plain boolean) → `monitoring.<key>`
34
+ * - `scheduler.enabled` (boolean) → `scheduler.enabled`
35
+ * - `models.tierEscalation.{enabled,dryRun}`
36
+ */
37
+ export declare function extractGuardPosture(config: unknown): GuardPosture;
38
+ /**
39
+ * Diff two postures. Only keys present in BOTH snapshots can transition —
40
+ * a key appearing for the first time (new feature) or vanishing (config
41
+ * cleanup) is a shape change, not a guard flip, and raises nothing.
42
+ */
43
+ export declare function diffGuardPosture(prev: GuardPosture, cur: GuardPosture): GuardPostureDiff;
44
+ export interface GuardPostureBootSnapshot {
45
+ ts: string;
46
+ posture: GuardPosture;
47
+ }
48
+ export declare function guardPostureSnapshotPath(stateDir: string): string;
49
+ /** Read the tripwire's boot-time posture snapshot. null = absent/corrupt —
50
+ * callers degrade to `divergence: "snapshot-unavailable"`, never invent. */
51
+ export declare function readGuardPostureBootSnapshot(stateDir: string): GuardPostureBootSnapshot | null;
52
+ export interface ResolvedGuardConfigSnapshot {
53
+ /** Defaults + on-disk file deep-merged, dev gates resolved. The ONLY object
54
+ * posture derivation reads config from. */
55
+ resolved: Record<string, unknown>;
56
+ /** Defaults alone (same agent type, dev gates resolved against the merged
57
+ * config's developmentAgent) — the baseline for offClass classification. */
58
+ defaults: Record<string, unknown>;
59
+ /** True when `.instar/config.json` was absent (a defaults-only snapshot). */
60
+ fileAbsent: boolean;
61
+ /** Set when the file existed but could not be read/parsed. The caller must
62
+ * surface this as a top-level error — never an empty-truthful inventory. */
63
+ readError?: string;
64
+ }
65
+ /**
66
+ * Read the on-disk agent config ONCE and resolve it the way the server would:
67
+ * shared defaults (by agent type) + file deep-merged on top + every
68
+ * DEV_GATED_FEATURES `enabled` resolved via resolveDevAgentGate (their
69
+ * convention is to OMIT `enabled` and let the gate decide).
70
+ *
71
+ * EXACTLY ONE fs read of config.json per call — the endpoint calls this once
72
+ * per request (Tier-1 pinned), never per guard.
73
+ */
74
+ export declare function resolveGuardConfigSnapshot(projectDir: string, opts?: {
75
+ agentType?: AgentType;
76
+ }): ResolvedGuardConfigSnapshot;
77
+ //# sourceMappingURL=guardPosture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardPosture.d.ts","sourceRoot":"","sources":["../../src/monitoring/guardPosture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAI9E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;+EAC+E;AAC/E,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAE1D,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAqCjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAG,gBAAgB,CASxF;AAKD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;6EAC6E;AAC7E,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAe9F;AAID,MAAM,WAAW,2BAA2B;IAC1C;gDAC4C;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC;iFAC6E;IAC7E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB;iFAC6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgCD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/B,2BAA2B,CAoD7B"}