@mnstry/atelier 0.2.0-alpha.11 → 0.2.0-alpha.13

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 (560) hide show
  1. package/CHANGELOG.md +1005 -0
  2. package/README.md +149 -9
  3. package/contracts/atelier-adoption-policy.v2.schema.json +55 -0
  4. package/contracts/atelier-architecture.v1.schema.json +258 -0
  5. package/contracts/atelier-boundary-delegations.v1.schema.json +161 -0
  6. package/contracts/atelier-boundary-owner-keys.v1.schema.json +98 -0
  7. package/contracts/atelier-build.v1.schema.json +1076 -0
  8. package/contracts/atelier-capability.v1.schema.json +1252 -0
  9. package/contracts/atelier-coordination.v1.schema.json +1050 -0
  10. package/contracts/atelier-evidence-navigation.v1.schema.json +603 -0
  11. package/contracts/atelier-harness.v1.schema.json +234 -0
  12. package/contracts/atelier-ingestion.v1.schema.json +806 -0
  13. package/contracts/atelier-inquiry.v1.schema.json +1772 -0
  14. package/contracts/atelier-instruction-adoption.v1.schema.json +490 -0
  15. package/contracts/atelier-interaction.v1.schema.json +553 -0
  16. package/contracts/atelier-judgment.v1.schema.json +690 -0
  17. package/contracts/atelier-knowledge.v1.schema.json +1512 -0
  18. package/contracts/atelier-learning.v1.schema.json +1095 -0
  19. package/contracts/atelier-migration.v3.schema.json +64 -0
  20. package/contracts/atelier-obsidian-generation-manifest.v2.schema.json +372 -0
  21. package/contracts/atelier-personal-workspace-manifest.v1.schema.json +87 -0
  22. package/contracts/atelier-personal-workspace-overlay.v1.schema.json +299 -0
  23. package/contracts/atelier-template-adoption.v1.schema.json +223 -0
  24. package/contracts/atelier-template-profile.v1.schema.json +1168 -0
  25. package/contracts/atelier-trackable.v1.schema.json +781 -0
  26. package/contracts/atelier-upgrade-plan.v3.schema.json +532 -0
  27. package/contracts/compat-baseline.json +1 -1
  28. package/docs/architecture.md +89 -0
  29. package/docs/assurance-controls.md +4 -3
  30. package/docs/blocks/capability-stewardship.md +17 -0
  31. package/docs/blocks/claims.md +16 -3
  32. package/docs/blocks/inquiry-harnesses.md +19 -0
  33. package/docs/blocks/learning-harnesses.md +17 -0
  34. package/docs/capability-stewardship.md +269 -0
  35. package/docs/coordination.md +51 -0
  36. package/docs/decision-practices.md +111 -0
  37. package/docs/decisions.md +29 -0
  38. package/docs/evidence-navigation.md +237 -0
  39. package/docs/exact-upgrades.md +3 -2
  40. package/docs/ingestion.md +181 -0
  41. package/docs/inquiry-harnesses.md +211 -0
  42. package/docs/install.md +80 -3
  43. package/docs/intake-and-guides.md +5 -0
  44. package/docs/integration-contract-decisions.md +24 -2
  45. package/docs/interaction-and-reflection.md +72 -0
  46. package/docs/knowledge-graph.md +20 -0
  47. package/docs/knowledge-health/api.md +30 -0
  48. package/docs/knowledge-health/assessment/api.md +96 -0
  49. package/docs/knowledge-health/assessment/capabilities.md +40 -0
  50. package/docs/knowledge-health/assessment/evaluation.md +27 -0
  51. package/docs/knowledge-health/assessment/facilitator.md +30 -0
  52. package/docs/knowledge-health/assessment/quickstart.md +61 -0
  53. package/docs/knowledge-health/assessment/troubleshooting.md +23 -0
  54. package/docs/knowledge-health/devday/facilitator.md +16 -0
  55. package/docs/knowledge-health/devday/participant-response.md +22 -0
  56. package/docs/knowledge-health/devday/public-default.md +107 -0
  57. package/docs/knowledge-health/devday/quickstart.md +18 -0
  58. package/docs/knowledge-health/devday/support.md +22 -0
  59. package/docs/knowledge-health/exercise.md +17 -0
  60. package/docs/knowledge-health/facilitator.md +20 -0
  61. package/docs/knowledge-health/quickstart.md +94 -0
  62. package/docs/knowledge-health/readme.md +15 -0
  63. package/docs/knowledge-health/support.md +34 -0
  64. package/docs/knowledge-setup.md +248 -0
  65. package/docs/knowledge-workspace.md +264 -0
  66. package/docs/learning-harnesses.md +238 -0
  67. package/docs/learning.md +215 -0
  68. package/docs/local-services.md +242 -26
  69. package/docs/obsidian-contract.md +878 -36
  70. package/docs/obsidian-plugin.md +619 -0
  71. package/docs/obsidian.md +809 -64
  72. package/docs/optional-ingestion.md +83 -0
  73. package/docs/personal-workspace.md +257 -0
  74. package/docs/practical-judgment.md +92 -0
  75. package/docs/progressive-ingestion-acceptance.md +89 -0
  76. package/docs/progressive-ingestion.md +235 -0
  77. package/docs/project-command-inventory.md +1 -0
  78. package/docs/release-engineering.md +56 -1
  79. package/docs/repo-boundary-guard.md +94 -0
  80. package/docs/research-starter-quickstart.md +66 -0
  81. package/docs/research-starter.md +114 -0
  82. package/docs/semantic-ingestion.md +198 -0
  83. package/docs/semantic-operation.md +317 -0
  84. package/docs/skill-steward.md +6 -0
  85. package/docs/template-profile.md +164 -0
  86. package/docs/template-upgrades.md +114 -0
  87. package/docs/trackables.md +111 -0
  88. package/docs/upgrade.md +68 -3
  89. package/fixtures/atelier-architecture/binding/invalid/document.json +19 -0
  90. package/fixtures/atelier-architecture/binding/valid/document.json +19 -0
  91. package/fixtures/atelier-architecture/catalog/invalid/document.json +290 -0
  92. package/fixtures/atelier-architecture/catalog/valid/document.json +343 -0
  93. package/fixtures/atelier-build-contract/attempt/invalid/document.json +20 -0
  94. package/fixtures/atelier-build-contract/attempt/valid/document.json +19 -0
  95. package/fixtures/atelier-build-contract/candidate/invalid/document.json +24 -0
  96. package/fixtures/atelier-build-contract/candidate/valid/document.json +23 -0
  97. package/fixtures/atelier-build-contract/decision/invalid/document.json +31 -0
  98. package/fixtures/atelier-build-contract/decision/valid/document.json +30 -0
  99. package/fixtures/atelier-build-contract/delivery/invalid/document.json +18 -0
  100. package/fixtures/atelier-build-contract/delivery/valid/document.json +17 -0
  101. package/fixtures/atelier-build-contract/gate/invalid/document.json +22 -0
  102. package/fixtures/atelier-build-contract/gate/valid/document.json +21 -0
  103. package/fixtures/atelier-build-contract/ledger/invalid/document.json +270 -0
  104. package/fixtures/atelier-build-contract/ledger/valid/document.json +269 -0
  105. package/fixtures/atelier-build-contract/objective/invalid/document.json +73 -0
  106. package/fixtures/atelier-build-contract/objective/valid/document.json +72 -0
  107. package/fixtures/atelier-build-contract/progress/invalid/document.json +18 -0
  108. package/fixtures/atelier-build-contract/progress/valid/document.json +17 -0
  109. package/fixtures/atelier-capability-contract/adoption/invalid/document.json +71 -0
  110. package/fixtures/atelier-capability-contract/adoption/valid/document.json +70 -0
  111. package/fixtures/atelier-capability-contract/event/invalid/document.json +18 -0
  112. package/fixtures/atelier-capability-contract/event/valid/document.json +17 -0
  113. package/fixtures/atelier-capability-contract/journal/invalid/document.json +382 -0
  114. package/fixtures/atelier-capability-contract/journal/valid/document.json +381 -0
  115. package/fixtures/atelier-capability-contract/notice/invalid/document.json +8 -0
  116. package/fixtures/atelier-capability-contract/notice/valid/document.json +7 -0
  117. package/fixtures/atelier-capability-contract/package/invalid/document.json +59 -0
  118. package/fixtures/atelier-capability-contract/package/valid/document.json +58 -0
  119. package/fixtures/atelier-capability-contract/plan/invalid/document.json +107 -0
  120. package/fixtures/atelier-capability-contract/plan/valid/document.json +106 -0
  121. package/fixtures/atelier-capability-contract/release/invalid/document.json +85 -0
  122. package/fixtures/atelier-capability-contract/release/valid/document.json +84 -0
  123. package/fixtures/atelier-capability-contract/state/invalid/document.json +316 -0
  124. package/fixtures/atelier-capability-contract/state/valid/document.json +315 -0
  125. package/fixtures/atelier-coordination/dependency/invalid/document.json +37 -0
  126. package/fixtures/atelier-coordination/dependency/valid/document.json +36 -0
  127. package/fixtures/atelier-coordination/directive/invalid/document.json +25 -0
  128. package/fixtures/atelier-coordination/directive/valid/document.json +24 -0
  129. package/fixtures/atelier-coordination/disposition/invalid/document.json +34 -0
  130. package/fixtures/atelier-coordination/disposition/valid/document.json +33 -0
  131. package/fixtures/atelier-coordination/outcome/invalid/document.json +39 -0
  132. package/fixtures/atelier-coordination/outcome/valid/document.json +38 -0
  133. package/fixtures/atelier-coordination/recovery/invalid/document.json +34 -0
  134. package/fixtures/atelier-coordination/recovery/valid/document.json +33 -0
  135. package/fixtures/atelier-harness-contract/handoff/invalid/document.json +25 -0
  136. package/fixtures/atelier-harness-contract/handoff/valid/document.json +24 -0
  137. package/fixtures/atelier-ingestion/invalid/authority.json +19 -0
  138. package/fixtures/atelier-ingestion/semantic-baseline.json +26 -0
  139. package/fixtures/atelier-ingestion/semantic-operation.json +75 -0
  140. package/fixtures/atelier-ingestion/valid/plan-input.json +18 -0
  141. package/fixtures/atelier-inquiry-contract/assessment/invalid/document.json +41 -0
  142. package/fixtures/atelier-inquiry-contract/assessment/valid/document.json +40 -0
  143. package/fixtures/atelier-inquiry-contract/bundle/invalid/document.json +51 -0
  144. package/fixtures/atelier-inquiry-contract/bundle/valid/document.json +50 -0
  145. package/fixtures/atelier-inquiry-contract/campaign/invalid/document.json +17 -0
  146. package/fixtures/atelier-inquiry-contract/campaign/valid/document.json +16 -0
  147. package/fixtures/atelier-inquiry-contract/decision/invalid/document.json +22 -0
  148. package/fixtures/atelier-inquiry-contract/decision/valid/document.json +21 -0
  149. package/fixtures/atelier-inquiry-contract/feedback/invalid/document.json +19 -0
  150. package/fixtures/atelier-inquiry-contract/feedback/valid/document.json +18 -0
  151. package/fixtures/atelier-inquiry-contract/handoff/invalid/document.json +92 -0
  152. package/fixtures/atelier-inquiry-contract/handoff/valid/document.json +91 -0
  153. package/fixtures/atelier-inquiry-contract/hypothesis/invalid/document.json +20 -0
  154. package/fixtures/atelier-inquiry-contract/hypothesis/valid/document.json +19 -0
  155. package/fixtures/atelier-inquiry-contract/ledger/invalid/document.json +680 -0
  156. package/fixtures/atelier-inquiry-contract/ledger/valid/document.json +679 -0
  157. package/fixtures/atelier-inquiry-contract/legacy-assessment/invalid/document.json +19 -0
  158. package/fixtures/atelier-inquiry-contract/legacy-assessment/valid/document.json +18 -0
  159. package/fixtures/atelier-inquiry-contract/request/invalid/document.json +50 -0
  160. package/fixtures/atelier-inquiry-contract/request/valid/document.json +49 -0
  161. package/fixtures/atelier-inquiry-contract/source/invalid/document.json +18 -0
  162. package/fixtures/atelier-inquiry-contract/source/valid/document.json +17 -0
  163. package/fixtures/atelier-inquiry-contract/withdrawal/invalid/document.json +16 -0
  164. package/fixtures/atelier-inquiry-contract/withdrawal/valid/document.json +15 -0
  165. package/fixtures/atelier-instruction-adoption/context-receipt/invalid/document.json +18 -0
  166. package/fixtures/atelier-instruction-adoption/context-receipt/valid/document.json +17 -0
  167. package/fixtures/atelier-instruction-adoption/plan/invalid/document.json +63 -0
  168. package/fixtures/atelier-instruction-adoption/plan/valid/document.json +62 -0
  169. package/fixtures/atelier-instruction-adoption/receipt/invalid/document.json +22 -0
  170. package/fixtures/atelier-instruction-adoption/receipt/valid/document.json +21 -0
  171. package/fixtures/atelier-instruction-adoption/state/invalid/document.json +30 -0
  172. package/fixtures/atelier-instruction-adoption/state/valid/document.json +29 -0
  173. package/fixtures/atelier-interaction/act/invalid/document.json +25 -0
  174. package/fixtures/atelier-interaction/act/valid/document.json +24 -0
  175. package/fixtures/atelier-interaction/assessment/invalid/document.json +32 -0
  176. package/fixtures/atelier-interaction/assessment/valid/document.json +31 -0
  177. package/fixtures/atelier-interaction/observation/invalid/document.json +22 -0
  178. package/fixtures/atelier-interaction/observation/valid/document.json +21 -0
  179. package/fixtures/atelier-interaction/policy/invalid/document.json +20 -0
  180. package/fixtures/atelier-interaction/policy/valid/document.json +19 -0
  181. package/fixtures/atelier-judgment/case/invalid/document.json +76 -0
  182. package/fixtures/atelier-judgment/case/valid/document.json +75 -0
  183. package/fixtures/atelier-judgment/decision/invalid/document.json +38 -0
  184. package/fixtures/atelier-judgment/decision/valid/document.json +37 -0
  185. package/fixtures/atelier-judgment/native-decision.md +3 -0
  186. package/fixtures/atelier-judgment/practice-reconsideration/definition.json +92 -0
  187. package/fixtures/atelier-judgment/practice-reconsideration/scenario.json +435 -0
  188. package/fixtures/atelier-knowledge-contract/activation/invalid/document.json +26 -0
  189. package/fixtures/atelier-knowledge-contract/activation/valid/document.json +25 -0
  190. package/fixtures/atelier-knowledge-contract/contribution/invalid/document.json +34 -0
  191. package/fixtures/atelier-knowledge-contract/contribution/valid/document.json +33 -0
  192. package/fixtures/atelier-knowledge-contract/domain/invalid/document.json +41 -0
  193. package/fixtures/atelier-knowledge-contract/domain/valid/document.json +40 -0
  194. package/fixtures/atelier-knowledge-contract/domain-revision/invalid/document.json +46 -0
  195. package/fixtures/atelier-knowledge-contract/domain-revision/valid/document.json +45 -0
  196. package/fixtures/atelier-knowledge-contract/evaluation/invalid/document.json +21 -0
  197. package/fixtures/atelier-knowledge-contract/evaluation/valid/document.json +20 -0
  198. package/fixtures/atelier-knowledge-contract/ledger/invalid/document.json +318 -0
  199. package/fixtures/atelier-knowledge-contract/ledger/valid/document.json +317 -0
  200. package/fixtures/atelier-knowledge-contract/relation/invalid/document.json +25 -0
  201. package/fixtures/atelier-knowledge-contract/relation/valid/document.json +24 -0
  202. package/fixtures/atelier-knowledge-contract/review/invalid/document.json +18 -0
  203. package/fixtures/atelier-knowledge-contract/review/valid/document.json +17 -0
  204. package/fixtures/atelier-knowledge-contract/withdrawal/invalid/document.json +16 -0
  205. package/fixtures/atelier-knowledge-contract/withdrawal/valid/document.json +15 -0
  206. package/fixtures/atelier-learning/invalid/authority.json +14 -0
  207. package/fixtures/atelier-learning/valid/capture.json +13 -0
  208. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/authority-key.json +17 -0
  209. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/nonempty-ext.json +25 -0
  210. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/wrong-schema.json +22 -0
  211. package/fixtures/atelier-personal-workspace-contract/manifest/valid/manifest.json +22 -0
  212. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/authority-key.json +25 -0
  213. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/unknown-top-level-field.json +27 -0
  214. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/wrong-schema.json +24 -0
  215. package/fixtures/atelier-trackable/definition/invalid/document.json +15 -0
  216. package/fixtures/atelier-trackable/definition/valid/document.json +14 -0
  217. package/fixtures/atelier-trackable/request/invalid/document.json +23 -0
  218. package/fixtures/atelier-trackable/request/valid/document.json +22 -0
  219. package/fixtures/boundary-delegations/invalid/authority-key.v1.json +30 -0
  220. package/fixtures/boundary-delegations/invalid/push-operation.v1.json +28 -0
  221. package/fixtures/boundary-delegations/invalid/unsigned.v1.json +25 -0
  222. package/fixtures/boundary-delegations/valid/empty.v1.json +4 -0
  223. package/fixtures/boundary-delegations/valid/signed-operator.v1.json +30 -0
  224. package/fixtures/boundary-owner-keys/invalid/wrong-algorithm.v1.json +15 -0
  225. package/fixtures/boundary-owner-keys/invalid/wrong-curve.v1.json +15 -0
  226. package/fixtures/boundary-owner-keys/valid/one-owner.v1.json +17 -0
  227. package/fixtures/capability-packages/adoption.example.json +70 -0
  228. package/fixtures/capability-packages/evidence-review/capability-package.json +58 -0
  229. package/fixtures/capability-packages/evidence-review/capability-release.json +84 -0
  230. package/fixtures/capability-packages/evidence-review/evaluation.md +15 -0
  231. package/fixtures/capability-packages/evidence-review/skills/evidence-review/SKILL.md +22 -0
  232. package/fixtures/capability-packages/evidence-review/skills/evidence-review/references/ledger.md +7 -0
  233. package/fixtures/capability-packages/research/capability-package.json +88 -0
  234. package/fixtures/capability-packages/research/capability-release.json +134 -0
  235. package/fixtures/capability-packages/research/evaluation.md +15 -0
  236. package/fixtures/capability-packages/research/skills/research-integrate/SKILL.md +29 -0
  237. package/fixtures/capability-packages/research/skills/research-integrate/references/integration.md +10 -0
  238. package/fixtures/capability-packages/research/skills/research-plan/SKILL.md +27 -0
  239. package/fixtures/capability-packages/research/skills/research-plan/references/inquiries.md +26 -0
  240. package/fixtures/capability-packages/research/skills/research-synthesize/SKILL.md +23 -0
  241. package/fixtures/capability-packages/research/skills/research-synthesize/references/synthesis.md +12 -0
  242. package/fixtures/evidence-navigation/invalid/duplicate-operation.json +16 -0
  243. package/fixtures/evidence-navigation/invalid/instruction-kind.json +36 -0
  244. package/fixtures/evidence-navigation/invalid/invalid-digest.json +36 -0
  245. package/fixtures/evidence-navigation/invalid/invalid-time.json +36 -0
  246. package/fixtures/evidence-navigation/invalid/missing-attribution.json +35 -0
  247. package/fixtures/evidence-navigation/invalid/reserved-extension.json +19 -0
  248. package/fixtures/evidence-navigation/invalid/unattributed-acceptance.json +36 -0
  249. package/fixtures/evidence-navigation/invalid/uncoerced-version.json +16 -0
  250. package/fixtures/evidence-navigation/invalid/unknown-currency.json +17 -0
  251. package/fixtures/evidence-navigation/invalid/unknown-selector-field.json +37 -0
  252. package/fixtures/evidence-navigation/invalid/unsupported-operation.json +15 -0
  253. package/fixtures/evidence-navigation/valid/claim.json +36 -0
  254. package/fixtures/evidence-navigation/valid/host.json +16 -0
  255. package/fixtures/evidence-navigation/valid/profile.json +16 -0
  256. package/fixtures/evidence-navigation/valid/snapshot.json +17 -0
  257. package/fixtures/harness-packages/build-harness/capability-package.json +61 -0
  258. package/fixtures/harness-packages/build-harness/capability-release.json +82 -0
  259. package/fixtures/harness-packages/build-harness/evaluation.md +3 -0
  260. package/fixtures/harness-packages/build-harness/skills/atelier-build-harness/SKILL.md +59 -0
  261. package/fixtures/harness-packages/knowledge-harness/capability-package.json +61 -0
  262. package/fixtures/harness-packages/knowledge-harness/capability-release.json +82 -0
  263. package/fixtures/harness-packages/knowledge-harness/evaluation.md +3 -0
  264. package/fixtures/harness-packages/knowledge-harness/skills/atelier-knowledge-harness/SKILL.md +60 -0
  265. package/fixtures/harnesses/learning-cycle.json +780 -0
  266. package/fixtures/inquiry/workshop.json +675 -0
  267. package/fixtures/inquiry-packages/discovery-harness/capability-package.json +61 -0
  268. package/fixtures/inquiry-packages/discovery-harness/capability-release.json +82 -0
  269. package/fixtures/inquiry-packages/discovery-harness/evaluation.md +3 -0
  270. package/fixtures/inquiry-packages/discovery-harness/skills/atelier-discovery-harness/SKILL.md +48 -0
  271. package/fixtures/inquiry-packages/research-harness/capability-package.json +61 -0
  272. package/fixtures/inquiry-packages/research-harness/capability-release.json +82 -0
  273. package/fixtures/inquiry-packages/research-harness/evaluation.md +3 -0
  274. package/fixtures/inquiry-packages/research-harness/skills/atelier-research-harness/SKILL.md +43 -0
  275. package/fixtures/knowledge-health/calibration-suite.json +26 -0
  276. package/fixtures/knowledge-health/calibration-trial.json +37 -0
  277. package/fixtures/knowledge-health/corrected/checklist.md +18 -0
  278. package/fixtures/knowledge-health/devday/participant-record.json +19 -0
  279. package/fixtures/knowledge-health/expected-summary.json +27 -0
  280. package/fixtures/knowledge-health/workshop/README.md +20 -0
  281. package/fixtures/knowledge-health/workshop/atelier.project.json +7 -0
  282. package/fixtures/knowledge-health/workshop/knowledge-plan.json +65 -0
  283. package/fixtures/knowledge-health/workshop/records/checklist.md +18 -0
  284. package/fixtures/knowledge-health/workshop/records/workshop.md +18 -0
  285. package/fixtures/knowledge-health/workshop/repo-access.v1.json +5 -0
  286. package/fixtures/knowledge-health/workspace/atelier.project.json +18 -0
  287. package/fixtures/knowledge-health/workspace/knowledge-plan.json +74 -0
  288. package/fixtures/knowledge-health/workspace/records/checklist.md +18 -0
  289. package/fixtures/knowledge-health/workspace/records/pilot.md +16 -0
  290. package/fixtures/knowledge-health/workspace/repo-access.v1.json +9 -0
  291. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/case-only-collision.v2.json +160 -0
  292. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/flat-note-path.v2.json +160 -0
  293. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/hidden-folder.v2.json +160 -0
  294. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/identity-in-the-body.v2.json +160 -0
  295. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/link-breaking-name.v2.json +160 -0
  296. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/missing-identity-region.v2.json +156 -0
  297. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/missing-layout-version.v2.json +159 -0
  298. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/note-named-like-a-folder.v2.json +160 -0
  299. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/unknown-region-kind.v2.json +160 -0
  300. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/v1-contract-version.v2.json +161 -0
  301. package/fixtures/obsidian/contracts/generation-manifest-v2/valid/three-notes.v2.json +160 -0
  302. package/fixtures/obsidian/edits/workspace.json +1 -1
  303. package/fixtures/obsidian/materialization/expected-full.json +21 -21
  304. package/fixtures/obsidian/materialization/expected-full.layout-1.json +99 -0
  305. package/fixtures/obsidian/materialization/expected-scoped.json +7 -7
  306. package/fixtures/obsidian/materialization/expected-scoped.layout-1.json +39 -0
  307. package/fixtures/personal-workspace/overlay.json +24 -0
  308. package/fixtures/templates/local-library.v1.json +75 -0
  309. package/fixtures/templates/upgrade-contracts/adoption-policy.v2/invalid.json +16 -0
  310. package/fixtures/templates/upgrade-contracts/adoption-policy.v2/valid.json +13 -0
  311. package/fixtures/templates/upgrade-contracts/migration.v3/invalid.json +24 -0
  312. package/fixtures/templates/upgrade-contracts/migration.v3/valid.json +21 -0
  313. package/fixtures/templates/upgrade-contracts/template-adoption.v1/invalid.json +60 -0
  314. package/fixtures/templates/upgrade-contracts/template-adoption.v1/valid.json +57 -0
  315. package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/invalid.json +85 -0
  316. package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/valid.json +82 -0
  317. package/package.json +64 -6
  318. package/plugins/obsidian/main.js +444 -0
  319. package/plugins/obsidian/manifest.json +9 -0
  320. package/plugins/obsidian/styles.css +22 -0
  321. package/skills/claude/atelier-build-harness/SKILL.md +59 -0
  322. package/skills/claude/atelier-coordination/SKILL.md +32 -0
  323. package/skills/claude/atelier-discovery-harness/SKILL.md +48 -0
  324. package/skills/claude/atelier-guided-upgrade/SKILL.md +29 -0
  325. package/skills/claude/atelier-interaction/SKILL.md +34 -0
  326. package/skills/claude/atelier-knowledge-harness/SKILL.md +60 -0
  327. package/skills/claude/atelier-knowledge-setup/SKILL.md +72 -0
  328. package/skills/claude/atelier-practical-judgment/SKILL.md +64 -0
  329. package/skills/claude/atelier-research-harness/SKILL.md +43 -0
  330. package/skills/claude/atelier-skill-steward/SKILL.md +53 -0
  331. package/skills/claude/atelier-trackables/SKILL.md +40 -0
  332. package/skills/codex/atelier-build-harness/SKILL.md +59 -0
  333. package/skills/codex/atelier-coordination/SKILL.md +32 -0
  334. package/skills/codex/atelier-discovery-harness/SKILL.md +48 -0
  335. package/skills/codex/atelier-guided-upgrade/SKILL.md +29 -0
  336. package/skills/codex/atelier-interaction/SKILL.md +34 -0
  337. package/skills/codex/atelier-knowledge-harness/SKILL.md +60 -0
  338. package/skills/codex/atelier-knowledge-setup/SKILL.md +72 -0
  339. package/skills/codex/atelier-practical-judgment/SKILL.md +64 -0
  340. package/skills/codex/atelier-research-harness/SKILL.md +43 -0
  341. package/skills/codex/atelier-skill-steward/SKILL.md +53 -0
  342. package/skills/codex/atelier-trackables/SKILL.md +40 -0
  343. package/src/architecture/catalog.mjs +355 -0
  344. package/src/architecture/index.mjs +93 -0
  345. package/src/boundary/content-rules.mjs +4 -2
  346. package/src/boundary/delegation-command.mjs +158 -0
  347. package/src/boundary/delegation.mjs +396 -0
  348. package/src/boundary/policy.mjs +52 -10
  349. package/src/build/git.mjs +18 -0
  350. package/src/build/index.mjs +3 -0
  351. package/src/build/ledger.mjs +88 -0
  352. package/src/capabilities/adoption.mjs +381 -0
  353. package/src/capabilities/evidence.mjs +140 -0
  354. package/src/capabilities/files.mjs +124 -0
  355. package/src/capabilities/index.mjs +4 -0
  356. package/src/capabilities/instructions.mjs +250 -0
  357. package/src/capabilities/package.mjs +136 -0
  358. package/src/cli/command-failure.mjs +36 -0
  359. package/src/cli/execute-command.mjs +16 -2
  360. package/src/cli/run.mjs +65 -9
  361. package/src/coauthor/store.mjs +43 -2
  362. package/src/collaboration/proposals.mjs +189 -0
  363. package/src/commands/architecture.mjs +27 -0
  364. package/src/commands/boundary.mjs +3 -0
  365. package/src/commands/capability.mjs +73 -0
  366. package/src/commands/enroll.mjs +3 -0
  367. package/src/commands/harness.mjs +79 -0
  368. package/src/commands/ingest.mjs +39 -0
  369. package/src/commands/init.mjs +4 -1
  370. package/src/commands/inquiry.mjs +66 -0
  371. package/src/commands/knowledge-semantic.mjs +128 -0
  372. package/src/commands/knowledge.mjs +119 -0
  373. package/src/commands/learn.mjs +61 -0
  374. package/src/commands/obsidian.mjs +832 -62
  375. package/src/commands/practice.mjs +24 -0
  376. package/src/commands/setup.mjs +22 -2
  377. package/src/commands/trackable.mjs +19 -0
  378. package/src/contracts/corpus.mjs +36 -0
  379. package/src/coordination/index.mjs +110 -0
  380. package/src/egress/forbidden-egress.mjs +2 -0
  381. package/src/evidence-navigation/contracts.mjs +60 -0
  382. package/src/evidence-navigation/evaluate.mjs +69 -0
  383. package/src/evidence-navigation/generation.mjs +22 -0
  384. package/src/evidence-navigation/index.mjs +2 -0
  385. package/src/evidence-navigation/local.mjs +167 -0
  386. package/src/evidence-navigation/schema.generated.mjs +604 -0
  387. package/src/evidence-navigation/types.mjs +12 -0
  388. package/src/export/atelier-export-contract.mjs +35 -8
  389. package/src/graph/enroll.mjs +248 -0
  390. package/src/graph/graph.mjs +17 -1
  391. package/src/graph/knowledge-graph.mjs +58 -8
  392. package/src/harnesses/contracts.mjs +41 -0
  393. package/src/harnesses/exchange.mjs +154 -0
  394. package/src/harnesses/feedback.mjs +16 -0
  395. package/src/harnesses/history.mjs +37 -0
  396. package/src/harnesses/index.mjs +4 -0
  397. package/src/harnesses/store.mjs +29 -0
  398. package/src/ingestion/contracts.mjs +41 -0
  399. package/src/ingestion/evaluation.mjs +119 -0
  400. package/src/ingestion/optional/composition/index.mjs +171 -0
  401. package/src/ingestion/optional/evaluation/index.mjs +219 -0
  402. package/src/ingestion/optional/graphify/composition-binding.mjs +60 -0
  403. package/src/ingestion/optional/graphify/composition_receiving.py +185 -0
  404. package/src/ingestion/optional/graphify/graphify_supplier.py +933 -0
  405. package/src/ingestion/optional/graphify/json_bridge.py +163 -0
  406. package/src/ingestion/optional/graphify/query_receiving.py +209 -0
  407. package/src/ingestion/optional/index.mjs +9 -0
  408. package/src/ingestion/optional/jev/bridge.mjs +166 -0
  409. package/src/ingestion/optional/jev/composition-binding.mjs +116 -0
  410. package/src/ingestion/optional/jev/judgments.mjs +174 -0
  411. package/src/ingestion/optional/jev/native-translation.mjs +32 -0
  412. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/__init__.py +7 -0
  413. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/adapter.py +966 -0
  414. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/artifacts.py +101 -0
  415. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/projection.py +146 -0
  416. package/src/ingestion/optional/lightrag/composition-binding.mjs +67 -0
  417. package/src/ingestion/optional/vanilla/composition-binding.mjs +102 -0
  418. package/src/ingestion/optional/vanilla/index.mjs +218 -0
  419. package/src/ingestion/optional/vanilla/native-normalization.mjs +187 -0
  420. package/src/ingestion/processors.mjs +218 -0
  421. package/src/ingestion/semantic.mjs +203 -0
  422. package/src/ingestion/store.mjs +372 -0
  423. package/src/inquiry/beliefs.mjs +32 -0
  424. package/src/inquiry/contracts.mjs +23 -0
  425. package/src/inquiry/index.mjs +5 -0
  426. package/src/inquiry/ledger.mjs +135 -0
  427. package/src/inquiry/lenses.mjs +15 -0
  428. package/src/inquiry/projection.mjs +77 -0
  429. package/src/inquiry/store.mjs +35 -0
  430. package/src/intake/read-scope.mjs +12 -0
  431. package/src/intake/store.mjs +69 -6
  432. package/src/interaction/index.mjs +91 -0
  433. package/src/judgment/index.mjs +82 -0
  434. package/src/judgment/practice-evaluation.mjs +70 -0
  435. package/src/judgment/practice.mjs +144 -0
  436. package/src/knowledge/context.mjs +217 -0
  437. package/src/knowledge/index.mjs +5 -0
  438. package/src/knowledge/ingestion.mjs +79 -0
  439. package/src/knowledge/intake.mjs +33 -0
  440. package/src/knowledge/ledger.mjs +110 -0
  441. package/src/knowledge/participatory/guidance.mjs +36 -0
  442. package/src/knowledge/participatory/guided-contribution.mjs +44 -0
  443. package/src/knowledge/participatory/index.mjs +2 -0
  444. package/src/knowledge/participatory/installed-workshop.mjs +108 -0
  445. package/src/knowledge/plan.mjs +67 -0
  446. package/src/knowledge/projection.mjs +43 -0
  447. package/src/knowledge/semantic-operation.mjs +567 -0
  448. package/src/knowledge/sessions.mjs +467 -0
  449. package/src/knowledge/workspace.mjs +295 -0
  450. package/src/knowledge-health/assessment.mjs +165 -0
  451. package/src/knowledge-health/capabilities.mjs +350 -0
  452. package/src/knowledge-health/context.mjs +62 -0
  453. package/src/knowledge-health/example.mjs +47 -0
  454. package/src/knowledge-health/index.mjs +10 -0
  455. package/src/knowledge-health/owner-join.mjs +88 -0
  456. package/src/knowledge-health/proof/common.mjs +24 -0
  457. package/src/knowledge-health/proof/installed-check.mjs +100 -0
  458. package/src/knowledge-health/proof/native-readback.mjs +37 -0
  459. package/src/knowledge-health/proof/rehearse.mjs +68 -0
  460. package/src/knowledge-health/proof/validate-participant.mjs +17 -0
  461. package/src/knowledge-health/proof/verify-native-capture.mjs +14 -0
  462. package/src/knowledge-health/proof/workshop-check.mjs +36 -0
  463. package/src/knowledge-health/rule-identity.mjs +44 -0
  464. package/src/knowledge-health/workshop-composition.mjs +19 -0
  465. package/src/knowledge-health/workshop-profile.mjs +176 -0
  466. package/src/knowledge-health/workshop.mjs +99 -0
  467. package/src/learning/adapters.mjs +68 -0
  468. package/src/learning/assistance.mjs +127 -0
  469. package/src/learning/contracts.mjs +65 -0
  470. package/src/learning/store.mjs +272 -0
  471. package/src/personal-workspace/index.mjs +391 -0
  472. package/src/personal-workspace/selection.mjs +385 -0
  473. package/src/project/config.mjs +8 -0
  474. package/src/project/durable-state.mjs +3 -1
  475. package/src/project/file-class.mjs +1 -1
  476. package/src/project/private-state.mjs +10 -1
  477. package/src/projection/obsidian/contracts.mjs +224 -18
  478. package/src/projection/obsidian/edits/apply.mjs +63 -19
  479. package/src/projection/obsidian/edits/regions.mjs +137 -42
  480. package/src/projection/obsidian/materialize/index.mjs +6 -3
  481. package/src/projection/obsidian/materialize/path-registry.mjs +443 -57
  482. package/src/projection/obsidian/materialize/prepare-view.mjs +382 -131
  483. package/src/projection/obsidian/materialize/redaction.mjs +327 -0
  484. package/src/projection/obsidian/materialize/settings.mjs +113 -34
  485. package/src/projection/obsidian/personal-workspace.mjs +436 -0
  486. package/src/projection/obsidian/plugin-bridge/bundle.mjs +50 -0
  487. package/src/projection/obsidian/plugin-bridge/channel.mjs +174 -0
  488. package/src/projection/obsidian/plugin-bridge/index.mjs +10 -0
  489. package/src/projection/obsidian/proposals/adapter.mjs +47 -8
  490. package/src/projection/obsidian/proposals/observation.mjs +20 -7
  491. package/src/projection/obsidian/publication/bridge-script.mjs +11 -5
  492. package/src/projection/obsidian/publication/index.mjs +2 -1
  493. package/src/projection/obsidian/publication/publisher.mjs +312 -36
  494. package/src/projection/obsidian/publication/transport.mjs +63 -8
  495. package/src/projection/obsidian/publication/vault-list.mjs +200 -0
  496. package/src/projection/obsidian/recovery/index.mjs +4 -1
  497. package/src/projection/obsidian/recovery/restart.mjs +3 -1
  498. package/src/projection/obsidian/recovery/store.mjs +168 -8
  499. package/src/projection/obsidian/selection-ui/contribution.mjs +6 -5
  500. package/src/projection/obsidian/selection-ui/focus.mjs +14 -7
  501. package/src/projection/obsidian/selection-ui/selection-state.mjs +2 -2
  502. package/src/projection/obsidian/selection-ui/selection.mjs +8 -3
  503. package/src/readiness/readiness.mjs +10 -3
  504. package/src/reflection/index.mjs +56 -0
  505. package/src/runtime/obsidian/app-capability.mjs +104 -12
  506. package/src/runtime/obsidian/app-production-seams.mjs +161 -42
  507. package/src/runtime/obsidian/app-registration.mjs +313 -0
  508. package/src/runtime/obsidian/app-restart.mjs +154 -0
  509. package/src/runtime/obsidian/engine.mjs +288 -29
  510. package/src/runtime/obsidian/extension-points.mjs +1 -1
  511. package/src/runtime/obsidian/index.mjs +15 -8
  512. package/src/runtime/obsidian/launch-plan.mjs +91 -0
  513. package/src/runtime/obsidian/lifecycle.mjs +193 -22
  514. package/src/runtime/obsidian/login-item.mjs +332 -0
  515. package/src/runtime/obsidian/machine-settings.mjs +119 -12
  516. package/src/runtime/obsidian/opening.mjs +369 -63
  517. package/src/runtime/obsidian/pending-edits.mjs +10 -0
  518. package/src/runtime/obsidian/pipeline.mjs +71 -3
  519. package/src/runtime/obsidian/plugin-channel.mjs +289 -0
  520. package/src/runtime/obsidian/plugin-choice.mjs +182 -0
  521. package/src/runtime/obsidian/plugin-drift.mjs +124 -0
  522. package/src/runtime/obsidian/plugin-presence.mjs +61 -0
  523. package/src/runtime/obsidian/process-identity.mjs +20 -10
  524. package/src/runtime/obsidian/project-views.mjs +282 -0
  525. package/src/runtime/obsidian/questions.mjs +48 -0
  526. package/src/runtime/obsidian/release-watch.mjs +56 -0
  527. package/src/runtime/obsidian/service-main.mjs +113 -17
  528. package/src/runtime/obsidian/service-manager-production.mjs +61 -0
  529. package/src/runtime/obsidian/service-managers.mjs +275 -0
  530. package/src/runtime/obsidian/service-record.mjs +105 -5
  531. package/src/runtime/obsidian/service-server.mjs +50 -12
  532. package/src/runtime/obsidian/service.mjs +134 -7
  533. package/src/runtime/obsidian/startup-adapters.mjs +59 -21
  534. package/src/runtime/obsidian/state-store.mjs +13 -1
  535. package/src/runtime/obsidian/unheld-evidence.mjs +84 -0
  536. package/src/runtime/obsidian/vault-location.mjs +300 -0
  537. package/src/runtime/obsidian/view-counts.mjs +34 -0
  538. package/src/server/local-sidecar.mjs +193 -7
  539. package/src/server/server.mjs +45 -6
  540. package/src/template-bindings/project.mjs +92 -0
  541. package/src/templates/profile.mjs +225 -0
  542. package/src/trackables/domain.mjs +175 -0
  543. package/src/trackables/store.mjs +114 -0
  544. package/src/ui/knowledge-page.mjs +1388 -0
  545. package/src/upgrade/explanation.mjs +1 -1
  546. package/src/upgrade/template-participant.mjs +171 -0
  547. package/src/upgrade/transaction.mjs +72 -25
  548. package/src/upgrade/upgrade.mjs +2 -1
  549. package/templates/external-project-workspace/pack-lifecycle.json +6 -1
  550. package/templates/knowledge-workspace/.gitattributes +2 -0
  551. package/templates/knowledge-workspace/AGENTS.md +27 -0
  552. package/templates/knowledge-workspace/README.md +44 -0
  553. package/templates/knowledge-workspace/atelier.project.json +22 -0
  554. package/templates/knowledge-workspace/gitignore +6 -0
  555. package/templates/knowledge-workspace/knowledge-plan.json +111 -0
  556. package/templates/knowledge-workspace/knowledge-plan.schema.json +281 -0
  557. package/templates/knowledge-workspace/records/forecast.md +22 -0
  558. package/templates/knowledge-workspace/records/inspection.md +25 -0
  559. package/templates/knowledge-workspace/records/telescope.md +24 -0
  560. package/templates/knowledge-workspace/repo-access.v1.json +9 -0
@@ -0,0 +1,532 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-upgrade-plan.v3.schema.json",
4
+ "$comment": "contract revision 3.0.0",
5
+ "title": "mnstry.atelier-upgrade-plan@v3",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema",
10
+ "digest",
11
+ "operation",
12
+ "workspace",
13
+ "repositoryId",
14
+ "configPath",
15
+ "baseHead",
16
+ "baseTree",
17
+ "branch",
18
+ "createdAt",
19
+ "expiresAt",
20
+ "policy",
21
+ "policyDigest",
22
+ "executorDigest",
23
+ "gitDigest",
24
+ "gitConfigDigest",
25
+ "hooksDigest",
26
+ "hooksPath",
27
+ "readSet",
28
+ "migration",
29
+ "writes",
30
+ "releaseEvidence",
31
+ "dependencyInstallation",
32
+ "mode",
33
+ "recoveryCoverage",
34
+ "message",
35
+ "gitAuxDigest",
36
+ "participant"
37
+ ],
38
+ "properties": {
39
+ "schema": {
40
+ "const": "mnstry.atelier-upgrade-plan@v3"
41
+ },
42
+ "digest": {
43
+ "type": "string",
44
+ "pattern": "^sha256:[a-f0-9]{64}$"
45
+ },
46
+ "operation": {
47
+ "const": "prepare-local-candidate"
48
+ },
49
+ "workspace": {
50
+ "type": "string",
51
+ "minLength": 1
52
+ },
53
+ "repositoryId": {
54
+ "type": "string",
55
+ "pattern": "^sha256:[a-f0-9]{64}$"
56
+ },
57
+ "configPath": {
58
+ "type": "string",
59
+ "minLength": 1
60
+ },
61
+ "baseHead": {
62
+ "type": "string",
63
+ "pattern": "^[a-f0-9]{40,64}$"
64
+ },
65
+ "baseTree": {
66
+ "type": "string",
67
+ "pattern": "^[a-f0-9]{40,64}$"
68
+ },
69
+ "branch": {
70
+ "type": "string",
71
+ "minLength": 1
72
+ },
73
+ "createdAt": {
74
+ "type": "string",
75
+ "format": "date-time"
76
+ },
77
+ "expiresAt": {
78
+ "type": "string",
79
+ "format": "date-time"
80
+ },
81
+ "policy": {
82
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
83
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-adoption-policy.v2.schema.json",
84
+ "$comment": "contract revision 2.0.0",
85
+ "title": "mnstry.atelier-adoption-policy@v2",
86
+ "type": "object",
87
+ "additionalProperties": false,
88
+ "required": [
89
+ "schema",
90
+ "enabled",
91
+ "mode",
92
+ "maxAgeSeconds",
93
+ "recoveryCoverage",
94
+ "allowedEffects",
95
+ "participant"
96
+ ],
97
+ "properties": {
98
+ "schema": {
99
+ "const": "mnstry.atelier-adoption-policy@v2"
100
+ },
101
+ "enabled": {
102
+ "type": "boolean"
103
+ },
104
+ "mode": {
105
+ "const": "manual-exact-plan"
106
+ },
107
+ "maxAgeSeconds": {
108
+ "type": "integer",
109
+ "minimum": 1,
110
+ "maximum": 86400
111
+ },
112
+ "recoveryCoverage": {
113
+ "const": "local-only"
114
+ },
115
+ "allowedEffects": {
116
+ "const": [
117
+ "template-adoption",
118
+ "lock-and-projections",
119
+ "git-commit"
120
+ ]
121
+ },
122
+ "participant": {
123
+ "const": "local-template-profile@1"
124
+ },
125
+ "ext": {
126
+ "type": "object",
127
+ "maxProperties": 0,
128
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
129
+ },
130
+ "contractVersion": {
131
+ "type": "string",
132
+ "pattern": "^2\\.[0-9]+\\.[0-9]+$"
133
+ }
134
+ }
135
+ },
136
+ "policyDigest": {
137
+ "type": "string",
138
+ "pattern": "^sha256:[a-f0-9]{64}$"
139
+ },
140
+ "executorDigest": {
141
+ "type": "string",
142
+ "pattern": "^sha256:[a-f0-9]{64}$"
143
+ },
144
+ "gitDigest": {
145
+ "type": "string",
146
+ "pattern": "^sha256:[a-f0-9]{64}$"
147
+ },
148
+ "gitConfigDigest": {
149
+ "type": "string",
150
+ "pattern": "^sha256:[a-f0-9]{64}$"
151
+ },
152
+ "hooksDigest": {
153
+ "type": "string",
154
+ "pattern": "^sha256:[a-f0-9]{64}$"
155
+ },
156
+ "hooksPath": {
157
+ "type": "string",
158
+ "minLength": 1
159
+ },
160
+ "readSet": {
161
+ "type": "array",
162
+ "items": {
163
+ "type": "object",
164
+ "additionalProperties": false,
165
+ "required": [
166
+ "path",
167
+ "state"
168
+ ],
169
+ "properties": {
170
+ "path": {
171
+ "type": "string",
172
+ "minLength": 1
173
+ },
174
+ "state": {
175
+ "anyOf": [
176
+ {
177
+ "type": "null"
178
+ },
179
+ {
180
+ "type": "object",
181
+ "additionalProperties": false,
182
+ "required": [
183
+ "digest",
184
+ "mode"
185
+ ],
186
+ "properties": {
187
+ "digest": {
188
+ "type": "string",
189
+ "pattern": "^sha256:[a-f0-9]{64}$"
190
+ },
191
+ "mode": {
192
+ "enum": [
193
+ "100644",
194
+ "100755"
195
+ ]
196
+ },
197
+ "ext": {
198
+ "type": "object",
199
+ "maxProperties": 0,
200
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
201
+ }
202
+ }
203
+ }
204
+ ]
205
+ },
206
+ "ext": {
207
+ "type": "object",
208
+ "maxProperties": 0,
209
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
210
+ }
211
+ }
212
+ }
213
+ },
214
+ "migration": {
215
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
216
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-migration.v3.schema.json",
217
+ "$comment": "contract revision 3.0.0",
218
+ "title": "mnstry.atelier-migration@v3",
219
+ "type": "object",
220
+ "additionalProperties": false,
221
+ "required": [
222
+ "schema",
223
+ "id",
224
+ "executorDigest",
225
+ "readScope",
226
+ "allowedWrites",
227
+ "sideEffects",
228
+ "postChecks"
229
+ ],
230
+ "properties": {
231
+ "schema": {
232
+ "const": "mnstry.atelier-migration@v3"
233
+ },
234
+ "id": {
235
+ "const": "local-template-profile@1"
236
+ },
237
+ "executorDigest": {
238
+ "type": "string",
239
+ "pattern": "^sha256:[a-f0-9]{64}$"
240
+ },
241
+ "readScope": {
242
+ "const": "whole-enrolled-repository"
243
+ },
244
+ "allowedWrites": {
245
+ "type": "array",
246
+ "items": {
247
+ "type": "string",
248
+ "minLength": 1
249
+ }
250
+ },
251
+ "sideEffects": {
252
+ "const": [
253
+ "git-index",
254
+ "git-commit"
255
+ ]
256
+ },
257
+ "postChecks": {
258
+ "const": [
259
+ "exact-inventory",
260
+ "lock-schema",
261
+ "exact-index",
262
+ "commit-parent-tree-message",
263
+ "template-adoption",
264
+ "template-current-source"
265
+ ]
266
+ },
267
+ "ext": {
268
+ "type": "object",
269
+ "maxProperties": 0,
270
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
271
+ },
272
+ "contractVersion": {
273
+ "type": "string",
274
+ "pattern": "^3\\.[0-9]+\\.[0-9]+$"
275
+ }
276
+ }
277
+ },
278
+ "writes": {
279
+ "type": "array",
280
+ "items": {
281
+ "type": "object",
282
+ "additionalProperties": false,
283
+ "required": [
284
+ "path",
285
+ "owner",
286
+ "action",
287
+ "before",
288
+ "after",
289
+ "content"
290
+ ],
291
+ "properties": {
292
+ "path": {
293
+ "type": "string",
294
+ "minLength": 1
295
+ },
296
+ "owner": {
297
+ "enum": [
298
+ "lock",
299
+ "generated",
300
+ "template",
301
+ "template-history"
302
+ ]
303
+ },
304
+ "action": {
305
+ "enum": [
306
+ "create",
307
+ "update"
308
+ ]
309
+ },
310
+ "before": {
311
+ "anyOf": [
312
+ {
313
+ "type": "null"
314
+ },
315
+ {
316
+ "type": "object",
317
+ "additionalProperties": false,
318
+ "required": [
319
+ "digest",
320
+ "mode"
321
+ ],
322
+ "properties": {
323
+ "digest": {
324
+ "type": "string",
325
+ "pattern": "^sha256:[a-f0-9]{64}$"
326
+ },
327
+ "mode": {
328
+ "enum": [
329
+ "100644",
330
+ "100755"
331
+ ]
332
+ },
333
+ "ext": {
334
+ "type": "object",
335
+ "maxProperties": 0,
336
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
337
+ }
338
+ }
339
+ }
340
+ ]
341
+ },
342
+ "after": {
343
+ "type": "object",
344
+ "additionalProperties": false,
345
+ "required": [
346
+ "digest",
347
+ "mode"
348
+ ],
349
+ "properties": {
350
+ "digest": {
351
+ "type": "string",
352
+ "pattern": "^sha256:[a-f0-9]{64}$"
353
+ },
354
+ "mode": {
355
+ "const": "100644"
356
+ },
357
+ "ext": {
358
+ "type": "object",
359
+ "maxProperties": 0,
360
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
361
+ }
362
+ }
363
+ },
364
+ "content": {
365
+ "type": "string",
366
+ "maxLength": 16777216
367
+ },
368
+ "ext": {
369
+ "type": "object",
370
+ "maxProperties": 0,
371
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
372
+ }
373
+ }
374
+ }
375
+ },
376
+ "releaseEvidence": {
377
+ "type": "null"
378
+ },
379
+ "dependencyInstallation": {
380
+ "const": "excluded"
381
+ },
382
+ "mode": {
383
+ "const": "manual-exact-plan"
384
+ },
385
+ "recoveryCoverage": {
386
+ "const": "local-only"
387
+ },
388
+ "message": {
389
+ "type": "string",
390
+ "minLength": 1
391
+ },
392
+ "gitAuxDigest": {
393
+ "type": "string",
394
+ "pattern": "^sha256:[a-f0-9]{64}$"
395
+ },
396
+ "participant": {
397
+ "type": "object",
398
+ "additionalProperties": false,
399
+ "required": [
400
+ "id",
401
+ "profileFile",
402
+ "selectionFile",
403
+ "profileDigest",
404
+ "selectionDigest",
405
+ "templateRef",
406
+ "bindingRef",
407
+ "previousAdoptionDigest",
408
+ "adoptionDigest"
409
+ ],
410
+ "properties": {
411
+ "id": {
412
+ "const": "local-template-profile@1"
413
+ },
414
+ "profileFile": {
415
+ "type": "string",
416
+ "minLength": 1,
417
+ "maxLength": 512
418
+ },
419
+ "selectionFile": {
420
+ "type": "string",
421
+ "minLength": 1,
422
+ "maxLength": 512
423
+ },
424
+ "profileDigest": {
425
+ "type": "string",
426
+ "pattern": "^sha256:[a-f0-9]{64}$"
427
+ },
428
+ "selectionDigest": {
429
+ "type": "string",
430
+ "pattern": "^sha256:[a-f0-9]{64}$"
431
+ },
432
+ "templateRef": {
433
+ "type": "object",
434
+ "additionalProperties": false,
435
+ "required": [
436
+ "kind",
437
+ "id",
438
+ "version",
439
+ "digest"
440
+ ],
441
+ "properties": {
442
+ "kind": {
443
+ "const": "TemplateRef"
444
+ },
445
+ "id": {
446
+ "type": "string",
447
+ "pattern": "^[a-z][a-z0-9]*(?:[.:-][a-z0-9]+)*$",
448
+ "maxLength": 128
449
+ },
450
+ "version": {
451
+ "type": "string",
452
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[a-z0-9]+(?:[.-][a-z0-9]+)*)?$",
453
+ "maxLength": 64
454
+ },
455
+ "digest": {
456
+ "type": "string",
457
+ "pattern": "^sha256:[a-f0-9]{64}$"
458
+ },
459
+ "ext": {
460
+ "type": "object",
461
+ "maxProperties": 0,
462
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
463
+ }
464
+ }
465
+ },
466
+ "bindingRef": {
467
+ "type": "object",
468
+ "additionalProperties": false,
469
+ "required": [
470
+ "kind",
471
+ "id",
472
+ "version",
473
+ "digest"
474
+ ],
475
+ "properties": {
476
+ "kind": {
477
+ "const": "BindingRef"
478
+ },
479
+ "id": {
480
+ "type": "string",
481
+ "pattern": "^[a-z][a-z0-9]*(?:[.:-][a-z0-9]+)*$",
482
+ "maxLength": 128
483
+ },
484
+ "version": {
485
+ "type": "string",
486
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[a-z0-9]+(?:[.-][a-z0-9]+)*)?$",
487
+ "maxLength": 64
488
+ },
489
+ "digest": {
490
+ "type": "string",
491
+ "pattern": "^sha256:[a-f0-9]{64}$"
492
+ },
493
+ "ext": {
494
+ "type": "object",
495
+ "maxProperties": 0,
496
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
497
+ }
498
+ }
499
+ },
500
+ "previousAdoptionDigest": {
501
+ "anyOf": [
502
+ {
503
+ "type": "null"
504
+ },
505
+ {
506
+ "type": "string",
507
+ "pattern": "^sha256:[a-f0-9]{64}$"
508
+ }
509
+ ]
510
+ },
511
+ "adoptionDigest": {
512
+ "type": "string",
513
+ "pattern": "^sha256:[a-f0-9]{64}$"
514
+ },
515
+ "ext": {
516
+ "type": "object",
517
+ "maxProperties": 0,
518
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
519
+ }
520
+ }
521
+ },
522
+ "ext": {
523
+ "type": "object",
524
+ "maxProperties": 0,
525
+ "description": "Reserved extension container; no extension behavior is supported by this contract."
526
+ },
527
+ "contractVersion": {
528
+ "type": "string",
529
+ "pattern": "^3\\.[0-9]+\\.[0-9]+$"
530
+ }
531
+ }
532
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "atelier-compat-baseline@v1",
3
- "baselineTag": "v0.2.0-alpha.0",
3
+ "baselineTag": "v0.2.0-alpha.11",
4
4
  "preEpochTags": [
5
5
  "v0.1.0-alpha.0",
6
6
  "v0.1.0-alpha.1",
@@ -0,0 +1,89 @@
1
+ # Responsibilities, workflows and runtime bindings
2
+
3
+ Atelier is a repository substrate for people, agents and tools. Its portable
4
+ contracts, governance, graph and local runtime support eight responsibilities.
5
+
6
+ | Responsibility | Work it owns | Existing entry points |
7
+ | --- | --- | --- |
8
+ | Inquiry | Investigate uncertainty and assess evidence | Discovery and Research Harnesses; `inquiry` |
9
+ | Knowledge Stewardship | Curate, govern, connect and operationalize knowledge | `harness knowledge`, `ingest`, intake, graph and context; [evidence navigation](evidence-navigation.md), composed by Discovery and Research |
10
+ | Practical Judgment | Discern fitting action, cultivate practice and learn from consequences | `learn`, practical cases, decision adapters, `practice` |
11
+ | Creation and Delivery | Design, implement, verify and deliver changes | `harness build` |
12
+ | Capability Stewardship | Qualify, package, adopt, exercise and evolve reusable abilities | `capability`, Skill Steward and `skills` |
13
+ | Reflection | Form revisable assessments of the person, work, interaction and system | Witness role; qualified assessments and reflective acts |
14
+ | Interaction | Listen, communicate, pace, challenge and repair | Companion policy and controller over one host authority |
15
+ | Coordination | Connect work, owners, dependencies, delivery, recovery and outcomes | Collaboration, Build and typed Coordination projections |
16
+
17
+ These names describe responsibilities. A **harness** composes responsibilities
18
+ into work. A **role** describes participation. A **capability** specifies a
19
+ supported outcome; a **resource** realizes it. A **method** is an optional way of
20
+ working. A **record** retains domain meaning. A **host** executes through its
21
+ actual bindings. A role does not acquire a new store or permission merely by
22
+ being named. Coaching is one reflective method. Phronesis remains the foundation
23
+ of Practical Judgment, including purposes, particulars, taste and exceptions.
24
+
25
+ Skill Steward is a specialized role within Capability Stewardship. Its existing
26
+ catalog and bindings remain authoritative for managed skills. Knowledge
27
+ Stewardship owns knowledge inclusion and applicability. Neither owns another
28
+ repository's adoption decision. Fabric can implement Coordination; the local
29
+ contracts do not require a Fabric service or account.
30
+
31
+ Creation and Delivery also owns the kit's user-facing failure contract: one
32
+ diagnostic shape, a registry of stable codes, and one exit-code convention for
33
+ every command. Other responsibilities raise typed diagnostics through that
34
+ contract rather than defining their own formats. The contract is proposed in
35
+ issue #90 and is not yet implemented. Until it lands, existing typed codes and
36
+ refusal classes remain authoritative.
37
+
38
+ `atelier architecture catalog` returns the validated catalog. `architecture
39
+ entry "Skill Steward"` resolves a name. Historical names remain aliases: Discovery
40
+ Engine resolves to Discovery Harness; Skills Harness resolves to Capability
41
+ Harness. Existing persisted CLI/schema/API identifiers are retained.
42
+
43
+ ## Authoring must name its consumers
44
+
45
+ The additive `atelier-behavior-binding@v1` contract links exact authored
46
+ definition references to field pointers and named, versioned consumers. Each
47
+ field is classified as deterministic **enforcement**, interpreted **guidance**,
48
+ **presentation**, or descriptive **rationale**. Required unsupported behavior
49
+ prevents resolution; optional gaps remain visible in diagnostics.
50
+
51
+ Pass `{binding, consumers}` to `atelier architecture resolve` or
52
+ `resolveBehaviorBinding` from `@mnstry/atelier/architecture`. Consumer declarations
53
+ bind identity, profile, revision and supported classifications. This is contract
54
+ resolution, not evidence that the declaration is truthful or that a host has
55
+ loaded the definition. The output explicitly leaves adoption unestablished.
56
+
57
+ Qualification must connect authored bytes, resolved binding, exact adopted and
58
+ consumed revision, executed operation, durable readback and rendered state.
59
+ Preview and production use the same relevant rules with explicitly different
60
+ adapters. A changed authored file must not silently change existing adoptions.
61
+ Host authentication, release resolution, operation authorization and storage stay
62
+ with their owners. An unsupported host supplies diagnostics, not an invented
63
+ fallback interpretation.
64
+
65
+ ## Contract ownership and current coverage
66
+
67
+ | Meaning | Authoritative mechanism | Consumer proof required |
68
+ | --- | --- | --- |
69
+ | Research evidence and assessment | Inquiry ledger and assessment profiles | Exact handoff, source-family handling and withdrawal |
70
+ | Source custody | Intake store; bounded ingestion processor receipts | Source bytes, output integrity, freshness and locators |
71
+ | Knowledge applicability | Knowledge review and activation records | Current dependencies, local-source checks and retrieval |
72
+ | Accepted learning | Learning decisions and per-harness activation | Scope/exception preservation and withdrawal |
73
+ | Managed capabilities | Exact release, adoption state and binding inventory | Installation, host loading and exercise remain separate |
74
+ | Scoped agent instructions | Instruction adoption adapter | Exact plan, destination readback and consumer context receipt |
75
+ | Build and coordination | Candidate, attempt, gate and handoff records | Native gate evidence and receiving acceptance |
76
+ | Personal Trackables | The selected host's domain writer | Definition adoption, occurrences, evidence and qualified views |
77
+ | Conversation and reflection | Selected host conversation/effect authority | Delivery, interruption, correction and scope controls |
78
+
79
+ The portable Trackables reducer/local store, Reflection qualification, Interaction
80
+ controller and Coordination views supply reference implementations. Production
81
+ host adoption is not established by this catalog. A catalog entry is not an executable runtime or an additional
82
+ semantic registry. Host adapters must map these contracts to existing domain
83
+ operations rather than create competing writers.
84
+
85
+ See [Practical Judgment](practical-judgment.md), [research starter](research-starter.md)
86
+ and [integration decisions](integration-contract-decisions.md).
87
+
88
+ See [Trackables](trackables.md), [Interaction and Reflection](interaction-and-reflection.md)
89
+ and [Coordination](coordination.md) for supported profiles, native bindings and limits.
@@ -15,14 +15,15 @@ commit and packed-tarball digest.
15
15
  | Resident Sync state cannot escape or grow without bound | Contained private directories, no-follow/identity-checked leaves, a 4,096-entry observation ceiling, bounded state projection, nonce-bound locks with aged abandoned-claim recovery, lock-directory identity validation and an ambiguous live-PID maximum age, consumed plans under age/file/byte ceilings, and corruption-recovering hash-chained traces with per-event/resident ceilings | `sync:test` observation/state ceilings, redirected-state/lock, plan lifecycle, concurrent enrollment/recovery, corruption, and trace ceilings | Machine-local state is diagnostic convenience; Git and readable repository files remain authoritative |
16
16
  | Local review serves only generated publication output | Loopback-only bind, required `atelier.manifest.json`, realpath containment, enrolled safe types, POSIX no-follow plus cross-platform leaf type/identity validation for local state, and host/fetch-site/origin/method/nonce checks | `server:security:test`; sidecar case in `assurance:mutation-smoke` | The sidecar is a local review tool, not user authentication or runtime authorization |
17
17
  | Collaboration cannot become a hidden apply path | Proposal authority is capability-derived; records are typed; POSIX ledger and snapshot leaves are no-follow, while every platform rejects redirected leaves and validates opened file identity when available; ledger reads are bounded, one-pass for lists, and corrupt tails fail closed | `collaboration:test` and ledger ceiling/performance tests | Collaboration remains copy-only proposal metadata; snapshots are rebuildable projections and Git review owns source changes |
18
- | The Obsidian maintenance service is reachable from this machine only, and only by its owner | Bind and client are restricted to the literal `127.0.0.1` or `::1`; `Host` must be the exact bound authority; cross-site `Origin` and `Sec-Fetch-Site` are refused; four fixed operations with exact paths and methods; status, tick and stop need a per-runtime random bearer kept only in the mode-0600 record; payloads are bounded and name their runtime; health carries no path or title | `test/obsidian-maintenance.test.mjs` listener, disclosure and unauthorised-request cases, each with a deliberately broken listener that must fail | A local process running as the same user can read the record; the bearer is ownership proof between local processes, not user authentication |
18
+ | The Obsidian maintenance service is reachable from this machine only, and only by its owner | Bind and client are restricted to the literal `127.0.0.1` or `::1`; `Host` must be the exact bound authority; cross-site `Origin` and `Sec-Fetch-Site` are refused; four fixed operations and five fixed plugin commands with exact paths and methods; status, tick and stop need a per-runtime random bearer kept only in the mode-0600 record; payloads are bounded and name their runtime; health carries no path or title | `test/obsidian-maintenance.test.mjs` listener, disclosure and unauthorised-request cases, each with a deliberately broken listener that must fail | A local process running as the same user can read the record; the bearer is ownership proof between local processes, not user authentication |
19
+ | Atelier's Obsidian plugin reaches only its own vault's maintenance service, writes nothing and can only report | The plugin calls a literal loopback address through Node's `http` only. Its random per-vault key is kept owner-only in private state and in a mode-0600 data file inside a vault root that must be private (`0700`; Atelier's own vault roots are made so, a linked or any other root never receives the key) and never crosses the wire: the service proves it holds the key over its own exact address before the plugin sends anything that names the vault, the plugin proves the same key, and every later request and answer is sealed with a per-session key and a counter that only goes up; a challenge is answered once and only while fresh, handshakes are used once, lapse, and are bounded per view. A session grants presence and read-only status of that one view, never status, tick or stop of the service; payloads are 1 KiB JSON objects of exact fields; the plugin's files are Atelier-owned settings whose digests are pinned in the generation manifest, whose previous bytes are displaced to recovery when replaced, and which never hold a view back on a path a person has to repair | `test/obsidian-plugin.test.mjs`: the shipped plugin run in a stand-in app whose writes throw, with every request, its exact body and every required module recorded; parity of constants and of every proof and MAC with the channel contract; a program squatting the service's address that learns no key, view or path and, replaying all it received, opens no session and sets no version; a relayed answer that does not verify; the refusal table with deliberately broken channels that must fail; publication, privacy and recovery cases; an egress-scan variant that must fail | A process running as the same user, including another plugin in the same app, can read the data file, hold sessions for that view and claim an app version for it; a claimed version never bypasses the app's own answer for the vault or the in-app capability check. The plugin's app version stands in only where the command-line tool gives none and the process table does not show the app stopped; if the tool then still coordinates while a second app without the plugin holds the vault, that version may be the other app's. The plugin is optional: restricted mode leaves the command-line path unchanged |
19
20
  | A maintenance service is stopped or reported as running only when it is proven to be this workspace's own | Record and health must agree on service name, workspace, runtime identifier, PID, executable digest and loopback address; anything else on the port is `occupied`; a reused PID is never signalled; a malformed or foreign record refuses; `start` stops only the child it created, by handle | Unowned and silent listener, wrong-identity, PID-reuse, stale-record, malformed-record, idempotent and concurrent start, and launcher-survival cases, with mutation controls | Status probes have a deadline: a service busy in a long synchronous tick can be reported `occupied` until it answers |
20
21
  | Maintenance never sweeps recovery or staging, and one workspace has one ticking engine | The service deletes only its generated record; the engine and the publisher own every other write; a hard kill is settled by the publisher's journaled restart recovery; each tick holds a private per-workspace lock taken from a holder only with proof of abandonment | Directory-listing oracles across start, ticks, stop, hard kill and stale record; hard kill between exchange and manifest commit; lock exclusion and takeover cases; each with a mutation control | A live lock holder that recorded no health address needs a person; a tick that outlasts the shutdown grace period ends with the process and is settled on the next start |
21
22
  | Source application policy is re-read before every automatic apply | The engine authorizes from disk immediately before each dispatch; manual mode never reaches the apply operation; the service keeps this on every tick; the apply operation reads the installed policy again at its decision and immediately before the write, recomputes its digest and evaluates its selector over the current canonical graph; `policy install` verifies that digest and names the expected one; whether this machine may see the object is asked before anything else, so an absent and a withheld object get one answer | Revocation, manual-mode and apply-unavailable cases in `test/obsidian-maintenance.test.mjs`; policy, refusal-table and late-revocation cases in `test/obsidian-edits.test.mjs`, each with a deliberately broken rule that must fail | A policy is private configuration of one machine; whoever can write that private state can install one |
22
23
  | Applying an edit to a source file cannot lose another program's bytes | One operation for a person and for a policy: exact identity, path and digest checks at commit; the write is an atomic exchange, never a check followed by a rename; displaced bytes that are not the base are exchanged back and retained; the old source stays as a backup that is looked at again for late writers; write-ahead record and intent before the exchange; restart recovery decides from digests only, and so does an exchange that reports a failure; generated regions never reach a source: the tail is intact, or removed with the end of the authored text proven, and anything else refuses; every git directory is refused, nested, respelled or relocated; the hold on an edited note lifts only on a read of the note at that moment; no git command that writes | `test/obsidian-edits.test.mjs`: end to end through the real engine, a refusal table with a whole-project byte and `git status` oracle, a real second process writing in three styles and four timings with both outcomes asserted, a crash at every durable step, a disclosure walk, a generated tail cut at every byte offset from both sides and a fuzz over the whole note; every oracle has a mutation control | macOS arm64 on APFS only; refuses where no atomic exchange exists; the source becomes a new file (permission bits kept, hard links refused); a late writer's bytes are retained and surfaced, never merged; a hard link made after the path check is not detected; a fragment of generated text shorter than eight bytes left inside an edited body cannot be told from typing |
23
24
  | A structural edit made in a vault becomes one copy-only proposal and never a source change | The proposal adapter routes by whole identity to the existing store of the enrolled repository or refuses typed and writes nothing; it records the operation in private immutable state first, looks in the persisted store for its operation identity before creating, under a private per-repository lock taken over only with proof; it preflights the ledger limits, defers `ledger-full`, refuses `proposal-too-large` and `ledger-corrupt`, bounds batches and retries, and never compacts; a proposal holds codes, offsets and digests and no note text; acceptance is shown and never acted on | `test/obsidian-proposals.test.mjs`: routing table with a whole-project byte and `git status` oracle, identity survival against the real store, a crash at every step, two real processes, generated ledgers at 256 KiB, 16 MiB and 10,000 events and an invalid line, a no-busy-loop count of store reads, a disclosure walk; engine cases in `test/obsidian-maintenance.test.mjs`; every oracle has a mutation control | In manual mode an operation exists only after apply has looked at the edit; a refused or exhausted operation waits for a person; the store directory lives in the repository and must be git-ignored; two workspaces that enrol one repository create one proposal each |
24
- | Opening a view reports `current` only for the exact, verified, present generation and a qualified app | `open` needs a tick of the proven service after the request, a persisted `current`, an independent read-back of the trusted pointer and every note, and an app at or above the minimum version that answers for that vault; every other outcome is typed, distinct and exits non-zero; the app and the operating system are reached only through injected seams, and the production ones only behind `--adapter=obsidian-cli` | `test/obsidian-open.test.mjs`: outcome table, read-back, app-floor, busy and read-only cases, each with a deliberately broken rule that must fail; a spawn guard and a production-seam import check | The production probe and launcher are not exercised against a real app here; `indexing` relies on an undocumented readiness field until acceptance qualifies it |
25
- | Operating-system startup is never installed implicitly | `buildStartupAdapter` is pure text generation; Windows refuses typed; the service refuses `--startup` without a consent that covers startup | Builder purity oracle (no filesystem, process or home-directory access; no machine path beyond its inputs) and startup-consent refusal | Generated units have not been qualified against real launchd or systemd hosts |
25
+ | Opening a view reports `current` only for the exact, verified, present generation and a qualified app | `open` needs a tick of the proven service after the request, a persisted `current`, an independent read-back of the trusted pointer and every note, and an app at or above the minimum version that lists the vault and answers for it; the vault is added to the app's list through the app while it runs, and in its settings file only while the process table shows no Obsidian, atomically, with a backup, keeping every other key, and leaving nothing behind when a step fails; never inside a folder the app lists as a vault; a call about the vault is routed, from the app's list, to that vault only (its folder or its id) or not made; every other outcome is typed, distinct and exits non-zero; the app and the operating system are reached only through injected seams, and the production ones only behind the selected adapter: `--adapter=obsidian-cli`, or the one the workspace remembers, which the test runner never uses | `test/obsidian-open.test.mjs`: outcome table, read-back, app-floor, busy, read-only, every app state, settings-file refusal and retry cases, each with a deliberately broken rule that must fail; a failure injected at every file-system call of the settings write; call routing against a model of the app's own routing; a spawn guard (a private HOME, on Linux a private XDG_RUNTIME_DIR, and no such child on Windows) and a production-seam import check; the opt-in `test/obsidian-first-open-real-app.test.mjs` against an isolated app | The operating system's URL opener is not exercised by any test (the real-app suite hands URLs to its isolated app directly); `indexing` relies on an undocumented readiness field; the real-app suite has run on macOS only |
26
+ | Operating-system startup is never installed implicitly | `buildStartupAdapter` is pure text generation; a login item is installed only by `service unit --install`, after a consent that covers startup is recorded; the production service manager refuses under the test runner and for a HOME that is not the account's; Windows refuses typed; the service refuses `--startup` without a consent that covers startup, and under it a refusal exits 0 so it is not restarted in a loop | Builder purity oracle; golden unit texts; manager call sequences against launchctl and systemctl stand-ins; production-manager refusals in a child process; a spawn and file guard on the real LaunchAgents and systemd folders; startup refusal exit codes | The managers have been exercised against stand-ins, not against a live launchd or systemd session |
26
27
  | Expected operator failures are actionable without leaking internals | Typed project/JSON diagnostics and the CLI execution wrapper | `test/cli-brand.test.mjs` | Unexpected stacks require the operator to opt in with `ATELIER_DEBUG=1` |
27
28
  | Published APIs do not disappear silently | Tag-derived subpath and named-export baseline plus version/tag identity refusal | `public-api:compat`; `test/public-api-compat.test.mjs` | Additive API checks do not decide whether a new version number is appropriate |
28
29
  | The published artifact is the artifact tested | `release:candidate` packs once, binds SHA-256, sends that exact archive through allowlist/content audit, bare-consumer install, all-export import, and branded distribution smoke, then the trusted-publishing workflow retains and publishes that same tarball path | `release:audit`, `consumer:smoke`, `distribution:smoke`, `assurance:mutation-smoke`, `publish-workflow.test.mjs` | Passing gates does not publish, deploy, or constitute an external reviewer’s approval |