tracegrove 0.0.0-stage → 0.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 (721) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +588 -2
  3. package/conformance/coordination-vectors.json +377 -0
  4. package/dist/adapters/browser/capabilities.d.ts +45 -0
  5. package/dist/adapters/browser/capabilities.js +14 -0
  6. package/dist/adapters/browser/capabilities.js.map +1 -0
  7. package/dist/adapters/browser/driver.d.ts +45 -0
  8. package/dist/adapters/browser/driver.js +295 -0
  9. package/dist/adapters/browser/driver.js.map +1 -0
  10. package/dist/adapters/browser/session.d.ts +21 -0
  11. package/dist/adapters/browser/session.js +87 -0
  12. package/dist/adapters/browser/session.js.map +1 -0
  13. package/dist/adapters/http/capabilities.d.ts +2 -0
  14. package/dist/adapters/http/capabilities.js +21 -0
  15. package/dist/adapters/http/capabilities.js.map +1 -0
  16. package/dist/adapters/http/driver.d.ts +55 -0
  17. package/dist/adapters/http/driver.js +125 -0
  18. package/dist/adapters/http/driver.js.map +1 -0
  19. package/dist/adapters/job/capabilities.d.ts +45 -0
  20. package/dist/adapters/job/capabilities.js +8 -0
  21. package/dist/adapters/job/capabilities.js.map +1 -0
  22. package/dist/adapters/job/driver.d.ts +26 -0
  23. package/dist/adapters/job/driver.js +110 -0
  24. package/dist/adapters/job/driver.js.map +1 -0
  25. package/dist/adapters/job/types.d.ts +9 -0
  26. package/dist/adapters/job/types.js +2 -0
  27. package/dist/adapters/job/types.js.map +1 -0
  28. package/dist/adapters/mcp/capabilities.d.ts +46 -0
  29. package/dist/adapters/mcp/capabilities.js +17 -0
  30. package/dist/adapters/mcp/capabilities.js.map +1 -0
  31. package/dist/adapters/mcp/driver.d.ts +10 -0
  32. package/dist/adapters/mcp/driver.js +83 -0
  33. package/dist/adapters/mcp/driver.js.map +1 -0
  34. package/dist/adapters/poll.d.ts +12 -0
  35. package/dist/adapters/poll.js +31 -0
  36. package/dist/adapters/poll.js.map +1 -0
  37. package/dist/authoring/activity.d.ts +17 -0
  38. package/dist/authoring/activity.js +18 -0
  39. package/dist/authoring/activity.js.map +1 -0
  40. package/dist/authoring/agent.d.ts +70 -0
  41. package/dist/authoring/agent.js +268 -0
  42. package/dist/authoring/agent.js.map +1 -0
  43. package/dist/authoring/appLaunch.d.ts +7 -0
  44. package/dist/authoring/appLaunch.js +32 -0
  45. package/dist/authoring/appLaunch.js.map +1 -0
  46. package/dist/authoring/appLocation.d.ts +2 -0
  47. package/dist/authoring/appLocation.js +5 -0
  48. package/dist/authoring/appLocation.js.map +1 -0
  49. package/dist/authoring/browser.d.ts +15 -0
  50. package/dist/authoring/browser.js +20 -0
  51. package/dist/authoring/browser.js.map +1 -0
  52. package/dist/authoring/compile.d.ts +47 -0
  53. package/dist/authoring/compile.js +508 -0
  54. package/dist/authoring/compile.js.map +1 -0
  55. package/dist/authoring/discover.d.ts +43 -0
  56. package/dist/authoring/discover.js +149 -0
  57. package/dist/authoring/discover.js.map +1 -0
  58. package/dist/authoring/environmentTemplates.d.ts +3 -0
  59. package/dist/authoring/environmentTemplates.js +24 -0
  60. package/dist/authoring/environmentTemplates.js.map +1 -0
  61. package/dist/authoring/heal.d.ts +108 -0
  62. package/dist/authoring/heal.js +723 -0
  63. package/dist/authoring/heal.js.map +1 -0
  64. package/dist/authoring/index.d.ts +14 -0
  65. package/dist/authoring/index.js +15 -0
  66. package/dist/authoring/index.js.map +1 -0
  67. package/dist/authoring/init.d.ts +21 -0
  68. package/dist/authoring/init.js +141 -0
  69. package/dist/authoring/init.js.map +1 -0
  70. package/dist/authoring/localSettings.d.ts +33 -0
  71. package/dist/authoring/localSettings.js +31 -0
  72. package/dist/authoring/localSettings.js.map +1 -0
  73. package/dist/authoring/media.d.ts +10 -0
  74. package/dist/authoring/media.js +37 -0
  75. package/dist/authoring/media.js.map +1 -0
  76. package/dist/authoring/module.d.ts +2 -0
  77. package/dist/authoring/module.js +38 -0
  78. package/dist/authoring/module.js.map +1 -0
  79. package/dist/authoring/run.d.ts +74 -0
  80. package/dist/authoring/run.js +242 -0
  81. package/dist/authoring/run.js.map +1 -0
  82. package/dist/authoring/runSource.d.ts +6 -0
  83. package/dist/authoring/runSource.js +24 -0
  84. package/dist/authoring/runSource.js.map +1 -0
  85. package/dist/authoring/savedRun.d.ts +13 -0
  86. package/dist/authoring/savedRun.js +94 -0
  87. package/dist/authoring/savedRun.js.map +1 -0
  88. package/dist/authoring/schema.d.ts +574 -0
  89. package/dist/authoring/schema.js +147 -0
  90. package/dist/authoring/schema.js.map +1 -0
  91. package/dist/authoring/snapshotSource.d.ts +13 -0
  92. package/dist/authoring/snapshotSource.js +41 -0
  93. package/dist/authoring/snapshotSource.js.map +1 -0
  94. package/dist/authoring/sourceSelection.d.ts +34 -0
  95. package/dist/authoring/sourceSelection.js +13 -0
  96. package/dist/authoring/sourceSelection.js.map +1 -0
  97. package/dist/authoring/sources.d.ts +5 -0
  98. package/dist/authoring/sources.js +65 -0
  99. package/dist/authoring/sources.js.map +1 -0
  100. package/dist/authoring/status.d.ts +48 -0
  101. package/dist/authoring/status.js +100 -0
  102. package/dist/authoring/status.js.map +1 -0
  103. package/dist/authoring/typed.d.ts +6 -0
  104. package/dist/authoring/typed.js +5 -0
  105. package/dist/authoring/typed.js.map +1 -0
  106. package/dist/authoring/ui.d.ts +10 -0
  107. package/dist/authoring/ui.js +486 -0
  108. package/dist/authoring/ui.js.map +1 -0
  109. package/dist/authoring/uiPage.d.ts +1 -0
  110. package/dist/authoring/uiPage.js +358 -0
  111. package/dist/authoring/uiPage.js.map +1 -0
  112. package/dist/authoring/uiSourceControls.d.ts +2 -0
  113. package/dist/authoring/uiSourceControls.js +41 -0
  114. package/dist/authoring/uiSourceControls.js.map +1 -0
  115. package/dist/authoring/verificationSource.d.ts +41 -0
  116. package/dist/authoring/verificationSource.js +46 -0
  117. package/dist/authoring/verificationSource.js.map +1 -0
  118. package/dist/authoring/workspace.d.ts +33 -0
  119. package/dist/authoring/workspace.js +58 -0
  120. package/dist/authoring/workspace.js.map +1 -0
  121. package/dist/cli/arguments.d.ts +288 -0
  122. package/dist/cli/arguments.js +121 -0
  123. package/dist/cli/arguments.js.map +1 -0
  124. package/dist/cli/cleanup.d.ts +18 -0
  125. package/dist/cli/cleanup.js +40 -0
  126. package/dist/cli/cleanup.js.map +1 -0
  127. package/dist/cli/doctor.d.ts +51 -0
  128. package/dist/cli/doctor.js +118 -0
  129. package/dist/cli/doctor.js.map +1 -0
  130. package/dist/cli/errors.d.ts +2 -0
  131. package/dist/cli/errors.js +84 -0
  132. package/dist/cli/errors.js.map +1 -0
  133. package/dist/cli/jsonFile.d.ts +2 -0
  134. package/dist/cli/jsonFile.js +15 -0
  135. package/dist/cli/jsonFile.js.map +1 -0
  136. package/dist/cli/main.d.ts +2 -0
  137. package/dist/cli/main.js +603 -0
  138. package/dist/cli/main.js.map +1 -0
  139. package/dist/cli/render.d.ts +22 -0
  140. package/dist/cli/render.js +150 -0
  141. package/dist/cli/render.js.map +1 -0
  142. package/dist/cli/samples/catalog.d.ts +10 -0
  143. package/dist/cli/samples/catalog.js +3 -0
  144. package/dist/cli/samples/catalog.js.map +1 -0
  145. package/dist/cli/samples/write.d.ts +5 -0
  146. package/dist/cli/samples/write.js +64 -0
  147. package/dist/cli/samples/write.js.map +1 -0
  148. package/dist/cli/source.d.ts +41 -0
  149. package/dist/cli/source.js +59 -0
  150. package/dist/cli/source.js.map +1 -0
  151. package/dist/core/activationDecision.d.ts +153 -0
  152. package/dist/core/activationDecision.js +34 -0
  153. package/dist/core/activationDecision.js.map +1 -0
  154. package/dist/core/artifacts.d.ts +18 -0
  155. package/dist/core/artifacts.js +79 -0
  156. package/dist/core/artifacts.js.map +1 -0
  157. package/dist/core/atomicFiles.d.ts +9 -0
  158. package/dist/core/atomicFiles.js +76 -0
  159. package/dist/core/atomicFiles.js.map +1 -0
  160. package/dist/core/boundedFile.d.ts +2 -0
  161. package/dist/core/boundedFile.js +28 -0
  162. package/dist/core/boundedFile.js.map +1 -0
  163. package/dist/core/bundle.d.ts +77 -0
  164. package/dist/core/bundle.js +375 -0
  165. package/dist/core/bundle.js.map +1 -0
  166. package/dist/core/bundleArchive.d.ts +10 -0
  167. package/dist/core/bundleArchive.js +47 -0
  168. package/dist/core/bundleArchive.js.map +1 -0
  169. package/dist/core/bundleEvidence.d.ts +12 -0
  170. package/dist/core/bundleEvidence.js +169 -0
  171. package/dist/core/bundleEvidence.js.map +1 -0
  172. package/dist/core/bundleExport.d.ts +12 -0
  173. package/dist/core/bundleExport.js +36 -0
  174. package/dist/core/bundleExport.js.map +1 -0
  175. package/dist/core/bundleFiles.d.ts +5 -0
  176. package/dist/core/bundleFiles.js +47 -0
  177. package/dist/core/bundleFiles.js.map +1 -0
  178. package/dist/core/bundlePaths.d.ts +2 -0
  179. package/dist/core/bundlePaths.js +7 -0
  180. package/dist/core/bundlePaths.js.map +1 -0
  181. package/dist/core/bundleSnapshot.d.ts +26 -0
  182. package/dist/core/bundleSnapshot.js +71 -0
  183. package/dist/core/bundleSnapshot.js.map +1 -0
  184. package/dist/core/capabilityBoundary.d.ts +1452 -0
  185. package/dist/core/capabilityBoundary.js +361 -0
  186. package/dist/core/capabilityBoundary.js.map +1 -0
  187. package/dist/core/capabilityLifecycle.d.ts +366 -0
  188. package/dist/core/capabilityLifecycle.js +79 -0
  189. package/dist/core/capabilityLifecycle.js.map +1 -0
  190. package/dist/core/cleanup.d.ts +35 -0
  191. package/dist/core/cleanup.js +71 -0
  192. package/dist/core/cleanup.js.map +1 -0
  193. package/dist/core/cleanupActions.d.ts +5 -0
  194. package/dist/core/cleanupActions.js +15 -0
  195. package/dist/core/cleanupActions.js.map +1 -0
  196. package/dist/core/cleanupAttestation.d.ts +23 -0
  197. package/dist/core/cleanupAttestation.js +57 -0
  198. package/dist/core/cleanupAttestation.js.map +1 -0
  199. package/dist/core/clock.d.ts +4 -0
  200. package/dist/core/clock.js +14 -0
  201. package/dist/core/clock.js.map +1 -0
  202. package/dist/core/compiler.d.ts +19 -0
  203. package/dist/core/compiler.js +200 -0
  204. package/dist/core/compiler.js.map +1 -0
  205. package/dist/core/controller.d.ts +7 -0
  206. package/dist/core/controller.js +132 -0
  207. package/dist/core/controller.js.map +1 -0
  208. package/dist/core/coordination.d.ts +72 -0
  209. package/dist/core/coordination.js +118 -0
  210. package/dist/core/coordination.js.map +1 -0
  211. package/dist/core/corpus.d.ts +60 -0
  212. package/dist/core/corpus.js +216 -0
  213. package/dist/core/corpus.js.map +1 -0
  214. package/dist/core/deadline.d.ts +12 -0
  215. package/dist/core/deadline.js +38 -0
  216. package/dist/core/deadline.js.map +1 -0
  217. package/dist/core/deliveryJournal.d.ts +37 -0
  218. package/dist/core/deliveryJournal.js +85 -0
  219. package/dist/core/deliveryJournal.js.map +1 -0
  220. package/dist/core/environmentPreflight.d.ts +14 -0
  221. package/dist/core/environmentPreflight.js +179 -0
  222. package/dist/core/environmentPreflight.js.map +1 -0
  223. package/dist/core/errors.d.ts +22 -0
  224. package/dist/core/errors.js +29 -0
  225. package/dist/core/errors.js.map +1 -0
  226. package/dist/core/events.d.ts +14 -0
  227. package/dist/core/events.js +37 -0
  228. package/dist/core/events.js.map +1 -0
  229. package/dist/core/executionInspection.d.ts +90 -0
  230. package/dist/core/executionInspection.js +31 -0
  231. package/dist/core/executionInspection.js.map +1 -0
  232. package/dist/core/executionOwnership.d.ts +72 -0
  233. package/dist/core/executionOwnership.js +82 -0
  234. package/dist/core/executionOwnership.js.map +1 -0
  235. package/dist/core/executionPreparation.d.ts +362 -0
  236. package/dist/core/executionPreparation.js +93 -0
  237. package/dist/core/executionPreparation.js.map +1 -0
  238. package/dist/core/executionReadback.d.ts +15 -0
  239. package/dist/core/executionReadback.js +21 -0
  240. package/dist/core/executionReadback.js.map +1 -0
  241. package/dist/core/executor.d.ts +46 -0
  242. package/dist/core/executor.js +616 -0
  243. package/dist/core/executor.js.map +1 -0
  244. package/dist/core/frozenBundle.d.ts +314 -0
  245. package/dist/core/frozenBundle.js +24 -0
  246. package/dist/core/frozenBundle.js.map +1 -0
  247. package/dist/core/fsDurability.d.ts +2 -0
  248. package/dist/core/fsDurability.js +12 -0
  249. package/dist/core/fsDurability.js.map +1 -0
  250. package/dist/core/generators.d.ts +4 -0
  251. package/dist/core/generators.js +71 -0
  252. package/dist/core/generators.js.map +1 -0
  253. package/dist/core/gitSnapshot.d.ts +63 -0
  254. package/dist/core/gitSnapshot.js +55 -0
  255. package/dist/core/gitSnapshot.js.map +1 -0
  256. package/dist/core/gitSources.d.ts +29 -0
  257. package/dist/core/gitSources.js +97 -0
  258. package/dist/core/gitSources.js.map +1 -0
  259. package/dist/core/ledger.d.ts +38 -0
  260. package/dist/core/ledger.js +169 -0
  261. package/dist/core/ledger.js.map +1 -0
  262. package/dist/core/ledgerInspection.d.ts +18 -0
  263. package/dist/core/ledgerInspection.js +66 -0
  264. package/dist/core/ledgerInspection.js.map +1 -0
  265. package/dist/core/ledgerRecords.d.ts +23 -0
  266. package/dist/core/ledgerRecords.js +29 -0
  267. package/dist/core/ledgerRecords.js.map +1 -0
  268. package/dist/core/localActivationState.d.ts +260 -0
  269. package/dist/core/localActivationState.js +49 -0
  270. package/dist/core/localActivationState.js.map +1 -0
  271. package/dist/core/localPromotionState.d.ts +387 -0
  272. package/dist/core/localPromotionState.js +22 -0
  273. package/dist/core/localPromotionState.js.map +1 -0
  274. package/dist/core/localQualificationResults.d.ts +39 -0
  275. package/dist/core/localQualificationResults.js +160 -0
  276. package/dist/core/localQualificationResults.js.map +1 -0
  277. package/dist/core/localReviewStore.d.ts +28 -0
  278. package/dist/core/localReviewStore.js +167 -0
  279. package/dist/core/localReviewStore.js.map +1 -0
  280. package/dist/core/localScenarioActivation.d.ts +6 -0
  281. package/dist/core/localScenarioActivation.js +70 -0
  282. package/dist/core/localScenarioActivation.js.map +1 -0
  283. package/dist/core/localScenarioOwner.d.ts +20 -0
  284. package/dist/core/localScenarioOwner.js +2 -0
  285. package/dist/core/localScenarioOwner.js.map +1 -0
  286. package/dist/core/localScenarioPromotion.d.ts +9 -0
  287. package/dist/core/localScenarioPromotion.js +49 -0
  288. package/dist/core/localScenarioPromotion.js.map +1 -0
  289. package/dist/core/localScenarioState.d.ts +2297 -0
  290. package/dist/core/localScenarioState.js +117 -0
  291. package/dist/core/localScenarioState.js.map +1 -0
  292. package/dist/core/localScenarioStore.d.ts +838 -0
  293. package/dist/core/localScenarioStore.js +218 -0
  294. package/dist/core/localScenarioStore.js.map +1 -0
  295. package/dist/core/localScenarioStructure.d.ts +4 -0
  296. package/dist/core/localScenarioStructure.js +52 -0
  297. package/dist/core/localScenarioStructure.js.map +1 -0
  298. package/dist/core/localStructureState.d.ts +2 -0
  299. package/dist/core/localStructureState.js +22 -0
  300. package/dist/core/localStructureState.js.map +1 -0
  301. package/dist/core/lookup.d.ts +662 -0
  302. package/dist/core/lookup.js +55 -0
  303. package/dist/core/lookup.js.map +1 -0
  304. package/dist/core/ownership.d.ts +3 -0
  305. package/dist/core/ownership.js +24 -0
  306. package/dist/core/ownership.js.map +1 -0
  307. package/dist/core/planInspection.d.ts +108 -0
  308. package/dist/core/planInspection.js +44 -0
  309. package/dist/core/planInspection.js.map +1 -0
  310. package/dist/core/planner.d.ts +14 -0
  311. package/dist/core/planner.js +261 -0
  312. package/dist/core/planner.js.map +1 -0
  313. package/dist/core/qualification.d.ts +26 -0
  314. package/dist/core/qualification.js +58 -0
  315. package/dist/core/qualification.js.map +1 -0
  316. package/dist/core/qualificationBundle.d.ts +6 -0
  317. package/dist/core/qualificationBundle.js +51 -0
  318. package/dist/core/qualificationBundle.js.map +1 -0
  319. package/dist/core/qualificationExecution.d.ts +879 -0
  320. package/dist/core/qualificationExecution.js +54 -0
  321. package/dist/core/qualificationExecution.js.map +1 -0
  322. package/dist/core/recoveryStatus.d.ts +6 -0
  323. package/dist/core/recoveryStatus.js +123 -0
  324. package/dist/core/recoveryStatus.js.map +1 -0
  325. package/dist/core/reducer.d.ts +56 -0
  326. package/dist/core/reducer.js +355 -0
  327. package/dist/core/reducer.js.map +1 -0
  328. package/dist/core/replayAssessment.d.ts +15 -0
  329. package/dist/core/replayAssessment.js +78 -0
  330. package/dist/core/replayAssessment.js.map +1 -0
  331. package/dist/core/replayEvidence.d.ts +7 -0
  332. package/dist/core/replayEvidence.js +58 -0
  333. package/dist/core/replayEvidence.js.map +1 -0
  334. package/dist/core/repositorySelectionEvidence.d.ts +3 -0
  335. package/dist/core/repositorySelectionEvidence.js +58 -0
  336. package/dist/core/repositorySelectionEvidence.js.map +1 -0
  337. package/dist/core/rerun.d.ts +3 -0
  338. package/dist/core/rerun.js +24 -0
  339. package/dist/core/rerun.js.map +1 -0
  340. package/dist/core/resultSink.d.ts +52 -0
  341. package/dist/core/resultSink.js +120 -0
  342. package/dist/core/resultSink.js.map +1 -0
  343. package/dist/core/review.d.ts +22 -0
  344. package/dist/core/review.js +65 -0
  345. package/dist/core/review.js.map +1 -0
  346. package/dist/core/runnerCapabilities.d.ts +22 -0
  347. package/dist/core/runnerCapabilities.js +44 -0
  348. package/dist/core/runnerCapabilities.js.map +1 -0
  349. package/dist/core/scenario.d.ts +32 -0
  350. package/dist/core/scenario.js +119 -0
  351. package/dist/core/scenario.js.map +1 -0
  352. package/dist/core/scenarioActivation.d.ts +16 -0
  353. package/dist/core/scenarioActivation.js +47 -0
  354. package/dist/core/scenarioActivation.js.map +1 -0
  355. package/dist/core/scenarioStructure.d.ts +400 -0
  356. package/dist/core/scenarioStructure.js +72 -0
  357. package/dist/core/scenarioStructure.js.map +1 -0
  358. package/dist/core/snapshotEvidence.d.ts +3 -0
  359. package/dist/core/snapshotEvidence.js +37 -0
  360. package/dist/core/snapshotEvidence.js.map +1 -0
  361. package/dist/core/snapshotRepository.d.ts +48 -0
  362. package/dist/core/snapshotRepository.js +47 -0
  363. package/dist/core/snapshotRepository.js.map +1 -0
  364. package/dist/core/source-analysis.d.ts +18 -0
  365. package/dist/core/source-analysis.js +99 -0
  366. package/dist/core/source-analysis.js.map +1 -0
  367. package/dist/core/source-citation.d.ts +53 -0
  368. package/dist/core/source-citation.js +59 -0
  369. package/dist/core/source-citation.js.map +1 -0
  370. package/dist/core/sourcePromotion.d.ts +929 -0
  371. package/dist/core/sourcePromotion.js +92 -0
  372. package/dist/core/sourcePromotion.js.map +1 -0
  373. package/dist/core/sourceReviewEvidence.d.ts +271 -0
  374. package/dist/core/sourceReviewEvidence.js +24 -0
  375. package/dist/core/sourceReviewEvidence.js.map +1 -0
  376. package/dist/core/targetObservation.d.ts +3 -0
  377. package/dist/core/targetObservation.js +26 -0
  378. package/dist/core/targetObservation.js.map +1 -0
  379. package/dist/hosts/launchTemplates.d.ts +2 -0
  380. package/dist/hosts/launchTemplates.js +5 -0
  381. package/dist/hosts/launchTemplates.js.map +1 -0
  382. package/dist/hosts/local.d.ts +17 -0
  383. package/dist/hosts/local.js +311 -0
  384. package/dist/hosts/local.js.map +1 -0
  385. package/dist/hosts/localSupervisor.d.ts +1 -0
  386. package/dist/hosts/localSupervisor.js +115 -0
  387. package/dist/hosts/localSupervisor.js.map +1 -0
  388. package/dist/hosts/mock.d.ts +4 -0
  389. package/dist/hosts/mock.js +82 -0
  390. package/dist/hosts/mock.js.map +1 -0
  391. package/dist/hosts/pinnedArguments.d.ts +3 -0
  392. package/dist/hosts/pinnedArguments.js +39 -0
  393. package/dist/hosts/pinnedArguments.js.map +1 -0
  394. package/dist/hosts/runtime.d.ts +5 -0
  395. package/dist/hosts/runtime.js +60 -0
  396. package/dist/hosts/runtime.js.map +1 -0
  397. package/dist/hosts/sourceIdentity.d.ts +54 -0
  398. package/dist/hosts/sourceIdentity.js +27 -0
  399. package/dist/hosts/sourceIdentity.js.map +1 -0
  400. package/dist/hosts/types.d.ts +39 -0
  401. package/dist/hosts/types.js +2 -0
  402. package/dist/hosts/types.js.map +1 -0
  403. package/dist/index.d.ts +56 -0
  404. package/dist/index.js +52 -0
  405. package/dist/index.js.map +1 -0
  406. package/dist/integrations/awr/attachment.d.ts +34 -0
  407. package/dist/integrations/awr/attachment.js +120 -0
  408. package/dist/integrations/awr/attachment.js.map +1 -0
  409. package/dist/integrations/awr/attachmentContracts.d.ts +273 -0
  410. package/dist/integrations/awr/attachmentContracts.js +39 -0
  411. package/dist/integrations/awr/attachmentContracts.js.map +1 -0
  412. package/dist/integrations/awr/attachmentHttp.d.ts +9 -0
  413. package/dist/integrations/awr/attachmentHttp.js +19 -0
  414. package/dist/integrations/awr/attachmentHttp.js.map +1 -0
  415. package/dist/integrations/awr/cli.d.ts +7 -0
  416. package/dist/integrations/awr/cli.js +43 -0
  417. package/dist/integrations/awr/cli.js.map +1 -0
  418. package/dist/integrations/awr/contracts.d.ts +54 -0
  419. package/dist/integrations/awr/contracts.js +33 -0
  420. package/dist/integrations/awr/contracts.js.map +1 -0
  421. package/dist/integrations/awr/http.d.ts +8 -0
  422. package/dist/integrations/awr/http.js +23 -0
  423. package/dist/integrations/awr/http.js.map +1 -0
  424. package/dist/integrations/awr/index.d.ts +7 -0
  425. package/dist/integrations/awr/index.js +8 -0
  426. package/dist/integrations/awr/index.js.map +1 -0
  427. package/dist/integrations/awr/jsonHttp.d.ts +15 -0
  428. package/dist/integrations/awr/jsonHttp.js +69 -0
  429. package/dist/integrations/awr/jsonHttp.js.map +1 -0
  430. package/dist/integrations/awr/outbox.d.ts +28 -0
  431. package/dist/integrations/awr/outbox.js +88 -0
  432. package/dist/integrations/awr/outbox.js.map +1 -0
  433. package/dist/integrations/awr/projection.d.ts +4 -0
  434. package/dist/integrations/awr/projection.js +54 -0
  435. package/dist/integrations/awr/projection.js.map +1 -0
  436. package/dist/protocol/canonical.d.ts +41 -0
  437. package/dist/protocol/canonical.js +114 -0
  438. package/dist/protocol/canonical.js.map +1 -0
  439. package/dist/protocol/index.d.ts +9620 -0
  440. package/dist/protocol/index.js +185 -0
  441. package/dist/protocol/index.js.map +1 -0
  442. package/dist/protocol/primitives.d.ts +63 -0
  443. package/dist/protocol/primitives.js +46 -0
  444. package/dist/protocol/primitives.js.map +1 -0
  445. package/dist/protocol/schemas/browser.d.ts +153 -0
  446. package/dist/protocol/schemas/browser.js +29 -0
  447. package/dist/protocol/schemas/browser.js.map +1 -0
  448. package/dist/protocol/schemas/capability.d.ts +2126 -0
  449. package/dist/protocol/schemas/capability.js +165 -0
  450. package/dist/protocol/schemas/capability.js.map +1 -0
  451. package/dist/protocol/schemas/capabilityLifecycle.d.ts +509 -0
  452. package/dist/protocol/schemas/capabilityLifecycle.js +47 -0
  453. package/dist/protocol/schemas/capabilityLifecycle.js.map +1 -0
  454. package/dist/protocol/schemas/cleanup.d.ts +109 -0
  455. package/dist/protocol/schemas/cleanup.js +59 -0
  456. package/dist/protocol/schemas/cleanup.js.map +1 -0
  457. package/dist/protocol/schemas/cli.d.ts +121 -0
  458. package/dist/protocol/schemas/cli.js +24 -0
  459. package/dist/protocol/schemas/cli.js.map +1 -0
  460. package/dist/protocol/schemas/config.d.ts +59 -0
  461. package/dist/protocol/schemas/config.js +32 -0
  462. package/dist/protocol/schemas/config.js.map +1 -0
  463. package/dist/protocol/schemas/corpus.d.ts +36 -0
  464. package/dist/protocol/schemas/corpus.js +10 -0
  465. package/dist/protocol/schemas/corpus.js.map +1 -0
  466. package/dist/protocol/schemas/definitions.d.ts +3409 -0
  467. package/dist/protocol/schemas/definitions.js +431 -0
  468. package/dist/protocol/schemas/definitions.js.map +1 -0
  469. package/dist/protocol/schemas/evidenceProjection.d.ts +146 -0
  470. package/dist/protocol/schemas/evidenceProjection.js +18 -0
  471. package/dist/protocol/schemas/evidenceProjection.js.map +1 -0
  472. package/dist/protocol/schemas/execution.d.ts +3179 -0
  473. package/dist/protocol/schemas/execution.js +500 -0
  474. package/dist/protocol/schemas/execution.js.map +1 -0
  475. package/dist/protocol/schemas/gitSources.d.ts +330 -0
  476. package/dist/protocol/schemas/gitSources.js +32 -0
  477. package/dist/protocol/schemas/gitSources.js.map +1 -0
  478. package/dist/protocol/schemas/mcp.d.ts +24 -0
  479. package/dist/protocol/schemas/mcp.js +16 -0
  480. package/dist/protocol/schemas/mcp.js.map +1 -0
  481. package/dist/protocol/schemas/nativeJob.d.ts +106 -0
  482. package/dist/protocol/schemas/nativeJob.js +16 -0
  483. package/dist/protocol/schemas/nativeJob.js.map +1 -0
  484. package/dist/protocol/schemas/portableEnvironment.d.ts +1256 -0
  485. package/dist/protocol/schemas/portableEnvironment.js +108 -0
  486. package/dist/protocol/schemas/portableEnvironment.js.map +1 -0
  487. package/dist/protocol/schemas/promotion.d.ts +132 -0
  488. package/dist/protocol/schemas/promotion.js +9 -0
  489. package/dist/protocol/schemas/promotion.js.map +1 -0
  490. package/dist/protocol/schemas/protocol.d.ts +146 -0
  491. package/dist/protocol/schemas/protocol.js +25 -0
  492. package/dist/protocol/schemas/protocol.js.map +1 -0
  493. package/dist/protocol/schemas/recoveryStatus.d.ts +88 -0
  494. package/dist/protocol/schemas/recoveryStatus.js +20 -0
  495. package/dist/protocol/schemas/recoveryStatus.js.map +1 -0
  496. package/dist/protocol/schemas/resultSink.d.ts +80 -0
  497. package/dist/protocol/schemas/resultSink.js +14 -0
  498. package/dist/protocol/schemas/resultSink.js.map +1 -0
  499. package/dist/protocol/schemas/review.d.ts +248 -0
  500. package/dist/protocol/schemas/review.js +45 -0
  501. package/dist/protocol/schemas/review.js.map +1 -0
  502. package/dist/protocol/schemas/scenario.d.ts +810 -0
  503. package/dist/protocol/schemas/scenario.js +53 -0
  504. package/dist/protocol/schemas/scenario.js.map +1 -0
  505. package/dist/protocol/schemas/source.d.ts +300 -0
  506. package/dist/protocol/schemas/source.js +25 -0
  507. package/dist/protocol/schemas/source.js.map +1 -0
  508. package/dist/source/git.d.ts +36 -0
  509. package/dist/source/git.js +159 -0
  510. package/dist/source/git.js.map +1 -0
  511. package/dist/source/gitObjectProof.d.ts +12 -0
  512. package/dist/source/gitObjectProof.js +115 -0
  513. package/dist/source/gitObjectProof.js.map +1 -0
  514. package/dist/source/snapshotPaths.d.ts +2 -0
  515. package/dist/source/snapshotPaths.js +24 -0
  516. package/dist/source/snapshotPaths.js.map +1 -0
  517. package/dist/source/snapshotTree.d.ts +15 -0
  518. package/dist/source/snapshotTree.js +79 -0
  519. package/dist/source/snapshotTree.js.map +1 -0
  520. package/docs/architecture.md +126 -0
  521. package/docs/awr-delivery.md +102 -0
  522. package/docs/browser-driver.md +148 -0
  523. package/docs/cleanup-followups.md +74 -0
  524. package/docs/developer-ux.md +315 -0
  525. package/docs/examples/portable-environments/alongside_runner.json +199 -0
  526. package/docs/examples/portable-environments/external_staging.json +183 -0
  527. package/docs/git-object-proof.md +100 -0
  528. package/docs/git-source-resolution.md +133 -0
  529. package/docs/images/ui-run.png +0 -0
  530. package/docs/local-execution-recovery.md +55 -0
  531. package/docs/local-review-store.md +13 -0
  532. package/docs/local-scenario-store.md +91 -0
  533. package/docs/mcp-driver.md +87 -0
  534. package/docs/native-jobs.md +96 -0
  535. package/docs/portable-environments.md +155 -0
  536. package/docs/qualification-registration.md +58 -0
  537. package/docs/qualification-results.md +59 -0
  538. package/docs/replay-assessment.md +17 -0
  539. package/docs/result-sink.md +87 -0
  540. package/docs/scenario-activation.md +54 -0
  541. package/docs/scenario-structure.md +58 -0
  542. package/docs/source-promotion.md +104 -0
  543. package/docs/source-review.md +21 -0
  544. package/docs/verified-bundles.md +175 -0
  545. package/docs/work-report-attachment.md +127 -0
  546. package/package.json +45 -4
  547. package/samples/django-notes/manage.py +8 -0
  548. package/samples/django-notes/notes/__init__.py +0 -0
  549. package/samples/django-notes/notes/auth.py +14 -0
  550. package/samples/django-notes/notes/migrations/0001_initial.py +19 -0
  551. package/samples/django-notes/notes/migrations/__init__.py +0 -0
  552. package/samples/django-notes/notes/models.py +13 -0
  553. package/samples/django-notes/notes/views.py +33 -0
  554. package/samples/django-notes/notesite/__init__.py +0 -0
  555. package/samples/django-notes/notesite/settings.py +17 -0
  556. package/samples/django-notes/notesite/urls.py +9 -0
  557. package/samples/django-notes/requirements.txt +1 -0
  558. package/samples/django-notes/tracegrove/notes/crud.flow.yaml +27 -0
  559. package/samples/django-notes/tracegrove.config.yaml +7 -0
  560. package/samples/fastapi-notes/app/__init__.py +0 -0
  561. package/samples/fastapi-notes/app/main.py +69 -0
  562. package/samples/fastapi-notes/requirements.txt +2 -0
  563. package/samples/fastapi-notes/tracegrove/notes/crud.flow.yaml +27 -0
  564. package/samples/fastapi-notes/tracegrove.config.yaml +8 -0
  565. package/samples/notes-api/app/app.mjs +67 -0
  566. package/samples/notes-api/app/http.mjs +16 -0
  567. package/samples/notes-api/tracegrove/fixtures/existing-note.fixture.yaml +12 -0
  568. package/samples/notes-api/tracegrove/notes/create-read-delete.flow.yaml +35 -0
  569. package/samples/notes-api/tracegrove/notes/list.flow.yaml +25 -0
  570. package/samples/notes-api/tracegrove.config.yaml +15 -0
  571. package/samples/notes-api/verification/actions/notes.registry.yaml +6 -0
  572. package/samples/notes-api/verification/auth/host-issued-owner.yaml +6 -0
  573. package/samples/notes-api/verification/cases/notes.contract.yaml +51 -0
  574. package/samples/notes-api/verification/cases/notes.create.yaml +123 -0
  575. package/samples/notes-api/verification/cases/notes.suite.yaml +5 -0
  576. package/samples/notes-api/verification/components/notes-api-stub.profile.yaml +8 -0
  577. package/samples/notes-api/verification/components/notes-api.profile.yaml +15 -0
  578. package/samples/notes-api/verification/environments/local-notes.yaml +11 -0
  579. package/samples/notes-api/verification/environments/mock-notes.yaml +11 -0
  580. package/samples/notes-api/verification/fidelity/full-live-sandbox.yaml +7 -0
  581. package/samples/notes-api/verification/fidelity/mock-contract.yaml +6 -0
  582. package/samples/notes-api/verification/fixtures/existing-note.payload.yaml +15 -0
  583. package/samples/notes-api/verification/fixtures/existing-note.plan.yaml +9 -0
  584. package/samples/notes-api/verification/fixtures/existing-note.recipe.yaml +29 -0
  585. package/samples/notes-api/verification/hosts/local-process.yaml +27 -0
  586. package/samples/notes-api/verification/hosts/mock-loopback.yaml +14 -0
  587. package/samples/notes-api/verification/mocks/notes.responses.yaml +5 -0
  588. package/samples/notes-api/verification/personas/owner.yaml +16 -0
  589. package/samples/notes-api/verification/policies/no-authoring-inference.yaml +10 -0
  590. package/samples/notes-api/verification/runners/http.yaml +5 -0
  591. package/samples/notes-api/verification/surfaces/http-api.binding.yaml +11 -0
  592. package/samples/notes-api/verification/surfaces/http-api.pack.yaml +7 -0
  593. package/samples/notes-api/verification/workflow.yaml +27 -0
  594. package/samples/notes-browser/tracegrove/notes/browser.flow.yaml +19 -0
  595. package/samples/notes-browser/verification/cases/notes.browser.yaml +63 -0
  596. package/samples/notes-browser/verification/cases/notes.suite.yaml +4 -0
  597. package/samples/notes-browser/verification/runners/http.yaml +5 -0
  598. package/samples/notes-browser/verification/surfaces/http-api.binding.yaml +11 -0
  599. package/samples/notes-browser/verification/surfaces/http-api.pack.yaml +7 -0
  600. package/samples/notes-django/README.md +21 -0
  601. package/samples/notes-django/app/django_app.py +119 -0
  602. package/samples/notes-django/app/requirements.lock +4 -0
  603. package/samples/notes-mcp/app/mcp.mjs +47 -0
  604. package/samples/notes-mcp/tracegrove/notes.flow.yaml +20 -0
  605. package/samples/notes-mcp/tracegrove.config.yaml +13 -0
  606. package/samples/report-jobs/README.md +30 -0
  607. package/samples/report-jobs/app/jobs-api.mjs +65 -0
  608. package/samples/report-jobs/app/native-bridge.mjs +30 -0
  609. package/samples/report-jobs/app/store.mjs +74 -0
  610. package/samples/report-jobs/app/worker.mjs +22 -0
  611. package/samples/report-jobs/tracegrove/fixtures/failed-job.fixture.yaml +12 -0
  612. package/samples/report-jobs/tracegrove/fixtures/held-job.fixture.yaml +12 -0
  613. package/samples/report-jobs/tracegrove/fixtures/success-job.fixture.yaml +12 -0
  614. package/samples/report-jobs/tracegrove/reports/cancellation.flow.yaml +15 -0
  615. package/samples/report-jobs/tracegrove/reports/completion.flow.yaml +31 -0
  616. package/samples/report-jobs/tracegrove/reports/failure.flow.yaml +12 -0
  617. package/samples/report-jobs/tracegrove.config.yaml +10 -0
  618. package/samples/report-native/README.md +11 -0
  619. package/samples/report-native/tracegrove/cancellation.flow.yaml +11 -0
  620. package/samples/report-native/tracegrove/completion.flow.yaml +22 -0
  621. package/samples/report-native/tracegrove/failure.flow.yaml +7 -0
  622. package/samples/report-native/tracegrove.config.yaml +11 -0
  623. package/schema/tracegrove_cli-error_v1.json +156 -0
  624. package/schema/tracegrove_config_v1.json +233 -0
  625. package/schema/tracegrove_fixture_v1.json +297 -0
  626. package/schema/tracegrove_flow_v1.json +960 -0
  627. package/schema/tracegrove_recovery-status_v1.json +234 -0
  628. package/schema/tracegrove_run-video_v1.json +25 -0
  629. package/schema/workflow_action-registry_v1.json +303 -0
  630. package/schema/workflow_auth-recipe_v1.json +146 -0
  631. package/schema/workflow_boundary-observation_v1.json +515 -0
  632. package/schema/workflow_browser-command_v1.json +292 -0
  633. package/schema/workflow_browser-locator_v1.json +74 -0
  634. package/schema/workflow_browser-network-observation_v1.json +48 -0
  635. package/schema/workflow_browser-observation_v1.json +53 -0
  636. package/schema/workflow_budget-reservation_v1.json +150 -0
  637. package/schema/workflow_campaign-result_v1.json +382 -0
  638. package/schema/workflow_capability-artifact-manifest_v1.json +529 -0
  639. package/schema/workflow_capability-descriptor_v1.json +351 -0
  640. package/schema/workflow_capability-lifecycle-checkpoint_v1.json +510 -0
  641. package/schema/workflow_capability-observation_v1.json +1707 -0
  642. package/schema/workflow_capability-operation_v1.json +3212 -0
  643. package/schema/workflow_capability-replay-plan_v1.json +1247 -0
  644. package/schema/workflow_capability-retry-policy_v1.json +39 -0
  645. package/schema/workflow_capability-retry-state_v1.json +242 -0
  646. package/schema/workflow_case_v1.json +4222 -0
  647. package/schema/workflow_change-model_v1.json +614 -0
  648. package/schema/workflow_cleanup-expectation_v1.json +108 -0
  649. package/schema/workflow_cleanup-followup_v1.json +145 -0
  650. package/schema/workflow_component-profile_v1.json +219 -0
  651. package/schema/workflow_config_v1.json +180 -0
  652. package/schema/workflow_corpus_v1.json +172 -0
  653. package/schema/workflow_cost-observation_v1.json +366 -0
  654. package/schema/workflow_credential-lease_v1.json +222 -0
  655. package/schema/workflow_effective-config_v1.json +214 -0
  656. package/schema/workflow_environment-plan_v1.json +445 -0
  657. package/schema/workflow_environment_v1.json +1827 -0
  658. package/schema/workflow_evidence-projection_v1.json +636 -0
  659. package/schema/workflow_execution_v1.json +4086 -0
  660. package/schema/workflow_fidelity-plan_v1.json +512 -0
  661. package/schema/workflow_fidelity-profile_v1.json +396 -0
  662. package/schema/workflow_fixture-manifest_v1.json +918 -0
  663. package/schema/workflow_fixture-plan_v1.json +594 -0
  664. package/schema/workflow_git-source-request_v1.json +124 -0
  665. package/schema/workflow_git-source-resolution_v1.json +660 -0
  666. package/schema/workflow_git-source-snapshot_v1.json +287 -0
  667. package/schema/workflow_host-lease_v1.json +321 -0
  668. package/schema/workflow_host-observation_v1.json +282 -0
  669. package/schema/workflow_host-plan_v1.json +719 -0
  670. package/schema/workflow_identity-attestation_v1.json +412 -0
  671. package/schema/workflow_intelligence-policy_v1.json +153 -0
  672. package/schema/workflow_logical-payload_v1.json +206 -0
  673. package/schema/workflow_mcp-tool-call_v1.json +70 -0
  674. package/schema/workflow_mcp-tool-observation_v1.json +125 -0
  675. package/schema/workflow_mock-responses_v1.json +185 -0
  676. package/schema/workflow_native-job-action_v1.json +123 -0
  677. package/schema/workflow_native-job-observation_v1.json +138 -0
  678. package/schema/workflow_native-job-ready_v1.json +31 -0
  679. package/schema/workflow_native-job-request_v1.json +155 -0
  680. package/schema/workflow_native-job-response_v1.json +125 -0
  681. package/schema/workflow_ownership_v1.json +116 -0
  682. package/schema/workflow_persona_v1.json +499 -0
  683. package/schema/workflow_plan-edit-projection_v1.json +152 -0
  684. package/schema/workflow_plan-review_v1.json +246 -0
  685. package/schema/workflow_portable-environment-intent_v1.json +499 -0
  686. package/schema/workflow_portable-environment-profile_v1.json +1429 -0
  687. package/schema/workflow_portable-preflight_v1.json +2281 -0
  688. package/schema/workflow_qualification-admission_v1.json +467 -0
  689. package/schema/workflow_qualification-intent_v1.json +98 -0
  690. package/schema/workflow_qualification-policy_v1.json +109 -0
  691. package/schema/workflow_qualification-round_v1.json +226 -0
  692. package/schema/workflow_replay-assessment_v1.json +197 -0
  693. package/schema/workflow_replay-finding_v1.json +147 -0
  694. package/schema/workflow_request_v1.json +1567 -0
  695. package/schema/workflow_result-ingest_v1.json +343 -0
  696. package/schema/workflow_revisions_v1.json +334 -0
  697. package/schema/workflow_routing-decision_v1.json +482 -0
  698. package/schema/workflow_runner-capabilities_v1.json +316 -0
  699. package/schema/workflow_runner-profile_v1.json +119 -0
  700. package/schema/workflow_runner-protocol_v1_host.json +382 -0
  701. package/schema/workflow_runner-protocol_v1_plugin.json +491 -0
  702. package/schema/workflow_scenario-activation-intent_v1.json +346 -0
  703. package/schema/workflow_scenario-activation_v1.json +562 -0
  704. package/schema/workflow_scenario-projection_v1.json +221 -0
  705. package/schema/workflow_scenario-promotion_v1.json +455 -0
  706. package/schema/workflow_scenario-replay-assessment_v1.json +696 -0
  707. package/schema/workflow_scenario-revision-token_v1.json +115 -0
  708. package/schema/workflow_scenario-structure_v1.json +368 -0
  709. package/schema/workflow_scenario_v1.json +401 -0
  710. package/schema/workflow_scoped-resource_v1.json +550 -0
  711. package/schema/workflow_seed-recipe_v1.json +724 -0
  712. package/schema/workflow_selection_v1.json +1108 -0
  713. package/schema/workflow_signed-cleanup-followup_v1.json +175 -0
  714. package/schema/workflow_source-plan_v1.json +756 -0
  715. package/schema/workflow_source-selection_v1.json +456 -0
  716. package/schema/workflow_source-validation_v1.json +366 -0
  717. package/schema/workflow_step-event_v1.json +228 -0
  718. package/schema/workflow_stream-transcript_v1.json +1030 -0
  719. package/schema/workflow_suite_v1.json +64 -0
  720. package/schema/workflow_surface-binding_v1.json +411 -0
  721. package/schema/workflow_surface-pack_v1.json +159 -0
@@ -0,0 +1,199 @@
1
+ {
2
+ "schemaVersion": "workflow.portable-environment-profile/v1",
3
+ "ref": {
4
+ "id": "example.profile.alongside_runner",
5
+ "revision": "1",
6
+ "digest": {
7
+ "algorithm": "sha256",
8
+ "hex": "e4996a6cd34d28fdecc35d1b6fbef4b7e38301c7133137a43d833d1833e53e56"
9
+ }
10
+ },
11
+ "scope": {
12
+ "ownerId": "example.owner",
13
+ "tenantId": null,
14
+ "visibility": "owner_private"
15
+ },
16
+ "sourceSelectionRef": {
17
+ "id": "example.source-selection",
18
+ "revision": "1",
19
+ "digest": {
20
+ "algorithm": "sha256",
21
+ "hex": "ab392664423be621da6bb048313f6531356bd96333edb3938dce0b97cad0f277"
22
+ }
23
+ },
24
+ "buildRef": {
25
+ "id": "example.build",
26
+ "revision": "1",
27
+ "digest": {
28
+ "algorithm": "sha256",
29
+ "hex": "7e261d3ba9878d05db4c5c6baa3e4a2db1a584c3d2f5f0628b4a1c78f43f5e42"
30
+ }
31
+ },
32
+ "configurationRef": {
33
+ "id": "example.non-secret-config",
34
+ "revision": "1",
35
+ "digest": {
36
+ "algorithm": "sha256",
37
+ "hex": "74afc8ef6b145b02ec9bb478dfdefdadb225fc6f7c6a729760b525ca83476e55"
38
+ }
39
+ },
40
+ "target": {
41
+ "mode": "alongside_runner",
42
+ "workspaceRef": {
43
+ "id": "example.workspace",
44
+ "revision": "1",
45
+ "digest": {
46
+ "algorithm": "sha256",
47
+ "hex": "8e1f432465350d78268d8b77cee90f0715de9e46a650df4235f2a74894fa52b1"
48
+ }
49
+ },
50
+ "hostPlanRef": {
51
+ "id": "example.host-plan",
52
+ "revision": "1",
53
+ "digest": {
54
+ "algorithm": "sha256",
55
+ "hex": "bc6a1e45f33b36d86dbce570145d739f81e757d620e6a973f641905ad11aff21"
56
+ }
57
+ },
58
+ "launchRecipeRef": {
59
+ "id": "example.launch-recipe",
60
+ "revision": "1",
61
+ "digest": {
62
+ "algorithm": "sha256",
63
+ "hex": "ea08051425f1b814abb6bc69d036429beb70df5b2a142f94bd1dcfe3df7cabd4"
64
+ }
65
+ }
66
+ },
67
+ "endpoints": [
68
+ {
69
+ "id": "app",
70
+ "resolverRef": {
71
+ "id": "example.app-endpoint",
72
+ "revision": "1",
73
+ "digest": {
74
+ "algorithm": "sha256",
75
+ "hex": "a6b3d24ad9a0af002a55a8ac10805e763bedd7b3e5fc0a714a3d59fecc129b81"
76
+ }
77
+ },
78
+ "source": "launch_reported"
79
+ }
80
+ ],
81
+ "readiness": {
82
+ "endpointId": "app",
83
+ "path": "/health",
84
+ "method": "GET",
85
+ "expectedStatus": 200,
86
+ "timeoutMs": 20000
87
+ },
88
+ "capabilities": [
89
+ {
90
+ "id": "surface.http",
91
+ "version": 1,
92
+ "required": true
93
+ }
94
+ ],
95
+ "dependencyPlanRefs": [],
96
+ "personaCredentials": [
97
+ {
98
+ "personaRef": {
99
+ "id": "example.persona.owner",
100
+ "revision": "1",
101
+ "digest": {
102
+ "algorithm": "sha256",
103
+ "hex": "6e993a3445b5165be1d544736fadaa7d46d65c63d07ed71b1552bb51a5bd0813"
104
+ }
105
+ },
106
+ "secretRef": {
107
+ "id": "example.app-persona-credential",
108
+ "revision": "1",
109
+ "digest": {
110
+ "algorithm": "sha256",
111
+ "hex": "e90cf65d59c84838c7dd77bec933794873024e2c93cf8252a4079e494a04c4f8"
112
+ }
113
+ }
114
+ }
115
+ ],
116
+ "executionPolicyRef": {
117
+ "id": "example.execution-policy",
118
+ "revision": "1",
119
+ "digest": {
120
+ "algorithm": "sha256",
121
+ "hex": "f5150e48ea518c445afe198f0c7d643b4645faaeb4fe3d6d007d79209dc4de59"
122
+ }
123
+ },
124
+ "executionSecretRefs": [],
125
+ "network": {
126
+ "policyRef": {
127
+ "id": "example.network-policy",
128
+ "revision": "1",
129
+ "digest": {
130
+ "algorithm": "sha256",
131
+ "hex": "858db25db4c84793dd49f8bce7d12c9900326669c502880e1f5267895119efd2"
132
+ }
133
+ },
134
+ "enforcement": "host",
135
+ "inbound": "loopback_only",
136
+ "egress": "explicit_allowlist",
137
+ "allowedEndpointIds": [
138
+ "app"
139
+ ]
140
+ },
141
+ "data": {
142
+ "mode": "none"
143
+ },
144
+ "ownership": {
145
+ "leasePolicyRef": {
146
+ "id": "example.lease-policy",
147
+ "revision": "1",
148
+ "digest": {
149
+ "algorithm": "sha256",
150
+ "hex": "0cc0aa82f73b5bf800d872d90a515772246e60a1f26c0b827c823a1256afb26d"
151
+ }
152
+ },
153
+ "cleanupPlanRef": {
154
+ "id": "example.cleanup-plan",
155
+ "revision": "1",
156
+ "digest": {
157
+ "algorithm": "sha256",
158
+ "hex": "af70f7ee71e47a2ba88e31da4d90bcf0cd8a991cb24b937245704f17d5f6b1db"
159
+ }
160
+ },
161
+ "cleanupReserveMs": 10000
162
+ },
163
+ "artifacts": {
164
+ "destinationRef": {
165
+ "id": "example.artifact-destination",
166
+ "revision": "1",
167
+ "digest": {
168
+ "algorithm": "sha256",
169
+ "hex": "86b317ba249de72c702be4390a57b7bcd090aa5fdb086fe16e64479efa4f9fca"
170
+ }
171
+ },
172
+ "durability": "export_required",
173
+ "redactionPolicyRef": {
174
+ "id": "example.redaction-policy",
175
+ "revision": "1",
176
+ "digest": {
177
+ "algorithm": "sha256",
178
+ "hex": "ebe43b36aeba3427ee4be196757f1cc3d4acb47c34f02928f40ed0cf008d0a8c"
179
+ }
180
+ },
181
+ "retentionMs": 86400000,
182
+ "maxBytes": 16777216
183
+ },
184
+ "limits": {
185
+ "wallMs": 120000,
186
+ "cpu": 1,
187
+ "memoryMb": 1024,
188
+ "diskMb": 256,
189
+ "maxRequests": 100,
190
+ "maxBrowserActions": 0,
191
+ "maxProviderCalls": 0,
192
+ "maxAgentCalls": 0,
193
+ "maxSpendCents": 0
194
+ },
195
+ "allowedReplayModes": [
196
+ "fresh_execution",
197
+ "evidence_playback"
198
+ ]
199
+ }
@@ -0,0 +1,183 @@
1
+ {
2
+ "schemaVersion": "workflow.portable-environment-profile/v1",
3
+ "ref": {
4
+ "id": "example.profile.external_staging",
5
+ "revision": "1",
6
+ "digest": {
7
+ "algorithm": "sha256",
8
+ "hex": "ce613297287d6c80046cf21ea9439ec5cecbd01db2facba9cdd0721e89af5045"
9
+ }
10
+ },
11
+ "scope": {
12
+ "ownerId": "example.owner",
13
+ "tenantId": null,
14
+ "visibility": "owner_private"
15
+ },
16
+ "sourceSelectionRef": {
17
+ "id": "example.source-selection",
18
+ "revision": "1",
19
+ "digest": {
20
+ "algorithm": "sha256",
21
+ "hex": "ab392664423be621da6bb048313f6531356bd96333edb3938dce0b97cad0f277"
22
+ }
23
+ },
24
+ "buildRef": {
25
+ "id": "example.build",
26
+ "revision": "1",
27
+ "digest": {
28
+ "algorithm": "sha256",
29
+ "hex": "7e261d3ba9878d05db4c5c6baa3e4a2db1a584c3d2f5f0628b4a1c78f43f5e42"
30
+ }
31
+ },
32
+ "configurationRef": {
33
+ "id": "example.non-secret-config",
34
+ "revision": "1",
35
+ "digest": {
36
+ "algorithm": "sha256",
37
+ "hex": "74afc8ef6b145b02ec9bb478dfdefdadb225fc6f7c6a729760b525ca83476e55"
38
+ }
39
+ },
40
+ "target": {
41
+ "mode": "external_staging",
42
+ "deploymentRef": {
43
+ "id": "example.deployment",
44
+ "revision": "1",
45
+ "digest": {
46
+ "algorithm": "sha256",
47
+ "hex": "8076c13e2f647e540083550833a8160c5e089fb199c9453ab5aecd598c9228fb"
48
+ }
49
+ }
50
+ },
51
+ "endpoints": [
52
+ {
53
+ "id": "app",
54
+ "resolverRef": {
55
+ "id": "example.app-endpoint",
56
+ "revision": "1",
57
+ "digest": {
58
+ "algorithm": "sha256",
59
+ "hex": "a6b3d24ad9a0af002a55a8ac10805e763bedd7b3e5fc0a714a3d59fecc129b81"
60
+ }
61
+ },
62
+ "source": "external_deployment"
63
+ }
64
+ ],
65
+ "readiness": {
66
+ "endpointId": "app",
67
+ "path": "/health",
68
+ "method": "GET",
69
+ "expectedStatus": 200,
70
+ "timeoutMs": 20000
71
+ },
72
+ "capabilities": [
73
+ {
74
+ "id": "surface.http",
75
+ "version": 1,
76
+ "required": true
77
+ }
78
+ ],
79
+ "dependencyPlanRefs": [],
80
+ "personaCredentials": [
81
+ {
82
+ "personaRef": {
83
+ "id": "example.persona.owner",
84
+ "revision": "1",
85
+ "digest": {
86
+ "algorithm": "sha256",
87
+ "hex": "6e993a3445b5165be1d544736fadaa7d46d65c63d07ed71b1552bb51a5bd0813"
88
+ }
89
+ },
90
+ "secretRef": {
91
+ "id": "example.app-persona-credential",
92
+ "revision": "1",
93
+ "digest": {
94
+ "algorithm": "sha256",
95
+ "hex": "e90cf65d59c84838c7dd77bec933794873024e2c93cf8252a4079e494a04c4f8"
96
+ }
97
+ }
98
+ }
99
+ ],
100
+ "executionPolicyRef": {
101
+ "id": "example.execution-policy",
102
+ "revision": "1",
103
+ "digest": {
104
+ "algorithm": "sha256",
105
+ "hex": "f5150e48ea518c445afe198f0c7d643b4645faaeb4fe3d6d007d79209dc4de59"
106
+ }
107
+ },
108
+ "executionSecretRefs": [],
109
+ "network": {
110
+ "policyRef": {
111
+ "id": "example.network-policy",
112
+ "revision": "1",
113
+ "digest": {
114
+ "algorithm": "sha256",
115
+ "hex": "858db25db4c84793dd49f8bce7d12c9900326669c502880e1f5267895119efd2"
116
+ }
117
+ },
118
+ "enforcement": "host",
119
+ "inbound": "none",
120
+ "egress": "explicit_allowlist",
121
+ "allowedEndpointIds": [
122
+ "app"
123
+ ]
124
+ },
125
+ "data": {
126
+ "mode": "none"
127
+ },
128
+ "ownership": {
129
+ "leasePolicyRef": {
130
+ "id": "example.lease-policy",
131
+ "revision": "1",
132
+ "digest": {
133
+ "algorithm": "sha256",
134
+ "hex": "0cc0aa82f73b5bf800d872d90a515772246e60a1f26c0b827c823a1256afb26d"
135
+ }
136
+ },
137
+ "cleanupPlanRef": {
138
+ "id": "example.cleanup-plan",
139
+ "revision": "1",
140
+ "digest": {
141
+ "algorithm": "sha256",
142
+ "hex": "af70f7ee71e47a2ba88e31da4d90bcf0cd8a991cb24b937245704f17d5f6b1db"
143
+ }
144
+ },
145
+ "cleanupReserveMs": 10000
146
+ },
147
+ "artifacts": {
148
+ "destinationRef": {
149
+ "id": "example.artifact-destination",
150
+ "revision": "1",
151
+ "digest": {
152
+ "algorithm": "sha256",
153
+ "hex": "86b317ba249de72c702be4390a57b7bcd090aa5fdb086fe16e64479efa4f9fca"
154
+ }
155
+ },
156
+ "durability": "export_required",
157
+ "redactionPolicyRef": {
158
+ "id": "example.redaction-policy",
159
+ "revision": "1",
160
+ "digest": {
161
+ "algorithm": "sha256",
162
+ "hex": "ebe43b36aeba3427ee4be196757f1cc3d4acb47c34f02928f40ed0cf008d0a8c"
163
+ }
164
+ },
165
+ "retentionMs": 86400000,
166
+ "maxBytes": 16777216
167
+ },
168
+ "limits": {
169
+ "wallMs": 120000,
170
+ "cpu": 1,
171
+ "memoryMb": 1024,
172
+ "diskMb": 256,
173
+ "maxRequests": 100,
174
+ "maxBrowserActions": 0,
175
+ "maxProviderCalls": 0,
176
+ "maxAgentCalls": 0,
177
+ "maxSpendCents": 0
178
+ },
179
+ "allowedReplayModes": [
180
+ "fresh_execution",
181
+ "evidence_playback"
182
+ ]
183
+ }
@@ -0,0 +1,100 @@
1
+ # Git object checks for pinned snapshots
2
+
3
+ New `materializeGitSnapshot` outputs include the raw commit/tree object proof and each
4
+ file's Git blob identity. The resolver reads immutable Git objects with its existing
5
+ restricted environment; materialization verifies the complete proof before creating
6
+ an output directory. No fetch, checkout, helper, signature verification or application
7
+ execution is added.
8
+
9
+ `verifyGitSnapshotCommit(snapshot, files)` independently hashes every actual file as a
10
+ Git blob, checks paths and modes against the complete raw tree closure, and hashes that
11
+ tree/commit chain against the selected commit. Both SHA-1 and SHA-256 object formats
12
+ are supported. Its observation has `verification: actual_file_bytes` and binds the
13
+ computed commit, root tree, object algorithm and proof digest. It needs captured bytes
14
+ and proof objects and captures each supplied file buffer once before both hash checks,
15
+ so it continues to work after the Git store and source directory
16
+ are unavailable.
17
+
18
+ ```ts
19
+ const files = readGitSnapshotTree(snapshot, sourceRoot);
20
+ const observed = verifyGitSnapshotCommit(snapshot, files);
21
+ ```
22
+
23
+ `verifyGitSnapshotProofMetadata(snapshot)` checks object/manifest links without reading
24
+ source files. Its distinct `verification: object_links_only` result is not a runtime
25
+ observation. A resealed manifest could pair a new SHA-256 file checksum with an old Git
26
+ blob ID; metadata alone cannot prove that association. Actual-file verification rejects
27
+ it even when the new checksums and manifest seal agree.
28
+
29
+ ## Launch and saved evidence
30
+
31
+ Snapshot reads now verify object proofs when present. The trusted supervisor copies the
32
+ pinned files into its owned tree and verifies the private copy again before launching
33
+ the application. It sends the computed Git observation over its existing IPC channel.
34
+ The parent refuses missing/mismatched observations for proof-bearing snapshots, and
35
+ the sealed identity attestation records the observed fields. The application cannot
36
+ establish this observation through its health response.
37
+
38
+ Saved-bundle verification checks the proof's metadata, snapshot ref, component file
39
+ closure and recorded Git observation after the private launch directory is removed.
40
+ It does not regain the full source bytes from that observation. Authenticating the host
41
+ and its runtime file measurements remains the issuer's job. Existing proof-less snapshots
42
+ remain component-only and receive no Git observation. Repository binding is a separate,
43
+ explicit option described below; remote ownership and dependency-install provenance are
44
+ not inferred from Git object hashes.
45
+
46
+ ## Bind a repository role
47
+
48
+ Materialization also saves a sealed `resolution.json` next to `snapshot.json`. To connect
49
+ the selected resolver head to a repository role:
50
+
51
+ ```sh
52
+ tracegrove test --config ./head/source/tracegrove.config.yaml \
53
+ --source-snapshot ./head/snapshot.json --source-repository-role application
54
+ ```
55
+
56
+ The same flags work with `compile`. Compilation verifies the complete source tree,
57
+ checks the sealed resolution sidecar against the snapshot, and emits `SourceSelection`,
58
+ the original `RevisionMatrix`, and snapshot documents in the normal frozen corpus. The
59
+ planner binds that selection to the request and every cell. Existing component-only
60
+ snapshot runs do not change unless a repository role is provided. Old snapshots can
61
+ be rematerialized to obtain a sidecar; no network access is required.
62
+
63
+ The descriptor uses `urn:tracegrove:git-object:<algorithm>:<commit>` and origin
64
+ `snapshot_bundle`. It identifies the actual Git object, not ownership of a GitHub URL.
65
+ `requestedRef` in the target is the immutable commit; `requestedExpression` in source
66
+ selection retains the resolver's original expression. Both Git SHA-1 and SHA-256 work.
67
+ `dirty: false` describes the supervisor's complete private pinned copy, not the checkout.
68
+
69
+ Lockfile identity v1 hashes a sorted manifest of complete pinned path, mode and SHA-256
70
+ digest for `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`,
71
+ `bun.lock`, `bun.lockb`, `uv.lock`, `poetry.lock`, `Pipfile.lock`, `Cargo.lock`, `Gemfile.lock`,
72
+ `composer.lock` and `go.sum` at any depth. No recognized lockfile produces an explicit
73
+ empty-manifest digest. This identifies pinned lockfiles; it does not establish which
74
+ dependencies were installed.
75
+
76
+ Repository observation is derived only after the supervisor's `actual_file_bytes`
77
+ observation matches the proof. Planning, execution preflight, saved-bundle checks and
78
+ revision assessment share the frozen source-closure checks. They reject different
79
+ roles, remote URLs, lockfile identities, missing closure documents and source plans
80
+ whose reviewed matrix differs. Base snapshots and multi-repository resolution sidecars
81
+ cannot use this single-head binding; companion repositories are never silently dropped.
82
+ They remain available for component-only runs until a complete multi-host binding exists.
83
+
84
+ Two independent native campaigns can now meet a revision-level local qualification
85
+ policy and activate through the durable scenario store. The tests simulate issuer and
86
+ physical-lease authority explicitly. This does not establish hosted issuer trust, live
87
+ staging coverage, remote repository ownership, or a reviewed-source promotion by itself.
88
+
89
+ Proofs fail on missing or duplicate trees, unrelated objects, malformed/canonicalization
90
+ errors, changed file/object/mode bindings, incomplete actual file coverage and unsupported
91
+ tree entries. Symlinks, submodules, empty Git directories and nonportable paths cannot
92
+ be silently omitted. Prototype bounds are 1 MiB per commit, 4 MiB per tree, 8 MiB total
93
+ tree bytes, 8,192 distinct trees and 20,000 traversal entries, in addition to the existing
94
+ 10,000-file/32 MiB snapshot bound. Unsupported coverage blocks instead of truncating it.
95
+
96
+ Tests use real SHA-1/SHA-256 repositories, binary files and reused subtrees; remove the
97
+ Git/source paths before pure verification; and exercise resealed forged commits, trees,
98
+ files and runtime attestations. Native pinned launches and independent bundle reads
99
+ verify the observation path. These are local integrity/runtime facts, not hosted issuer
100
+ authentication, author identity, a signed release or remote repository ownership.
@@ -0,0 +1,133 @@
1
+ # Immutable Git source resolution
2
+
3
+ `workflow-verify source-resolve --input repositories.json --output source.json --json` freezes explicit local base/head selections across repositories. It exports a sealed owner-private source-resolution document containing the `RevisionMatrix`, full binary-capable diffs, changed paths and before/after blob bytes. Exit zero means source resolution succeeded; it is not a case review, execution verdict or deployment proof.
4
+
5
+ Create a local request using the public typed SDK (the repository reference below is a local label, not a registered remote identity):
6
+
7
+ ```js
8
+ import { writeFileSync } from 'node:fs';
9
+ import { localScope, digestOfValue } from 'workflow-verify';
10
+
11
+ writeFileSync('repositories.json', JSON.stringify({
12
+ scope: localScope(),
13
+ repositories: [{
14
+ repositoryRef: { id: 'application', revision: '1',
15
+ digest: digestOfValue({ kind: 'local-git-binding', name: 'application' }) },
16
+ root: '.', base: 'HEAD~1', head: 'HEAD',
17
+ }],
18
+ }, null, 2), { flag: 'wx', mode: 0o600 });
19
+ ```
20
+
21
+ Roots in CLI requests resolve relative to the request file. Library callers supply their own trusted local mappings. Both worktrees and bare repositories are supported; selecting a nested directory cannot silently bind its parent repository. The CLI accepts only the process's `localScope()` and writes new output files privately without overwriting existing evidence. Public JSON schemas include the Git request and resolution contracts.
22
+
23
+ `resolveGitSources(request, authorize)` requires a trusted host authorization callback before reading each repository. `GitSourceReader(matrix, bindings, authorize)` implements citation object reads and full-diff reads after restart. Bindings contain only `repositoryRef` and `root`; they do not re-resolve branch expressions. A reader refuses another scope/repository, substituted matrix rows, unavailable objects and changed full-diff bytes. Citation validation still checks exact file/excerpt digests. A later dirty checkout or moved branch does not change the selected immutable commit identities.
24
+
25
+ Git invocation uses argument arrays and [documented end-of-options handling](https://git-scm.com/docs/git-rev-parse), reads commit objects rather than worktree files, and disables replacement objects, inherited Git routing variables, external diff/text-conversion helpers, terminal prompts and lazy fetching. [Git's diff options](https://git-scm.com/docs/git-diff) define the helper exclusions. Selected commits and their tree closure are checked against Git object hashes; captured/read blobs are rehashed independently too. SHA-1 and SHA-256 Git object IDs are preserved in full. This does not create an authenticated issuer or attest a remote repository or deployed target; the host owns the Git executable, source mappings, protected object storage and admission policy.
26
+
27
+ No fetch, checkout, model call or review approval occurs. Missing or multiple merge bases block until a registered alternative revision policy exists; an empty base is never invented. Renames are represented as deletion/addition with detection disabled. Changed symlinks, submodules, unsupported paths/modes, oversized blobs and incomplete output block instead of dropping coverage.
28
+
29
+ Bounds: 32 repositories, 500 changed paths, 1 MiB per captured/cited blob, 4 MiB per full diff/tree listing/tree object, 8,192 trees per selected commit, 32 MiB of captured payload bytes and ten seconds per Git command. CLI input is at most 256 KiB. The artifact includes changed blobs and full diffs, not every source object: later citation reads require the selected objects in an authorized Git store. Full source-object transport remains separate work.
30
+
31
+ The output is a `RevisionMatrix`, not a complete runtime `SourceSelection` or qualified source-to-target proof. Independent element/coverage checking, reviewed source admission, hosted lifecycle storage and execution wiring remain separate gates. Tests use real temporary repositories, including dirty/moved checkouts, bare and SHA-256 repositories, corrupt objects, denied/revoked scope, missing objects, oversized blobs, configured helpers and the actual source/built CLI.
32
+
33
+ ## Run selected revisions independently
34
+
35
+ Materialize complete regular-file trees from the frozen resolution using an explicit
36
+ authorized local repository mapping. Relative `--root` paths resolve beside the
37
+ input JSON. Output directories must not exist, and their parent must already exist.
38
+
39
+ ```sh
40
+ tracegrove source-materialize --input source.json --repository application --root . --side base --output ./base-snapshot
41
+ tracegrove source-materialize --input source.json --repository application --root . --side head --output ./head-snapshot
42
+ tracegrove test --config ./base-snapshot/source/tracegrove.config.yaml --source-snapshot ./base-snapshot/snapshot.json
43
+ tracegrove test --config ./head-snapshot/source/tracegrove.config.yaml --source-snapshot ./head-snapshot/snapshot.json
44
+ ```
45
+
46
+ Each output contains `source/` and a sealed `snapshot.json` with the resolution and
47
+ repository references, exact commit, side, and every file's original Git mode,
48
+ byte count and SHA-256 digest. `materializeGitSnapshot(input, authorize)` exposes
49
+ the same operation through the SDK. Authorization runs before object reads and
50
+ again before output allocation. No fetch, checkout, dependency installation, app
51
+ execution, Git filters or hooks occur during materialization. Later `test` runs
52
+ execute trusted project code and use the ordinary compiler and app identity checks.
53
+
54
+ The reader validates the commit/tree closure and independently rehashes every blob,
55
+ including unchanged files. It refuses an empty tree, symlinks, submodules, unsupported
56
+ modes, nonportable names, case/Unicode aliases, more than 10,000 files, blobs over
57
+ 1 MiB, or more than 32 MiB of file bytes. These are complete-coverage limits: it
58
+ never silently excludes a file to make a snapshot pass. A private output is created
59
+ only after all object reads succeed; the manifest is written last, and write failure
60
+ removes only the directory this operation exclusively created. Existing output is
61
+ preserved. The host filesystem and Git executable remain trusted.
62
+
63
+ The CLI regression test creates a real authorization bug and its fix in separate
64
+ commits, freezes them, dirties the checkout and moves its branch. Separate CLI
65
+ processes run the identical saved flow against both materialized revisions: the
66
+ base fails the ownership assertion and the head passes. Both bundles are re-read
67
+ and re-reduced, app digests match the snapshot's source bytes, and cleanup is
68
+ confirmed. CI repeats this through the built distribution and retains both sealed
69
+ bundles, source trees, snapshot manifests and resolution in `source-regression-proof`.
70
+ Another process can verify those bundles or rerun either snapshot without discovery;
71
+ the artifact README gives the exact commands. Locally, set
72
+ `TRACEGROVE_SOURCE_PROOF_DIR` to a new directory when running
73
+ `tests/cliGitSnapshot.test.ts` to retain the same proof.
74
+
75
+ A snapshot is mutable after publication; its manifest describes the captured
76
+ bytes. `test` and `compile` accept `--source-snapshot` for an explicit per-command
77
+ binding. Compilation checks the manifest, local owner scope and every pinned file.
78
+ The frozen launch plan includes that binding; the trusted supervisor checks the
79
+ files again, copies only pinned inputs into its private owned workspace, and
80
+ starts the app there. Untracked files cannot enter the launch copy. Post-plan drift
81
+ in any pinned file, including files outside the entrypoint's source glob, blocks
82
+ startup. The supervisor owns and removes the private copy after stop, startup
83
+ failure or controlling-client disconnect.
84
+
85
+ Pinned launches support the Node file, FastAPI module and canonical Django launch
86
+ templates. Opaque eval/shell wrappers and entrypoints outside the snapshot are
87
+ refused. The attestation binds the supervisor-computed source digest and snapshot
88
+ reference; saved-bundle verification rechecks the exact file closure and manifest
89
+ digests. Dependency installations, interpreter binaries and application environment
90
+ remain separately supplied inputs; this is not a process sandbox or a complete
91
+ dependency attestation. The CLI refuses snapshots from another local scope.
92
+
93
+ New snapshots carry [Git object proofs](git-object-proof.md). The supervisor checks the
94
+ actual private tree against blob/tree/commit object identities and records that fact.
95
+ Metadata-only checks remain distinct from actual-file verification. A self-sealed
96
+ manifest does not prove who resolved its commit, remote repository ownership or deployed
97
+ identity. This is not a runtime `SourceSelection`. The host does not yet populate repository observations
98
+ or promote qualification from this manifest. Authenticated resolver/admission
99
+ policy, reviewed lifecycle execution and hosted activation remain separate work.
100
+
101
+ ## Keep scenarios in one workbench
102
+
103
+ Application input can be selected independently of the config and saved flows.
104
+ `app.root` is resolved inside the selected snapshot; flows, personas and config
105
+ continue to come from the workbench. No team config rewrite is needed.
106
+
107
+ ```sh
108
+ tracegrove settings --dir ./workbench --source-snapshot ./snapshots/head/snapshot.json
109
+ tracegrove test --config ./workbench/tracegrove.config.yaml
110
+ tracegrove settings --dir ./workbench --working-tree
111
+ ```
112
+
113
+ The CLI snapshot path is relative to the calling directory, as with the existing
114
+ one-run `test --source-snapshot` override. The saved path is relative to the
115
+ workbench. An explicit one-run override takes precedence over the saved choice.
116
+ Settings preserves the agent/model/budget preferences and rejects conflicting
117
+ input switches before writing any preference.
118
+
119
+ Grove's **Settings → Verification input** offers **Check snapshot** before
120
+ **Use this snapshot**. Checking reads and validates bytes and the launch template;
121
+ it launches no application and writes no compile output. Saving records the
122
+ manifest's exact reference. Replacing the manifest or changing a pinned file
123
+ blocks runs until reviewed again; there is no automatic fallback to working tree.
124
+ **Use working tree** clears the local selection without deleting a snapshot.
125
+
126
+ The Run page separates **Next run input** from **Recorded run request**. The latter
127
+ is reconstructed from the frozen host plans in re-verified saved evidence, even
128
+ after a preference change. Unreadable or inconsistent evidence shows unavailable,
129
+ never the current default. A recorded request describes local inputs; it does
130
+ not establish that an application successfully launched or grant hosted qualification.
131
+ Discovery's branch selector only scans routes and does not change run input.
132
+ Python dependencies may be supplied by the workbench's `.venv` or explicit
133
+ `app.python`; neither dependencies nor environment are sealed by the source pin.
Binary file