@jeger-ai/opengantry 3.2.6 → 3.3.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 (368) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/commands/deps.d.ts +18 -0
  3. package/dist/cli/commands/deps.d.ts.map +1 -0
  4. package/dist/cli/commands/deps.js +63 -0
  5. package/dist/cli/commands/deps.js.map +1 -0
  6. package/dist/cli/commands/doctor.d.ts +3 -6
  7. package/dist/cli/commands/doctor.d.ts.map +1 -1
  8. package/dist/cli/commands/doctor.js +8 -1
  9. package/dist/cli/commands/doctor.js.map +1 -1
  10. package/dist/cli/commands/interrogate.js +3 -3
  11. package/dist/cli/commands/interrogate.js.map +1 -1
  12. package/dist/cli/commands/ledger.d.ts +24 -0
  13. package/dist/cli/commands/ledger.d.ts.map +1 -0
  14. package/dist/cli/commands/ledger.js +88 -0
  15. package/dist/cli/commands/ledger.js.map +1 -0
  16. package/dist/cli/commands/mission.d.ts +6 -0
  17. package/dist/cli/commands/mission.d.ts.map +1 -1
  18. package/dist/cli/commands/mission.js +43 -3
  19. package/dist/cli/commands/mission.js.map +1 -1
  20. package/dist/cli/commands/perimeter.d.ts.map +1 -1
  21. package/dist/cli/commands/perimeter.js +4 -0
  22. package/dist/cli/commands/perimeter.js.map +1 -1
  23. package/dist/cli/commands/policy.d.ts +10 -0
  24. package/dist/cli/commands/policy.d.ts.map +1 -0
  25. package/dist/cli/commands/policy.js +49 -0
  26. package/dist/cli/commands/policy.js.map +1 -0
  27. package/dist/cli/commands/triage.d.ts.map +1 -1
  28. package/dist/cli/commands/triage.js +2 -1
  29. package/dist/cli/commands/triage.js.map +1 -1
  30. package/dist/cli/commands/verify.d.ts.map +1 -1
  31. package/dist/cli/commands/verify.js +2 -11
  32. package/dist/cli/commands/verify.js.map +1 -1
  33. package/dist/cli/kernel.d.ts +10 -3
  34. package/dist/cli/kernel.d.ts.map +1 -1
  35. package/dist/cli/kernel.js +18 -2
  36. package/dist/cli/kernel.js.map +1 -1
  37. package/dist/cli/lib/adapter-preflight-checks.d.ts +55 -0
  38. package/dist/cli/lib/adapter-preflight-checks.d.ts.map +1 -0
  39. package/dist/cli/lib/adapter-preflight-checks.js +275 -0
  40. package/dist/cli/lib/adapter-preflight-checks.js.map +1 -0
  41. package/dist/cli/lib/attest-mission.d.ts.map +1 -1
  42. package/dist/cli/lib/attest-mission.js +7 -0
  43. package/dist/cli/lib/attest-mission.js.map +1 -1
  44. package/dist/cli/lib/break-glass.d.ts +1 -1
  45. package/dist/cli/lib/break-glass.d.ts.map +1 -1
  46. package/dist/cli/lib/break-glass.js +6 -0
  47. package/dist/cli/lib/break-glass.js.map +1 -1
  48. package/dist/cli/lib/command-boundary.d.ts +7 -3
  49. package/dist/cli/lib/command-boundary.d.ts.map +1 -1
  50. package/dist/cli/lib/command-boundary.js +20 -4
  51. package/dist/cli/lib/command-boundary.js.map +1 -1
  52. package/dist/cli/lib/constants.d.ts +13 -0
  53. package/dist/cli/lib/constants.d.ts.map +1 -1
  54. package/dist/cli/lib/constants.js +13 -0
  55. package/dist/cli/lib/constants.js.map +1 -1
  56. package/dist/cli/lib/defensive-profile-presets.d.ts +6 -0
  57. package/dist/cli/lib/defensive-profile-presets.d.ts.map +1 -1
  58. package/dist/cli/lib/defensive-profile-presets.js +15 -1
  59. package/dist/cli/lib/defensive-profile-presets.js.map +1 -1
  60. package/dist/cli/lib/deps/deps-fetch.d.ts +4 -0
  61. package/dist/cli/lib/deps/deps-fetch.d.ts.map +1 -0
  62. package/dist/cli/lib/deps/deps-fetch.js +16 -0
  63. package/dist/cli/lib/deps/deps-fetch.js.map +1 -0
  64. package/dist/cli/lib/deps/deps-resolve.d.ts +18 -0
  65. package/dist/cli/lib/deps/deps-resolve.d.ts.map +1 -0
  66. package/dist/cli/lib/deps/deps-resolve.js +66 -0
  67. package/dist/cli/lib/deps/deps-resolve.js.map +1 -0
  68. package/dist/cli/lib/deps/deps-slug.d.ts +5 -0
  69. package/dist/cli/lib/deps/deps-slug.d.ts.map +1 -0
  70. package/dist/cli/lib/deps/deps-slug.js +44 -0
  71. package/dist/cli/lib/deps/deps-slug.js.map +1 -0
  72. package/dist/cli/lib/doctor-adapter-preflight.d.ts +24 -0
  73. package/dist/cli/lib/doctor-adapter-preflight.d.ts.map +1 -0
  74. package/dist/cli/lib/doctor-adapter-preflight.js +98 -0
  75. package/dist/cli/lib/doctor-adapter-preflight.js.map +1 -0
  76. package/dist/cli/lib/doctor-core.d.ts +7 -1
  77. package/dist/cli/lib/doctor-core.d.ts.map +1 -1
  78. package/dist/cli/lib/doctor-core.js +36 -5
  79. package/dist/cli/lib/doctor-core.js.map +1 -1
  80. package/dist/cli/lib/doctor-integration.d.ts +2 -0
  81. package/dist/cli/lib/doctor-integration.d.ts.map +1 -1
  82. package/dist/cli/lib/doctor-integration.js +4 -2
  83. package/dist/cli/lib/doctor-integration.js.map +1 -1
  84. package/dist/cli/lib/doctor-preflight/eslint.d.ts +4 -0
  85. package/dist/cli/lib/doctor-preflight/eslint.d.ts.map +1 -0
  86. package/dist/cli/lib/doctor-preflight/eslint.js +41 -0
  87. package/dist/cli/lib/doctor-preflight/eslint.js.map +1 -0
  88. package/dist/cli/lib/doctor-preflight/index.d.ts +3 -0
  89. package/dist/cli/lib/doctor-preflight/index.d.ts.map +1 -0
  90. package/dist/cli/lib/doctor-preflight/index.js +3 -0
  91. package/dist/cli/lib/doctor-preflight/index.js.map +1 -0
  92. package/dist/cli/lib/doctor-preflight/tsc.d.ts +4 -0
  93. package/dist/cli/lib/doctor-preflight/tsc.d.ts.map +1 -0
  94. package/dist/cli/lib/doctor-preflight/tsc.js +42 -0
  95. package/dist/cli/lib/doctor-preflight/tsc.js.map +1 -0
  96. package/dist/cli/lib/doctor-substrate.d.ts +2 -2
  97. package/dist/cli/lib/doctor-substrate.d.ts.map +1 -1
  98. package/dist/cli/lib/doctor-types.d.ts +4 -4
  99. package/dist/cli/lib/doctor-types.d.ts.map +1 -1
  100. package/dist/cli/lib/draft-token.d.ts +3 -0
  101. package/dist/cli/lib/draft-token.d.ts.map +1 -1
  102. package/dist/cli/lib/draft-token.js +7 -0
  103. package/dist/cli/lib/draft-token.js.map +1 -1
  104. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts +41 -0
  105. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts.map +1 -0
  106. package/dist/cli/lib/gate-adapters/adapter-findings.js +99 -0
  107. package/dist/cli/lib/gate-adapters/adapter-findings.js.map +1 -0
  108. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts +14 -0
  109. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts.map +1 -0
  110. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js +63 -0
  111. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js.map +1 -0
  112. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts +10 -0
  113. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts.map +1 -0
  114. package/dist/cli/lib/gate-adapters/gate-adapter-id.js +12 -0
  115. package/dist/cli/lib/gate-adapters/gate-adapter-id.js.map +1 -0
  116. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts +17 -0
  117. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts.map +1 -0
  118. package/dist/cli/lib/gate-adapters/gate-adapter-types.js +2 -0
  119. package/dist/cli/lib/gate-adapters/gate-adapter-types.js.map +1 -0
  120. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts +4 -0
  121. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts.map +1 -0
  122. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js +12 -0
  123. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js.map +1 -0
  124. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts +5 -0
  125. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts.map +1 -0
  126. package/dist/cli/lib/gate-adapters/parsing-adapter.js +13 -0
  127. package/dist/cli/lib/gate-adapters/parsing-adapter.js.map +1 -0
  128. package/dist/cli/lib/gate-adapters/registry.d.ts +6 -0
  129. package/dist/cli/lib/gate-adapters/registry.d.ts.map +1 -0
  130. package/dist/cli/lib/gate-adapters/registry.js +13 -0
  131. package/dist/cli/lib/gate-adapters/registry.js.map +1 -0
  132. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts +36 -0
  133. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts.map +1 -0
  134. package/dist/cli/lib/gate-adapters/spawn-stream-core.js +99 -0
  135. package/dist/cli/lib/gate-adapters/spawn-stream-core.js.map +1 -0
  136. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts +16 -0
  137. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts.map +1 -0
  138. package/dist/cli/lib/gate-adapters/tsc-adapter.js +51 -0
  139. package/dist/cli/lib/gate-adapters/tsc-adapter.js.map +1 -0
  140. package/dist/cli/lib/gate-log-writer.d.ts +8 -0
  141. package/dist/cli/lib/gate-log-writer.d.ts.map +1 -1
  142. package/dist/cli/lib/gate-log-writer.js +35 -0
  143. package/dist/cli/lib/gate-log-writer.js.map +1 -1
  144. package/dist/cli/lib/gate.d.ts +2 -0
  145. package/dist/cli/lib/gate.d.ts.map +1 -1
  146. package/dist/cli/lib/gate.js +2 -2
  147. package/dist/cli/lib/gate.js.map +1 -1
  148. package/dist/cli/lib/git.d.ts +8 -2
  149. package/dist/cli/lib/git.d.ts.map +1 -1
  150. package/dist/cli/lib/git.js +14 -7
  151. package/dist/cli/lib/git.js.map +1 -1
  152. package/dist/cli/lib/gxt-config.d.ts +9 -0
  153. package/dist/cli/lib/gxt-config.d.ts.map +1 -1
  154. package/dist/cli/lib/gxt-config.js +16 -0
  155. package/dist/cli/lib/gxt-config.js.map +1 -1
  156. package/dist/cli/lib/gxt-error-codes.d.ts +12 -0
  157. package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
  158. package/dist/cli/lib/gxt-error-codes.js +12 -0
  159. package/dist/cli/lib/gxt-error-codes.js.map +1 -1
  160. package/dist/cli/lib/init-tutorial.js +3 -4
  161. package/dist/cli/lib/init-tutorial.js.map +1 -1
  162. package/dist/cli/lib/kpi-scan.js +5 -1
  163. package/dist/cli/lib/kpi-scan.js.map +1 -1
  164. package/dist/cli/lib/ledger/ledger-append.d.ts +14 -0
  165. package/dist/cli/lib/ledger/ledger-append.d.ts.map +1 -0
  166. package/dist/cli/lib/ledger/ledger-append.js +63 -0
  167. package/dist/cli/lib/ledger/ledger-append.js.map +1 -0
  168. package/dist/cli/lib/ledger/ledger-chain.d.ts +24 -0
  169. package/dist/cli/lib/ledger/ledger-chain.d.ts.map +1 -0
  170. package/dist/cli/lib/ledger/ledger-chain.js +101 -0
  171. package/dist/cli/lib/ledger/ledger-chain.js.map +1 -0
  172. package/dist/cli/lib/ledger/ledger-entry.d.ts +79 -0
  173. package/dist/cli/lib/ledger/ledger-entry.d.ts.map +1 -0
  174. package/dist/cli/lib/ledger/ledger-entry.js +36 -0
  175. package/dist/cli/lib/ledger/ledger-entry.js.map +1 -0
  176. package/dist/cli/lib/ledger/ledger-export.d.ts +28 -0
  177. package/dist/cli/lib/ledger/ledger-export.d.ts.map +1 -0
  178. package/dist/cli/lib/ledger/ledger-export.js +36 -0
  179. package/dist/cli/lib/ledger/ledger-export.js.map +1 -0
  180. package/dist/cli/lib/legislate-gate-options.d.ts +3 -4
  181. package/dist/cli/lib/legislate-gate-options.d.ts.map +1 -1
  182. package/dist/cli/lib/legislate-gate-options.js +9 -4
  183. package/dist/cli/lib/legislate-gate-options.js.map +1 -1
  184. package/dist/cli/lib/legislate-policy-warn.d.ts +3 -0
  185. package/dist/cli/lib/legislate-policy-warn.d.ts.map +1 -0
  186. package/dist/cli/lib/legislate-policy-warn.js +17 -0
  187. package/dist/cli/lib/legislate-policy-warn.js.map +1 -0
  188. package/dist/cli/lib/legislate.d.ts +3 -1
  189. package/dist/cli/lib/legislate.d.ts.map +1 -1
  190. package/dist/cli/lib/legislate.js +14 -12
  191. package/dist/cli/lib/legislate.js.map +1 -1
  192. package/dist/cli/lib/mcp-doctor.d.ts +18 -0
  193. package/dist/cli/lib/mcp-doctor.d.ts.map +1 -0
  194. package/dist/cli/lib/mcp-doctor.js +35 -0
  195. package/dist/cli/lib/mcp-doctor.js.map +1 -0
  196. package/dist/cli/lib/mcp-draft-legislation.d.ts.map +1 -1
  197. package/dist/cli/lib/mcp-draft-legislation.js +12 -7
  198. package/dist/cli/lib/mcp-draft-legislation.js.map +1 -1
  199. package/dist/cli/lib/mcp-execute-legislation.d.ts.map +1 -1
  200. package/dist/cli/lib/mcp-execute-legislation.js +1 -0
  201. package/dist/cli/lib/mcp-execute-legislation.js.map +1 -1
  202. package/dist/cli/lib/mcp-governance-shared.d.ts +3 -1
  203. package/dist/cli/lib/mcp-governance-shared.d.ts.map +1 -1
  204. package/dist/cli/lib/mcp-governance-shared.js.map +1 -1
  205. package/dist/cli/lib/mcp-interrogate.js +3 -3
  206. package/dist/cli/lib/mcp-interrogate.js.map +1 -1
  207. package/dist/cli/lib/mcp-org.d.ts +19 -0
  208. package/dist/cli/lib/mcp-org.d.ts.map +1 -0
  209. package/dist/cli/lib/mcp-org.js +51 -0
  210. package/dist/cli/lib/mcp-org.js.map +1 -0
  211. package/dist/cli/lib/mcp-runtime.d.ts +1 -1
  212. package/dist/cli/lib/mcp-runtime.d.ts.map +1 -1
  213. package/dist/cli/lib/mcp-runtime.js +1 -1
  214. package/dist/cli/lib/mcp-runtime.js.map +1 -1
  215. package/dist/cli/lib/mcp-start-orchestration.d.ts.map +1 -1
  216. package/dist/cli/lib/mcp-start-orchestration.js +1 -0
  217. package/dist/cli/lib/mcp-start-orchestration.js.map +1 -1
  218. package/dist/cli/lib/mcp-tools-register.d.ts.map +1 -1
  219. package/dist/cli/lib/mcp-tools-register.js +90 -17
  220. package/dist/cli/lib/mcp-tools-register.js.map +1 -1
  221. package/dist/cli/lib/mission-changed.d.ts +27 -0
  222. package/dist/cli/lib/mission-changed.d.ts.map +1 -0
  223. package/dist/cli/lib/mission-changed.js +107 -0
  224. package/dist/cli/lib/mission-changed.js.map +1 -0
  225. package/dist/cli/lib/missions/formatter.d.ts +1 -1
  226. package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
  227. package/dist/cli/lib/missions/formatter.js +3 -0
  228. package/dist/cli/lib/missions/formatter.js.map +1 -1
  229. package/dist/cli/lib/missions/parser.d.ts +3 -1
  230. package/dist/cli/lib/missions/parser.d.ts.map +1 -1
  231. package/dist/cli/lib/missions/parser.js +16 -0
  232. package/dist/cli/lib/missions/parser.js.map +1 -1
  233. package/dist/cli/lib/msn-allocate.d.ts.map +1 -1
  234. package/dist/cli/lib/msn-allocate.js +17 -24
  235. package/dist/cli/lib/msn-allocate.js.map +1 -1
  236. package/dist/cli/lib/planner-signature.d.ts +7 -0
  237. package/dist/cli/lib/planner-signature.d.ts.map +1 -1
  238. package/dist/cli/lib/planner-signature.js +18 -1
  239. package/dist/cli/lib/planner-signature.js.map +1 -1
  240. package/dist/cli/lib/policy/policy-bundle.d.ts +6 -0
  241. package/dist/cli/lib/policy/policy-bundle.d.ts.map +1 -0
  242. package/dist/cli/lib/policy/policy-bundle.js +62 -0
  243. package/dist/cli/lib/policy/policy-bundle.js.map +1 -0
  244. package/dist/cli/lib/policy/policy-doctor.d.ts +4 -0
  245. package/dist/cli/lib/policy/policy-doctor.d.ts.map +1 -0
  246. package/dist/cli/lib/policy/policy-doctor.js +34 -0
  247. package/dist/cli/lib/policy/policy-doctor.js.map +1 -0
  248. package/dist/cli/lib/policy/policy-fetch.d.ts +10 -0
  249. package/dist/cli/lib/policy/policy-fetch.d.ts.map +1 -0
  250. package/dist/cli/lib/policy/policy-fetch.js +78 -0
  251. package/dist/cli/lib/policy/policy-fetch.js.map +1 -0
  252. package/dist/cli/lib/policy/policy-resolve.d.ts +38 -0
  253. package/dist/cli/lib/policy/policy-resolve.d.ts.map +1 -0
  254. package/dist/cli/lib/policy/policy-resolve.js +194 -0
  255. package/dist/cli/lib/policy/policy-resolve.js.map +1 -0
  256. package/dist/cli/lib/policy/policy-types.d.ts +76 -0
  257. package/dist/cli/lib/policy/policy-types.d.ts.map +1 -0
  258. package/dist/cli/lib/policy/policy-types.js +3 -0
  259. package/dist/cli/lib/policy/policy-types.js.map +1 -0
  260. package/dist/cli/lib/policy-digest-doctor.d.ts +1 -0
  261. package/dist/cli/lib/policy-digest-doctor.d.ts.map +1 -1
  262. package/dist/cli/lib/policy-digest-doctor.js +4 -2
  263. package/dist/cli/lib/policy-digest-doctor.js.map +1 -1
  264. package/dist/cli/lib/start-orchestration.d.ts +2 -1
  265. package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
  266. package/dist/cli/lib/start-orchestration.js +5 -3
  267. package/dist/cli/lib/start-orchestration.js.map +1 -1
  268. package/dist/cli/lib/surgeons/banned-import.js +1 -1
  269. package/dist/cli/lib/surgeons/banned-import.js.map +1 -1
  270. package/dist/cli/lib/surgeons/import-layer.d.ts.map +1 -1
  271. package/dist/cli/lib/surgeons/import-layer.js +1 -1
  272. package/dist/cli/lib/surgeons/import-layer.js.map +1 -1
  273. package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
  274. package/dist/cli/lib/surgeons/registry.js +2 -4
  275. package/dist/cli/lib/surgeons/registry.js.map +1 -1
  276. package/dist/cli/lib/types.d.ts +23 -0
  277. package/dist/cli/lib/types.d.ts.map +1 -1
  278. package/dist/cli/lib/types.js +5 -1
  279. package/dist/cli/lib/types.js.map +1 -1
  280. package/dist/cli/lib/verify-engine.d.ts +1 -1
  281. package/dist/cli/lib/verify-engine.d.ts.map +1 -1
  282. package/dist/cli/lib/verify-engine.js +32 -17
  283. package/dist/cli/lib/verify-engine.js.map +1 -1
  284. package/dist/cli/lib/verify-evidence-snippet.d.ts +7 -0
  285. package/dist/cli/lib/verify-evidence-snippet.d.ts.map +1 -0
  286. package/dist/cli/lib/verify-evidence-snippet.js +29 -0
  287. package/dist/cli/lib/verify-evidence-snippet.js.map +1 -0
  288. package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
  289. package/dist/cli/lib/verify-failure-normalize.js +20 -4
  290. package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
  291. package/dist/cli/lib/verify-failure.d.ts +22 -5
  292. package/dist/cli/lib/verify-failure.d.ts.map +1 -1
  293. package/dist/cli/lib/verify-finding-gate-projector.d.ts +1 -1
  294. package/dist/cli/lib/verify-finding-gate-projector.d.ts.map +1 -1
  295. package/dist/cli/lib/verify-finding-gate-projector.js +6 -28
  296. package/dist/cli/lib/verify-finding-gate-projector.js.map +1 -1
  297. package/dist/cli/lib/verify-finding.d.ts +1 -1
  298. package/dist/cli/lib/verify-finding.d.ts.map +1 -1
  299. package/dist/cli/lib/verify-finding.js.map +1 -1
  300. package/dist/cli/lib/verify-hints.d.ts.map +1 -1
  301. package/dist/cli/lib/verify-hints.js +14 -3
  302. package/dist/cli/lib/verify-hints.js.map +1 -1
  303. package/dist/cli/lib/verify-options.d.ts +5 -14
  304. package/dist/cli/lib/verify-options.d.ts.map +1 -1
  305. package/dist/cli/lib/verify-org-phases.d.ts +18 -0
  306. package/dist/cli/lib/verify-org-phases.d.ts.map +1 -0
  307. package/dist/cli/lib/verify-org-phases.js +61 -0
  308. package/dist/cli/lib/verify-org-phases.js.map +1 -0
  309. package/dist/cli/lib/verify-payload.d.ts +1 -1
  310. package/dist/cli/lib/verify-payload.d.ts.map +1 -1
  311. package/dist/cli/lib/verify-payload.js +48 -27
  312. package/dist/cli/lib/verify-payload.js.map +1 -1
  313. package/dist/cli/lib/verify-phase-clock.d.ts +3 -2
  314. package/dist/cli/lib/verify-phase-clock.d.ts.map +1 -1
  315. package/dist/cli/lib/verify-phase-clock.js +16 -5
  316. package/dist/cli/lib/verify-phase-clock.js.map +1 -1
  317. package/dist/cli/lib/verify-phase-steps.d.ts +14 -7
  318. package/dist/cli/lib/verify-phase-steps.d.ts.map +1 -1
  319. package/dist/cli/lib/verify-phase-steps.js +33 -24
  320. package/dist/cli/lib/verify-phase-steps.js.map +1 -1
  321. package/dist/cli/lib/verify-presenters.d.ts +1 -0
  322. package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
  323. package/dist/cli/lib/verify-presenters.js +15 -4
  324. package/dist/cli/lib/verify-presenters.js.map +1 -1
  325. package/dist/cli/lib/verify-remediation-pipeline.d.ts +2 -0
  326. package/dist/cli/lib/verify-remediation-pipeline.d.ts.map +1 -1
  327. package/dist/cli/lib/verify-remediation-pipeline.js +5 -2
  328. package/dist/cli/lib/verify-remediation-pipeline.js.map +1 -1
  329. package/dist/cli/lib/verify-run.d.ts +2 -2
  330. package/dist/cli/lib/verify-run.d.ts.map +1 -1
  331. package/dist/cli/lib/verify-run.js +27 -13
  332. package/dist/cli/lib/verify-run.js.map +1 -1
  333. package/dist/cli/lib/version.gen.d.ts +1 -1
  334. package/dist/cli/lib/version.gen.js +1 -1
  335. package/dist/cli/program-core.d.ts +1 -1
  336. package/dist/cli/program-core.d.ts.map +1 -1
  337. package/dist/cli/program-core.js +62 -5
  338. package/dist/cli/program-core.js.map +1 -1
  339. package/dist/cli/program-mission.d.ts.map +1 -1
  340. package/dist/cli/program-mission.js +59 -35
  341. package/dist/cli/program-mission.js.map +1 -1
  342. package/dist/cli/program-org.d.ts +3 -0
  343. package/dist/cli/program-org.d.ts.map +1 -0
  344. package/dist/cli/program-org.js +119 -0
  345. package/dist/cli/program-org.js.map +1 -0
  346. package/dist/cli/program-workflow.d.ts +2 -1
  347. package/dist/cli/program-workflow.d.ts.map +1 -1
  348. package/dist/cli/program-workflow.js +41 -3
  349. package/dist/cli/program-workflow.js.map +1 -1
  350. package/dist/cli/program.d.ts.map +1 -1
  351. package/dist/cli/program.js +11 -0
  352. package/dist/cli/program.js.map +1 -1
  353. package/package.json +2 -1
  354. package/templates/.gitagent/config.json +4 -0
  355. package/templates/.gitagent/foreman/MANIFEST.json +1 -0
  356. package/templates/.gitagent/foreman/PLANNER.signing.pub +3 -0
  357. package/templates/.gitagent/foreman/POLICY.pointer.json +11 -0
  358. package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
  359. package/templates/.gitagent/planner/MISSION.schema.yaml +51 -0
  360. package/templates/.gitagent/planner/ORG-POLICY.schema.yaml +174 -0
  361. package/templates/.gitagent/planner/RULES.md +36 -2
  362. package/templates/.github/workflows/gxt-attest-ingest.yml +56 -6
  363. package/templates/.github/workflows/gxt-validate.yml +33 -0
  364. package/templates/.gitignore.gxt +1 -0
  365. package/templates/integrations/asset-catalog.json +2 -0
  366. package/templates/integrations/compatibility.json +1 -1
  367. package/templates/scripts/validate-mcp-dogfood.mjs +5 -0
  368. package/templates/scripts/verify-pr-missions.sh +20 -41
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jeger-ai/opengantry",
3
- "version": "3.2.6",
3
+ "version": "3.3.0",
4
4
  "description": "Open Source Gantry — vendor-neutral GXT substrate and Gantry CLI for local git-native agent governance",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,6 +26,7 @@
26
26
  "build": "npm run gen:version && npm run gen:catalog && npm run gen:dogfood && tsc",
27
27
  "gapman": "node dist/cli/index.js",
28
28
  "lint": "eslint src/cli/**/*.ts",
29
+ "lint:json": "eslint --format json src/cli/**/*.ts",
29
30
  "check:changed": "./scripts/check-changed-code.sh",
30
31
  "validate": "./scripts/dev-validate.sh",
31
32
  "prepublishOnly": "npm run build && npm test",
@@ -2,6 +2,10 @@
2
2
  "flight_telemetry": {
3
3
  "body_mode": "hash_only"
4
4
  },
5
+ "ledger": {
6
+ "mode": "off",
7
+ "signature": "off"
8
+ },
5
9
  "trusted_automation": {
6
10
  "rules": [
7
11
  {
@@ -37,6 +37,7 @@
37
37
  "perimeter_protected": [
38
38
  "**/.gxt-skill.yaml",
39
39
  ".gitagent/foreman/MANIFEST.json",
40
+ ".gitagent/foreman/POLICY.pointer.json",
40
41
  ".gitagent/planner/RULES.md"
41
42
  ]
42
43
  }
@@ -0,0 +1,3 @@
1
+ # Planner SSH commit-signing keys for CI perimeter verification (git gpg.ssh.allowedSignersFile).
2
+ # Add one principal per line: email namespaces@domain ssh-ed25519 AAAA...
3
+ # ssh-ed25519 AAAA... comment
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema_version": "1.0.0",
3
+ "source": {
4
+ "kind": "git",
5
+ "url": "",
6
+ "ref": "refs/heads/main"
7
+ },
8
+ "bundle_path": "ORG-POLICY.yaml",
9
+ "pinned_commit": "",
10
+ "bundle_sha256": ""
11
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "0.1.0",
3
- "opengantry_version": "3.2.6",
3
+ "opengantry_version": "3.3.0",
4
4
  "installed_at": "2026-01-01T00:00:00.000Z",
5
5
  "installed_by": "gantry init"
6
6
  }
@@ -35,6 +35,16 @@ properties:
35
35
  minLength: 1
36
36
  gate_success_substring:
37
37
  type: ["string", "null"]
38
+ gate_adapter:
39
+ type: string
40
+ enum: [generic, eslint, tsc]
41
+ default: generic
42
+ description: >-
43
+ Explicit gate output parser (ADR-0041). generic: exit code + optional
44
+ success substring only. eslint: gate_command must emit `eslint --format
45
+ json`; tsc: gate_command must emit plain tsc diagnostics. Adapters map
46
+ tool output to envelope v3 findings with offending_file/line/rule_id.
47
+ Routing is never inferred from gate_command text.
38
48
  virtual_capture:
39
49
  type: boolean
40
50
  default: false
@@ -208,3 +218,44 @@ properties:
208
218
  items:
209
219
  type: string
210
220
  minLength: 1
221
+ depends_on:
222
+ type: array
223
+ default: []
224
+ description: >-
225
+ Cross-repo mission dependencies (ADR-0044). Resolved offline from fetched
226
+ refs/gxt/deps/<slug> ledger chains. gantry deps fetch is the only network
227
+ path; verify/doctor/check read local refs only.
228
+ items:
229
+ type: object
230
+ additionalProperties: false
231
+ required:
232
+ - repo
233
+ - msn_id
234
+ properties:
235
+ repo:
236
+ type: string
237
+ minLength: 1
238
+ description: Canonical host/owner/repo or git URL.
239
+ ref:
240
+ type: string
241
+ default: refs/gxt/ledger
242
+ msn_id:
243
+ type: string
244
+ pattern: "^MSN-[0-9]{4}$"
245
+ require:
246
+ type: object
247
+ additionalProperties: false
248
+ properties:
249
+ verify_status:
250
+ type: string
251
+ enum: [passed]
252
+ default: passed
253
+ signed:
254
+ type: boolean
255
+ default: false
256
+ max_age_days:
257
+ type: number
258
+ exclusiveMinimum: 0
259
+ expected_repository_hash:
260
+ type: string
261
+ pattern: "^[0-9a-f]{64}$"
@@ -0,0 +1,174 @@
1
+ # ORG-POLICY.schema — JSON Schema (YAML encoding) for organization policy bundles
2
+ # Consumed by gantry (Ajv). ADR-0042. Version label for docs only.
3
+ $schema: https://json-schema.org/draft/2020-12/schema
4
+ $id: https://opengantry.local/schemas/org-policy.v1.json
5
+ title: OpenGantryOrgPolicy
6
+ type: object
7
+ additionalProperties: false
8
+ required:
9
+ - schema_version
10
+ - org_id
11
+ - policy_id
12
+ - version
13
+ properties:
14
+ schema_version:
15
+ type: string
16
+ const: "1.0.0"
17
+ org_id:
18
+ type: string
19
+ minLength: 1
20
+ policy_id:
21
+ type: string
22
+ minLength: 1
23
+ version:
24
+ type: string
25
+ minLength: 1
26
+ description: Semver or monotonic label for the bundle (not the CLI).
27
+ signers:
28
+ type: array
29
+ default: []
30
+ items:
31
+ type: object
32
+ additionalProperties: false
33
+ required:
34
+ - principal
35
+ properties:
36
+ principal:
37
+ type: string
38
+ minLength: 1
39
+ description: SSH or GPG principal allowed to sign the policy commit.
40
+ kind:
41
+ type: string
42
+ enum: [ssh, gpg]
43
+ mandatory_gates:
44
+ type: array
45
+ default: []
46
+ items:
47
+ type: object
48
+ additionalProperties: false
49
+ required:
50
+ - id
51
+ - command
52
+ properties:
53
+ id:
54
+ type: string
55
+ minLength: 1
56
+ command:
57
+ type: string
58
+ minLength: 1
59
+ adapter:
60
+ type: string
61
+ enum: [generic, eslint, tsc]
62
+ default: generic
63
+ success_substring:
64
+ type: ["string", "null"]
65
+ banned_imports:
66
+ type: array
67
+ default: []
68
+ items:
69
+ type: object
70
+ additionalProperties: false
71
+ required:
72
+ - specifier
73
+ properties:
74
+ specifier:
75
+ type: string
76
+ minLength: 1
77
+ scope:
78
+ type: string
79
+ enum: [changed, all]
80
+ default: changed
81
+ description: changed = gantry check-imports on the mission diff; all = whole tree.
82
+ producers:
83
+ type: object
84
+ default: {}
85
+ additionalProperties:
86
+ type: string
87
+ minLength: 1
88
+ description: >-
89
+ Map of KPI metric name to producer command. kpi_thresholds[].metric MUST
90
+ name a key in this object (CLI/schema error otherwise).
91
+ kpi_thresholds:
92
+ type: array
93
+ default: []
94
+ items:
95
+ type: object
96
+ additionalProperties: false
97
+ required:
98
+ - metric
99
+ - op
100
+ - value
101
+ properties:
102
+ metric:
103
+ type: string
104
+ minLength: 1
105
+ description: MUST match a key in producers.
106
+ op:
107
+ type: string
108
+ enum: ["<=", ">=", "==", "<", ">"]
109
+ value:
110
+ type: number
111
+ config_floor:
112
+ type: object
113
+ additionalProperties: false
114
+ properties:
115
+ planner_signature:
116
+ type: string
117
+ enum: [off, warn, require]
118
+ receipt_signature:
119
+ type: string
120
+ enum: [off, warn, require]
121
+ ledger_signature:
122
+ type: string
123
+ enum: [off, warn, require]
124
+ ledger_mode:
125
+ type: string
126
+ enum: [off, local]
127
+ flight_telemetry:
128
+ type: object
129
+ additionalProperties: false
130
+ properties:
131
+ body_mode:
132
+ type: string
133
+ enum: [hash_only, full]
134
+ break_glass:
135
+ type: object
136
+ additionalProperties: false
137
+ properties:
138
+ require_ledger_entry:
139
+ type: boolean
140
+ manifest_constraints:
141
+ type: object
142
+ additionalProperties: false
143
+ properties:
144
+ forbidden_zones_add:
145
+ type: array
146
+ items:
147
+ type: string
148
+ minLength: 1
149
+ path_risks_min:
150
+ type: object
151
+ additionalProperties:
152
+ type: string
153
+ enum: [Tier-1, Tier-2, Tier-3]
154
+ perimeter_protected_add:
155
+ type: array
156
+ items:
157
+ type: string
158
+ minLength: 1
159
+ expected_digests:
160
+ type: object
161
+ additionalProperties: false
162
+ properties:
163
+ schema_version:
164
+ type: string
165
+ const: "0.1.0"
166
+ manifest_sha256:
167
+ type: string
168
+ pattern: "^[0-9a-f]{64}$"
169
+ target_architecture_sha256:
170
+ type: ["string", "null"]
171
+ pattern: "^[0-9a-f]{64}$"
172
+ config_sha256:
173
+ type: ["string", "null"]
174
+ pattern: "^[0-9a-f]{64}$"
@@ -24,13 +24,47 @@ Normative keywords **MUST**, **MUST NOT**, and **SHOULD** follow RFC 2119.
24
24
  - Access outside effective TMVC requires a context request recorded in `EXECUTOR_LOG.md`.
25
25
  - Access into forbidden zones MUST fail closed unless Planner policy explicitly allows it.
26
26
 
27
- ## 5. Mission commit indexing
27
+ ## 4.5 Interrogation record (legislation gate)
28
+
29
+ - Computed interrogation findings MUST have an `operator_answer` before legislation.
30
+ - Placeholder or fabricated answers are evidence tampering under §3.
31
+
32
+ ## 5. Rule 4.4 — Planner-driven manifest sync
33
+
34
+ - Adding, removing, or renaming a skill MUST update `MANIFEST.json` in the same commit set.
35
+
36
+ ## 6. Git-native mission index
28
37
 
29
38
  - Mission-related commits MUST begin with `[MSN-XXXX]` in the subject line.
30
39
  - Keep mission files for `gantry verify` under `.gitagent/missions/`.
31
40
 
32
- ## 6. Break-glass (v0.8.0)
41
+ ## 6.1 Planner legislation proof
42
+
43
+ - `gantry verify` requires a Planner stamp: a `[MSN-XXXX]` commit by an allowlisted author that modifies the mission file.
44
+
45
+ ## 6.2 Break-glass (v0.8.0)
33
46
 
34
47
  - Set `GXT_BYPASS_SECRET` to match `.gitagent/foreman/BYPASS.sha256` (SHA-256 hex of the team secret).
35
48
  - Use `gantry verify --break-glass --reason "..."` only in emergencies; push `refs/notes/gxt-bypass` with the branch.
36
49
  - Forbidden-zone runtime policy is never bypassed.
50
+ - A bypass MUST also append a `break_glass` ledger entry when `ledger.mode` is `local`.
51
+
52
+ ## 7. Local history (no bloat)
53
+
54
+ - Bulky traces live under `.gitagent/history/` (git-ignored). Do not commit large trace dumps.
55
+
56
+ ## 8. Organization policy floor (v3.3.0)
57
+
58
+ - A present `POLICY.pointer.json` is a tighten-only floor: policy MUST NOT loosen local law.
59
+ - `gantry policy pull` is the only network path; doctor and verify read disk/cache only.
60
+
61
+ ## 9. Compliance ledger (v3.3.0)
62
+
63
+ - `refs/gxt/ledger` is an orphan signed (optional) commit chain of digest-only entries.
64
+ - Append uses CAS `git update-ref` with bounded retries; unsigned entries are checksums, not proofs.
65
+
66
+ ## 10. Cross-repository dependencies (v3.3.0)
67
+
68
+ - Optional mission `depends_on[]` is resolved from fetched `refs/gxt/deps/<slug>`.
69
+ - Same-org proof uses `repository_hash` + the consumer's `GANTRY_ORG_PEPPER`.
70
+ - `gantry deps fetch` is the only network path.
@@ -9,12 +9,18 @@ permissions:
9
9
  jobs:
10
10
  attest_ingest:
11
11
  runs-on: ubuntu-latest
12
+ env:
13
+ HAS_ORG_EXPORT: ${{ vars.GANTRY_ORG_ID != '' && secrets.GANTRY_ORG_PEPPER != '' }}
14
+ HAS_PLANE_INGEST: ${{ vars.PLANE_INGEST_URL != '' && secrets.PLANE_INGEST_TOKEN != '' }}
12
15
  steps:
13
16
  - uses: actions/checkout@v7
14
17
  with:
15
18
  ref: ${{ github.event.pull_request.head.sha }}
16
19
  fetch-depth: 0
17
20
 
21
+ - name: Install ripgrep
22
+ run: sudo apt-get update && sudo apt-get install -y ripgrep
23
+
18
24
  - uses: actions/setup-node@v7
19
25
  with:
20
26
  node-version: 24
@@ -28,13 +34,40 @@ jobs:
28
34
  echo "GANTRY_SIGNER_PRINCIPAL_KIND=github_actor" >> "$GITHUB_ENV"
29
35
  echo "GANTRY_BRANCH_NAME=${{ github.event.pull_request.head.ref }}" >> "$GITHUB_ENV"
30
36
 
37
+ - name: Resolve ingest configuration
38
+ run: |
39
+ if [ "${HAS_ORG_EXPORT}" != "true" ]; then
40
+ echo "Skipping envelope export: GANTRY_ORG_ID or GANTRY_ORG_PEPPER not configured"
41
+ fi
42
+ if [ "${HAS_PLANE_INGEST}" != "true" ]; then
43
+ echo "Skipping plane ingest: PLANE_INGEST_URL or PLANE_INGEST_TOKEN not configured"
44
+ fi
45
+
31
46
  - name: Resolve changed mission
32
47
  id: mission
33
48
  run: |
34
- m="$(git diff --name-only --diff-filter=ACMRT \
35
- "${{ github.event.pull_request.base.sha }}...HEAD" \
36
- -- '.gitagent/missions/*.yaml' | head -n1)"
37
- echo "path=$m" >> "$GITHUB_OUTPUT"
49
+ json="$(node dist/cli/index.js mission changed --base-ref "${{ github.event.pull_request.base.sha }}" --json)" || {
50
+ echo "$json"
51
+ exit 1
52
+ }
53
+ path="$(printf '%s' "$json" | node -e '
54
+ let s = "";
55
+ process.stdin.setEncoding("utf8");
56
+ process.stdin.on("data", (c) => { s += c; });
57
+ process.stdin.on("end", () => {
58
+ const j = JSON.parse(s);
59
+ if (j.status !== "ok") {
60
+ console.error(j.message || "mission changed failed");
61
+ process.exit(1);
62
+ }
63
+ process.stdout.write((j.missions && j.missions[0]) || "");
64
+ });
65
+ ')"
66
+ echo "path=$path" >> "$GITHUB_OUTPUT"
67
+
68
+ - name: Fetch cross-repo mission dependencies
69
+ if: steps.mission.outputs.path != ''
70
+ run: node dist/cli/index.js deps fetch --mission "${{ steps.mission.outputs.path }}"
38
71
 
39
72
  - name: Verify and export envelope
40
73
  id: verify
@@ -45,19 +78,29 @@ jobs:
45
78
  GANTRY_ORG_PEPPER: ${{ secrets.GANTRY_ORG_PEPPER }}
46
79
  GANTRY_ORG_PEPPER_VERSION: ${{ vars.GANTRY_ORG_PEPPER_VERSION || '1' }}
47
80
  run: |
81
+ extra=()
82
+ if [ "${HAS_ORG_EXPORT}" != "true" ] || [ -z "${GANTRY_ORG_ID}" ] || [ -z "${GANTRY_ORG_PEPPER}" ]; then
83
+ echo "Skipping envelope export: GANTRY_ORG_ID or GANTRY_ORG_PEPPER not configured"
84
+ else
85
+ extra+=(--export envelope.json)
86
+ fi
48
87
  node dist/cli/index.js verify \
49
88
  --mission "${{ steps.mission.outputs.path }}" \
50
89
  --audience verifier \
51
90
  --ci \
52
91
  --base-ref "${{ github.event.pull_request.base.sha }}" \
53
- --export envelope.json
92
+ "${extra[@]}"
54
93
 
55
94
  - name: Ingest to control plane
56
- if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != ''
95
+ if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != '' && env.HAS_PLANE_INGEST == 'true'
57
96
  env:
58
97
  PLANE_INGEST_URL: ${{ vars.PLANE_INGEST_URL }}
59
98
  PLANE_INGEST_TOKEN: ${{ secrets.PLANE_INGEST_TOKEN }}
60
99
  run: |
100
+ if [ -z "${PLANE_INGEST_URL}" ] || [ -z "${PLANE_INGEST_TOKEN}" ]; then
101
+ echo "Skipping plane ingest: PLANE_INGEST_URL or PLANE_INGEST_TOKEN not configured"
102
+ exit 0
103
+ fi
61
104
  code="$(curl -sS -o response.json -w '%{http_code}' \
62
105
  -X POST "$PLANE_INGEST_URL/api/v1/attestations/ingest" \
63
106
  -H "Authorization: Bearer $PLANE_INGEST_TOKEN" \
@@ -84,6 +127,13 @@ jobs:
84
127
  echo "ingest poll timeout (request_id=$request_id)" >&2
85
128
  exit 1
86
129
 
130
+ - name: Append compliance ledger and push ref
131
+ if: steps.mission.outputs.path != '' && hashFiles('envelope.json') != '' && env.HAS_ORG_EXPORT == 'true'
132
+ continue-on-error: true
133
+ run: |
134
+ node dist/cli/index.js ledger append --from-envelope envelope.json || true
135
+ git push origin refs/gxt/ledger || echo "ledger push skipped (ref absent or no permission)"
136
+
87
137
  - name: Push pre-commit agent events
88
138
  if: steps.mission.outputs.path != ''
89
139
  continue-on-error: true
@@ -162,6 +162,39 @@ jobs:
162
162
  - name: Build gantry
163
163
  run: npm run build
164
164
 
165
+ - name: Fetch cross-repo mission dependencies
166
+ env:
167
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
168
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
169
+ run: |
170
+ json="$(node dist/cli/index.js mission changed --base-ref "$BASE_SHA" --head-ref "$HEAD_SHA" --json)" || {
171
+ echo "$json"
172
+ exit 1
173
+ }
174
+ mapfile -t missions < <(
175
+ printf '%s' "$json" | node -e '
176
+ let s = "";
177
+ process.stdin.setEncoding("utf8");
178
+ process.stdin.on("data", (c) => { s += c; });
179
+ process.stdin.on("end", () => {
180
+ const j = JSON.parse(s);
181
+ if (j.status !== "ok") process.exit(1);
182
+ for (const m of j.missions || []) console.log(m);
183
+ });
184
+ '
185
+ )
186
+ if [ ${#missions[@]} -eq 1 ] && [ -z "${missions[0]:-}" ]; then
187
+ missions=()
188
+ fi
189
+ if [ ${#missions[@]} -eq 0 ]; then
190
+ echo "deps fetch: no PR-changed missions"
191
+ exit 0
192
+ fi
193
+ for m in "${missions[@]}"; do
194
+ [ -n "$m" ] || continue
195
+ node dist/cli/index.js deps fetch --mission "$m"
196
+ done
197
+
165
198
  - name: Full verify on PR-changed missions
166
199
  env:
167
200
  BASE_SHA: ${{ github.event.pull_request.base.sha }}
@@ -2,6 +2,7 @@
2
2
  .gitagent/foreman/PLANNER.allowlist.local
3
3
  .gitagent/foreman/ORG.export.local
4
4
  .gitagent/history/
5
+ .gitagent/history/policy/
5
6
  .gitagent/history/credentials/
6
7
  .gitagent/history/.ignored-last-error.json
7
8
  .gitagent/history/.draft-token-replay.json
@@ -14,6 +14,7 @@
14
14
  { "targetPath": ".gitagent/config.json", "mode": "scaffold_only", "tags": ["core"] },
15
15
  { "targetPath": ".gitagent/foreman/BYPASS.sha256", "mode": "scaffold_only", "tags": ["core"] },
16
16
  { "targetPath": ".gitagent/foreman/MANIFEST.json", "mode": "scaffold_only", "tags": ["core"] },
17
+ { "targetPath": ".gitagent/foreman/POLICY.pointer.json", "mode": "scaffold_only", "tags": ["core"] },
17
18
  { "targetPath": ".gitagent/foreman/SUBSTRATE.version.json", "mode": "scaffold_only", "tags": ["core"] },
18
19
  { "targetPath": ".gitagent/missions/README.md", "mode": "scaffold_only", "tags": ["core"] },
19
20
  { "targetPath": ".gitagent/planner/ARCHITECTURE-ACCESS.md", "mode": "scaffold_only", "tags": ["core"] },
@@ -22,6 +23,7 @@
22
23
  { "targetPath": ".gitagent/planner/KPI-REPORT.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
23
24
  { "targetPath": ".gitagent/planner/MISSION-ARCHITECT.md", "mode": "scaffold_only", "tags": ["core"] },
24
25
  { "targetPath": ".gitagent/planner/MISSION.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
26
+ { "targetPath": ".gitagent/planner/ORG-POLICY.schema.yaml", "mode": "managed_strict", "tags": ["core"] },
25
27
  { "targetPath": ".gitagent/planner/RULES.md", "mode": "scaffold_only", "tags": ["core"] },
26
28
  { "targetPath": ".githooks/post-checkout", "mode": "managed_strict", "executable": true, "tags": ["hooks"] },
27
29
  { "targetPath": ".githooks/pre-commit", "mode": "managed_strict", "executable": true, "tags": ["hooks"] },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1",
3
- "opengantry_version": "3.2.6",
3
+ "opengantry_version": "3.3.0",
4
4
  "asset_catalog": "integrations/asset-catalog.json",
5
5
  "integrations": {
6
6
  "cursor": {
@@ -5,6 +5,7 @@ import { handleDraftLegislation } from "../dist/cli/lib/mcp-draft-legislation.js
5
5
  import { handleExecuteLegislation } from "../dist/cli/lib/mcp-execute-legislation.js";
6
6
  import { handleCheckSignature } from "../dist/cli/lib/mcp-check-signature.js";
7
7
  import { handlePinMission, handleRuntimeEnv } from "../dist/cli/lib/mcp-runtime.js";
8
+ import { handleDoctor } from "../dist/cli/lib/mcp-doctor.js";
8
9
 
9
10
  const dest = process.env.GXT_DOGFOOD_TMP;
10
11
  if (!dest) throw new Error("GXT_DOGFOOD_TMP unset");
@@ -50,4 +51,8 @@ if (pinned.status !== "pinned") throw new Error("pin failed");
50
51
  const env = handleRuntimeEnv(executed.mission_file_path);
51
52
  if (env.status !== "ok") throw new Error(`runtime env failed: ${JSON.stringify(env)}`);
52
53
 
54
+ const doctor = handleDoctor({});
55
+ if (doctor.status === "error") throw new Error(`doctor failed: ${JSON.stringify(doctor)}`);
56
+ if (!Array.isArray(doctor.lines)) throw new Error("doctor lines missing");
57
+
53
58
  console.log("OK: MCP dogfood flow passed");
@@ -42,19 +42,6 @@ else
42
42
  exit 2
43
43
  fi
44
44
 
45
- mapfile -t UNIQUE_MSNS < <(
46
- git log --no-merges --format=%s "${BASE_SHA}..${HEAD_SHA}" \
47
- | grep -Eo '\[MSN-[0-9]{4}\]' | sort -u || true
48
- )
49
-
50
- if [[ ${#UNIQUE_MSNS[@]} -gt 1 ]]; then
51
- echo "verify-pr-missions FAILED: mission contamination detected" >&2
52
- echo " This PR contains commits from multiple missions:" >&2
53
- printf ' %s\n' "${UNIQUE_MSNS[@]}" >&2
54
- echo " OpenGantry requires strict blast-radius isolation. Rebase this branch onto the integration branch (e.g. origin/main)." >&2
55
- exit 1
56
- fi
57
-
58
45
  if [[ -f dist/cli/index.js ]]; then
59
46
  GANTRY=(node dist/cli/index.js)
60
47
  elif command -v gantry >/dev/null 2>&1; then
@@ -64,14 +51,6 @@ else
64
51
  exit 1
65
52
  fi
66
53
 
67
- is_verifiable_mission() {
68
- local p="$1"
69
- [[ "$p" == "${MISSIONS_PREFIX}"* ]] || return 1
70
- [[ "$p" =~ \.(ya?ml|md)$ ]] || return 1
71
- [[ "$(basename "$p")" == "README.md" ]] && return 1
72
- return 0
73
- }
74
-
75
54
  is_msn_enforced_path() {
76
55
  local p="$1"
77
56
  local prefix
@@ -99,14 +78,28 @@ for f in "${DIFF_FILES[@]}"; do
99
78
  fi
100
79
  done
101
80
 
81
+ changed_json="$("${GANTRY[@]}" mission changed --base-ref "$BASE_SHA" --head-ref "$HEAD_SHA" --json)" || {
82
+ printf '%s\n' "$changed_json" >&2
83
+ exit 1
84
+ }
102
85
  mapfile -t CHANGED_MISSIONS < <(
103
- for f in "${DIFF_FILES[@]}"; do
104
- [[ -n "$f" ]] || continue
105
- if is_verifiable_mission "$f" && [[ -f "$f" ]]; then
106
- echo "$f"
107
- fi
108
- done | sort -u
86
+ printf '%s' "$changed_json" | node -e '
87
+ let s = "";
88
+ process.stdin.setEncoding("utf8");
89
+ process.stdin.on("data", (c) => { s += c; });
90
+ process.stdin.on("end", () => {
91
+ const j = JSON.parse(s);
92
+ if (j.status !== "ok") {
93
+ console.error(j.message || "mission changed failed");
94
+ process.exit(1);
95
+ }
96
+ for (const m of j.missions || []) console.log(m);
97
+ });
98
+ '
109
99
  )
100
+ if [[ ${#CHANGED_MISSIONS[@]} -eq 1 && -z "${CHANGED_MISSIONS[0]:-}" ]]; then
101
+ CHANGED_MISSIONS=()
102
+ fi
110
103
 
111
104
  if [[ "$needs_mission" -eq 1 && ${#CHANGED_MISSIONS[@]} -eq 0 ]]; then
112
105
  if eval_out="$(node "$GXT_MANIFEST_LIB" eval-range "$ROOT" "$BASE_SHA" "$HEAD_SHA" 2>&1)"; then
@@ -125,20 +118,6 @@ if [[ ${#CHANGED_MISSIONS[@]} -eq 0 ]]; then
125
118
  exit 0
126
119
  fi
127
120
 
128
- if [[ ${#UNIQUE_MSNS[@]} -eq 1 ]]; then
129
- purity_msn="${UNIQUE_MSNS[0]}"
130
- purity_msn="${purity_msn#[}"
131
- purity_msn="${purity_msn%]}"
132
- for mission in "${CHANGED_MISSIONS[@]}"; do
133
- base="$(basename "$mission")"
134
- if [[ "$base" != "${purity_msn}."* ]]; then
135
- echo "verify-pr-missions FAILED: changed mission file does not match commit MSN tag" >&2
136
- echo " commits: [${purity_msn}] mission file: ${mission}" >&2
137
- exit 1
138
- fi
139
- done
140
- fi
141
-
142
121
  for mission in "${CHANGED_MISSIONS[@]}"; do
143
122
  echo "verify-pr-missions: gantry verify --mission ${mission}" >&2
144
123
  "${GANTRY[@]}" verify --mission "$mission" --audience verifier || exit 1