tracegrove 0.0.0-stage → 0.3.1

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 (703) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +61 -2
  3. package/dist/adapters/browser/capabilities.d.ts +45 -0
  4. package/dist/adapters/browser/capabilities.js +14 -0
  5. package/dist/adapters/browser/capabilities.js.map +1 -0
  6. package/dist/adapters/browser/driver.d.ts +45 -0
  7. package/dist/adapters/browser/driver.js +295 -0
  8. package/dist/adapters/browser/driver.js.map +1 -0
  9. package/dist/adapters/browser/session.d.ts +21 -0
  10. package/dist/adapters/browser/session.js +87 -0
  11. package/dist/adapters/browser/session.js.map +1 -0
  12. package/dist/adapters/http/capabilities.d.ts +2 -0
  13. package/dist/adapters/http/capabilities.js +21 -0
  14. package/dist/adapters/http/capabilities.js.map +1 -0
  15. package/dist/adapters/http/driver.d.ts +55 -0
  16. package/dist/adapters/http/driver.js +125 -0
  17. package/dist/adapters/http/driver.js.map +1 -0
  18. package/dist/adapters/job/capabilities.d.ts +45 -0
  19. package/dist/adapters/job/capabilities.js +8 -0
  20. package/dist/adapters/job/capabilities.js.map +1 -0
  21. package/dist/adapters/job/driver.d.ts +26 -0
  22. package/dist/adapters/job/driver.js +110 -0
  23. package/dist/adapters/job/driver.js.map +1 -0
  24. package/dist/adapters/job/types.d.ts +9 -0
  25. package/dist/adapters/job/types.js +2 -0
  26. package/dist/adapters/job/types.js.map +1 -0
  27. package/dist/adapters/mcp/capabilities.d.ts +46 -0
  28. package/dist/adapters/mcp/capabilities.js +17 -0
  29. package/dist/adapters/mcp/capabilities.js.map +1 -0
  30. package/dist/adapters/mcp/driver.d.ts +10 -0
  31. package/dist/adapters/mcp/driver.js +83 -0
  32. package/dist/adapters/mcp/driver.js.map +1 -0
  33. package/dist/adapters/poll.d.ts +12 -0
  34. package/dist/adapters/poll.js +31 -0
  35. package/dist/adapters/poll.js.map +1 -0
  36. package/dist/authoring/activity.d.ts +17 -0
  37. package/dist/authoring/activity.js +18 -0
  38. package/dist/authoring/activity.js.map +1 -0
  39. package/dist/authoring/agent.d.ts +70 -0
  40. package/dist/authoring/agent.js +268 -0
  41. package/dist/authoring/agent.js.map +1 -0
  42. package/dist/authoring/appLaunch.d.ts +7 -0
  43. package/dist/authoring/appLaunch.js +32 -0
  44. package/dist/authoring/appLaunch.js.map +1 -0
  45. package/dist/authoring/appLocation.d.ts +2 -0
  46. package/dist/authoring/appLocation.js +5 -0
  47. package/dist/authoring/appLocation.js.map +1 -0
  48. package/dist/authoring/browser.d.ts +15 -0
  49. package/dist/authoring/browser.js +20 -0
  50. package/dist/authoring/browser.js.map +1 -0
  51. package/dist/authoring/compile.d.ts +47 -0
  52. package/dist/authoring/compile.js +508 -0
  53. package/dist/authoring/compile.js.map +1 -0
  54. package/dist/authoring/discover.d.ts +43 -0
  55. package/dist/authoring/discover.js +149 -0
  56. package/dist/authoring/discover.js.map +1 -0
  57. package/dist/authoring/environmentTemplates.d.ts +3 -0
  58. package/dist/authoring/environmentTemplates.js +24 -0
  59. package/dist/authoring/environmentTemplates.js.map +1 -0
  60. package/dist/authoring/heal.d.ts +108 -0
  61. package/dist/authoring/heal.js +723 -0
  62. package/dist/authoring/heal.js.map +1 -0
  63. package/dist/authoring/index.d.ts +14 -0
  64. package/dist/authoring/index.js +15 -0
  65. package/dist/authoring/index.js.map +1 -0
  66. package/dist/authoring/init.d.ts +21 -0
  67. package/dist/authoring/init.js +141 -0
  68. package/dist/authoring/init.js.map +1 -0
  69. package/dist/authoring/localSettings.d.ts +33 -0
  70. package/dist/authoring/localSettings.js +31 -0
  71. package/dist/authoring/localSettings.js.map +1 -0
  72. package/dist/authoring/media.d.ts +10 -0
  73. package/dist/authoring/media.js +37 -0
  74. package/dist/authoring/media.js.map +1 -0
  75. package/dist/authoring/module.d.ts +2 -0
  76. package/dist/authoring/module.js +38 -0
  77. package/dist/authoring/module.js.map +1 -0
  78. package/dist/authoring/run.d.ts +74 -0
  79. package/dist/authoring/run.js +242 -0
  80. package/dist/authoring/run.js.map +1 -0
  81. package/dist/authoring/runSource.d.ts +6 -0
  82. package/dist/authoring/runSource.js +24 -0
  83. package/dist/authoring/runSource.js.map +1 -0
  84. package/dist/authoring/savedRun.d.ts +13 -0
  85. package/dist/authoring/savedRun.js +94 -0
  86. package/dist/authoring/savedRun.js.map +1 -0
  87. package/dist/authoring/schema.d.ts +574 -0
  88. package/dist/authoring/schema.js +147 -0
  89. package/dist/authoring/schema.js.map +1 -0
  90. package/dist/authoring/snapshotSource.d.ts +13 -0
  91. package/dist/authoring/snapshotSource.js +41 -0
  92. package/dist/authoring/snapshotSource.js.map +1 -0
  93. package/dist/authoring/sourceSelection.d.ts +34 -0
  94. package/dist/authoring/sourceSelection.js +13 -0
  95. package/dist/authoring/sourceSelection.js.map +1 -0
  96. package/dist/authoring/sources.d.ts +5 -0
  97. package/dist/authoring/sources.js +65 -0
  98. package/dist/authoring/sources.js.map +1 -0
  99. package/dist/authoring/status.d.ts +48 -0
  100. package/dist/authoring/status.js +100 -0
  101. package/dist/authoring/status.js.map +1 -0
  102. package/dist/authoring/typed.d.ts +6 -0
  103. package/dist/authoring/typed.js +5 -0
  104. package/dist/authoring/typed.js.map +1 -0
  105. package/dist/authoring/ui.d.ts +10 -0
  106. package/dist/authoring/ui.js +486 -0
  107. package/dist/authoring/ui.js.map +1 -0
  108. package/dist/authoring/uiPage.d.ts +1 -0
  109. package/dist/authoring/uiPage.js +358 -0
  110. package/dist/authoring/uiPage.js.map +1 -0
  111. package/dist/authoring/uiSourceControls.d.ts +2 -0
  112. package/dist/authoring/uiSourceControls.js +41 -0
  113. package/dist/authoring/uiSourceControls.js.map +1 -0
  114. package/dist/authoring/verificationSource.d.ts +41 -0
  115. package/dist/authoring/verificationSource.js +46 -0
  116. package/dist/authoring/verificationSource.js.map +1 -0
  117. package/dist/authoring/workspace.d.ts +33 -0
  118. package/dist/authoring/workspace.js +58 -0
  119. package/dist/authoring/workspace.js.map +1 -0
  120. package/dist/cli/arguments.d.ts +288 -0
  121. package/dist/cli/arguments.js +121 -0
  122. package/dist/cli/arguments.js.map +1 -0
  123. package/dist/cli/cleanup.d.ts +18 -0
  124. package/dist/cli/cleanup.js +40 -0
  125. package/dist/cli/cleanup.js.map +1 -0
  126. package/dist/cli/doctor.d.ts +51 -0
  127. package/dist/cli/doctor.js +118 -0
  128. package/dist/cli/doctor.js.map +1 -0
  129. package/dist/cli/errors.d.ts +2 -0
  130. package/dist/cli/errors.js +84 -0
  131. package/dist/cli/errors.js.map +1 -0
  132. package/dist/cli/jsonFile.d.ts +2 -0
  133. package/dist/cli/jsonFile.js +15 -0
  134. package/dist/cli/jsonFile.js.map +1 -0
  135. package/dist/cli/main.d.ts +2 -0
  136. package/dist/cli/main.js +603 -0
  137. package/dist/cli/main.js.map +1 -0
  138. package/dist/cli/render.d.ts +22 -0
  139. package/dist/cli/render.js +150 -0
  140. package/dist/cli/render.js.map +1 -0
  141. package/dist/cli/samples/catalog.d.ts +10 -0
  142. package/dist/cli/samples/catalog.js +3 -0
  143. package/dist/cli/samples/catalog.js.map +1 -0
  144. package/dist/cli/samples/write.d.ts +5 -0
  145. package/dist/cli/samples/write.js +64 -0
  146. package/dist/cli/samples/write.js.map +1 -0
  147. package/dist/cli/source.d.ts +41 -0
  148. package/dist/cli/source.js +59 -0
  149. package/dist/cli/source.js.map +1 -0
  150. package/dist/core/activationDecision.d.ts +153 -0
  151. package/dist/core/activationDecision.js +34 -0
  152. package/dist/core/activationDecision.js.map +1 -0
  153. package/dist/core/artifacts.d.ts +18 -0
  154. package/dist/core/artifacts.js +79 -0
  155. package/dist/core/artifacts.js.map +1 -0
  156. package/dist/core/atomicFiles.d.ts +9 -0
  157. package/dist/core/atomicFiles.js +76 -0
  158. package/dist/core/atomicFiles.js.map +1 -0
  159. package/dist/core/boundedFile.d.ts +2 -0
  160. package/dist/core/boundedFile.js +28 -0
  161. package/dist/core/boundedFile.js.map +1 -0
  162. package/dist/core/bundle.d.ts +77 -0
  163. package/dist/core/bundle.js +375 -0
  164. package/dist/core/bundle.js.map +1 -0
  165. package/dist/core/bundleArchive.d.ts +10 -0
  166. package/dist/core/bundleArchive.js +47 -0
  167. package/dist/core/bundleArchive.js.map +1 -0
  168. package/dist/core/bundleEvidence.d.ts +12 -0
  169. package/dist/core/bundleEvidence.js +169 -0
  170. package/dist/core/bundleEvidence.js.map +1 -0
  171. package/dist/core/bundleExport.d.ts +12 -0
  172. package/dist/core/bundleExport.js +36 -0
  173. package/dist/core/bundleExport.js.map +1 -0
  174. package/dist/core/bundleFiles.d.ts +5 -0
  175. package/dist/core/bundleFiles.js +47 -0
  176. package/dist/core/bundleFiles.js.map +1 -0
  177. package/dist/core/bundlePaths.d.ts +2 -0
  178. package/dist/core/bundlePaths.js +7 -0
  179. package/dist/core/bundlePaths.js.map +1 -0
  180. package/dist/core/bundleSnapshot.d.ts +26 -0
  181. package/dist/core/bundleSnapshot.js +71 -0
  182. package/dist/core/bundleSnapshot.js.map +1 -0
  183. package/dist/core/capabilityBoundary.d.ts +1452 -0
  184. package/dist/core/capabilityBoundary.js +361 -0
  185. package/dist/core/capabilityBoundary.js.map +1 -0
  186. package/dist/core/capabilityLifecycle.d.ts +366 -0
  187. package/dist/core/capabilityLifecycle.js +79 -0
  188. package/dist/core/capabilityLifecycle.js.map +1 -0
  189. package/dist/core/cleanup.d.ts +35 -0
  190. package/dist/core/cleanup.js +71 -0
  191. package/dist/core/cleanup.js.map +1 -0
  192. package/dist/core/cleanupActions.d.ts +5 -0
  193. package/dist/core/cleanupActions.js +15 -0
  194. package/dist/core/cleanupActions.js.map +1 -0
  195. package/dist/core/cleanupAttestation.d.ts +23 -0
  196. package/dist/core/cleanupAttestation.js +57 -0
  197. package/dist/core/cleanupAttestation.js.map +1 -0
  198. package/dist/core/clock.d.ts +4 -0
  199. package/dist/core/clock.js +14 -0
  200. package/dist/core/clock.js.map +1 -0
  201. package/dist/core/compiler.d.ts +19 -0
  202. package/dist/core/compiler.js +200 -0
  203. package/dist/core/compiler.js.map +1 -0
  204. package/dist/core/controller.d.ts +7 -0
  205. package/dist/core/controller.js +132 -0
  206. package/dist/core/controller.js.map +1 -0
  207. package/dist/core/coordination.d.ts +72 -0
  208. package/dist/core/coordination.js +118 -0
  209. package/dist/core/coordination.js.map +1 -0
  210. package/dist/core/corpus.d.ts +60 -0
  211. package/dist/core/corpus.js +216 -0
  212. package/dist/core/corpus.js.map +1 -0
  213. package/dist/core/deadline.d.ts +12 -0
  214. package/dist/core/deadline.js +38 -0
  215. package/dist/core/deadline.js.map +1 -0
  216. package/dist/core/deliveryJournal.d.ts +37 -0
  217. package/dist/core/deliveryJournal.js +85 -0
  218. package/dist/core/deliveryJournal.js.map +1 -0
  219. package/dist/core/environmentPreflight.d.ts +14 -0
  220. package/dist/core/environmentPreflight.js +179 -0
  221. package/dist/core/environmentPreflight.js.map +1 -0
  222. package/dist/core/errors.d.ts +22 -0
  223. package/dist/core/errors.js +29 -0
  224. package/dist/core/errors.js.map +1 -0
  225. package/dist/core/events.d.ts +14 -0
  226. package/dist/core/events.js +37 -0
  227. package/dist/core/events.js.map +1 -0
  228. package/dist/core/executionInspection.d.ts +90 -0
  229. package/dist/core/executionInspection.js +31 -0
  230. package/dist/core/executionInspection.js.map +1 -0
  231. package/dist/core/executionOwnership.d.ts +72 -0
  232. package/dist/core/executionOwnership.js +82 -0
  233. package/dist/core/executionOwnership.js.map +1 -0
  234. package/dist/core/executionPreparation.d.ts +362 -0
  235. package/dist/core/executionPreparation.js +93 -0
  236. package/dist/core/executionPreparation.js.map +1 -0
  237. package/dist/core/executionReadback.d.ts +15 -0
  238. package/dist/core/executionReadback.js +21 -0
  239. package/dist/core/executionReadback.js.map +1 -0
  240. package/dist/core/executor.d.ts +46 -0
  241. package/dist/core/executor.js +616 -0
  242. package/dist/core/executor.js.map +1 -0
  243. package/dist/core/frozenBundle.d.ts +314 -0
  244. package/dist/core/frozenBundle.js +24 -0
  245. package/dist/core/frozenBundle.js.map +1 -0
  246. package/dist/core/fsDurability.d.ts +2 -0
  247. package/dist/core/fsDurability.js +12 -0
  248. package/dist/core/fsDurability.js.map +1 -0
  249. package/dist/core/generators.d.ts +4 -0
  250. package/dist/core/generators.js +71 -0
  251. package/dist/core/generators.js.map +1 -0
  252. package/dist/core/gitSnapshot.d.ts +63 -0
  253. package/dist/core/gitSnapshot.js +55 -0
  254. package/dist/core/gitSnapshot.js.map +1 -0
  255. package/dist/core/gitSources.d.ts +29 -0
  256. package/dist/core/gitSources.js +97 -0
  257. package/dist/core/gitSources.js.map +1 -0
  258. package/dist/core/ledger.d.ts +38 -0
  259. package/dist/core/ledger.js +169 -0
  260. package/dist/core/ledger.js.map +1 -0
  261. package/dist/core/ledgerInspection.d.ts +18 -0
  262. package/dist/core/ledgerInspection.js +66 -0
  263. package/dist/core/ledgerInspection.js.map +1 -0
  264. package/dist/core/ledgerRecords.d.ts +23 -0
  265. package/dist/core/ledgerRecords.js +29 -0
  266. package/dist/core/ledgerRecords.js.map +1 -0
  267. package/dist/core/localActivationState.d.ts +260 -0
  268. package/dist/core/localActivationState.js +49 -0
  269. package/dist/core/localActivationState.js.map +1 -0
  270. package/dist/core/localPromotionState.d.ts +387 -0
  271. package/dist/core/localPromotionState.js +22 -0
  272. package/dist/core/localPromotionState.js.map +1 -0
  273. package/dist/core/localQualificationResults.d.ts +39 -0
  274. package/dist/core/localQualificationResults.js +160 -0
  275. package/dist/core/localQualificationResults.js.map +1 -0
  276. package/dist/core/localReviewStore.d.ts +28 -0
  277. package/dist/core/localReviewStore.js +167 -0
  278. package/dist/core/localReviewStore.js.map +1 -0
  279. package/dist/core/localScenarioActivation.d.ts +6 -0
  280. package/dist/core/localScenarioActivation.js +70 -0
  281. package/dist/core/localScenarioActivation.js.map +1 -0
  282. package/dist/core/localScenarioOwner.d.ts +20 -0
  283. package/dist/core/localScenarioOwner.js +2 -0
  284. package/dist/core/localScenarioOwner.js.map +1 -0
  285. package/dist/core/localScenarioPromotion.d.ts +9 -0
  286. package/dist/core/localScenarioPromotion.js +49 -0
  287. package/dist/core/localScenarioPromotion.js.map +1 -0
  288. package/dist/core/localScenarioState.d.ts +2297 -0
  289. package/dist/core/localScenarioState.js +117 -0
  290. package/dist/core/localScenarioState.js.map +1 -0
  291. package/dist/core/localScenarioStore.d.ts +838 -0
  292. package/dist/core/localScenarioStore.js +218 -0
  293. package/dist/core/localScenarioStore.js.map +1 -0
  294. package/dist/core/localScenarioStructure.d.ts +4 -0
  295. package/dist/core/localScenarioStructure.js +52 -0
  296. package/dist/core/localScenarioStructure.js.map +1 -0
  297. package/dist/core/localStructureState.d.ts +2 -0
  298. package/dist/core/localStructureState.js +22 -0
  299. package/dist/core/localStructureState.js.map +1 -0
  300. package/dist/core/lookup.d.ts +662 -0
  301. package/dist/core/lookup.js +55 -0
  302. package/dist/core/lookup.js.map +1 -0
  303. package/dist/core/ownership.d.ts +3 -0
  304. package/dist/core/ownership.js +24 -0
  305. package/dist/core/ownership.js.map +1 -0
  306. package/dist/core/planInspection.d.ts +108 -0
  307. package/dist/core/planInspection.js +44 -0
  308. package/dist/core/planInspection.js.map +1 -0
  309. package/dist/core/planner.d.ts +14 -0
  310. package/dist/core/planner.js +261 -0
  311. package/dist/core/planner.js.map +1 -0
  312. package/dist/core/qualification.d.ts +26 -0
  313. package/dist/core/qualification.js +58 -0
  314. package/dist/core/qualification.js.map +1 -0
  315. package/dist/core/qualificationBundle.d.ts +6 -0
  316. package/dist/core/qualificationBundle.js +51 -0
  317. package/dist/core/qualificationBundle.js.map +1 -0
  318. package/dist/core/qualificationExecution.d.ts +879 -0
  319. package/dist/core/qualificationExecution.js +54 -0
  320. package/dist/core/qualificationExecution.js.map +1 -0
  321. package/dist/core/recoveryStatus.d.ts +6 -0
  322. package/dist/core/recoveryStatus.js +123 -0
  323. package/dist/core/recoveryStatus.js.map +1 -0
  324. package/dist/core/reducer.d.ts +56 -0
  325. package/dist/core/reducer.js +355 -0
  326. package/dist/core/reducer.js.map +1 -0
  327. package/dist/core/replayAssessment.d.ts +15 -0
  328. package/dist/core/replayAssessment.js +78 -0
  329. package/dist/core/replayAssessment.js.map +1 -0
  330. package/dist/core/replayEvidence.d.ts +7 -0
  331. package/dist/core/replayEvidence.js +58 -0
  332. package/dist/core/replayEvidence.js.map +1 -0
  333. package/dist/core/repositorySelectionEvidence.d.ts +3 -0
  334. package/dist/core/repositorySelectionEvidence.js +58 -0
  335. package/dist/core/repositorySelectionEvidence.js.map +1 -0
  336. package/dist/core/rerun.d.ts +3 -0
  337. package/dist/core/rerun.js +24 -0
  338. package/dist/core/rerun.js.map +1 -0
  339. package/dist/core/resultSink.d.ts +52 -0
  340. package/dist/core/resultSink.js +120 -0
  341. package/dist/core/resultSink.js.map +1 -0
  342. package/dist/core/review.d.ts +22 -0
  343. package/dist/core/review.js +65 -0
  344. package/dist/core/review.js.map +1 -0
  345. package/dist/core/runnerCapabilities.d.ts +22 -0
  346. package/dist/core/runnerCapabilities.js +44 -0
  347. package/dist/core/runnerCapabilities.js.map +1 -0
  348. package/dist/core/scenario.d.ts +32 -0
  349. package/dist/core/scenario.js +119 -0
  350. package/dist/core/scenario.js.map +1 -0
  351. package/dist/core/scenarioActivation.d.ts +16 -0
  352. package/dist/core/scenarioActivation.js +47 -0
  353. package/dist/core/scenarioActivation.js.map +1 -0
  354. package/dist/core/scenarioStructure.d.ts +400 -0
  355. package/dist/core/scenarioStructure.js +72 -0
  356. package/dist/core/scenarioStructure.js.map +1 -0
  357. package/dist/core/snapshotEvidence.d.ts +3 -0
  358. package/dist/core/snapshotEvidence.js +37 -0
  359. package/dist/core/snapshotEvidence.js.map +1 -0
  360. package/dist/core/snapshotRepository.d.ts +48 -0
  361. package/dist/core/snapshotRepository.js +47 -0
  362. package/dist/core/snapshotRepository.js.map +1 -0
  363. package/dist/core/source-analysis.d.ts +18 -0
  364. package/dist/core/source-analysis.js +99 -0
  365. package/dist/core/source-analysis.js.map +1 -0
  366. package/dist/core/source-citation.d.ts +53 -0
  367. package/dist/core/source-citation.js +59 -0
  368. package/dist/core/source-citation.js.map +1 -0
  369. package/dist/core/sourcePromotion.d.ts +929 -0
  370. package/dist/core/sourcePromotion.js +92 -0
  371. package/dist/core/sourcePromotion.js.map +1 -0
  372. package/dist/core/sourceReviewEvidence.d.ts +271 -0
  373. package/dist/core/sourceReviewEvidence.js +24 -0
  374. package/dist/core/sourceReviewEvidence.js.map +1 -0
  375. package/dist/core/targetObservation.d.ts +3 -0
  376. package/dist/core/targetObservation.js +26 -0
  377. package/dist/core/targetObservation.js.map +1 -0
  378. package/dist/hosts/launchTemplates.d.ts +2 -0
  379. package/dist/hosts/launchTemplates.js +5 -0
  380. package/dist/hosts/launchTemplates.js.map +1 -0
  381. package/dist/hosts/local.d.ts +17 -0
  382. package/dist/hosts/local.js +311 -0
  383. package/dist/hosts/local.js.map +1 -0
  384. package/dist/hosts/localSupervisor.d.ts +1 -0
  385. package/dist/hosts/localSupervisor.js +115 -0
  386. package/dist/hosts/localSupervisor.js.map +1 -0
  387. package/dist/hosts/mock.d.ts +4 -0
  388. package/dist/hosts/mock.js +82 -0
  389. package/dist/hosts/mock.js.map +1 -0
  390. package/dist/hosts/pinnedArguments.d.ts +3 -0
  391. package/dist/hosts/pinnedArguments.js +39 -0
  392. package/dist/hosts/pinnedArguments.js.map +1 -0
  393. package/dist/hosts/runtime.d.ts +5 -0
  394. package/dist/hosts/runtime.js +60 -0
  395. package/dist/hosts/runtime.js.map +1 -0
  396. package/dist/hosts/sourceIdentity.d.ts +54 -0
  397. package/dist/hosts/sourceIdentity.js +27 -0
  398. package/dist/hosts/sourceIdentity.js.map +1 -0
  399. package/dist/hosts/types.d.ts +39 -0
  400. package/dist/hosts/types.js +2 -0
  401. package/dist/hosts/types.js.map +1 -0
  402. package/dist/index.d.ts +56 -0
  403. package/dist/index.js +52 -0
  404. package/dist/index.js.map +1 -0
  405. package/dist/integrations/awr/attachment.d.ts +34 -0
  406. package/dist/integrations/awr/attachment.js +120 -0
  407. package/dist/integrations/awr/attachment.js.map +1 -0
  408. package/dist/integrations/awr/attachmentContracts.d.ts +273 -0
  409. package/dist/integrations/awr/attachmentContracts.js +39 -0
  410. package/dist/integrations/awr/attachmentContracts.js.map +1 -0
  411. package/dist/integrations/awr/attachmentHttp.d.ts +9 -0
  412. package/dist/integrations/awr/attachmentHttp.js +19 -0
  413. package/dist/integrations/awr/attachmentHttp.js.map +1 -0
  414. package/dist/integrations/awr/cli.d.ts +7 -0
  415. package/dist/integrations/awr/cli.js +43 -0
  416. package/dist/integrations/awr/cli.js.map +1 -0
  417. package/dist/integrations/awr/contracts.d.ts +54 -0
  418. package/dist/integrations/awr/contracts.js +33 -0
  419. package/dist/integrations/awr/contracts.js.map +1 -0
  420. package/dist/integrations/awr/http.d.ts +8 -0
  421. package/dist/integrations/awr/http.js +23 -0
  422. package/dist/integrations/awr/http.js.map +1 -0
  423. package/dist/integrations/awr/index.d.ts +7 -0
  424. package/dist/integrations/awr/index.js +8 -0
  425. package/dist/integrations/awr/index.js.map +1 -0
  426. package/dist/integrations/awr/jsonHttp.d.ts +15 -0
  427. package/dist/integrations/awr/jsonHttp.js +69 -0
  428. package/dist/integrations/awr/jsonHttp.js.map +1 -0
  429. package/dist/integrations/awr/outbox.d.ts +28 -0
  430. package/dist/integrations/awr/outbox.js +88 -0
  431. package/dist/integrations/awr/outbox.js.map +1 -0
  432. package/dist/integrations/awr/projection.d.ts +4 -0
  433. package/dist/integrations/awr/projection.js +54 -0
  434. package/dist/integrations/awr/projection.js.map +1 -0
  435. package/dist/protocol/canonical.d.ts +41 -0
  436. package/dist/protocol/canonical.js +114 -0
  437. package/dist/protocol/canonical.js.map +1 -0
  438. package/dist/protocol/index.d.ts +9620 -0
  439. package/dist/protocol/index.js +185 -0
  440. package/dist/protocol/index.js.map +1 -0
  441. package/dist/protocol/primitives.d.ts +63 -0
  442. package/dist/protocol/primitives.js +46 -0
  443. package/dist/protocol/primitives.js.map +1 -0
  444. package/dist/protocol/schemas/browser.d.ts +153 -0
  445. package/dist/protocol/schemas/browser.js +29 -0
  446. package/dist/protocol/schemas/browser.js.map +1 -0
  447. package/dist/protocol/schemas/capability.d.ts +2126 -0
  448. package/dist/protocol/schemas/capability.js +165 -0
  449. package/dist/protocol/schemas/capability.js.map +1 -0
  450. package/dist/protocol/schemas/capabilityLifecycle.d.ts +509 -0
  451. package/dist/protocol/schemas/capabilityLifecycle.js +47 -0
  452. package/dist/protocol/schemas/capabilityLifecycle.js.map +1 -0
  453. package/dist/protocol/schemas/cleanup.d.ts +109 -0
  454. package/dist/protocol/schemas/cleanup.js +59 -0
  455. package/dist/protocol/schemas/cleanup.js.map +1 -0
  456. package/dist/protocol/schemas/cli.d.ts +121 -0
  457. package/dist/protocol/schemas/cli.js +24 -0
  458. package/dist/protocol/schemas/cli.js.map +1 -0
  459. package/dist/protocol/schemas/config.d.ts +59 -0
  460. package/dist/protocol/schemas/config.js +32 -0
  461. package/dist/protocol/schemas/config.js.map +1 -0
  462. package/dist/protocol/schemas/corpus.d.ts +36 -0
  463. package/dist/protocol/schemas/corpus.js +10 -0
  464. package/dist/protocol/schemas/corpus.js.map +1 -0
  465. package/dist/protocol/schemas/definitions.d.ts +3409 -0
  466. package/dist/protocol/schemas/definitions.js +431 -0
  467. package/dist/protocol/schemas/definitions.js.map +1 -0
  468. package/dist/protocol/schemas/evidenceProjection.d.ts +146 -0
  469. package/dist/protocol/schemas/evidenceProjection.js +18 -0
  470. package/dist/protocol/schemas/evidenceProjection.js.map +1 -0
  471. package/dist/protocol/schemas/execution.d.ts +3179 -0
  472. package/dist/protocol/schemas/execution.js +500 -0
  473. package/dist/protocol/schemas/execution.js.map +1 -0
  474. package/dist/protocol/schemas/gitSources.d.ts +330 -0
  475. package/dist/protocol/schemas/gitSources.js +32 -0
  476. package/dist/protocol/schemas/gitSources.js.map +1 -0
  477. package/dist/protocol/schemas/mcp.d.ts +24 -0
  478. package/dist/protocol/schemas/mcp.js +16 -0
  479. package/dist/protocol/schemas/mcp.js.map +1 -0
  480. package/dist/protocol/schemas/nativeJob.d.ts +106 -0
  481. package/dist/protocol/schemas/nativeJob.js +16 -0
  482. package/dist/protocol/schemas/nativeJob.js.map +1 -0
  483. package/dist/protocol/schemas/portableEnvironment.d.ts +1256 -0
  484. package/dist/protocol/schemas/portableEnvironment.js +108 -0
  485. package/dist/protocol/schemas/portableEnvironment.js.map +1 -0
  486. package/dist/protocol/schemas/promotion.d.ts +132 -0
  487. package/dist/protocol/schemas/promotion.js +9 -0
  488. package/dist/protocol/schemas/promotion.js.map +1 -0
  489. package/dist/protocol/schemas/protocol.d.ts +146 -0
  490. package/dist/protocol/schemas/protocol.js +25 -0
  491. package/dist/protocol/schemas/protocol.js.map +1 -0
  492. package/dist/protocol/schemas/recoveryStatus.d.ts +88 -0
  493. package/dist/protocol/schemas/recoveryStatus.js +20 -0
  494. package/dist/protocol/schemas/recoveryStatus.js.map +1 -0
  495. package/dist/protocol/schemas/resultSink.d.ts +80 -0
  496. package/dist/protocol/schemas/resultSink.js +14 -0
  497. package/dist/protocol/schemas/resultSink.js.map +1 -0
  498. package/dist/protocol/schemas/review.d.ts +248 -0
  499. package/dist/protocol/schemas/review.js +45 -0
  500. package/dist/protocol/schemas/review.js.map +1 -0
  501. package/dist/protocol/schemas/scenario.d.ts +810 -0
  502. package/dist/protocol/schemas/scenario.js +53 -0
  503. package/dist/protocol/schemas/scenario.js.map +1 -0
  504. package/dist/protocol/schemas/source.d.ts +300 -0
  505. package/dist/protocol/schemas/source.js +25 -0
  506. package/dist/protocol/schemas/source.js.map +1 -0
  507. package/dist/source/git.d.ts +36 -0
  508. package/dist/source/git.js +159 -0
  509. package/dist/source/git.js.map +1 -0
  510. package/dist/source/gitObjectProof.d.ts +12 -0
  511. package/dist/source/gitObjectProof.js +115 -0
  512. package/dist/source/gitObjectProof.js.map +1 -0
  513. package/dist/source/snapshotPaths.d.ts +2 -0
  514. package/dist/source/snapshotPaths.js +24 -0
  515. package/dist/source/snapshotPaths.js.map +1 -0
  516. package/dist/source/snapshotTree.d.ts +15 -0
  517. package/dist/source/snapshotTree.js +79 -0
  518. package/dist/source/snapshotTree.js.map +1 -0
  519. package/docs/agent-guide.md +21 -0
  520. package/docs/browser-driver.md +146 -0
  521. package/docs/getting-started.md +13 -0
  522. package/docs/git-object-proof.md +100 -0
  523. package/docs/local-execution-recovery.md +55 -0
  524. package/docs/mcp-driver.md +87 -0
  525. package/docs/native-jobs.md +96 -0
  526. package/docs/result-sink.md +87 -0
  527. package/docs/verified-bundles.md +175 -0
  528. package/package.json +98 -4
  529. package/samples/django-notes/manage.py +8 -0
  530. package/samples/django-notes/notes/__init__.py +0 -0
  531. package/samples/django-notes/notes/auth.py +14 -0
  532. package/samples/django-notes/notes/migrations/0001_initial.py +19 -0
  533. package/samples/django-notes/notes/migrations/__init__.py +0 -0
  534. package/samples/django-notes/notes/models.py +13 -0
  535. package/samples/django-notes/notes/views.py +33 -0
  536. package/samples/django-notes/notesite/__init__.py +0 -0
  537. package/samples/django-notes/notesite/settings.py +17 -0
  538. package/samples/django-notes/notesite/urls.py +9 -0
  539. package/samples/django-notes/requirements.txt +1 -0
  540. package/samples/django-notes/tracegrove/notes/crud.flow.yaml +27 -0
  541. package/samples/django-notes/tracegrove.config.yaml +7 -0
  542. package/samples/fastapi-notes/app/__init__.py +0 -0
  543. package/samples/fastapi-notes/app/main.py +69 -0
  544. package/samples/fastapi-notes/requirements.txt +2 -0
  545. package/samples/fastapi-notes/tracegrove/notes/crud.flow.yaml +27 -0
  546. package/samples/fastapi-notes/tracegrove.config.yaml +8 -0
  547. package/samples/notes-api/app/app.mjs +67 -0
  548. package/samples/notes-api/app/http.mjs +16 -0
  549. package/samples/notes-api/tracegrove/fixtures/existing-note.fixture.yaml +12 -0
  550. package/samples/notes-api/tracegrove/notes/create-read-delete.flow.yaml +35 -0
  551. package/samples/notes-api/tracegrove/notes/list.flow.yaml +25 -0
  552. package/samples/notes-api/tracegrove.config.yaml +15 -0
  553. package/samples/notes-api/verification/actions/notes.registry.yaml +6 -0
  554. package/samples/notes-api/verification/auth/host-issued-owner.yaml +6 -0
  555. package/samples/notes-api/verification/cases/notes.contract.yaml +51 -0
  556. package/samples/notes-api/verification/cases/notes.create.yaml +123 -0
  557. package/samples/notes-api/verification/cases/notes.suite.yaml +5 -0
  558. package/samples/notes-api/verification/components/notes-api-stub.profile.yaml +8 -0
  559. package/samples/notes-api/verification/components/notes-api.profile.yaml +15 -0
  560. package/samples/notes-api/verification/environments/local-notes.yaml +11 -0
  561. package/samples/notes-api/verification/environments/mock-notes.yaml +11 -0
  562. package/samples/notes-api/verification/fidelity/full-live-sandbox.yaml +7 -0
  563. package/samples/notes-api/verification/fidelity/mock-contract.yaml +6 -0
  564. package/samples/notes-api/verification/fixtures/existing-note.payload.yaml +15 -0
  565. package/samples/notes-api/verification/fixtures/existing-note.plan.yaml +9 -0
  566. package/samples/notes-api/verification/fixtures/existing-note.recipe.yaml +29 -0
  567. package/samples/notes-api/verification/hosts/local-process.yaml +27 -0
  568. package/samples/notes-api/verification/hosts/mock-loopback.yaml +14 -0
  569. package/samples/notes-api/verification/mocks/notes.responses.yaml +5 -0
  570. package/samples/notes-api/verification/personas/owner.yaml +16 -0
  571. package/samples/notes-api/verification/policies/no-authoring-inference.yaml +10 -0
  572. package/samples/notes-api/verification/runners/http.yaml +5 -0
  573. package/samples/notes-api/verification/surfaces/http-api.binding.yaml +11 -0
  574. package/samples/notes-api/verification/surfaces/http-api.pack.yaml +7 -0
  575. package/samples/notes-api/verification/workflow.yaml +27 -0
  576. package/samples/notes-browser/tracegrove/notes/browser.flow.yaml +19 -0
  577. package/samples/notes-browser/verification/cases/notes.browser.yaml +63 -0
  578. package/samples/notes-browser/verification/cases/notes.suite.yaml +4 -0
  579. package/samples/notes-browser/verification/runners/http.yaml +5 -0
  580. package/samples/notes-browser/verification/surfaces/http-api.binding.yaml +11 -0
  581. package/samples/notes-browser/verification/surfaces/http-api.pack.yaml +7 -0
  582. package/samples/notes-django/README.md +21 -0
  583. package/samples/notes-django/app/django_app.py +119 -0
  584. package/samples/notes-django/app/requirements.lock +4 -0
  585. package/samples/notes-mcp/app/mcp.mjs +47 -0
  586. package/samples/notes-mcp/tracegrove/notes.flow.yaml +20 -0
  587. package/samples/notes-mcp/tracegrove.config.yaml +13 -0
  588. package/samples/report-jobs/README.md +30 -0
  589. package/samples/report-jobs/app/jobs-api.mjs +65 -0
  590. package/samples/report-jobs/app/native-bridge.mjs +30 -0
  591. package/samples/report-jobs/app/store.mjs +74 -0
  592. package/samples/report-jobs/app/worker.mjs +22 -0
  593. package/samples/report-jobs/tracegrove/fixtures/failed-job.fixture.yaml +12 -0
  594. package/samples/report-jobs/tracegrove/fixtures/held-job.fixture.yaml +12 -0
  595. package/samples/report-jobs/tracegrove/fixtures/success-job.fixture.yaml +12 -0
  596. package/samples/report-jobs/tracegrove/reports/cancellation.flow.yaml +15 -0
  597. package/samples/report-jobs/tracegrove/reports/completion.flow.yaml +31 -0
  598. package/samples/report-jobs/tracegrove/reports/failure.flow.yaml +12 -0
  599. package/samples/report-jobs/tracegrove.config.yaml +10 -0
  600. package/samples/report-native/README.md +11 -0
  601. package/samples/report-native/tracegrove/cancellation.flow.yaml +11 -0
  602. package/samples/report-native/tracegrove/completion.flow.yaml +22 -0
  603. package/samples/report-native/tracegrove/failure.flow.yaml +7 -0
  604. package/samples/report-native/tracegrove.config.yaml +11 -0
  605. package/schema/tracegrove_cli-error_v1.json +156 -0
  606. package/schema/tracegrove_config_v1.json +233 -0
  607. package/schema/tracegrove_fixture_v1.json +297 -0
  608. package/schema/tracegrove_flow_v1.json +960 -0
  609. package/schema/tracegrove_recovery-status_v1.json +234 -0
  610. package/schema/tracegrove_run-video_v1.json +25 -0
  611. package/schema/workflow_action-registry_v1.json +303 -0
  612. package/schema/workflow_auth-recipe_v1.json +146 -0
  613. package/schema/workflow_boundary-observation_v1.json +515 -0
  614. package/schema/workflow_browser-command_v1.json +292 -0
  615. package/schema/workflow_browser-locator_v1.json +74 -0
  616. package/schema/workflow_browser-network-observation_v1.json +48 -0
  617. package/schema/workflow_browser-observation_v1.json +53 -0
  618. package/schema/workflow_budget-reservation_v1.json +150 -0
  619. package/schema/workflow_campaign-result_v1.json +382 -0
  620. package/schema/workflow_capability-artifact-manifest_v1.json +529 -0
  621. package/schema/workflow_capability-descriptor_v1.json +351 -0
  622. package/schema/workflow_capability-lifecycle-checkpoint_v1.json +510 -0
  623. package/schema/workflow_capability-observation_v1.json +1707 -0
  624. package/schema/workflow_capability-operation_v1.json +3212 -0
  625. package/schema/workflow_capability-replay-plan_v1.json +1247 -0
  626. package/schema/workflow_capability-retry-policy_v1.json +39 -0
  627. package/schema/workflow_capability-retry-state_v1.json +242 -0
  628. package/schema/workflow_case_v1.json +4222 -0
  629. package/schema/workflow_change-model_v1.json +614 -0
  630. package/schema/workflow_cleanup-expectation_v1.json +108 -0
  631. package/schema/workflow_cleanup-followup_v1.json +145 -0
  632. package/schema/workflow_component-profile_v1.json +219 -0
  633. package/schema/workflow_config_v1.json +180 -0
  634. package/schema/workflow_corpus_v1.json +172 -0
  635. package/schema/workflow_cost-observation_v1.json +366 -0
  636. package/schema/workflow_credential-lease_v1.json +222 -0
  637. package/schema/workflow_effective-config_v1.json +214 -0
  638. package/schema/workflow_environment-plan_v1.json +445 -0
  639. package/schema/workflow_environment_v1.json +1827 -0
  640. package/schema/workflow_evidence-projection_v1.json +636 -0
  641. package/schema/workflow_execution_v1.json +4086 -0
  642. package/schema/workflow_fidelity-plan_v1.json +512 -0
  643. package/schema/workflow_fidelity-profile_v1.json +396 -0
  644. package/schema/workflow_fixture-manifest_v1.json +918 -0
  645. package/schema/workflow_fixture-plan_v1.json +594 -0
  646. package/schema/workflow_git-source-request_v1.json +124 -0
  647. package/schema/workflow_git-source-resolution_v1.json +660 -0
  648. package/schema/workflow_git-source-snapshot_v1.json +287 -0
  649. package/schema/workflow_host-lease_v1.json +321 -0
  650. package/schema/workflow_host-observation_v1.json +282 -0
  651. package/schema/workflow_host-plan_v1.json +719 -0
  652. package/schema/workflow_identity-attestation_v1.json +412 -0
  653. package/schema/workflow_intelligence-policy_v1.json +153 -0
  654. package/schema/workflow_logical-payload_v1.json +206 -0
  655. package/schema/workflow_mcp-tool-call_v1.json +70 -0
  656. package/schema/workflow_mcp-tool-observation_v1.json +125 -0
  657. package/schema/workflow_mock-responses_v1.json +185 -0
  658. package/schema/workflow_native-job-action_v1.json +123 -0
  659. package/schema/workflow_native-job-observation_v1.json +138 -0
  660. package/schema/workflow_native-job-ready_v1.json +31 -0
  661. package/schema/workflow_native-job-request_v1.json +155 -0
  662. package/schema/workflow_native-job-response_v1.json +125 -0
  663. package/schema/workflow_ownership_v1.json +116 -0
  664. package/schema/workflow_persona_v1.json +499 -0
  665. package/schema/workflow_plan-edit-projection_v1.json +152 -0
  666. package/schema/workflow_plan-review_v1.json +246 -0
  667. package/schema/workflow_portable-environment-intent_v1.json +499 -0
  668. package/schema/workflow_portable-environment-profile_v1.json +1429 -0
  669. package/schema/workflow_portable-preflight_v1.json +2281 -0
  670. package/schema/workflow_qualification-admission_v1.json +467 -0
  671. package/schema/workflow_qualification-intent_v1.json +98 -0
  672. package/schema/workflow_qualification-policy_v1.json +109 -0
  673. package/schema/workflow_qualification-round_v1.json +226 -0
  674. package/schema/workflow_replay-assessment_v1.json +197 -0
  675. package/schema/workflow_replay-finding_v1.json +147 -0
  676. package/schema/workflow_request_v1.json +1567 -0
  677. package/schema/workflow_result-ingest_v1.json +343 -0
  678. package/schema/workflow_revisions_v1.json +334 -0
  679. package/schema/workflow_routing-decision_v1.json +482 -0
  680. package/schema/workflow_runner-capabilities_v1.json +316 -0
  681. package/schema/workflow_runner-profile_v1.json +119 -0
  682. package/schema/workflow_runner-protocol_v1_host.json +382 -0
  683. package/schema/workflow_runner-protocol_v1_plugin.json +491 -0
  684. package/schema/workflow_scenario-activation-intent_v1.json +346 -0
  685. package/schema/workflow_scenario-activation_v1.json +562 -0
  686. package/schema/workflow_scenario-projection_v1.json +221 -0
  687. package/schema/workflow_scenario-promotion_v1.json +455 -0
  688. package/schema/workflow_scenario-replay-assessment_v1.json +696 -0
  689. package/schema/workflow_scenario-revision-token_v1.json +115 -0
  690. package/schema/workflow_scenario-structure_v1.json +368 -0
  691. package/schema/workflow_scenario_v1.json +401 -0
  692. package/schema/workflow_scoped-resource_v1.json +550 -0
  693. package/schema/workflow_seed-recipe_v1.json +724 -0
  694. package/schema/workflow_selection_v1.json +1108 -0
  695. package/schema/workflow_signed-cleanup-followup_v1.json +175 -0
  696. package/schema/workflow_source-plan_v1.json +756 -0
  697. package/schema/workflow_source-selection_v1.json +456 -0
  698. package/schema/workflow_source-validation_v1.json +366 -0
  699. package/schema/workflow_step-event_v1.json +228 -0
  700. package/schema/workflow_stream-transcript_v1.json +1030 -0
  701. package/schema/workflow_suite_v1.json +64 -0
  702. package/schema/workflow_surface-binding_v1.json +411 -0
  703. package/schema/workflow_surface-pack_v1.json +159 -0
@@ -0,0 +1,87 @@
1
+ # Test a local MCP tool through the existing verification path
2
+
3
+ Install the optional protocol adapter dependency when using MCP flows:
4
+
5
+ ```sh
6
+ npm install --save-dev --save-exact @modelcontextprotocol/sdk@1.32.1
7
+ tracegrove sample-config --sample notes-mcp --output ./mcp-notes
8
+ tracegrove test --config ./mcp-notes/tracegrove.config.yaml
9
+ ```
10
+
11
+ The core, HTTP, browser and native job startup paths do not load this peer. Planning
12
+ an MCP flow without it reports `mcp_sdk_missing` with the installation command.
13
+ The package pins the SDK version and lockfile integrity. This driver uses the
14
+ [official v1 client](https://ts.sdk.modelcontextprotocol.io/client) and its
15
+ Streamable HTTP transport. Conformance exercises the negotiated `2025-11-25`
16
+ protocol with JSON and SSE responses. Other protocol revisions, legacy HTTP+SSE
17
+ fallback, stdio servers, OAuth discovery and hosted targets are not qualified here.
18
+
19
+ ## Author a flow
20
+
21
+ ```yaml
22
+ title: A created note is independently readable
23
+ effects:
24
+ maxMcpCalls: 1
25
+ allowedMcpTools: [notes.create]
26
+ steps:
27
+ - name: create
28
+ mcp:
29
+ endpoint: /mcp
30
+ tool: notes.create
31
+ arguments: {title: Protocol proof, body: Native persistence}
32
+ save: {noteId: structuredContent.note.id}
33
+ expect:
34
+ json: {structuredContent.note.title: Protocol proof}
35
+ - GET: /notes/{noteId}
36
+ expect:
37
+ status: 200
38
+ json: {note.title: Protocol proof}
39
+ ```
40
+
41
+ MCP steps use the ordinary persona selector, saved-value bindings, deadlines and
42
+ JSON captures. The endpoint stays on the launched application's admitted origin.
43
+ Tool and endpoint names are frozen; only arguments can contain saved values.
44
+ The compiler requires the tool allowlist, call ceiling, designated-write mode,
45
+ POST permission and endpoint prefix before any host starts. A tool's
46
+ `readOnlyHint` or other server-supplied annotation cannot grant authority.
47
+ The ceiling bounds calls, not the number or financial cost of downstream effects.
48
+ Use an isolated application with run-owned data and known tool effects. Hosted,
49
+ paid, messaging and external-provider tool qualifications remain separate gates.
50
+ MCP and HTTP can share a flow; browser/native-job combinations remain blocked
51
+ until jointly qualified.
52
+
53
+ ## Results and recovery
54
+
55
+ The existing planner, executor, bundle writer and independent reducer handle the
56
+ flow. Each observation includes the tool, endpoint, negotiated protocol version,
57
+ observed server name/version, content, structured content, `isError`, duration and
58
+ attempt count. Server identity is self-reported protocol metadata; target source
59
+ and runtime identity still come from the local host's attestation.
60
+
61
+ The default required assertion checks `isError: false` in addition to configured
62
+ facts. A tool error is retained as a failed step, skips dependent effects, and
63
+ keeps potentially partial mutations unknown. An independently readable record is
64
+ stronger evidence than the tool saying it saved one: the sample's controlled
65
+ success-without-persistence defect fails on HTTP readback. Independent bundle
66
+ verification uses the frozen MCP runner and typed oracle; substituting an HTTP
67
+ runner or oracle is rejected.
68
+
69
+ Each call establishes a protocol connection with the same step deadline. There is
70
+ one tool attempt and no automatic tool replay or transport fallback. Throttling,
71
+ connection loss, cancellation or expiry does not prove that remote work stopped.
72
+ Potential effects remain unknown in cleanup accounting after an ambiguous call.
73
+ Local process/workspace cleanup is confirmed separately. Inspect the native
74
+ application before requesting another run; MCP has no generic idempotency-key or
75
+ rollback guarantee. SDK transport reconnection is disabled.
76
+
77
+ Requests and each response stream are bounded to 64 KiB. Credentials stay in
78
+ memory, are sent only to the admitted endpoint, and cannot be expanded into tool
79
+ arguments. Redirects are refused. Results echoing an issued bearer are withheld;
80
+ raw protocol/provider error messages are not saved. Resource links are inert
81
+ evidence: the driver does not fetch them, render embedded UI or call other tools.
82
+
83
+ The native `notes-mcp` sample uses file-backed notes and a JSON-response subset of
84
+ the `2025-11-25` transport. Separate tests interoperate with the official SDK server
85
+ using JSON and SSE. These are local protocol proofs, not an actual ChatGPT/Claude
86
+ widget-host, mobile, production authorization or complete MCP-server conformance
87
+ claim. No inference model or external account is used in these tests.
@@ -0,0 +1,96 @@
1
+ # Native job bridge
2
+
3
+ The `native_job` runner uses Node IPC for job submission, independent readback,
4
+ and cancellation. HTTP remains available for fixtures and application readiness;
5
+ an HTTP response cannot satisfy a `job.observation/1` assertion. The core,
6
+ planner, reducer, evidence bundle, CLI, and Grove use the same frozen contracts.
7
+
8
+ ```sh
9
+ tracegrove sample-config --sample report-native --output ./native-example
10
+ tracegrove test --config ./native-example/tracegrove.config.yaml
11
+ tracegrove ui --dir ./native-example
12
+ ```
13
+
14
+ The example reuses the report-jobs application's real SQLite store and separate
15
+ worker. It exercises duplicate delivery, a conflicting idempotency key, another
16
+ persona's denied read, persisted output, worker-confirmed cancellation, and a
17
+ failed job. The application and worker are stopped and their attempt-owned data
18
+ directory removed. The native sample uses no HTTP job endpoint.
19
+
20
+ ## Authoring
21
+
22
+ Set `app.nativeJobs: node_ipc/v1` on a Node preset. The application must implement
23
+ the explicit handshake below; setting the option alone cannot establish a native
24
+ capability. Declare `effects.maxJobs`; every submit invocation, including a
25
+ duplicate or conflicting invocation, consumes one position in that ceiling.
26
+ The compiler derives the allowed queues from the flow. Low-level corpus authors
27
+ must supply `effects.allowedJobQueues` explicitly. Read-only envelopes refuse
28
+ submission and cancellation. Job steps require one attempt; there is no implicit
29
+ submission retry.
30
+
31
+ ```yaml
32
+ effects: { maxJobs: 1 }
33
+ steps:
34
+ - job:
35
+ action: submit
36
+ queue: reports
37
+ requestKey: one-report
38
+ payload: { title: Example, mode: succeed }
39
+ save: { jobId: jobId }
40
+ expect: { present: [jobId] }
41
+ - job: { action: read, queue: reports, jobId: '{jobId}' }
42
+ expect:
43
+ json: { status: succeeded, output.report.content: 'Report: Example' }
44
+ present: [workerId]
45
+ ```
46
+
47
+ These compile to `job.submit`, `job.observe`, and `job.cancel`. Expectations
48
+ refer to the typed job observation, using `expect.json`, `present`, `absent`, or
49
+ `count`. HTTP status expectations are rejected. `as` uses the same attempt-issued
50
+ persona credentials as HTTP. Credentials cross the private IPC channel and are
51
+ excluded from protocol results and recorded observations. Provider output still
52
+ needs the application's ordinary data-redaction policy.
53
+ An output that echoes the issued credential is withheld with a typed adapter
54
+ failure; the credential is not sealed into observations.
55
+
56
+ The read operation polls to its step deadline. A completed readback survives a
57
+ later timeout, so `succeeded` without the required report is an assertion failure
58
+ with retained evidence. Cancellation or a transport failure remains a failure of
59
+ the attempt. Request and response IDs are correlated, read/cancel results must
60
+ name the requested job, and submitted results must retain the requested key.
61
+
62
+ ## Application protocol
63
+
64
+ Schemas are exported through `tracegrove/protocol` and JSON Schema:
65
+ `workflow.native-job-{action,request,response,ready,observation}/v1`.
66
+ The supervisor opens IPC only for an opted-in Node application and sets
67
+ `TRACEGROVE_NATIVE_JOBS=node_ipc/v1`. After its worker/provider is ready, the
68
+ application sends:
69
+
70
+ ```json
71
+ {"kind":"tracegrove.job.ready","version":1,"queues":["reports"]}
72
+ ```
73
+
74
+ It receives `tracegrove.job.request` messages with a UUID `id`, nullable
75
+ `credential`, and a typed `command`. Commands are `submit` (queue, requestKey,
76
+ payload), `read` (queue, jobId), or `cancel` (queue, jobId). The application owns
77
+ credential validation, tenant isolation, idempotency, actual submission, readback,
78
+ and cancellation semantics. It replies with the same UUID:
79
+
80
+ ```json
81
+ {"kind":"tracegrove.job.response","id":"00000000-0000-4000-8000-000000000001","result":{"jobId":"example","status":"queued","requestKey":"one-report","output":null,"workerId":null}}
82
+ ```
83
+
84
+ Messages are bounded to 32 KiB. Malformed, missing, oversized, mismatched, or
85
+ late responses cannot become successful observations. Only job-namespace
86
+ messages are forwarded from the application; application output cannot impersonate
87
+ the supervisor's source or cleanup observations. The same supervisor owns the
88
+ application process group, including workers, and removes its workspace when the
89
+ controller disconnects. Snapshot-pinned launches use the same bridge from the
90
+ private pinned source copy.
91
+
92
+ This is a local Node provider seam. It does not qualify a hosted queue, a remote
93
+ provider account, production cancellation, or distributed crash recovery. The
94
+ handshake declares supported queues; it does not independently certify the
95
+ provider's implementation. Python bridges and mixed browser/native-job packs
96
+ require separate conformance work and currently block rather than downgrade.
@@ -0,0 +1,87 @@
1
+ # Independent local result retention
2
+
3
+ The result sink retains complete verified bundles independently of the producer's
4
+ run directory. It reuses the existing fenced `LocalLedger` for its index; there is
5
+ no second database, mutable status file, or hosted service in this implementation.
6
+
7
+ ```sh
8
+ tracegrove result-ingest --bundle ./run/bundle --sink ./retained-results --json
9
+ tracegrove results --sink ./retained-results --limit 20 --json
10
+ tracegrove results --sink ./retained-results --id <result-id> --json
11
+ ```
12
+
13
+ `result-ingest` captures a bounded verified snapshot, checks the selected consumer
14
+ scope, copies only sealed files, reads the completed archive back, and publishes
15
+ an immutable `workflow.result-ingest/v1` receipt. Manifest and payload bytes come
16
+ from the same snapshot that passed complete evidence reduction; the source is
17
+ not reopened during copy. Binary artifacts retain their exact bytes. Unsealed
18
+ files, including accidental scratch files, are not imported.
19
+
20
+ SDK consumers that authenticated an earlier snapshot can pass
21
+ `sink.ingest(bundleDir, { expectedManifestDigest })`. A mismatch is refused before
22
+ archiving or publishing a campaign receipt. This binds retention to the authenticated
23
+ bytes without treating the digest itself as issuer authentication.
24
+
25
+ The receipt records the actual retained outcome, exact campaign/request/selection
26
+ and fidelity-plan refs, planned fidelity lanes, manifest digest, receipt count,
27
+ and acceptance time. A failed, cancelled, blocked, or mocked result never becomes
28
+ a passing live result through storage. Every receipt explicitly says:
29
+
30
+ ```json
31
+ {"evidenceClass":"integrity_checked_local_bundle","issuerStatus":"unverified","qualificationStatus":"not_evaluated"}
32
+ ```
33
+
34
+ Exit 0 from ingestion means durable retention succeeded, including retention of
35
+ an honestly failed attempt. Check `receipt.retainedOutcome` for the result's
36
+ verdict. The ordinary CLI error convention remains stderr plus a nonzero exit;
37
+ invalid or inconsistent evidence is a conflict (exit 2).
38
+
39
+ ## Reading and replaying deliveries
40
+
41
+ Listing returns stored receipt metadata with `archiveStatus: not_checked`. It
42
+ does not renew an earlier integrity check. Inspecting a result by ID captures and
43
+ re-verifies the retained archive against its exact indexed manifest and refs.
44
+ Missing or corrupted archives fail rather than echoing the recorded verdict as a
45
+ fresh verification. Inspection keeps working when the original run is removed.
46
+
47
+ Delivering the identical campaign and manifest again returns the original receipt
48
+ with `replayed: true`; it does not append another result. Reusing that scoped
49
+ `campaignId` with different evidence is a conflict, including renaming its result
50
+ document reference. Even a differently serialized
51
+ manifest is different evidence. Preserve the original manifest bytes for retries.
52
+
53
+ List pages are bounded to 100 records. An opaque cursor binds the selected scope,
54
+ index version, and offset; later deliveries do not change that page sequence.
55
+ Cursors are pagination positions, not access grants. An exhausted 10,000-record
56
+ prototype index blocks new admissions until an authoritative archival index is
57
+ provided. Entries are never silently evicted.
58
+
59
+ ## Durability and scope
60
+
61
+ Archive files and directories are synced before their immutable content-addressed
62
+ directory is published. The archive namespace is synced before the ledger receipt
63
+ is appended and synced. A crash between those operations can leave an unindexed
64
+ complete object, but cannot publish an accepted receipt for an incomplete copy.
65
+ A retry verifies that object and syncs its namespace again before publishing one receipt. Partial
66
+ staging directories are not indexed; only a staging directory created by the
67
+ current operation is removed on an ordinary write failure. Existing content is
68
+ not replaced or silently repaired. The test suite includes an actual SIGKILL at
69
+ the archive/index boundary, reopen/retry, and injected sync failure.
70
+
71
+ The SDK exports `ResultSink`, `ResultSinkAuthority`, `LocalResultSink`, and
72
+ `VerifiedBundleSnapshot`. A host supplies consumer authorization; ingestion
73
+ rechecks it after capture and commits without an asynchronous gap. The CLI uses
74
+ the same local operator scope as ordinary runs, with no producer-supplied scope
75
+ override. The journal and objects are namespaced by that complete scope.
76
+
77
+ The operator must provide protected, quiescent source and storage directories
78
+ and authorize the source location before calling the SDK. The existing local
79
+ ledger supplies one writer and stale-process recovery; this is not distributed
80
+ fencing or a filesystem ACL against a hostile same-user process. Local owner
81
+ labels, including `WORKFLOW_VERIFY_OWNER`, do not authenticate a remote tenant.
82
+
83
+ This sink verifies integrity and record consistency. It does not authenticate an
84
+ issuer, approve a source plan, provision qualification leases, activate coverage,
85
+ or publish a third-party work receipt. Hosted receiver authentication, tenant delivery,
86
+ and scoped downstream projections require their own trusted adapters. A storage receipt
87
+ cannot stand in for those acceptance gates.
@@ -0,0 +1,175 @@
1
+ # Verified bundle snapshots
2
+
3
+ `verifyBundle(directory)` retains its summary response shape; invalid bundles report a null outcome instead of echoing a producer's PASS label. `readVerifiedBundle(directory)` returns the checked request, selection, campaign, per-cell receipts, frozen document map and manifest byte digest; it throws instead of returning records for an invalid bundle. These records prepare whole-round qualification evaluation but do not themselves qualify or activate a scenario.
4
+
5
+ Both paths use one `BundleSnapshot`. Each listed payload is read once, checked against its sealed byte count/hash and retained privately. JSON decoding, assertion checks and campaign reduction consume those captured bytes. Mutating the directory after capture does not change that snapshot. Buffers returned by the snapshot are copies. A later verification call takes a fresh snapshot rather than caching a former success.
6
+
7
+ `VerifiedBundleSnapshot.open(directory)` exposes the exact verified manifest and
8
+ payload bytes as defensive copies for storage adapters. Its records and manifest
9
+ digest are copies too. The [local result sink](result-sink.md) writes those
10
+ captured bytes, verifies the completed archive, and publishes a scoped receipt
11
+ through the existing ledger. It does not re-open producer files during copying
12
+ or promote a storage receipt into qualification authority.
13
+
14
+ The reader refuses traversal, duplicate paths, symlinks and nonregular files. Reads are bounded to the expected size plus one byte so growth is detected without loading an arbitrarily larger file. Current prototype bounds are 1 MiB for the manifest, 16 MiB per file, 64 MiB of payload and 10,000 files. Oversize bundles fail verification; files are never truncated or silently omitted. Larger media packs need an explicitly supported bounded reader.
15
+
16
+ Campaign verification rechecks complete receipt bindings, missing cells, coverage and proof eligibility, as well as full request/selection/campaign scope and reference identity. Per-cell checks bind exact case/persona/surface/variant and qualification-admission refs. The outcome label alone cannot cover inconsistent campaign metadata.
17
+
18
+ Target comparison checks every target metadata field and each required component's
19
+ kind and identity. Current hosts supply component attestations and, when explicitly
20
+ bound, verified pinned Git-object repository observations. Remote ownership,
21
+ release, schema, flag, browser, container and model metadata remain unobserved.
22
+ Requesting those fields cannot fill their observations; a required mismatch blocks
23
+ the run before fixtures or steps. The saved-bundle reader reconstructs the observed
24
+ tuple from the captured host attestations too, so inventing matching expected and
25
+ observed metadata and recomputing all file/document hashes cannot create passing
26
+ source or deployment evidence. Unsupported target observations need a real host
27
+ contract before they can qualify. Honest blocked attempts retain their evidence.
28
+
29
+ An optional source-snapshot binding covers local launch content. Its frozen
30
+ manifest must match the admitted scope and supervisor observation; every attested
31
+ identity file must belong to that manifest with the same bytes. The reader also
32
+ recomputes the source digest from those file observations. This binds captured
33
+ local content. The [Git proof guide](git-object-proof.md) describes the separate
34
+ actual-file object check and opt-in repository role. Neither establishes remote
35
+ ownership, deployment identity or hosted issuer trust.
36
+
37
+ This is integrity and record-consistency verification. A passing mocked bundle retains its mocked proof boundary. It is not live qualification, trusted issuer identity, tenant authorization or production acceptance. The host must authorize a quiescent artifact directory and apply its own issuer/admission policy. The snapshot API is not a remote filesystem ACL or a defense against a hostile process replacing parent directories during capture.
38
+
39
+ ## Atomic local export
40
+
41
+ `exportVerifiedBundle(source, output)` captures and reduces one bounded snapshot, writes only its sealed bytes into a private sibling staging directory, verifies the staged copy, and renames it into a fresh output directory. The manifest comes from that same snapshot; unlisted host/private files are excluded. The CLI `export` and authoring `test` use this path. CLI JSON includes `published`; invalid source evidence publishes no output. Existing outputs are never merged or overwritten, including an empty directory.
42
+
43
+ Files and directory entries are synced before acknowledgement, including newly created ancestor entries. Content-addressed object publication uses an exclusive hard link, unique temporary storage, bounded no-follow readback and a single digest-checked read. A preexisting corrupt object is retained and reported, never silently replaced. Preexisting symlink ancestors are rejected before directory creation. These operations require a supported owned local filesystem with directory fsync and hard links; unsupported filesystem behavior fails rather than claiming durability.
44
+
45
+ Cooperating exporters share an exclusive sibling publication lock. A writer crash can leave its private staging directory and lock; the destination is absent or contains the complete verified bundle. Locks are never automatically broken. The operator must establish that the writer is gone and inspect the owned staging/output state before a separately authorized cleanup/retry; do not blindly remove a lock belonging to another writer. If final parent sync fails after rename, the command reports that publication durability is unconfirmed: the complete output may exist, so verify it before retrying and do not overwrite it.
46
+
47
+ Tests include concurrent independent publishers, actual writer SIGKILL during a payload write, source mutation after snapshot capture, corrupt objects, symlink/no-effect refusal and injected write/sync failures. This establishes local process-crash behavior and fsync ordering, not physical power-loss qualification, arbitrary hostile-parent confinement, distributed fencing, automatic recovery or provider attestation.
48
+
49
+ ## Durable original execution seal
50
+
51
+ `writeExecutionBundle` now persists the original execution records before acknowledging the
52
+ source seal, rather than relying on a later exported copy. Cell and final payload files are created
53
+ exclusively and fsynced. Existing cell payloads are re-read through the bounded no-follow reader,
54
+ synced as regular files, and their directories are synced before final publication. Existing
55
+ payloads or manifests are never overwritten, including corrupt bytes left by an interrupted write.
56
+
57
+ The writer builds the existing v1 manifest in a unique private `.bundle-pending-*` directory.
58
+ An internal candidate snapshot checks its bounded payload hashes and performs the same complete
59
+ frozen-record, assertion and campaign reduction as the public verifier. The verified receipt set
60
+ must also match the final records supplied by the executor. Only then does an exclusive hard link
61
+ publish `manifest.json`, followed by directory fsync. The executor's ledger finalization follows
62
+ the returned source seal. The bundle format and public reader contract are unchanged: a candidate
63
+ without a published manifest is never a valid public bundle.
64
+
65
+ The caller must own a quiescent local execution tree and retain its existing ledger writer.
66
+ An exclusive `.bundle-write.lock` serializes cooperating source writers. A write/sync/candidate
67
+ failure or process death retains its incomplete records, lock and any manifest staging for explicit
68
+ reconciliation; no stale lock is automatically removed and no assertion is retried. A manifest
69
+ that became visible before a later directory sync failure is reported as published with durability
70
+ unconfirmed, rather than removed or overwritten. Verify that existing bundle before any retry.
71
+
72
+ Tests cover actual SIGKILL before the manifest link and after its first directory fsync, injected
73
+ payload write/fsync failures, corruption during manifest staging, a hash-consistent candidate
74
+ whose campaign disagrees with reduction, existing corrupt payload preservation, linked-parent
75
+ refusal and post-publication sync uncertainty. A process crash can leave an invalid incomplete
76
+ source or a complete verifiable source with reconciliation remnants. These bounded local tests
77
+ do not simulate physical power loss, establish hostile-writer confinement, distributed fencing,
78
+ provider/host qualification, or transactional recovery across the separate ledger and bundle seal.
79
+
80
+ ## Local commit-window readback
81
+
82
+ If a controller dies after the original manifest commits but before ledger finalization, local
83
+ redelivery first requires the existing durable ownership inventory to show acknowledged removal
84
+ of every resource. It then verifies and reduces the entire committed bundle and binds its exact
85
+ request/selection, scope, execution/attempt/generation, attempt number, idempotency key and
86
+ per-cell receipt references to the trusted ledger. Only a matching commit can reconstruct the
87
+ original summary, sync the manifest's directory and append the missing `finalized` transition.
88
+ A failed recovery directory sync leaves finalization blocked with durability unconfirmed.
89
+ It returns checked receipts and
90
+ starts no second host or fixture. A manifest's mere presence or a producer PASS label is insufficient.
91
+
92
+ Finalized redelivery also reads this bound committed evidence instead of trusting the cached
93
+ summary containing an empty receipt list. Missing, corrupt or foreign finalized evidence fails
94
+ closed without acquisition. Interrupted attempts without a committed manifest retain the existing
95
+ retry policy and ownership gate; this readback does not repair incomplete files or invent cleanup.
96
+ Actual controller SIGKILL immediately before the ledger finalization write, zero-launch readback,
97
+ unknown ownership, corrupt/foreign/missing evidence and false cached summary are regression-tested.
98
+ This is local reconciliation under one ledger writer, not a distributed transaction or a claim that
99
+ physical power loss was simulated.
100
+
101
+ ## Inspect and hand off a frozen run
102
+
103
+ ```sh
104
+ tracegrove inspect --request ./frozen.json --json
105
+ tracegrove rerun --request ./frozen.json --output ./next-attempt.json
106
+ tracegrove run --request ./next-attempt.json --state-dir ./state
107
+ tracegrove inspect --execution <id> --state-dir ./state --json
108
+ tracegrove inspect --bundle ./exported-evidence --failed-step --json
109
+ tracegrove export --execution <id> --state-dir ./state --output ./new-export
110
+ ```
111
+
112
+ `inspect --request` uses the typed frozen transport envelope and static executable
113
+ closure checks. It reports requested refs, selected cells, a closure digest, blockers
114
+ and whether a qualification owner is required. `executionAuthority: not_checked`
115
+ means exactly that: inspection does not query an approval owner, probe a runtime,
116
+ start an application, provision state or grant effects. It needs no mutable project
117
+ YAML. A blocked structure exits 2; a valid structure exits 0.
118
+
119
+ The CLI reads frozen envelopes from bounded regular files (96 MiB maximum), rejects
120
+ unknown envelope fields and checks document keys and seals before rerun. A trial or
121
+ work-proof rerun retains the exact frozen case/persona/target selection, assigns fresh
122
+ campaign/request identities and records `replayOf`. Its documents are independent
123
+ copies of the original. Qualification/lifecycle requests cannot use `rerun` to erase
124
+ registration; use the current owning registry to admit a new independent round and
125
+ `prepareQualificationExecution` to bind it.
126
+
127
+ Execution inspection first captures and independently verifies the complete evidence
128
+ bundle. It never reports an unverified producer PASS. `--bundle` supports evidence
129
+ outside the original state directory; `--execution` requires one safe path segment
130
+ and a state directory. `--failed-step` is the explicit path for failed observation
131
+ payloads. Ordinary summaries retain compact step/assertion labels. Successful
132
+ inspection exits 0 even when the verified product outcome is a failure; read `outcome`.
133
+ Invalid evidence exits 2 and reports no success summary.
134
+
135
+ The CLI `export` uses the atomic local export described above. The library also exports
136
+ `exportCapturedBundle(snapshot, output)`, which writes a `VerifiedBundleSnapshot`'s captured
137
+ sealed bytes through the same file writer as the result archive. It never rereads the producer directory or copies
138
+ unlisted scratch files or workspaces. The output must be a new directory. Files are
139
+ exclusive, the manifest is written last, and completed output is reverified. Failed
140
+ writes remove only the newly allocated output; existing destinations and links are
141
+ left intact. Capturing before the producer disappears still permits export afterward.
142
+
143
+ The library exports the `FrozenBundle`, `FrozenPlanInspection`, `ExecutionInspection`
144
+ and `FailedStepInspection` Zod schemas with the corresponding reader/inspection
145
+ functions. These local projections are not new execution authority or outcome records.
146
+
147
+
148
+ ## Runner compatibility
149
+
150
+ A frozen runner profile is evidence of the selected configuration, not permission to
151
+ substitute the verifier's current runner identity. `verify-bundle --json` and failed verified
152
+ exports may include `diagnostics` with schema `tracegrove.runner-compatibility/v1`:
153
+
154
+ - `runner_profile_missing`: no valid, self-digest-checked profile reproduces the requested runner kind.
155
+ - `runner_capability_revision_unsupported`: a valid matching profile is present, but this verifier
156
+ cannot reproduce the requested capability revision.
157
+ - `runner_capability_digest_mismatch`: the kind and revision are supported, but the exact capability
158
+ digest cannot be reproduced from the frozen profiles. Investigate the producer/profile mismatch.
159
+
160
+ The diagnostic includes the exact `requestedRunner` ref and up to 32 matching valid profiles with
161
+ `reproducedRunner` refs. It always says `verification: "not_completed"`; it never grants a historical
162
+ outcome. Unsupported evidence still returns `ok: false`, `outcome: null`, and CLI exit 2. Other
163
+ integrity failures retain their own errors and need not produce a compatibility diagnostic.
164
+
165
+ Preserve the original bytes and manifest. Do not edit or reseal references, choose a runner by
166
+ step names, or replace a requested revision merely because the case uses a subset of its operations.
167
+ For historical inspection, use the producer's recorded compatible verifier and pinned dependency
168
+ closure. An npm version alone may be insufficient for an unpublished build; retain its source commit
169
+ and package integrity too. To qualify a current runtime, perform a new authorized execution, preserving
170
+ both attempts and their distinct identities. This is a new qualification, not a migration of old proof.
171
+
172
+ For example, a valid browser profile captured by an unreleased verifier with capability revision
173
+ `0.3.0` cannot be reproduced by a verifier that implements only `0.1.0`. That is an unsupported reader
174
+ boundary, not proof that the profile is absent or that either workflow passed now. These diagnostics
175
+ do not add historical runner implementations, alter accepted evidence, or grant replay authority.
package/package.json CHANGED
@@ -1,6 +1,100 @@
1
1
  {
2
2
  "name": "tracegrove",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.3.1",
4
+ "private": false,
5
+ "description": "Verify app behavior with real requests, independent readback and inspectable evidence.",
6
+ "license": "Apache-2.0",
7
+ "type": "module",
8
+ "engines": {
9
+ "node": ">=22.22.0 <23"
10
+ },
11
+ "bin": {
12
+ "tracegrove": "./dist/cli/main.js",
13
+ "workflow-verify": "./dist/cli/main.js"
14
+ },
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ "./integrations/awr": {
19
+ "types": "./dist/integrations/awr/index.d.ts",
20
+ "default": "./dist/integrations/awr/index.js"
21
+ },
22
+ "./authoring": {
23
+ "types": "./dist/authoring/index.d.ts",
24
+ "default": "./dist/authoring/index.js"
25
+ },
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ },
30
+ "./protocol": {
31
+ "types": "./dist/protocol/index.d.ts",
32
+ "default": "./dist/protocol/index.js"
33
+ },
34
+ "./coordination": {
35
+ "types": "./dist/core/coordination.d.ts",
36
+ "default": "./dist/core/coordination.js"
37
+ }
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "schema",
42
+ "samples",
43
+ "docs/getting-started.md",
44
+ "docs/agent-guide.md",
45
+ "docs/local-execution-recovery.md",
46
+ "docs/verified-bundles.md",
47
+ "docs/browser-driver.md",
48
+ "docs/native-jobs.md",
49
+ "docs/mcp-driver.md",
50
+ "LICENSE",
51
+ "README.md",
52
+ "docs/result-sink.md",
53
+ "docs/git-object-proof.md"
54
+ ],
55
+ "scripts": {
56
+ "build": "tsc --project tsconfig.build.json && node scripts/copy-samples.mjs",
57
+ "typecheck": "tsc --project tsconfig.json --noEmit && tsc --project tsconfig.container.json --noEmit",
58
+ "test": "vitest run",
59
+ "test:conformance": "vitest run conformance/",
60
+ "test:django": "vitest run --config vitest.django.config.ts",
61
+ "test:container": "node scripts/container-conformance.mjs",
62
+ "schema:export": "node --import tsx scripts/export-schemas.ts",
63
+ "schema:check": "node --import tsx scripts/export-schemas.ts --check && node --import tsx scripts/export-environment-examples.ts --check",
64
+ "test:onboarding": "node scripts/readme-onboarding.mjs && node scripts/readme-onboarding-negative.mjs",
65
+ "verify": "npm run typecheck && npm run schema:check && npm run test"
66
+ },
67
+ "dependencies": {
68
+ "playwright": "1.64.1",
69
+ "yaml": "2.9.1",
70
+ "zod": "4.6.5"
71
+ },
72
+ "peerDependencies": {
73
+ "@modelcontextprotocol/sdk": "1.32.1",
74
+ "@useorgx/agent-work-receipt": "0.3.0"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "@modelcontextprotocol/sdk": {
78
+ "optional": true
79
+ },
80
+ "@useorgx/agent-work-receipt": {
81
+ "optional": true
82
+ }
83
+ },
84
+ "devDependencies": {
85
+ "@modelcontextprotocol/sdk": "1.32.1",
86
+ "@useorgx/agent-work-receipt": "0.3.0",
87
+ "@types/node": "22.19.1",
88
+ "tsx": "4.23.15",
89
+ "typescript": "5.9.3",
90
+ "vitest": "5.0.3"
91
+ },
92
+ "keywords": [
93
+ "testing",
94
+ "workflow",
95
+ "verification",
96
+ "cli",
97
+ "evidence"
98
+ ],
99
+ "homepage": "https://www.npmjs.com/package/tracegrove"
100
+ }
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env python
2
+ import os
3
+ import sys
4
+
5
+ if __name__ == "__main__":
6
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "notesite.settings")
7
+ from django.core.management import execute_from_command_line
8
+ execute_from_command_line(sys.argv)
File without changes
@@ -0,0 +1,14 @@
1
+ """Test-mode auth: tracegrove issues one random bearer token per persona per run."""
2
+ import json
3
+ import os
4
+
5
+ TOKENS = json.loads(os.environ.get("TRACEGROVE_TOKENS", "{}"))
6
+
7
+
8
+ def tracegrove_auth(get_response):
9
+ def middleware(request):
10
+ header = request.headers.get("Authorization", "")
11
+ request.subject = TOKENS.get(header.removeprefix("Bearer "))
12
+ return get_response(request)
13
+
14
+ return middleware
@@ -0,0 +1,19 @@
1
+ import uuid
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ initial = True
8
+ dependencies = []
9
+ operations = [
10
+ migrations.CreateModel(
11
+ name="Note",
12
+ fields=[
13
+ ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
14
+ ("owner", models.CharField(max_length=200)),
15
+ ("title", models.CharField(max_length=200)),
16
+ ("body", models.TextField()),
17
+ ],
18
+ ),
19
+ ]
@@ -0,0 +1,13 @@
1
+ import uuid
2
+
3
+ from django.db import models
4
+
5
+
6
+ class Note(models.Model):
7
+ id = models.UUIDField(primary_key=True, default=uuid.uuid4)
8
+ owner = models.CharField(max_length=200)
9
+ title = models.CharField(max_length=200)
10
+ body = models.TextField()
11
+
12
+ def as_json(self):
13
+ return {"id": str(self.id), "owner": self.owner, "title": self.title, "body": self.body}
@@ -0,0 +1,33 @@
1
+ import json
2
+
3
+ from django.http import HttpResponse, JsonResponse
4
+
5
+ from .models import Note
6
+
7
+
8
+ def health(request):
9
+ return JsonResponse({"ok": True})
10
+
11
+
12
+ def notes(request):
13
+ if not request.subject:
14
+ return JsonResponse({"error": "unauthorized"}, status=401)
15
+ if request.method == "POST":
16
+ data = json.loads(request.body or "{}")
17
+ note = Note.objects.create(owner=request.subject, title=data["title"], body=data["body"])
18
+ return JsonResponse({"note": note.as_json()}, status=201)
19
+ return JsonResponse({"notes": [n.as_json() for n in Note.objects.filter(owner=request.subject)]})
20
+
21
+
22
+ def note(request, note_id):
23
+ if not request.subject:
24
+ return JsonResponse({"error": "unauthorized"}, status=401)
25
+ found = Note.objects.filter(id=note_id).first()
26
+ if found is None:
27
+ return JsonResponse({"error": "not_found"}, status=404)
28
+ if found.owner != request.subject:
29
+ return JsonResponse({"error": "forbidden"}, status=403)
30
+ if request.method == "DELETE":
31
+ found.delete()
32
+ return HttpResponse(status=204)
33
+ return JsonResponse({"note": found.as_json()})
File without changes