@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,355 @@
1
+ export function catalogDocument() {
2
+ return {
3
+ "schema": "atelier-architecture-catalog@v1",
4
+ "entries": [
5
+ {
6
+ "id": "inquiry",
7
+ "kind": "responsibility",
8
+ "label": "Inquiry",
9
+ "aliases": [],
10
+ "purpose": "Investigate uncertainty and establish what evidence supports.",
11
+ "implementation": [
12
+ "src/inquiry/index.mjs"
13
+ ]
14
+ },
15
+ {
16
+ "id": "knowledge-stewardship",
17
+ "kind": "responsibility",
18
+ "label": "Knowledge Stewardship",
19
+ "aliases": [],
20
+ "purpose": "Curate, govern, connect and maintain knowledge and its operational applicability.",
21
+ "implementation": [
22
+ "src/knowledge/index.mjs",
23
+ "src/intake/store.mjs",
24
+ "src/ingestion/store.mjs",
25
+ "src/knowledge/ingestion.mjs",
26
+ "src/ingestion/semantic.mjs",
27
+ "src/commands/knowledge.mjs",
28
+ "src/commands/knowledge-semantic.mjs",
29
+ "src/knowledge/semantic-operation.mjs",
30
+ "src/knowledge/plan.mjs",
31
+ "src/knowledge/context.mjs",
32
+ "src/knowledge/workspace.mjs",
33
+ "src/knowledge/sessions.mjs"
34
+ ]
35
+ },
36
+ {
37
+ "id": "practical-judgment",
38
+ "kind": "responsibility",
39
+ "label": "Practical Judgment",
40
+ "aliases": [
41
+ "Phronesis"
42
+ ],
43
+ "purpose": "Discern fitting action, cultivate practice and learn from consequences.",
44
+ "implementation": [
45
+ "src/learning/store.mjs",
46
+ "src/judgment/index.mjs",
47
+ "src/judgment/practice.mjs",
48
+ "src/judgment/practice-evaluation.mjs",
49
+ "src/capabilities/instructions.mjs"
50
+ ]
51
+ },
52
+ {
53
+ "id": "creation-delivery",
54
+ "kind": "responsibility",
55
+ "label": "Creation and Delivery",
56
+ "aliases": [],
57
+ "purpose": "Design, implement, verify and deliver intended changes.",
58
+ "implementation": [
59
+ "src/build/index.mjs"
60
+ ]
61
+ },
62
+ {
63
+ "id": "capability-stewardship",
64
+ "kind": "responsibility",
65
+ "label": "Capability Stewardship",
66
+ "aliases": [],
67
+ "purpose": "Compose, qualify, package, adopt, exercise and evolve reusable abilities.",
68
+ "implementation": [
69
+ "src/capabilities/index.mjs",
70
+ "src/skills/steward.mjs"
71
+ ]
72
+ },
73
+ {
74
+ "id": "reflection",
75
+ "kind": "responsibility",
76
+ "label": "Reflection",
77
+ "aliases": [],
78
+ "purpose": "Form revisable assessments of the person, work, interaction and system.",
79
+ "implementation": [
80
+ "src/reflection/index.mjs"
81
+ ]
82
+ },
83
+ {
84
+ "id": "interaction",
85
+ "kind": "responsibility",
86
+ "label": "Interaction",
87
+ "aliases": [],
88
+ "purpose": "Communicate, listen, pace, challenge and repair through the host conversation authority.",
89
+ "implementation": [
90
+ "src/interaction/index.mjs"
91
+ ]
92
+ },
93
+ {
94
+ "id": "coordination",
95
+ "kind": "responsibility",
96
+ "label": "Coordination",
97
+ "aliases": [],
98
+ "purpose": "Connect work, ownership, dependencies, delivery, recovery and outcomes.",
99
+ "implementation": [
100
+ "src/coordination/index.mjs",
101
+ "src/build/index.mjs"
102
+ ]
103
+ },
104
+ {
105
+ "id": "discovery",
106
+ "kind": "harness",
107
+ "label": "Discovery Harness",
108
+ "aliases": [
109
+ "Discovery Engine"
110
+ ],
111
+ "purpose": "Composes the named responsibility through the existing workflow.",
112
+ "implementation": [
113
+ "src/inquiry/index.mjs"
114
+ ]
115
+ },
116
+ {
117
+ "id": "research",
118
+ "kind": "harness",
119
+ "label": "Research Harness",
120
+ "aliases": [],
121
+ "purpose": "Composes the named responsibility through the existing workflow.",
122
+ "implementation": [
123
+ "src/inquiry/index.mjs"
124
+ ]
125
+ },
126
+ {
127
+ "id": "knowledge",
128
+ "kind": "harness",
129
+ "label": "Knowledge Harness",
130
+ "aliases": [],
131
+ "purpose": "Composes the named responsibility through the existing workflow.",
132
+ "implementation": [
133
+ "src/knowledge/index.mjs"
134
+ ]
135
+ },
136
+ {
137
+ "id": "build",
138
+ "kind": "harness",
139
+ "label": "Build Harness",
140
+ "aliases": [],
141
+ "purpose": "Composes the named responsibility through the existing workflow.",
142
+ "implementation": [
143
+ "src/build/index.mjs"
144
+ ]
145
+ },
146
+ {
147
+ "id": "capability-harness",
148
+ "kind": "harness",
149
+ "label": "Capability Harness",
150
+ "aliases": [
151
+ "Skills Harness"
152
+ ],
153
+ "purpose": "Composes the named responsibility through the existing workflow.",
154
+ "implementation": [
155
+ "src/capabilities/index.mjs"
156
+ ]
157
+ },
158
+ {
159
+ "id": "learning",
160
+ "kind": "harness",
161
+ "label": "Learning lifecycle",
162
+ "aliases": [],
163
+ "purpose": "Composes the named responsibility through the existing workflow.",
164
+ "implementation": [
165
+ "src/learning/store.mjs"
166
+ ]
167
+ },
168
+ {
169
+ "id": "ingestion",
170
+ "kind": "harness",
171
+ "label": "Ingestion workflow",
172
+ "aliases": [],
173
+ "purpose": "Composes the named responsibility through the existing workflow.",
174
+ "implementation": [
175
+ "src/ingestion/store.mjs"
176
+ ]
177
+ },
178
+ {
179
+ "id": "skill-steward",
180
+ "kind": "role",
181
+ "label": "Skill Steward",
182
+ "aliases": [],
183
+ "purpose": "Participation within a responsibility; does not create a separate authority.",
184
+ "implementation": [
185
+ "src/skills/steward.mjs"
186
+ ]
187
+ },
188
+ {
189
+ "id": "witness",
190
+ "kind": "role",
191
+ "label": "Witness",
192
+ "aliases": [],
193
+ "purpose": "Participation within a responsibility; does not create a separate authority.",
194
+ "implementation": []
195
+ },
196
+ {
197
+ "id": "companion",
198
+ "kind": "role",
199
+ "label": "Companion",
200
+ "aliases": [],
201
+ "purpose": "Participation within a responsibility; does not create a separate authority.",
202
+ "implementation": []
203
+ },
204
+ {
205
+ "id": "orthogonal-inquiry",
206
+ "kind": "method",
207
+ "label": "Orthogonal inquiry",
208
+ "aliases": [],
209
+ "purpose": "An optional method, selected for its fit to the purpose.",
210
+ "implementation": []
211
+ },
212
+ {
213
+ "id": "bayesian-assessment",
214
+ "kind": "method",
215
+ "label": "Bayesian assessment",
216
+ "aliases": [],
217
+ "purpose": "An optional method, selected for its fit to the purpose.",
218
+ "implementation": []
219
+ },
220
+ {
221
+ "id": "coaching",
222
+ "kind": "method",
223
+ "label": "Coaching",
224
+ "aliases": [],
225
+ "purpose": "An optional method, selected for its fit to the purpose.",
226
+ "implementation": []
227
+ },
228
+ {
229
+ "id": "trackable",
230
+ "kind": "record",
231
+ "label": "Trackable",
232
+ "aliases": [],
233
+ "purpose": "Domain composition of definition, instance, occurrences, evidence and qualified views.",
234
+ "implementation": [
235
+ "src/trackables/store.mjs"
236
+ ]
237
+ },
238
+ {
239
+ "id": "adr",
240
+ "kind": "record",
241
+ "label": "Architecture decision record",
242
+ "aliases": [],
243
+ "purpose": "Repository-owned decision identity and history; implementation and evidence currency are distinct.",
244
+ "implementation": []
245
+ },
246
+ {
247
+ "id": "govern-adoption",
248
+ "kind": "capability",
249
+ "label": "Govern capability adoption",
250
+ "aliases": [],
251
+ "purpose": "Independently adopt an exact reusable capability in a repository.",
252
+ "implementation": [
253
+ "src/capabilities/index.mjs"
254
+ ]
255
+ },
256
+ {
257
+ "id": "steward-skill",
258
+ "kind": "resource",
259
+ "label": "Steward operating skill",
260
+ "aliases": [],
261
+ "purpose": "A portable operating resource for the stewardship outcome.",
262
+ "implementation": [
263
+ "skills/codex/atelier-skill-steward/SKILL.md"
264
+ ]
265
+ },
266
+ {
267
+ "id": "codex-repository",
268
+ "kind": "host",
269
+ "label": "Codex repository profile",
270
+ "aliases": [],
271
+ "purpose": "An explicit skill placement profile; actual host loading requires separate evidence.",
272
+ "implementation": [
273
+ "src/capabilities/package.mjs"
274
+ ]
275
+ }
276
+ ],
277
+ "relations": [
278
+ {
279
+ "from": "discovery",
280
+ "type": "composes",
281
+ "to": "inquiry"
282
+ },
283
+ {
284
+ "from": "research",
285
+ "type": "composes",
286
+ "to": "inquiry"
287
+ },
288
+ {
289
+ "from": "knowledge",
290
+ "type": "composes",
291
+ "to": "knowledge-stewardship"
292
+ },
293
+ {
294
+ "from": "build",
295
+ "type": "composes",
296
+ "to": "creation-delivery"
297
+ },
298
+ {
299
+ "from": "capability-harness",
300
+ "type": "composes",
301
+ "to": "capability-stewardship"
302
+ },
303
+ {
304
+ "from": "learning",
305
+ "type": "composes",
306
+ "to": "practical-judgment"
307
+ },
308
+ {
309
+ "from": "ingestion",
310
+ "type": "composes",
311
+ "to": "knowledge-stewardship"
312
+ },
313
+ {
314
+ "from": "skill-steward",
315
+ "type": "participates",
316
+ "to": "capability-stewardship"
317
+ },
318
+ {
319
+ "from": "witness",
320
+ "type": "participates",
321
+ "to": "reflection"
322
+ },
323
+ {
324
+ "from": "companion",
325
+ "type": "participates",
326
+ "to": "interaction"
327
+ },
328
+ {
329
+ "from": "research",
330
+ "type": "applies",
331
+ "to": "orthogonal-inquiry"
332
+ },
333
+ {
334
+ "from": "discovery",
335
+ "type": "applies",
336
+ "to": "bayesian-assessment"
337
+ },
338
+ {
339
+ "from": "govern-adoption",
340
+ "type": "supports",
341
+ "to": "capability-stewardship"
342
+ },
343
+ {
344
+ "from": "steward-skill",
345
+ "type": "realizes",
346
+ "to": "govern-adoption"
347
+ },
348
+ {
349
+ "from": "codex-repository",
350
+ "type": "executes",
351
+ "to": "steward-skill"
352
+ }
353
+ ]
354
+ }
355
+ }
@@ -0,0 +1,93 @@
1
+ import { catalogDocument } from './catalog.mjs'
2
+ import fs from 'node:fs'
3
+ import Ajv from 'ajv/dist/2020.js'
4
+ import { boundedLearningValue, learningDigest } from '../learning/contracts.mjs'
5
+
6
+ const schema = JSON.parse(fs.readFileSync(new URL('../../contracts/atelier-architecture.v1.schema.json', import.meta.url)))
7
+ const ajv = new Ajv({ strict: true, allErrors: true })
8
+ const validators = new Map()
9
+ const relationKinds = {
10
+ composes: [['harness'], ['responsibility']],
11
+ participates: [['role'], ['responsibility']],
12
+ realizes: [['resource'], ['capability']],
13
+ supports: [['capability'], ['responsibility']],
14
+ applies: [['harness'], ['method']],
15
+ handles: [['harness'], ['record']],
16
+ executes: [['host'], ['resource']],
17
+ }
18
+ export function validateArchitecture(value, shape = 'catalog') {
19
+ try { boundedLearningValue(value) } catch (error) { return [error.message] }
20
+ if (!['catalog', 'binding'].includes(shape)) return ['unknown architecture shape']
21
+ if (!validators.has(shape)) validators.set(shape, ajv.compile({ $schema: schema.$schema, $defs: schema.$defs, $ref: `#/$defs/${shape}` }))
22
+ const validate = validators.get(shape)
23
+ if (!validate(value)) return validate.errors.map(e => `${e.instancePath || '/'}: ${e.message}`)
24
+ const errors = []
25
+ if (shape === 'catalog') {
26
+ const entries = new Map(), labels = new Map(), relations = new Set()
27
+ for (const entry of value.entries) {
28
+ if (entries.has(entry.id)) errors.push(`duplicate identity: ${entry.id}`)
29
+ entries.set(entry.id, entry)
30
+ for (const label of [entry.id, entry.label, ...entry.aliases]) {
31
+ const key = label.toLowerCase()
32
+ if (labels.has(key) && labels.get(key) !== entry.id) errors.push(`ambiguous alias: ${label}`)
33
+ labels.set(key, entry.id)
34
+ }
35
+ }
36
+ for (const [index, relation] of value.relations.entries()) {
37
+ const [from, to] = relationKinds[relation.type]
38
+ if (!from.includes(entries.get(relation.from)?.kind) || !to.includes(entries.get(relation.to)?.kind)) errors.push(`/relations/${index}: incompatible kinds or missing identity`)
39
+ const key = JSON.stringify(relation)
40
+ if (relations.has(key)) errors.push(`/relations/${index}: duplicate relationship`)
41
+ relations.add(key)
42
+ }
43
+ } else {
44
+ const pointers = new Set()
45
+ for (const field of value.fields) {
46
+ if (pointers.has(field.pointer)) errors.push(`duplicate authored field: ${field.pointer}`)
47
+ pointers.add(field.pointer)
48
+ if (field.classification === 'enforced' && field.consumer === null) errors.push(`${field.pointer}: enforcement requires a named consumer`)
49
+ }
50
+ }
51
+ return errors
52
+ }
53
+ function assert(value, shape) {
54
+ const errors = validateArchitecture(value, shape)
55
+ if (errors.length) throw new Error(`invalid architecture ${shape}: ${errors.join('; ')}`)
56
+ return value
57
+ }
58
+ export function responsibilityCatalog() {
59
+ return assert(catalogDocument(), 'catalog')
60
+ }
61
+ export function architectureEntry(name, catalog = responsibilityCatalog()) {
62
+ assert(catalog, 'catalog')
63
+ if (typeof name !== 'string') throw new Error('architecture name required')
64
+ const key = name.toLowerCase()
65
+ return catalog.entries.find(entry => [entry.id, entry.label, ...entry.aliases].some(label => label.toLowerCase() === key)) ?? null
66
+ }
67
+ // Diagnostic resolution never installs a definition or grants operation authority.
68
+ // A consumer declares its exact supported profile/revision/classifications. Missing
69
+ // coverage is visible even for optional behavior; required gaps prevent resolution.
70
+ export function resolveBehaviorBinding({ binding, consumers }) {
71
+ assert(binding, 'binding')
72
+ boundedLearningValue(consumers)
73
+ if (!Array.isArray(consumers) || consumers.length > 128) throw new Error('bounded consumer declarations required')
74
+ const seen = new Set()
75
+ for (const consumer of consumers) {
76
+ if (!consumer || Object.keys(consumer).sort().join(',') !== 'classifications,id,profile,revision' ||
77
+ ![consumer.id, consumer.profile, consumer.revision].every(v => typeof v === 'string' && v.length > 0 && v.length <= 256) ||
78
+ !Array.isArray(consumer.classifications) || !consumer.classifications.length ||
79
+ consumer.classifications.some(v => !['enforced', 'guidance', 'presentation', 'rationale'].includes(v))) throw new Error('invalid consumer declaration')
80
+ const key = `${consumer.id}/${consumer.profile}`
81
+ if (seen.has(key)) throw new Error('duplicate consumer profile')
82
+ seen.add(key)
83
+ }
84
+ const diagnostics = []
85
+ for (const field of binding.fields) {
86
+ const c = field.consumer
87
+ if (field.classification === 'rationale' && c === null) continue
88
+ const supported = consumers.some(item => c && item.id === c.id && item.profile === c.profile && item.revision === c.revision && item.classifications.includes(field.classification))
89
+ if (!supported) diagnostics.push({ pointer: field.pointer, code: 'unsupported-consumer', required: field.required, classification: field.classification, consumer: c })
90
+ }
91
+ return { schema: 'atelier-behavior-resolution@v1', definition: structuredClone(binding.definition), bindingDigest: learningDigest(binding),
92
+ resolved: !diagnostics.some(d => d.required), diagnostics, adoption: 'not-established', executionAuthorized: false }
93
+ }
@@ -62,8 +62,9 @@ export function validateContentRules(rules, { label = 'contentRules' } = {}) {
62
62
  continue
63
63
  }
64
64
  for (const key of Object.keys(rule)) {
65
- if (!['id', 'kind', 'severity', 'pattern', 'paths', 'description'].includes(key)) errors.push(`${at} must not include additional property ${key}`)
65
+ if (!['id', 'kind', 'severity', 'pattern', 'paths', 'description', 'ext'].includes(key)) errors.push(`${at} must not include additional property ${key}`)
66
66
  }
67
+ if (rule.ext != null && !isObject(rule.ext)) errors.push(`${at}.ext must be an object`)
67
68
  const id = trimmed(rule.id)
68
69
  if (!id) errors.push(`${at}.id is required`)
69
70
  else if (seen.has(id)) errors.push(`${at}.id duplicates an earlier rule: ${id}`)
@@ -96,8 +97,9 @@ export function validateContentRuleExceptions(exceptions, rules = DEFAULT_CONTEN
96
97
  continue
97
98
  }
98
99
  for (const key of Object.keys(exception)) {
99
- if (!['rule', 'repo', 'paths', 'reason'].includes(key)) errors.push(`${at} must not include additional property ${key}`)
100
+ if (!['rule', 'repo', 'paths', 'reason', 'ext'].includes(key)) errors.push(`${at} must not include additional property ${key}`)
100
101
  }
102
+ if (exception.ext != null && !isObject(exception.ext)) errors.push(`${at}.ext must be an object`)
101
103
  const rule = trimmed(exception.rule)
102
104
  if (!rule) errors.push(`${at}.rule is required; an exception must name the rule it excepts`)
103
105
  else if (ruleIds.size && !ruleIds.has(rule)) errors.push(`${at}.rule "${rule}" is not a declared content rule`)
@@ -0,0 +1,158 @@
1
+ import fs from 'node:fs'
2
+ import { loadSigningKey, safeLabel, signDocument, verifyDocument } from '../attestation/sign.mjs'
3
+ import { commandProject, firstString, parseArgs } from '../project/config.mjs'
4
+ import { HOST_OWNER_KEYS_PATH, delegationBindings, draftDelegation, loadOwnerKeysFile, validateDelegation } from './delegation.mjs'
5
+ import { loadBoundaryPolicy, validateBoundaryPolicy } from './policy.mjs'
6
+
7
+ export const DELEGATION_USAGE = `Usage: atelier boundary delegation <draft|sign|verify>
8
+
9
+ draft --id ID --owner ACTOR --operator ACTOR --repos A[,B] --operations pre-commit[,boundary-check]
10
+ --expires RFC3339 [--not-before RFC3339] [--out FILE] [--project-config FILE]
11
+ Write an unsigned delegation. It binds the current boundary policy, the
12
+ managed repository set and each listed repository's root commit.
13
+
14
+ sign <delegation.json> --key FILE [--out FILE] [--project-config FILE]
15
+ The OWNER signs with their own private key file (from attestation keygen).
16
+ The project is required: sign recomputes the bindings from it, refuses a
17
+ draft that does not match, and prints what is being authorized.
18
+
19
+ verify <delegation.json> [--owner-keys FILE] [--json]
20
+ Report the signature against the host owner-keys file
21
+ (${HOST_OWNER_KEYS_PATH}), or against FILE to inspect a candidate host
22
+ file, together with that file's trust result and revocation. This is a
23
+ diagnostic; boundary check decides whether a delegation applies.
24
+
25
+ Exit codes: 0 success or valid, 1 invalid, 2 usage or input error.`
26
+
27
+ function fail(message) {
28
+ console.error(message)
29
+ process.exit(2)
30
+ }
31
+
32
+ const list = (value) => (typeof value === 'string' ? value.split(',').map((item) => item.trim()).filter(Boolean) : [])
33
+
34
+ function readJsonFile(file, label) {
35
+ try {
36
+ return JSON.parse(fs.readFileSync(file, 'utf8'))
37
+ } catch {
38
+ fail(`cannot read ${label} JSON: ${file}`)
39
+ }
40
+ return null
41
+ }
42
+
43
+ function writeOutput(out, value) {
44
+ const text = `${JSON.stringify(value, null, 2)}\n`
45
+ if (!out) return process.stdout.write(text)
46
+ try {
47
+ fs.writeFileSync(out, text, { flag: 'wx' })
48
+ } catch {
49
+ fail(`refusing to write ${out}: it exists or cannot be created`)
50
+ }
51
+ return console.error(`written to ${out}`)
52
+ }
53
+
54
+ function projectAndPolicy(argv) {
55
+ const project = commandProject({ argv })
56
+ const loaded = loadBoundaryPolicy(project)
57
+ if (!loaded.ok) fail(loaded.errors.join('\n'))
58
+ // Never draft or sign against a policy the check itself would reject.
59
+ const invalid = validateBoundaryPolicy(loaded.policy, project)
60
+ if (invalid.length) fail(`the boundary policy is invalid:\n${invalid.join('\n')}`)
61
+ return { project, policy: loaded.policy }
62
+ }
63
+
64
+ function runDraft(args, argv) {
65
+ const { project, policy } = projectAndPolicy(argv)
66
+ const expiresAt = firstString(args.expires)
67
+ if (!expiresAt) fail(`delegation draft requires --expires\n\n${DELEGATION_USAGE}`)
68
+ const draft = draftDelegation({
69
+ policy,
70
+ project,
71
+ id: firstString(args.id),
72
+ owner: firstString(args.owner),
73
+ operator: firstString(args.operator),
74
+ repos: list(args.repos),
75
+ operations: list(args.operations),
76
+ notBefore: firstString(args['not-before']) ?? new Date().toISOString().replace(/\.\d{3}Z$/, 'Z'),
77
+ expiresAt,
78
+ })
79
+ if (!draft.ok && !draft.errors.every((message) => /repoRoots/.test(message))) fail(draft.errors.join('\n'))
80
+ if (Object.values(draft.delegation.repoRoots).some((root) => !root)) fail('every listed repository needs at least one commit before it can be delegated')
81
+ if (!draft.ok) fail(draft.errors.join('\n'))
82
+ writeOutput(firstString(args.out), draft.delegation)
83
+ }
84
+
85
+ function runSign(args, argv) {
86
+ const [file] = args._
87
+ if (!file) fail(`delegation sign requires a delegation file\n\n${DELEGATION_USAGE}`)
88
+ const keyPath = firstString(args.key)
89
+ if (!keyPath) fail(`delegation sign requires --key FILE (the owner's own private key)\n\n${DELEGATION_USAGE}`)
90
+ const doc = readJsonFile(file, 'delegation')
91
+ if (doc?.signature !== null) fail('delegation sign requires an unsigned delegation (signature: null)')
92
+ const { project, policy } = projectAndPolicy(argv)
93
+ const shapeErrors = validateDelegation({ ...doc, signature: { algorithm: 'ed25519', keyId: 'unsigned', value: 'unsigned' } }, policy)
94
+ if (shapeErrors.length) fail(shapeErrors.join('\n'))
95
+ // The owner signs what the current project binds, never an opaque digest.
96
+ const expected = delegationBindings({ policy, project, repos: doc.repos })
97
+ if (doc.policyDigest !== expected.policyDigest) fail('the draft does not bind the current boundary policy; draft it again from this project')
98
+ if (doc.repos.some((name) => !expected.repoRoots[name] || doc.repoRoots[name] !== expected.repoRoots[name])) {
99
+ fail('the draft does not bind these repositories\' root commits; draft it again from this project')
100
+ }
101
+ // Every value is printed through safeLabel: ids come from operator-editable files.
102
+ const operatorActor = policy.actors[doc.operator] ?? {}
103
+ const label = (value) => safeLabel(value, 160)
104
+ console.error([
105
+ `Authorizing delegation ${label(doc.id)}:`,
106
+ ` operator ${label(doc.operator)} may pass the actor check owned by ${label(doc.owner)}`,
107
+ ` the operator is recognised by githubLogin ${label(operatorActor.githubLogin ?? '(none)')} and gitEmails ${(operatorActor.gitEmails ?? []).map((email) => label(email)).join(', ') || '(none)'}`,
108
+ ...doc.repos.map((name) => ` repository ${label(name)} with root commit ${label(doc.repoRoots[name])}`),
109
+ ` operations: ${doc.operations.map((op) => label(op)).join(', ')}`,
110
+ ` from ${label(new Date(Date.parse(doc.notBefore)).toISOString())} until ${label(new Date(Date.parse(doc.expiresAt)).toISOString())}`,
111
+ ` while the boundary policy and repository set stay ${label(doc.policyDigest)}`,
112
+ ].join('\n'))
113
+ let signed
114
+ try {
115
+ // An explicit key file only: the environment and working-directory fallbacks are not used for delegations.
116
+ const key = loadSigningKey({ keyPath, env: {}, cwd: '/nonexistent' })
117
+ if (key.algorithm !== 'ed25519') fail('delegations are signed with ed25519 keys')
118
+ signed = signDocument(doc, { privateKey: key.privateKeyJwk, keyId: key.keyId, algorithm: key.algorithm })
119
+ } catch (error) {
120
+ fail(error.message)
121
+ }
122
+ writeOutput(firstString(args.out), signed)
123
+ }
124
+
125
+ function runVerify(args) {
126
+ const [file] = args._
127
+ if (!file) fail(`delegation verify requires a delegation file\n\n${DELEGATION_USAGE}`)
128
+ const doc = readJsonFile(file, 'delegation')
129
+ const keysFile = firstString(args['owner-keys']) ?? HOST_OWNER_KEYS_PATH
130
+ const ownerKeys = loadOwnerKeysFile(keysFile)
131
+ const report = { ownerKeysFile: keysFile, hostTrust: ownerKeys.ok ? { ok: true } : { ok: false, reason: ownerKeys.reason }, signatureValid: false, revoked: false, reasons: [] }
132
+ if (ownerKeys.ok) {
133
+ const key = ownerKeys.keys.find((item) => item.actorId === doc?.owner && item.keyId === doc?.signature?.keyId)
134
+ if (key) {
135
+ const checked = verifyDocument(doc, { publicKey: key })
136
+ report.signatureValid = checked.valid
137
+ report.reasons.push(...checked.reasons)
138
+ report.keyId = key.keyId
139
+ report.owner = key.actorId
140
+ } else report.reasons.push({ code: 'delegation-owner-key-missing', message: 'no host key for this owner and keyId' })
141
+ report.revoked = ownerKeys.revoked.has(doc?.id)
142
+ } else report.reasons.push({ code: ownerKeys.reason, message: ownerKeys.errors.join('; ') })
143
+ report.valid = report.hostTrust.ok && report.signatureValid && !report.revoked
144
+ if (args.json) console.log(JSON.stringify(report, null, 2))
145
+ else console.log(report.valid ? `signature valid for ${report.owner} key ${report.keyId}; scope, time and bindings are decided by boundary check` : `invalid: ${report.reasons.map((item) => item.code).join(', ') || (report.revoked ? 'delegation-revoked' : 'unknown')}`)
146
+ process.exit(report.valid ? 0 : 1)
147
+ }
148
+
149
+ export function runBoundaryDelegationCommand(argv = process.argv.slice(2)) {
150
+ const args = parseArgs(argv)
151
+ const [subcommand, ...rest] = args._
152
+ const sub = { ...args, _: rest }
153
+ if (args.help || args.h) return console.log(DELEGATION_USAGE)
154
+ if (subcommand === 'draft') return runDraft(sub, argv)
155
+ if (subcommand === 'sign') return runSign(sub, argv)
156
+ if (subcommand === 'verify') return runVerify(sub)
157
+ return fail(DELEGATION_USAGE)
158
+ }