@jstn-sdk/ma 0.1.12 → 0.14.0

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 (198) hide show
  1. package/.codex/agents/Architect.toml +1 -2
  2. package/.codex/agents/Auditor.toml +1 -2
  3. package/.codex/agents/Builder.toml +1 -2
  4. package/.codex/agents/Flow.toml +1 -2
  5. package/.codex/agents/Sage.toml +1 -2
  6. package/.codex/agents/Vibe.toml +1 -2
  7. package/.codex/hooks.json +24 -13
  8. package/.codex/prompts/enforcement.md +4 -0
  9. package/.codex/prompts/onboarding.md +6 -1
  10. package/.codex/prompts/release-rules.md +0 -0
  11. package/.codex/prompts/skill-contract.md +4 -0
  12. package/COVERAGE.md +211 -0
  13. package/DEMO.md +274 -0
  14. package/LICENSE +0 -0
  15. package/README.md +132 -656
  16. package/bin/ma.js +748 -55
  17. package/data/clone-data.ledger.json +41 -0
  18. package/data/clone-data.proof.json +50 -0
  19. package/data/clone-data.rvf +37 -0
  20. package/docs/README.md +10 -1
  21. package/docs/autonomous-tasks.md +46 -0
  22. package/docs/codex-integration.md +16 -0
  23. package/docs/getting-started.md +62 -22
  24. package/docs/mcp-setup.md +64 -0
  25. package/docs/qa/release-issue-gates-0.14.0.json +644 -0
  26. package/docs/qa/release-readiness-0.1.5.md +1 -1
  27. package/docs/qa/{release-readiness-0.1.12.md → release-readiness-0.14.0.md} +25 -9
  28. package/docs/quality.md +24 -0
  29. package/docs/reference/native-security-playbooks.md +6 -0
  30. package/docs/reference/native-source-selection.md +6 -0
  31. package/docs/release-spec.md +39 -10
  32. package/docs/skills.md +14 -1
  33. package/index.js +295 -2
  34. package/mcp/collections.json +23 -6
  35. package/mcp/fallback.json +0 -0
  36. package/mcp/local/code-intel.js +179 -41
  37. package/mcp/local/context.js +180 -0
  38. package/mcp/local/memory.js +17 -6
  39. package/mcp/local/quality.js +39 -0
  40. package/mcp/local/state.js +7 -3
  41. package/mcp/local/team-run.js +56 -4
  42. package/mcp/local-capabilities.json +9 -0
  43. package/mcp/servers.json +24 -0
  44. package/package.json +29 -4
  45. package/plugins/meta-architect/.app.json +1 -1
  46. package/plugins/meta-architect/.codex-plugin/plugin.json +1 -1
  47. package/plugins/meta-architect/.mcp.json +1 -1
  48. package/plugins/meta-architect/README.md +8 -1
  49. package/plugins/meta-architect/obsidian/main.js +534 -0
  50. package/plugins/meta-architect/obsidian/manifest.json +9 -0
  51. package/plugins/meta-architect/obsidian/styles.css +7 -0
  52. package/plugins/meta-architect/skills/arch/SKILL.md +2 -0
  53. package/plugins/meta-architect/skills/build/SKILL.md +3 -0
  54. package/plugins/meta-architect/skills/flow/SKILL.md +2 -0
  55. package/plugins/meta-architect/skills/sage/SKILL.md +2 -0
  56. package/plugins/meta-architect/skills/sage/references/source-selection.md +8 -0
  57. package/plugins/meta-architect/skills/vet/SKILL.md +2 -0
  58. package/plugins/meta-architect/skills/vet/references/security-playbooks.md +7 -0
  59. package/plugins/meta-architect/skills/vibe/SKILL.md +2 -0
  60. package/schemas/autonomous-task-queue.schema.json +56 -0
  61. package/schemas/handoff-packet.schema.json +36 -0
  62. package/schemas/setup-receipt.schema.json +28 -0
  63. package/schemas/skill-frontmatter.schema.json +20 -0
  64. package/schemas/support-bundle.schema.json +37 -0
  65. package/schemas/task-contract.schema.json +31 -0
  66. package/scripts/active-autonomy-hook.mjs +226 -0
  67. package/scripts/build-linux-packages.mjs +7 -3
  68. package/scripts/cleanup-test-fixtures.sh +55 -0
  69. package/scripts/context-hydration-hook.mjs +89 -0
  70. package/scripts/demo-smoke.js +285 -0
  71. package/scripts/doctor.js +27 -12
  72. package/scripts/install.sh +57 -0
  73. package/scripts/install.sh.sha256 +1 -0
  74. package/scripts/linux-package-smoke.mjs +2 -2
  75. package/scripts/package-size-check.mjs +26 -0
  76. package/scripts/plugin-sync.js +83 -17
  77. package/scripts/postinstall.js +17 -10
  78. package/scripts/prepack.js +9 -0
  79. package/scripts/ralph/prompt.md +35 -0
  80. package/scripts/release-sync.js +72 -7
  81. package/scripts/release-verify.js +260 -2
  82. package/scripts/setup-npmrc.js +48 -23
  83. package/scripts/skills-install.js +9 -2
  84. package/scripts/skills-manifest.js +2 -21
  85. package/scripts/skills-pack.js +2 -2
  86. package/scripts/skills-validate.js +5 -55
  87. package/skills/arch/SKILL.md +2 -0
  88. package/skills/build/SKILL.md +3 -0
  89. package/skills/flow/SKILL.md +2 -0
  90. package/skills/index.json +0 -0
  91. package/skills/sage/SKILL.md +2 -0
  92. package/skills/sage/references/source-selection.md +8 -0
  93. package/skills/vet/SKILL.md +2 -0
  94. package/skills/vet/references/security-playbooks.md +7 -0
  95. package/skills/vibe/SKILL.md +2 -0
  96. package/sprint/00-idea.md +0 -0
  97. package/sprint/01-architecture.md +0 -0
  98. package/sprint/02-oss-evidence.md +0 -0
  99. package/sprint/03-logic.md +0 -0
  100. package/sprint/04-security.md +0 -0
  101. package/sprint/05-dx-ux.md +0 -0
  102. package/sprint/06-build-plan.md +0 -0
  103. package/sprint/07-release.md +0 -0
  104. package/src/agents.js +279 -0
  105. package/src/bootstrap.js +268 -62
  106. package/src/build-gate.js +2 -2
  107. package/src/codex-app-server.js +291 -0
  108. package/src/decision-log.js +0 -0
  109. package/src/fs-utils.js +175 -4
  110. package/src/launcher.js +28 -21
  111. package/src/mcp-config.js +9 -1
  112. package/src/mcp-live-client.js +422 -3
  113. package/src/paths.js +10 -1
  114. package/src/policy.js +3 -3
  115. package/src/prelaunch.js +189 -0
  116. package/src/quality/ai-quality-orchestrator.js +328 -0
  117. package/src/release-issue-gates.js +252 -0
  118. package/src/release-operations.js +62 -0
  119. package/src/release-state.js +0 -0
  120. package/src/runtime/active-autonomy-core.js +208 -0
  121. package/src/runtime/agent-compat.js +31 -0
  122. package/src/runtime/alignment-sentinel.js +165 -0
  123. package/src/runtime/architect-review.js +326 -0
  124. package/src/runtime/autonomous-tasks.js +408 -0
  125. package/src/runtime/build-readiness.js +28 -4
  126. package/src/runtime/code-graph-rehearse.js +113 -0
  127. package/src/runtime/codeburn-core.js +112 -0
  128. package/src/runtime/context-authority.js +40 -0
  129. package/src/runtime/context-economy-core.js +316 -0
  130. package/src/runtime/continuity-graph.js +201 -0
  131. package/src/runtime/continuity-notes.js +71 -26
  132. package/src/runtime/core-source-ingest.js +379 -0
  133. package/src/runtime/detached-provider.js +142 -0
  134. package/src/runtime/doctor-report.js +18 -0
  135. package/src/runtime/environment-awareness-core.js +460 -0
  136. package/src/runtime/exposure-catalog.js +276 -0
  137. package/src/runtime/graphify-core.js +167 -0
  138. package/src/runtime/guidance-stack.js +9 -2
  139. package/src/runtime/handoff-packets.js +92 -0
  140. package/src/runtime/headroom-core.js +104 -0
  141. package/src/runtime/helper-orchestration-core.js +307 -0
  142. package/src/runtime/hook-profiles.js +20 -0
  143. package/src/runtime/learning-loop-core.js +344 -0
  144. package/src/runtime/live-agent-verification.js +122 -0
  145. package/src/runtime/maestro-events.js +18 -0
  146. package/src/runtime/maestro-manager.js +19 -0
  147. package/src/runtime/maestro-output.js +58 -0
  148. package/src/runtime/maestro-state.js +125 -0
  149. package/src/runtime/managed-markdown.js +29 -0
  150. package/src/runtime/mcp-authority.js +147 -0
  151. package/src/runtime/mcp-policy.js +192 -0
  152. package/src/runtime/obsidian-integration-core.js +1089 -0
  153. package/src/runtime/obsidian-plugin-bridge.js +1045 -0
  154. package/src/runtime/pi-maestro-core.js +89 -0
  155. package/src/runtime/preferences.js +79 -0
  156. package/src/runtime/project-context.js +636 -0
  157. package/src/runtime/prompt-strategy-core.js +230 -0
  158. package/src/runtime/quorum-review.js +90 -0
  159. package/src/runtime/ralph-execution-core.js +217 -0
  160. package/src/runtime/redaction-gateway.js +373 -0
  161. package/src/runtime/runtime-state.js +935 -2
  162. package/src/runtime/schema-migrations.js +162 -0
  163. package/src/runtime/semantic-recording-core.js +147 -0
  164. package/src/runtime/signal-hooks.js +28 -0
  165. package/src/runtime/skills-registry-export.js +754 -0
  166. package/src/runtime/task-contracts.js +83 -0
  167. package/src/runtime/universal-plugin-broker-core.js +898 -0
  168. package/src/runtime/workspace-intelligence-runtime.js +674 -0
  169. package/src/runtime/workspace-virtualizer.js +102 -0
  170. package/src/runtime-artifacts.js +225 -62
  171. package/src/setup-lifecycle.js +359 -0
  172. package/src/skill-frontmatter.js +78 -0
  173. package/src/skill-installer.js +226 -71
  174. package/src/skills.js +1166 -96
  175. package/src/state-sync.js +0 -0
  176. package/src/test-fixtures.js +543 -0
  177. package/src/tui/grid.js +67 -0
  178. package/src/tui/status-grid.js +23 -0
  179. package/support-bundle.json +114 -0
  180. package/templates/AGENTS.md +6 -2
  181. package/templates/catalog-manifest.json +0 -0
  182. package/templates/model-instructions/core.md +0 -0
  183. package/templates/model-instructions/release.md +0 -0
  184. package/templates/model-instructions/security.md +0 -0
  185. package/templates/quality/ai-quality-rules.yml +37 -0
  186. package/docs/assets/image/Screenshot(1).png +0 -0
  187. package/docs/assets/image/Screenshot(2).png +0 -0
  188. package/docs/assets/image/Screenshot(3).png +0 -0
  189. package/docs/assets/image/Screenshot(4).png +0 -0
  190. package/docs/assets/image/Screenshot(5).png +0 -0
  191. package/docs/assets/image/Screenshot(6).png +0 -0
  192. package/docs/assets/image/Screenshot(7).png +0 -0
  193. package/docs/assets/image/Screenshot(8).png +0 -0
  194. package/docs/assets/image/Screenshot(9).png +0 -0
  195. package/docs/assets/meta-architect-logo.png +0 -0
  196. package/docs/assets/meta-architect-logo.svg +0 -8
  197. package/docs/onboarding.md +0 -65
  198. package/docs/skills-publishing.md +0 -255
@@ -2,39 +2,188 @@ import { randomUUID } from "node:crypto";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { readJson, writeJson } from "../fs-utils.js";
5
- import { getRuntimeReadPath } from "../paths.js";
5
+ import { getRepoRoot, getRuntimeReadPath } from "../paths.js";
6
+ import {
7
+ resolveReleaseIssueGates,
8
+ summarizeReleaseIssueGateStatus,
9
+ } from "../release-issue-gates.js";
6
10
  import { createDefaultReleaseState, validateReleaseState } from "../release-state.js";
11
+ import {
12
+ createDefaultActiveAutonomyCore,
13
+ getActiveAutonomyCorePath,
14
+ seedActiveAutonomyCoreArtifacts,
15
+ validateActiveAutonomyCore,
16
+ } from "./active-autonomy-core.js";
17
+ import { seedAlignmentSentinelArtifacts } from "./alignment-sentinel.js";
18
+ import { seedArchitectReviewArtifacts } from "./architect-review.js";
19
+ import { seedAutonomousTaskArtifacts } from "./autonomous-tasks.js";
20
+ import {
21
+ createDefaultCodeGraphRehearse,
22
+ getCodeGraphRehearsePath,
23
+ seedCodeGraphRehearseArtifacts,
24
+ validateCodeGraphRehearse,
25
+ } from "./code-graph-rehearse.js";
26
+ import {
27
+ createDefaultCodeburnUsage,
28
+ getCodeburnLogPath,
29
+ seedCodeburnArtifacts,
30
+ } from "./codeburn-core.js";
31
+ import {
32
+ createDefaultContextEconomyCore,
33
+ getContextEconomyCorePath,
34
+ seedContextEconomyCoreArtifacts,
35
+ validateContextEconomyCore,
36
+ } from "./context-economy-core.js";
37
+ import {
38
+ createDefaultContinuityGraph,
39
+ getContinuityGraphPath,
40
+ validateContinuityGraph,
41
+ } from "./continuity-graph.js";
7
42
  import {
8
43
  getContinuityIndexPath,
9
44
  getContinuityNotesPath,
10
45
  seedContinuityArtifacts,
11
46
  } from "./continuity-notes.js";
47
+ import {
48
+ createDefaultCoreSourceIngest,
49
+ getCoreSourceIngestPath,
50
+ seedCoreSourceIngestArtifacts,
51
+ validateCoreSourceIngest,
52
+ } from "./core-source-ingest.js";
53
+ import {
54
+ createDefaultEnvironmentAwarenessCore,
55
+ getEnvironmentAwarenessCorePath,
56
+ seedEnvironmentAwarenessCoreArtifacts,
57
+ validateEnvironmentAwarenessCore,
58
+ } from "./environment-awareness-core.js";
59
+ import {
60
+ createDefaultGraphifyIndex,
61
+ getGraphifyIndexPath,
62
+ seedGraphifyArtifacts,
63
+ validateGraphifyIndex,
64
+ } from "./graphify-core.js";
12
65
  import {
13
66
  getGuidanceIncludeGraphPath,
14
67
  getMergedGuidancePath,
15
68
  seedGuidanceStackArtifacts,
16
69
  } from "./guidance-stack.js";
70
+ import { seedHeadroomArtifacts } from "./headroom-core.js";
71
+ import {
72
+ createDefaultHelperOrchestrationCore,
73
+ getHelperOrchestrationCorePath,
74
+ seedHelperOrchestrationCoreArtifacts,
75
+ validateHelperOrchestrationCore,
76
+ } from "./helper-orchestration-core.js";
77
+ import {
78
+ createDefaultLearningLoopCore,
79
+ getLearningLoopCorePath,
80
+ seedLearningLoopCoreArtifacts,
81
+ validateLearningLoopCore,
82
+ } from "./learning-loop-core.js";
17
83
  import { getManagerRunsPath, seedMaestroManagerArtifacts } from "./maestro-manager.js";
84
+ import {
85
+ createDefaultMaestroState,
86
+ getMaestroStatePath,
87
+ seedMaestroStateArtifacts,
88
+ } from "./maestro-state.js";
89
+ import {
90
+ createDefaultObsidianBridge,
91
+ createDefaultObsidianVaultIndex,
92
+ createDefaultObsidianVaultOperations,
93
+ getObsidianBridgePath,
94
+ getObsidianVaultIndexPath,
95
+ getObsidianVaultOperationsPath,
96
+ seedObsidianBridgeArtifacts,
97
+ validateObsidianBridge,
98
+ validateObsidianVaultIndex,
99
+ validateObsidianVaultOperations,
100
+ } from "./obsidian-integration-core.js";
18
101
  import {
19
102
  getTaskLockRoot,
20
103
  getTaskMailboxRoot,
21
104
  getTaskRegistryPath,
22
105
  seedOrchestratorArtifacts,
23
106
  } from "./orchestrator.js";
107
+ import {
108
+ createDefaultPromptStrategyCore,
109
+ getPromptStrategyCorePath,
110
+ seedPromptStrategyCoreArtifacts,
111
+ validatePromptStrategyCore,
112
+ } from "./prompt-strategy-core.js";
113
+ import {
114
+ createDefaultSemanticRecordingCore,
115
+ getSemanticRecordingCorePath,
116
+ seedSemanticRecordingCoreArtifacts,
117
+ validateSemanticRecordingCore,
118
+ } from "./semantic-recording-core.js";
24
119
  import {
25
120
  getRuntimeHooksAuditPath,
26
121
  getRuntimeHooksConfigPath,
27
122
  seedSignalHookArtifacts,
28
123
  } from "./signal-hooks.js";
124
+ import {
125
+ createDefaultSkillsRegistryExport,
126
+ getSkillsRegistryExportPath,
127
+ seedSkillsRegistryExportArtifacts,
128
+ validateSkillsRegistryExport,
129
+ } from "./skills-registry-export.js";
130
+ import {
131
+ createDefaultUniversalPluginBrokerCore,
132
+ getUniversalPluginBrokerCorePath,
133
+ seedUniversalPluginBrokerCoreArtifacts,
134
+ validateUniversalPluginBrokerCore,
135
+ } from "./universal-plugin-broker-core.js";
136
+ import {
137
+ createDefaultCapabilityComposition,
138
+ createDefaultSemanticReceiptIndex,
139
+ createDefaultWorkspaceContextPack,
140
+ createDefaultWorkspaceEffectiveness,
141
+ getCapabilityCompositionPath,
142
+ getSemanticReceiptIndexPath,
143
+ getWorkspaceContextPackPath,
144
+ getWorkspaceEffectivenessPath,
145
+ seedWorkspaceIntelligenceArtifacts,
146
+ validateCapabilityComposition,
147
+ validateSemanticReceiptIndex,
148
+ validateWorkspaceContextPack,
149
+ validateWorkspaceEffectiveness,
150
+ } from "./workspace-intelligence-runtime.js";
151
+ import {
152
+ createDefaultWorkspaceVirtualizer,
153
+ getWorkspaceVirtualizerPath,
154
+ seedWorkspaceVirtualizerArtifacts,
155
+ validateWorkspaceVirtualizer,
156
+ } from "./workspace-virtualizer.js";
29
157
  import { getWorkspacesIndexPath, seedWorkspaceArtifacts } from "./workspaces.js";
30
158
 
31
159
  const runtimeSubsystemSeeders = [
32
160
  seedGuidanceStackArtifacts,
161
+ seedGraphifyArtifacts,
33
162
  seedContinuityArtifacts,
34
163
  seedSignalHookArtifacts,
35
164
  seedOrchestratorArtifacts,
165
+ seedAutonomousTaskArtifacts,
36
166
  seedWorkspaceArtifacts,
37
167
  seedMaestroManagerArtifacts,
168
+ seedMaestroStateArtifacts,
169
+ seedArchitectReviewArtifacts,
170
+ seedAlignmentSentinelArtifacts,
171
+ seedSemanticRecordingCoreArtifacts,
172
+ seedHelperOrchestrationCoreArtifacts,
173
+ seedHeadroomArtifacts,
174
+ seedLearningLoopCoreArtifacts,
175
+ seedWorkspaceIntelligenceArtifacts,
176
+ seedPromptStrategyCoreArtifacts,
177
+ seedActiveAutonomyCoreArtifacts,
178
+ seedContextEconomyCoreArtifacts,
179
+ seedEnvironmentAwarenessCoreArtifacts,
180
+ seedCoreSourceIngestArtifacts,
181
+ seedUniversalPluginBrokerCoreArtifacts,
182
+ seedObsidianBridgeArtifacts,
183
+ seedWorkspaceVirtualizerArtifacts,
184
+ seedCodeGraphRehearseArtifacts,
185
+ seedCodeburnArtifacts,
186
+ seedSkillsRegistryExportArtifacts,
38
187
  ];
39
188
  const defaultMergedGuidance = {
40
189
  schemaVersion: "0.1.0",
@@ -65,6 +214,21 @@ const defaultHookConfig = {
65
214
  "workspace_created",
66
215
  ],
67
216
  hooks: [],
217
+ activeAutonomy: {
218
+ enabled: true,
219
+ stopPolicy: "block_passive_permission_handoff_when_auto_continue_applies",
220
+ defaultResponse:
221
+ "AUTO-CONTINUE: continue the current safe branch, execute the next reversible step, then verify before reporting.",
222
+ stallPatterns: [
223
+ "should i proceed",
224
+ "would you like me to continue",
225
+ "if you want, i can",
226
+ "if you'd like, i can",
227
+ "tell me if you want me to",
228
+ "i can continue if you want",
229
+ "let me know if you want me to continue",
230
+ ],
231
+ },
68
232
  };
69
233
  const defaultTaskRegistry = {
70
234
  schemaVersion: "0.1.0",
@@ -80,11 +244,80 @@ const defaultDecisions = {
80
244
  schemaVersion: "0.1.0",
81
245
  decisions: [],
82
246
  };
247
+ const defaultAudits = {
248
+ schemaVersion: "0.1.0",
249
+ items: [],
250
+ };
251
+ const defaultCves = {
252
+ schemaVersion: "0.1.0",
253
+ items: [],
254
+ };
255
+ const defaultReleaseIssueGates = {
256
+ schemaVersion: "1.0.0",
257
+ releaseVersion: "0.0.0",
258
+ releaseTag: "v0.0.0",
259
+ passContract: {
260
+ allIssuesMustPassProduction: true,
261
+ allIssuesMustHaveLabels: true,
262
+ },
263
+ issues: [],
264
+ };
83
265
  const defaultManagerRuns = {
84
266
  schemaVersion: "0.1.0",
85
267
  runs: [],
86
268
  };
269
+ const defaultMaestroState = createDefaultMaestroState();
270
+ const defaultActiveAutonomyCore = createDefaultActiveAutonomyCore();
271
+ const defaultSemanticRecordingCore = createDefaultSemanticRecordingCore();
272
+ const defaultHelperOrchestrationCore = createDefaultHelperOrchestrationCore();
273
+ const defaultLearningLoopCore = createDefaultLearningLoopCore();
274
+ const defaultPromptStrategyCore = createDefaultPromptStrategyCore();
275
+ const defaultContextEconomyCore = createDefaultContextEconomyCore();
276
+ const defaultEnvironmentAwarenessCore = createDefaultEnvironmentAwarenessCore();
277
+ const defaultCoreSourceIngest = createDefaultCoreSourceIngest();
278
+ const defaultUniversalPluginBrokerCore = createDefaultUniversalPluginBrokerCore();
279
+ const defaultObsidianBridge = createDefaultObsidianBridge();
280
+ const defaultObsidianVaultIndex = createDefaultObsidianVaultIndex();
281
+ const defaultObsidianVaultOperations = createDefaultObsidianVaultOperations();
282
+ const defaultWorkspaceVirtualizer = createDefaultWorkspaceVirtualizer();
283
+ const defaultCodeGraphRehearse = createDefaultCodeGraphRehearse();
284
+ const defaultCodeburnUsage = createDefaultCodeburnUsage();
285
+ const defaultSkillsRegistryExport = createDefaultSkillsRegistryExport();
286
+ const defaultCapabilityComposition = createDefaultCapabilityComposition();
287
+ const defaultWorkspaceContextPack = createDefaultWorkspaceContextPack();
288
+ const defaultWorkspaceEffectiveness = createDefaultWorkspaceEffectiveness();
289
+ const defaultSemanticReceiptIndex = createDefaultSemanticReceiptIndex();
290
+ const defaultContinuityGraph = createDefaultContinuityGraph();
87
291
  const terminalManagerStates = new Set(["completed", "blocked", "failed", "cancelled"]);
292
+ const repairableRuntimeArtifacts = new Set([
293
+ "guidance.merged",
294
+ "guidance.includeGraph",
295
+ "context.activeAutonomyCore",
296
+ "context.recordingCore",
297
+ "context.helperOrchestrationCore",
298
+ "context.learningLoopCore",
299
+ "context.promptStrategyCore",
300
+ "context.contextEconomyCore",
301
+ "context.environmentAwarenessCore",
302
+ "context.coreSourceIngest",
303
+ "context.universalPluginBrokerCore",
304
+ "context.obsidianBridge",
305
+ "context.obsidianVaultOperations",
306
+ "context.workspaceVirtualizer",
307
+ "context.codeGraphRehearse",
308
+ "context.skillsRegistryExport",
309
+ "context.capabilityComposition",
310
+ "context.workspaceContextPack",
311
+ "context.workspaceEffectiveness",
312
+ "evidence.semanticReceipts",
313
+ "memory.index",
314
+ "memory.graph",
315
+ "hooks.config",
316
+ "tasks.registry",
317
+ "workspaces.index",
318
+ "runtime.managerRuns",
319
+ "runtime.maestroState",
320
+ ]);
88
321
 
89
322
  function coerceValidated(value, fallback, label, predicate, invalidArtifacts) {
90
323
  if (predicate(value)) {
@@ -213,18 +446,48 @@ export async function loadRuntimeSnapshot() {
213
446
  await fs.access(getTaskLockRoot()).catch(() => {
214
447
  missingArtifacts.push("tasks.locks");
215
448
  });
449
+ const releaseIssueGatesResolution = resolveReleaseIssueGates(getRepoRoot());
450
+ if (!releaseIssueGatesResolution) {
451
+ missingArtifacts.push("release.issueGates");
452
+ }
216
453
 
217
454
  const [
218
455
  mergedGuidance,
219
456
  guidanceGraph,
457
+ graphifyIndex,
220
458
  continuityIndex,
459
+ continuityGraph,
221
460
  continuityNotes,
222
461
  hookConfig,
223
462
  taskRegistry,
224
463
  workspaceIndex,
225
464
  release,
226
465
  decisions,
466
+ audits,
467
+ cves,
468
+ releaseIssueGates,
227
469
  managerRuns,
470
+ maestroState,
471
+ activeAutonomyCore,
472
+ semanticRecordingCore,
473
+ helperOrchestrationCore,
474
+ learningLoopCore,
475
+ promptStrategyCore,
476
+ contextEconomyCore,
477
+ environmentAwarenessCore,
478
+ coreSourceIngest,
479
+ universalPluginBrokerCore,
480
+ obsidianBridge,
481
+ obsidianVaultIndex,
482
+ obsidianVaultOperations,
483
+ workspaceVirtualizer,
484
+ codeGraphRehearse,
485
+ codeburnUsage,
486
+ skillsRegistryExport,
487
+ capabilityComposition,
488
+ workspaceContextPack,
489
+ workspaceEffectiveness,
490
+ semanticReceiptIndex,
228
491
  ] = await Promise.all([
229
492
  readJsonWithStatus(getMergedGuidancePath(), defaultMergedGuidance, "guidance.merged"),
230
493
  readJsonWithStatus(
@@ -232,7 +495,9 @@ export async function loadRuntimeSnapshot() {
232
495
  defaultGuidanceGraph,
233
496
  "guidance.includeGraph",
234
497
  ),
498
+ readJsonWithStatus(getGraphifyIndexPath(), createDefaultGraphifyIndex(), "context.graphify"),
235
499
  readJsonWithStatus(getContinuityIndexPath(), defaultContinuityIndex, "memory.index"),
500
+ readJsonWithStatus(getContinuityGraphPath(), defaultContinuityGraph, "memory.graph"),
236
501
  readTextWithStatus(getContinuityNotesPath(), "", "memory.notes"),
237
502
  readJsonWithStatus(getRuntimeHooksConfigPath(), defaultHookConfig, "hooks.config"),
238
503
  readJsonWithStatus(getTaskRegistryPath(), defaultTaskRegistry, "tasks.registry"),
@@ -253,7 +518,112 @@ export async function loadRuntimeSnapshot() {
253
518
  }
254
519
  })(),
255
520
  readJsonWithStatus(getRuntimeReadPath("decisions.json"), defaultDecisions, "runtime.decisions"),
521
+ readJsonWithStatus(
522
+ getRuntimeReadPath("evidence", "audits.json"),
523
+ defaultAudits,
524
+ "runtime.audits",
525
+ ),
526
+ readJsonWithStatus(getRuntimeReadPath("evidence", "cves.json"), defaultCves, "runtime.cves"),
527
+ readJsonWithStatus(
528
+ releaseIssueGatesResolution?.path ??
529
+ path.join(getRepoRoot(), "docs", "qa", "release-issue-gates-missing.json"),
530
+ defaultReleaseIssueGates,
531
+ "release.issueGates",
532
+ ),
256
533
  readJsonWithStatus(getManagerRunsPath(), defaultManagerRuns, "runtime.managerRuns"),
534
+ readJsonWithStatus(getMaestroStatePath(), defaultMaestroState, "runtime.maestroState"),
535
+ readJsonWithStatus(
536
+ getActiveAutonomyCorePath(),
537
+ defaultActiveAutonomyCore,
538
+ "context.activeAutonomyCore",
539
+ ),
540
+ readJsonWithStatus(
541
+ getSemanticRecordingCorePath(),
542
+ defaultSemanticRecordingCore,
543
+ "context.recordingCore",
544
+ ),
545
+ readJsonWithStatus(
546
+ getHelperOrchestrationCorePath(),
547
+ defaultHelperOrchestrationCore,
548
+ "context.helperOrchestrationCore",
549
+ ),
550
+ readJsonWithStatus(
551
+ getLearningLoopCorePath(),
552
+ defaultLearningLoopCore,
553
+ "context.learningLoopCore",
554
+ ),
555
+ readJsonWithStatus(
556
+ getPromptStrategyCorePath(),
557
+ defaultPromptStrategyCore,
558
+ "context.promptStrategyCore",
559
+ ),
560
+ readJsonWithStatus(
561
+ getContextEconomyCorePath(),
562
+ defaultContextEconomyCore,
563
+ "context.contextEconomyCore",
564
+ ),
565
+ readJsonWithStatus(
566
+ getEnvironmentAwarenessCorePath(),
567
+ defaultEnvironmentAwarenessCore,
568
+ "context.environmentAwarenessCore",
569
+ ),
570
+ readJsonWithStatus(
571
+ getCoreSourceIngestPath(),
572
+ defaultCoreSourceIngest,
573
+ "context.coreSourceIngest",
574
+ ),
575
+ readJsonWithStatus(
576
+ getUniversalPluginBrokerCorePath(),
577
+ defaultUniversalPluginBrokerCore,
578
+ "context.universalPluginBrokerCore",
579
+ ),
580
+ readJsonWithStatus(getObsidianBridgePath(), defaultObsidianBridge, "context.obsidianBridge"),
581
+ readJsonWithStatus(
582
+ getObsidianVaultIndexPath(),
583
+ defaultObsidianVaultIndex,
584
+ "context.obsidianVaultIndex",
585
+ ),
586
+ readJsonWithStatus(
587
+ getObsidianVaultOperationsPath(),
588
+ defaultObsidianVaultOperations,
589
+ "context.obsidianVaultOperations",
590
+ ),
591
+ readJsonWithStatus(
592
+ getWorkspaceVirtualizerPath(),
593
+ defaultWorkspaceVirtualizer,
594
+ "context.workspaceVirtualizer",
595
+ ),
596
+ readJsonWithStatus(
597
+ getCodeGraphRehearsePath(),
598
+ defaultCodeGraphRehearse,
599
+ "context.codeGraphRehearse",
600
+ ),
601
+ readJsonWithStatus(getCodeburnLogPath(), defaultCodeburnUsage, "context.codeburnUsage"),
602
+ readJsonWithStatus(
603
+ getSkillsRegistryExportPath(),
604
+ defaultSkillsRegistryExport,
605
+ "context.skillsRegistryExport",
606
+ ),
607
+ readJsonWithStatus(
608
+ getCapabilityCompositionPath(),
609
+ defaultCapabilityComposition,
610
+ "context.capabilityComposition",
611
+ ),
612
+ readJsonWithStatus(
613
+ getWorkspaceContextPackPath(),
614
+ defaultWorkspaceContextPack,
615
+ "context.workspaceContextPack",
616
+ ),
617
+ readJsonWithStatus(
618
+ getWorkspaceEffectivenessPath(),
619
+ defaultWorkspaceEffectiveness,
620
+ "context.workspaceEffectiveness",
621
+ ),
622
+ readJsonWithStatus(
623
+ getSemanticReceiptIndexPath(),
624
+ defaultSemanticReceiptIndex,
625
+ "evidence.semanticReceipts",
626
+ ),
257
627
  ]);
258
628
  const validatedMergedGuidance = coerceValidated(
259
629
  mergedGuidance,
@@ -277,6 +647,20 @@ export async function loadRuntimeSnapshot() {
277
647
  Array.isArray(value.edges),
278
648
  invalidArtifacts,
279
649
  );
650
+ const validatedGraphifyIndex = coerceValidated(
651
+ graphifyIndex,
652
+ createDefaultGraphifyIndex(),
653
+ "context.graphify",
654
+ (value) => {
655
+ try {
656
+ validateGraphifyIndex(value);
657
+ return true;
658
+ } catch {
659
+ return false;
660
+ }
661
+ },
662
+ invalidArtifacts,
663
+ );
280
664
  const validatedContinuityIndex = coerceValidated(
281
665
  continuityIndex,
282
666
  defaultContinuityIndex,
@@ -288,6 +672,20 @@ export async function loadRuntimeSnapshot() {
288
672
  "lastUpdatedAt" in value,
289
673
  invalidArtifacts,
290
674
  );
675
+ const validatedContinuityGraph = coerceValidated(
676
+ continuityGraph,
677
+ defaultContinuityGraph,
678
+ "memory.graph",
679
+ (value) => {
680
+ try {
681
+ validateContinuityGraph(value);
682
+ return true;
683
+ } catch {
684
+ return false;
685
+ }
686
+ },
687
+ invalidArtifacts,
688
+ );
291
689
  const validatedHookConfig = coerceValidated(
292
690
  hookConfig,
293
691
  defaultHookConfig,
@@ -297,7 +695,11 @@ export async function loadRuntimeSnapshot() {
297
695
  typeof value === "object" &&
298
696
  Array.isArray(value.compatibilityNamespace) &&
299
697
  Array.isArray(value.runtimeNamespace) &&
300
- Array.isArray(value.hooks),
698
+ Array.isArray(value.hooks) &&
699
+ value.activeAutonomy &&
700
+ typeof value.activeAutonomy === "object" &&
701
+ value.activeAutonomy.enabled === true &&
702
+ Array.isArray(value.activeAutonomy.stallPatterns),
301
703
  invalidArtifacts,
302
704
  );
303
705
  const validatedTaskRegistry = coerceValidated(
@@ -326,6 +728,23 @@ export async function loadRuntimeSnapshot() {
326
728
  (value) => value && typeof value === "object" && Array.isArray(value.decisions),
327
729
  invalidArtifacts,
328
730
  );
731
+ const validatedAudits = coerceValidated(
732
+ audits,
733
+ defaultAudits,
734
+ "runtime.audits",
735
+ (value) => value && typeof value === "object" && Array.isArray(value.items),
736
+ invalidArtifacts,
737
+ );
738
+ const validatedCves = coerceValidated(
739
+ cves,
740
+ defaultCves,
741
+ "runtime.cves",
742
+ (value) => value && typeof value === "object" && Array.isArray(value.items),
743
+ invalidArtifacts,
744
+ );
745
+ const releaseIssueGateStatus = summarizeReleaseIssueGateStatus(releaseIssueGates, {
746
+ version: releaseIssueGates.releaseVersion,
747
+ });
329
748
  const validatedManagerRuns = coerceValidated(
330
749
  managerRuns,
331
750
  defaultManagerRuns,
@@ -333,11 +752,306 @@ export async function loadRuntimeSnapshot() {
333
752
  (value) => value && typeof value === "object" && Array.isArray(value.runs),
334
753
  invalidArtifacts,
335
754
  );
755
+ const validatedMaestroState = coerceValidated(
756
+ maestroState,
757
+ defaultMaestroState,
758
+ "runtime.maestroState",
759
+ (value) =>
760
+ value &&
761
+ typeof value === "object" &&
762
+ typeof value.global_status === "string" &&
763
+ value.runtime_tracks &&
764
+ typeof value.runtime_tracks === "object" &&
765
+ value.downstream_lock_table &&
766
+ typeof value.downstream_lock_table === "object",
767
+ invalidArtifacts,
768
+ );
769
+ const validatedActiveAutonomyCore = coerceValidated(
770
+ activeAutonomyCore,
771
+ defaultActiveAutonomyCore,
772
+ "context.activeAutonomyCore",
773
+ (value) => {
774
+ try {
775
+ validateActiveAutonomyCore(value);
776
+ return true;
777
+ } catch {
778
+ return false;
779
+ }
780
+ },
781
+ invalidArtifacts,
782
+ );
783
+ const validatedSemanticRecordingCore = coerceValidated(
784
+ semanticRecordingCore,
785
+ defaultSemanticRecordingCore,
786
+ "context.recordingCore",
787
+ (value) => {
788
+ try {
789
+ validateSemanticRecordingCore(value);
790
+ return true;
791
+ } catch {
792
+ return false;
793
+ }
794
+ },
795
+ invalidArtifacts,
796
+ );
797
+ const validatedHelperOrchestrationCore = coerceValidated(
798
+ helperOrchestrationCore,
799
+ defaultHelperOrchestrationCore,
800
+ "context.helperOrchestrationCore",
801
+ (value) => {
802
+ try {
803
+ validateHelperOrchestrationCore(value);
804
+ return true;
805
+ } catch {
806
+ return false;
807
+ }
808
+ },
809
+ invalidArtifacts,
810
+ );
811
+ const validatedLearningLoopCore = coerceValidated(
812
+ learningLoopCore,
813
+ defaultLearningLoopCore,
814
+ "context.learningLoopCore",
815
+ (value) => {
816
+ try {
817
+ validateLearningLoopCore(value);
818
+ return true;
819
+ } catch {
820
+ return false;
821
+ }
822
+ },
823
+ invalidArtifacts,
824
+ );
825
+ const validatedPromptStrategyCore = coerceValidated(
826
+ promptStrategyCore,
827
+ defaultPromptStrategyCore,
828
+ "context.promptStrategyCore",
829
+ (value) => {
830
+ try {
831
+ validatePromptStrategyCore(value);
832
+ return true;
833
+ } catch {
834
+ return false;
835
+ }
836
+ },
837
+ invalidArtifacts,
838
+ );
839
+ const validatedContextEconomyCore = coerceValidated(
840
+ contextEconomyCore,
841
+ defaultContextEconomyCore,
842
+ "context.contextEconomyCore",
843
+ (value) => {
844
+ try {
845
+ validateContextEconomyCore(value);
846
+ return true;
847
+ } catch {
848
+ return false;
849
+ }
850
+ },
851
+ invalidArtifacts,
852
+ );
853
+ const validatedEnvironmentAwarenessCore = coerceValidated(
854
+ environmentAwarenessCore,
855
+ defaultEnvironmentAwarenessCore,
856
+ "context.environmentAwarenessCore",
857
+ (value) => {
858
+ try {
859
+ validateEnvironmentAwarenessCore(value);
860
+ return true;
861
+ } catch {
862
+ return false;
863
+ }
864
+ },
865
+ invalidArtifacts,
866
+ );
867
+ const validatedCoreSourceIngest = coerceValidated(
868
+ coreSourceIngest,
869
+ defaultCoreSourceIngest,
870
+ "context.coreSourceIngest",
871
+ (value) => {
872
+ try {
873
+ validateCoreSourceIngest(value);
874
+ return true;
875
+ } catch {
876
+ return false;
877
+ }
878
+ },
879
+ invalidArtifacts,
880
+ );
881
+ const validatedUniversalPluginBrokerCore = coerceValidated(
882
+ universalPluginBrokerCore,
883
+ defaultUniversalPluginBrokerCore,
884
+ "context.universalPluginBrokerCore",
885
+ (value) => {
886
+ try {
887
+ validateUniversalPluginBrokerCore(value);
888
+ return true;
889
+ } catch {
890
+ return false;
891
+ }
892
+ },
893
+ invalidArtifacts,
894
+ );
895
+ const validatedObsidianBridge = coerceValidated(
896
+ obsidianBridge,
897
+ defaultObsidianBridge,
898
+ "context.obsidianBridge",
899
+ (value) => {
900
+ try {
901
+ validateObsidianBridge(value);
902
+ return true;
903
+ } catch {
904
+ return false;
905
+ }
906
+ },
907
+ invalidArtifacts,
908
+ );
909
+ const validatedObsidianVaultIndex = coerceValidated(
910
+ obsidianVaultIndex,
911
+ defaultObsidianVaultIndex,
912
+ "context.obsidianVaultIndex",
913
+ (value) => {
914
+ try {
915
+ validateObsidianVaultIndex(value);
916
+ return true;
917
+ } catch {
918
+ return false;
919
+ }
920
+ },
921
+ invalidArtifacts,
922
+ );
923
+ const validatedObsidianVaultOperations = coerceValidated(
924
+ obsidianVaultOperations,
925
+ defaultObsidianVaultOperations,
926
+ "context.obsidianVaultOperations",
927
+ (value) => {
928
+ try {
929
+ validateObsidianVaultOperations(value);
930
+ return true;
931
+ } catch {
932
+ return false;
933
+ }
934
+ },
935
+ invalidArtifacts,
936
+ );
937
+ const validatedWorkspaceVirtualizer = coerceValidated(
938
+ workspaceVirtualizer,
939
+ defaultWorkspaceVirtualizer,
940
+ "context.workspaceVirtualizer",
941
+ (value) => {
942
+ try {
943
+ validateWorkspaceVirtualizer(value);
944
+ return true;
945
+ } catch {
946
+ return false;
947
+ }
948
+ },
949
+ invalidArtifacts,
950
+ );
951
+ const validatedCodeGraphRehearse = coerceValidated(
952
+ codeGraphRehearse,
953
+ defaultCodeGraphRehearse,
954
+ "context.codeGraphRehearse",
955
+ (value) => {
956
+ try {
957
+ validateCodeGraphRehearse(value);
958
+ return true;
959
+ } catch {
960
+ return false;
961
+ }
962
+ },
963
+ invalidArtifacts,
964
+ );
965
+ const validatedCodeburnUsage = coerceValidated(
966
+ codeburnUsage,
967
+ defaultCodeburnUsage,
968
+ "context.codeburnUsage",
969
+ (value) =>
970
+ value &&
971
+ typeof value === "object" &&
972
+ value.schemaVersion === defaultCodeburnUsage.schemaVersion &&
973
+ Array.isArray(value.entries) &&
974
+ Number.isFinite(value.totalTokens) &&
975
+ Number.isFinite(value.totalCost),
976
+ invalidArtifacts,
977
+ );
978
+ const validatedSkillsRegistryExport = coerceValidated(
979
+ skillsRegistryExport,
980
+ defaultSkillsRegistryExport,
981
+ "context.skillsRegistryExport",
982
+ (value) => {
983
+ try {
984
+ validateSkillsRegistryExport(value);
985
+ return true;
986
+ } catch {
987
+ return false;
988
+ }
989
+ },
990
+ invalidArtifacts,
991
+ );
992
+ const validatedCapabilityComposition = coerceValidated(
993
+ capabilityComposition,
994
+ defaultCapabilityComposition,
995
+ "context.capabilityComposition",
996
+ (value) => {
997
+ try {
998
+ validateCapabilityComposition(value);
999
+ return true;
1000
+ } catch {
1001
+ return false;
1002
+ }
1003
+ },
1004
+ invalidArtifacts,
1005
+ );
1006
+ const validatedWorkspaceContextPack = coerceValidated(
1007
+ workspaceContextPack,
1008
+ defaultWorkspaceContextPack,
1009
+ "context.workspaceContextPack",
1010
+ (value) => {
1011
+ try {
1012
+ validateWorkspaceContextPack(value);
1013
+ return true;
1014
+ } catch {
1015
+ return false;
1016
+ }
1017
+ },
1018
+ invalidArtifacts,
1019
+ );
1020
+ const validatedWorkspaceEffectiveness = coerceValidated(
1021
+ workspaceEffectiveness,
1022
+ defaultWorkspaceEffectiveness,
1023
+ "context.workspaceEffectiveness",
1024
+ (value) => {
1025
+ try {
1026
+ validateWorkspaceEffectiveness(value);
1027
+ return true;
1028
+ } catch {
1029
+ return false;
1030
+ }
1031
+ },
1032
+ invalidArtifacts,
1033
+ );
1034
+ const validatedSemanticReceiptIndex = coerceValidated(
1035
+ semanticReceiptIndex,
1036
+ defaultSemanticReceiptIndex,
1037
+ "evidence.semanticReceipts",
1038
+ (value) => {
1039
+ try {
1040
+ validateSemanticReceiptIndex(value);
1041
+ return true;
1042
+ } catch {
1043
+ return false;
1044
+ }
1045
+ },
1046
+ invalidArtifacts,
1047
+ );
336
1048
 
337
1049
  return {
338
1050
  mergedGuidance: validatedMergedGuidance,
339
1051
  guidanceGraph: validatedGuidanceGraph,
1052
+ graphifyIndex: validatedGraphifyIndex,
340
1053
  continuityIndex: validatedContinuityIndex,
1054
+ continuityGraph: validatedContinuityGraph,
341
1055
  continuityNotes,
342
1056
  hookConfig: validatedHookConfig,
343
1057
  taskRegistry: validatedTaskRegistry,
@@ -345,7 +1059,32 @@ export async function loadRuntimeSnapshot() {
345
1059
  workspaceIndex: validatedWorkspaceIndex,
346
1060
  release,
347
1061
  decisions: validatedDecisions,
1062
+ audits: validatedAudits,
1063
+ cves: validatedCves,
1064
+ releaseIssueGateStatus,
1065
+ releaseIssueGatesSource: releaseIssueGatesResolution,
348
1066
  managerRuns: validatedManagerRuns,
1067
+ maestroState: validatedMaestroState,
1068
+ activeAutonomyCore: validatedActiveAutonomyCore,
1069
+ semanticRecordingCore: validatedSemanticRecordingCore,
1070
+ helperOrchestrationCore: validatedHelperOrchestrationCore,
1071
+ learningLoopCore: validatedLearningLoopCore,
1072
+ promptStrategyCore: validatedPromptStrategyCore,
1073
+ contextEconomyCore: validatedContextEconomyCore,
1074
+ environmentAwarenessCore: validatedEnvironmentAwarenessCore,
1075
+ coreSourceIngest: validatedCoreSourceIngest,
1076
+ universalPluginBrokerCore: validatedUniversalPluginBrokerCore,
1077
+ obsidianBridge: validatedObsidianBridge,
1078
+ obsidianVaultIndex: validatedObsidianVaultIndex,
1079
+ obsidianVaultOperations: validatedObsidianVaultOperations,
1080
+ workspaceVirtualizer: validatedWorkspaceVirtualizer,
1081
+ codeGraphRehearse: validatedCodeGraphRehearse,
1082
+ codeburnUsage: validatedCodeburnUsage,
1083
+ skillsRegistryExport: validatedSkillsRegistryExport,
1084
+ capabilityComposition: validatedCapabilityComposition,
1085
+ workspaceContextPack: validatedWorkspaceContextPack,
1086
+ workspaceEffectiveness: validatedWorkspaceEffectiveness,
1087
+ semanticReceiptIndex: validatedSemanticReceiptIndex,
349
1088
  missingArtifacts,
350
1089
  invalidArtifacts,
351
1090
  };
@@ -353,9 +1092,22 @@ export async function loadRuntimeSnapshot() {
353
1092
 
354
1093
  export function createRuntimeSummary(snapshot) {
355
1094
  const trimmedNotes = snapshot.continuityNotes.trim();
1095
+ const criticalPackageExposureCount = snapshot.audits.items.filter(
1096
+ (item) =>
1097
+ item?.record_type === "finding:package_exposure" &&
1098
+ `${item.severity}`.toLowerCase() === "critical",
1099
+ ).length;
1100
+ const mcpPolicyViolationCount = snapshot.audits.items.filter(
1101
+ (item) =>
1102
+ item?.record_type === "policy:mcp_validation" &&
1103
+ ["critical", "high"].includes(`${item.severity}`.toLowerCase()),
1104
+ ).length;
356
1105
  return {
357
1106
  guidanceSourceCount: snapshot.mergedGuidance.sources.length,
358
1107
  guidanceIncludeRoots: snapshot.guidanceGraph.roots.length,
1108
+ graphNodeCount: snapshot.graphifyIndex.nodes.length,
1109
+ graphEdgeCount: snapshot.graphifyIndex.edges.length,
1110
+ graphLastRebuiltAt: snapshot.graphifyIndex.lastRebuiltAt,
359
1111
  continuitySessionCount: snapshot.continuityIndex.sessionCount,
360
1112
  continuityHasNotes:
361
1113
  trimmedNotes.length > 0 &&
@@ -368,6 +1120,7 @@ export function createRuntimeSummary(snapshot) {
368
1120
  pendingMailboxCount: snapshot.mailboxEntries.length,
369
1121
  workspaceCount: snapshot.workspaceIndex.items.length,
370
1122
  decisionCount: snapshot.decisions.decisions.length,
1123
+ mcpPolicyViolationCount,
371
1124
  managerRunCount: snapshot.managerRuns.runs.length,
372
1125
  activeManagerRunCount: snapshot.managerRuns.runs.filter(
373
1126
  (run) => !terminalManagerStates.has(run.state),
@@ -375,8 +1128,188 @@ export function createRuntimeSummary(snapshot) {
375
1128
  waitingReviewManagerRunCount: snapshot.managerRuns.runs.filter(
376
1129
  (run) => run.state === "waiting-review",
377
1130
  ).length,
1131
+ maestroGlobalStatus: snapshot.maestroState.global_status,
1132
+ maestroTrackCount: Object.keys(snapshot.maestroState.runtime_tracks).length,
1133
+ semanticRecordingLayerCount: snapshot.semanticRecordingCore.layers.length,
1134
+ semanticDefaultCoreCount: Object.keys(snapshot.semanticRecordingCore.default_core_capabilities)
1135
+ .length,
1136
+ helperCoreContractCount: snapshot.helperOrchestrationCore.helper_contracts.length,
1137
+ helperCoreNonGating: snapshot.helperOrchestrationCore.composition_rules.non_gating === true,
1138
+ helperCoreReleaseMutationAllowed:
1139
+ snapshot.helperOrchestrationCore.composition_rules.release_state_mutation_allowed === true,
1140
+ learningLoopDomainCount: snapshot.learningLoopCore.domains.length,
1141
+ learningLoopRecordCount: snapshot.learningLoopCore.records.length,
1142
+ activeAutonomyAskOnlyCount: snapshot.activeAutonomyCore.decision_rule.ask_only_when.length,
1143
+ activeAutonomyStallPatternCount:
1144
+ snapshot.activeAutonomyCore.runtime_enforcement.stall_patterns.length,
1145
+ activeAutonomyHookEnabled: snapshot.hookConfig.activeAutonomy.enabled,
1146
+ promptStrategyTechniqueFamilyCount: snapshot.promptStrategyCore.technique_families.length,
1147
+ promptStrategyLaneCount: Object.keys(snapshot.promptStrategyCore.lane_policy).length,
1148
+ contextEconomyAppliesToCount: snapshot.contextEconomyCore.applies_to.length,
1149
+ contextEconomyPreserveExactCount: snapshot.contextEconomyCore.preserve_exact.length,
1150
+ contextEconomySafetyValveCount: snapshot.contextEconomyCore.safety_valves.length,
1151
+ environmentCapabilityCount: snapshot.environmentAwarenessCore.capabilities.length,
1152
+ environmentCapabilityTypes: [
1153
+ ...new Set(
1154
+ snapshot.environmentAwarenessCore.capabilities.map(
1155
+ (capability) => capability.capability_type,
1156
+ ),
1157
+ ),
1158
+ ].sort(),
1159
+ environmentRecordsAs: snapshot.environmentAwarenessCore.discovery_policy.records_as,
1160
+ environmentNeverRecordsAs: snapshot.environmentAwarenessCore.discovery_policy.never_records_as,
1161
+ coreSourceIngestStatus: snapshot.coreSourceIngest.status ?? "NOT_INGESTED",
1162
+ coreSourceIngestCount: snapshot.coreSourceIngest.sources.filter((source) =>
1163
+ ["INGESTED", "LOCAL_CORE"].includes(source.status),
1164
+ ).length,
1165
+ coreSourceRuntimeFetchRequired: snapshot.coreSourceIngest.runtime_fetch_required,
1166
+ universalPluginBrokerSupportedAgentCount:
1167
+ snapshot.universalPluginBrokerCore.supported_agents.length,
1168
+ universalPluginBrokerMcpInjectorHosts:
1169
+ snapshot.universalPluginBrokerCore.mcp_injector_hosts.length,
1170
+ universalPluginBrokerRecordsAs: snapshot.universalPluginBrokerCore.mutation_policy.records_as,
1171
+ universalPluginBrokerNeverRecordsAs:
1172
+ snapshot.universalPluginBrokerCore.mutation_policy.never_records_as,
1173
+ obsidianBridgeRecordsAs: snapshot.obsidianBridge.semantic_boundary.records_as,
1174
+ obsidianBridgeNeverRecordsAs: snapshot.obsidianBridge.semantic_boundary.never_records_as,
1175
+ obsidianBridgeQueuedRequestCount: snapshot.obsidianBridge.default_request_queue.length,
1176
+ obsidianBridgeNoteSelectionCount: snapshot.obsidianBridge.note_selection_metadata.length,
1177
+ obsidianBridgeTagGraphClaimCount: snapshot.obsidianBridge.tag_graph_claims.length,
1178
+ obsidianVaultIndexed: snapshot.obsidianVaultIndex.note_count > 0,
1179
+ obsidianVaultPath: snapshot.obsidianVaultIndex.vault_path,
1180
+ obsidianVaultNoteCount: snapshot.obsidianVaultIndex.note_count,
1181
+ obsidianVaultTagCount: snapshot.obsidianVaultIndex.tags.length,
1182
+ obsidianVaultUnresolvedLinkCount: snapshot.obsidianVaultIndex.unresolved_links.length,
1183
+ obsidianVaultOperationCount: snapshot.obsidianVaultOperations.operations.length,
1184
+ workspaceVirtualizerRecordsAs: snapshot.workspaceVirtualizer.evidence_boundary.records_as,
1185
+ workspaceVirtualizerNeverRecordsAs:
1186
+ snapshot.workspaceVirtualizer.evidence_boundary.never_records_as,
1187
+ workspaceVirtualizerSourceMutationAllowed:
1188
+ snapshot.workspaceVirtualizer.mutation_policy.may_mutate_source,
1189
+ codeGraphRehearseRecordsAs: snapshot.codeGraphRehearse.evidence_boundary.records_as,
1190
+ codeGraphRehearseSourceMutationAllowed:
1191
+ snapshot.codeGraphRehearse.mutation_policy.may_mutate_source,
1192
+ codeGraphRehearseMaxSteps: snapshot.codeGraphRehearse.max_steps,
1193
+ tokenUsage: snapshot.codeburnUsage.totalTokens,
1194
+ estimatedCost: snapshot.codeburnUsage.totalCost,
1195
+ skillsRegistryCanonicalDir: snapshot.skillsRegistryExport.canonical_dir,
1196
+ skillsRegistryReleaseMutationAllowed:
1197
+ snapshot.skillsRegistryExport.authority_boundary.exported_payloads_may_mutate_release_state,
1198
+ skillsRegistryUniversalTargetCount: snapshot.skillsRegistryExport.universal_targets.length,
1199
+ skillsRegistryNonUniversalTargetCount:
1200
+ snapshot.skillsRegistryExport.non_universal_targets.length,
1201
+ capabilityCompositionCount: snapshot.capabilityComposition.capability_matrix.length,
1202
+ workspaceContextChannelCount: Object.keys(snapshot.workspaceContextPack.semantic_channels)
1203
+ .length,
1204
+ workspaceEffectivenessReady: snapshot.workspaceEffectiveness.ready,
1205
+ workspaceEffectivenessCheckCount: snapshot.workspaceEffectiveness.checks.length,
1206
+ semanticReceiptCount: snapshot.semanticReceiptIndex.receipts.length,
1207
+ obsidianSemanticRole:
1208
+ snapshot.semanticRecordingCore.default_core_capabilities.obsidian_integration_core
1209
+ .semantic_role,
1210
+ obsidianRecordsAs:
1211
+ snapshot.semanticRecordingCore.default_core_capabilities.obsidian_integration_core.records_as,
378
1212
  buildStatus: snapshot.release.build_status,
1213
+ auditCount: snapshot.audits.items.length,
1214
+ cveCount: snapshot.cves.items.length,
1215
+ releaseIssueGateTotal: snapshot.releaseIssueGateStatus.total,
1216
+ releaseIssueGatePassed: snapshot.releaseIssueGateStatus.passed,
1217
+ releaseIssueGateBlockerCount: snapshot.releaseIssueGateStatus.blockers.length,
1218
+ criticalPackageExposureCount,
379
1219
  missingArtifacts: snapshot.missingArtifacts,
380
1220
  invalidArtifacts: snapshot.invalidArtifacts,
381
1221
  };
382
1222
  }
1223
+
1224
+ export async function repairRuntimeScratchpadArtifacts(artifactLabels = []) {
1225
+ const labels = [...new Set(artifactLabels)].filter((label) =>
1226
+ repairableRuntimeArtifacts.has(label),
1227
+ );
1228
+
1229
+ for (const label of labels) {
1230
+ switch (label) {
1231
+ case "guidance.merged":
1232
+ await writeJson(getMergedGuidancePath(), defaultMergedGuidance);
1233
+ break;
1234
+ case "guidance.includeGraph":
1235
+ await writeJson(getGuidanceIncludeGraphPath(), defaultGuidanceGraph);
1236
+ break;
1237
+ case "context.activeAutonomyCore":
1238
+ await writeJson(getActiveAutonomyCorePath(), defaultActiveAutonomyCore);
1239
+ break;
1240
+ case "context.recordingCore":
1241
+ await writeJson(getSemanticRecordingCorePath(), defaultSemanticRecordingCore);
1242
+ break;
1243
+ case "context.helperOrchestrationCore":
1244
+ await writeJson(getHelperOrchestrationCorePath(), defaultHelperOrchestrationCore);
1245
+ break;
1246
+ case "context.learningLoopCore":
1247
+ await writeJson(getLearningLoopCorePath(), defaultLearningLoopCore);
1248
+ break;
1249
+ case "context.promptStrategyCore":
1250
+ await writeJson(getPromptStrategyCorePath(), defaultPromptStrategyCore);
1251
+ break;
1252
+ case "context.contextEconomyCore":
1253
+ await writeJson(getContextEconomyCorePath(), defaultContextEconomyCore);
1254
+ break;
1255
+ case "context.environmentAwarenessCore":
1256
+ await writeJson(getEnvironmentAwarenessCorePath(), defaultEnvironmentAwarenessCore);
1257
+ break;
1258
+ case "context.coreSourceIngest":
1259
+ await writeJson(getCoreSourceIngestPath(), defaultCoreSourceIngest);
1260
+ break;
1261
+ case "context.universalPluginBrokerCore":
1262
+ await writeJson(getUniversalPluginBrokerCorePath(), defaultUniversalPluginBrokerCore);
1263
+ break;
1264
+ case "context.obsidianVaultOperations":
1265
+ await writeJson(getObsidianVaultOperationsPath(), defaultObsidianVaultOperations);
1266
+ break;
1267
+ case "context.workspaceVirtualizer":
1268
+ await writeJson(getWorkspaceVirtualizerPath(), defaultWorkspaceVirtualizer);
1269
+ break;
1270
+ case "context.codeGraphRehearse":
1271
+ await writeJson(getCodeGraphRehearsePath(), defaultCodeGraphRehearse);
1272
+ break;
1273
+ case "context.skillsRegistryExport":
1274
+ await writeJson(getSkillsRegistryExportPath(), defaultSkillsRegistryExport);
1275
+ break;
1276
+ case "context.capabilityComposition":
1277
+ await writeJson(getCapabilityCompositionPath(), defaultCapabilityComposition);
1278
+ break;
1279
+ case "context.workspaceContextPack":
1280
+ await writeJson(getWorkspaceContextPackPath(), defaultWorkspaceContextPack);
1281
+ break;
1282
+ case "context.workspaceEffectiveness":
1283
+ await writeJson(getWorkspaceEffectivenessPath(), defaultWorkspaceEffectiveness);
1284
+ break;
1285
+ case "evidence.semanticReceipts":
1286
+ await writeJson(getSemanticReceiptIndexPath(), defaultSemanticReceiptIndex);
1287
+ break;
1288
+ case "memory.index":
1289
+ await writeJson(getContinuityIndexPath(), defaultContinuityIndex);
1290
+ break;
1291
+ case "memory.graph":
1292
+ await writeJson(getContinuityGraphPath(), defaultContinuityGraph);
1293
+ break;
1294
+ case "hooks.config":
1295
+ await writeJson(getRuntimeHooksConfigPath(), defaultHookConfig);
1296
+ break;
1297
+ case "tasks.registry":
1298
+ await writeJson(getTaskRegistryPath(), defaultTaskRegistry);
1299
+ break;
1300
+ case "workspaces.index":
1301
+ await writeJson(getWorkspacesIndexPath(), defaultWorkspaceIndex);
1302
+ break;
1303
+ case "runtime.managerRuns":
1304
+ await writeJson(getManagerRunsPath(), defaultManagerRuns);
1305
+ break;
1306
+ case "runtime.maestroState":
1307
+ await writeJson(getMaestroStatePath(), defaultMaestroState);
1308
+ break;
1309
+ default:
1310
+ break;
1311
+ }
1312
+ }
1313
+
1314
+ return labels;
1315
+ }