@mnstry/atelier 0.2.0-alpha.12 → 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 (516) hide show
  1. package/CHANGELOG.md +661 -0
  2. package/README.md +142 -6
  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-personal-workspace-manifest.v1.schema.json +87 -0
  21. package/contracts/atelier-personal-workspace-overlay.v1.schema.json +299 -0
  22. package/contracts/atelier-template-adoption.v1.schema.json +223 -0
  23. package/contracts/atelier-template-profile.v1.schema.json +1168 -0
  24. package/contracts/atelier-trackable.v1.schema.json +781 -0
  25. package/contracts/atelier-upgrade-plan.v3.schema.json +532 -0
  26. package/docs/architecture.md +89 -0
  27. package/docs/assurance-controls.md +2 -2
  28. package/docs/blocks/capability-stewardship.md +17 -0
  29. package/docs/blocks/claims.md +16 -3
  30. package/docs/blocks/inquiry-harnesses.md +19 -0
  31. package/docs/blocks/learning-harnesses.md +17 -0
  32. package/docs/capability-stewardship.md +269 -0
  33. package/docs/coordination.md +51 -0
  34. package/docs/decision-practices.md +111 -0
  35. package/docs/decisions.md +29 -0
  36. package/docs/evidence-navigation.md +237 -0
  37. package/docs/exact-upgrades.md +3 -2
  38. package/docs/ingestion.md +181 -0
  39. package/docs/inquiry-harnesses.md +211 -0
  40. package/docs/install.md +80 -3
  41. package/docs/intake-and-guides.md +5 -0
  42. package/docs/integration-contract-decisions.md +24 -2
  43. package/docs/interaction-and-reflection.md +72 -0
  44. package/docs/knowledge-graph.md +20 -0
  45. package/docs/knowledge-health/api.md +30 -0
  46. package/docs/knowledge-health/assessment/api.md +96 -0
  47. package/docs/knowledge-health/assessment/capabilities.md +40 -0
  48. package/docs/knowledge-health/assessment/evaluation.md +27 -0
  49. package/docs/knowledge-health/assessment/facilitator.md +30 -0
  50. package/docs/knowledge-health/assessment/quickstart.md +61 -0
  51. package/docs/knowledge-health/assessment/troubleshooting.md +23 -0
  52. package/docs/knowledge-health/devday/facilitator.md +16 -0
  53. package/docs/knowledge-health/devday/participant-response.md +22 -0
  54. package/docs/knowledge-health/devday/public-default.md +107 -0
  55. package/docs/knowledge-health/devday/quickstart.md +18 -0
  56. package/docs/knowledge-health/devday/support.md +22 -0
  57. package/docs/knowledge-health/exercise.md +17 -0
  58. package/docs/knowledge-health/facilitator.md +20 -0
  59. package/docs/knowledge-health/quickstart.md +94 -0
  60. package/docs/knowledge-health/readme.md +15 -0
  61. package/docs/knowledge-health/support.md +34 -0
  62. package/docs/knowledge-setup.md +248 -0
  63. package/docs/knowledge-workspace.md +264 -0
  64. package/docs/learning-harnesses.md +238 -0
  65. package/docs/learning.md +215 -0
  66. package/docs/local-services.md +181 -16
  67. package/docs/obsidian-contract.md +223 -15
  68. package/docs/obsidian-plugin.md +38 -4
  69. package/docs/obsidian.md +613 -51
  70. package/docs/optional-ingestion.md +83 -0
  71. package/docs/personal-workspace.md +257 -0
  72. package/docs/practical-judgment.md +92 -0
  73. package/docs/progressive-ingestion-acceptance.md +89 -0
  74. package/docs/progressive-ingestion.md +235 -0
  75. package/docs/project-command-inventory.md +1 -0
  76. package/docs/release-engineering.md +49 -0
  77. package/docs/repo-boundary-guard.md +94 -0
  78. package/docs/research-starter-quickstart.md +66 -0
  79. package/docs/research-starter.md +114 -0
  80. package/docs/semantic-ingestion.md +198 -0
  81. package/docs/semantic-operation.md +317 -0
  82. package/docs/skill-steward.md +6 -0
  83. package/docs/template-profile.md +164 -0
  84. package/docs/template-upgrades.md +114 -0
  85. package/docs/trackables.md +111 -0
  86. package/docs/upgrade.md +47 -2
  87. package/fixtures/atelier-architecture/binding/invalid/document.json +19 -0
  88. package/fixtures/atelier-architecture/binding/valid/document.json +19 -0
  89. package/fixtures/atelier-architecture/catalog/invalid/document.json +290 -0
  90. package/fixtures/atelier-architecture/catalog/valid/document.json +343 -0
  91. package/fixtures/atelier-build-contract/attempt/invalid/document.json +20 -0
  92. package/fixtures/atelier-build-contract/attempt/valid/document.json +19 -0
  93. package/fixtures/atelier-build-contract/candidate/invalid/document.json +24 -0
  94. package/fixtures/atelier-build-contract/candidate/valid/document.json +23 -0
  95. package/fixtures/atelier-build-contract/decision/invalid/document.json +31 -0
  96. package/fixtures/atelier-build-contract/decision/valid/document.json +30 -0
  97. package/fixtures/atelier-build-contract/delivery/invalid/document.json +18 -0
  98. package/fixtures/atelier-build-contract/delivery/valid/document.json +17 -0
  99. package/fixtures/atelier-build-contract/gate/invalid/document.json +22 -0
  100. package/fixtures/atelier-build-contract/gate/valid/document.json +21 -0
  101. package/fixtures/atelier-build-contract/ledger/invalid/document.json +270 -0
  102. package/fixtures/atelier-build-contract/ledger/valid/document.json +269 -0
  103. package/fixtures/atelier-build-contract/objective/invalid/document.json +73 -0
  104. package/fixtures/atelier-build-contract/objective/valid/document.json +72 -0
  105. package/fixtures/atelier-build-contract/progress/invalid/document.json +18 -0
  106. package/fixtures/atelier-build-contract/progress/valid/document.json +17 -0
  107. package/fixtures/atelier-capability-contract/adoption/invalid/document.json +71 -0
  108. package/fixtures/atelier-capability-contract/adoption/valid/document.json +70 -0
  109. package/fixtures/atelier-capability-contract/event/invalid/document.json +18 -0
  110. package/fixtures/atelier-capability-contract/event/valid/document.json +17 -0
  111. package/fixtures/atelier-capability-contract/journal/invalid/document.json +382 -0
  112. package/fixtures/atelier-capability-contract/journal/valid/document.json +381 -0
  113. package/fixtures/atelier-capability-contract/notice/invalid/document.json +8 -0
  114. package/fixtures/atelier-capability-contract/notice/valid/document.json +7 -0
  115. package/fixtures/atelier-capability-contract/package/invalid/document.json +59 -0
  116. package/fixtures/atelier-capability-contract/package/valid/document.json +58 -0
  117. package/fixtures/atelier-capability-contract/plan/invalid/document.json +107 -0
  118. package/fixtures/atelier-capability-contract/plan/valid/document.json +106 -0
  119. package/fixtures/atelier-capability-contract/release/invalid/document.json +85 -0
  120. package/fixtures/atelier-capability-contract/release/valid/document.json +84 -0
  121. package/fixtures/atelier-capability-contract/state/invalid/document.json +316 -0
  122. package/fixtures/atelier-capability-contract/state/valid/document.json +315 -0
  123. package/fixtures/atelier-coordination/dependency/invalid/document.json +37 -0
  124. package/fixtures/atelier-coordination/dependency/valid/document.json +36 -0
  125. package/fixtures/atelier-coordination/directive/invalid/document.json +25 -0
  126. package/fixtures/atelier-coordination/directive/valid/document.json +24 -0
  127. package/fixtures/atelier-coordination/disposition/invalid/document.json +34 -0
  128. package/fixtures/atelier-coordination/disposition/valid/document.json +33 -0
  129. package/fixtures/atelier-coordination/outcome/invalid/document.json +39 -0
  130. package/fixtures/atelier-coordination/outcome/valid/document.json +38 -0
  131. package/fixtures/atelier-coordination/recovery/invalid/document.json +34 -0
  132. package/fixtures/atelier-coordination/recovery/valid/document.json +33 -0
  133. package/fixtures/atelier-harness-contract/handoff/invalid/document.json +25 -0
  134. package/fixtures/atelier-harness-contract/handoff/valid/document.json +24 -0
  135. package/fixtures/atelier-ingestion/invalid/authority.json +19 -0
  136. package/fixtures/atelier-ingestion/semantic-baseline.json +26 -0
  137. package/fixtures/atelier-ingestion/semantic-operation.json +75 -0
  138. package/fixtures/atelier-ingestion/valid/plan-input.json +18 -0
  139. package/fixtures/atelier-inquiry-contract/assessment/invalid/document.json +41 -0
  140. package/fixtures/atelier-inquiry-contract/assessment/valid/document.json +40 -0
  141. package/fixtures/atelier-inquiry-contract/bundle/invalid/document.json +51 -0
  142. package/fixtures/atelier-inquiry-contract/bundle/valid/document.json +50 -0
  143. package/fixtures/atelier-inquiry-contract/campaign/invalid/document.json +17 -0
  144. package/fixtures/atelier-inquiry-contract/campaign/valid/document.json +16 -0
  145. package/fixtures/atelier-inquiry-contract/decision/invalid/document.json +22 -0
  146. package/fixtures/atelier-inquiry-contract/decision/valid/document.json +21 -0
  147. package/fixtures/atelier-inquiry-contract/feedback/invalid/document.json +19 -0
  148. package/fixtures/atelier-inquiry-contract/feedback/valid/document.json +18 -0
  149. package/fixtures/atelier-inquiry-contract/handoff/invalid/document.json +92 -0
  150. package/fixtures/atelier-inquiry-contract/handoff/valid/document.json +91 -0
  151. package/fixtures/atelier-inquiry-contract/hypothesis/invalid/document.json +20 -0
  152. package/fixtures/atelier-inquiry-contract/hypothesis/valid/document.json +19 -0
  153. package/fixtures/atelier-inquiry-contract/ledger/invalid/document.json +680 -0
  154. package/fixtures/atelier-inquiry-contract/ledger/valid/document.json +679 -0
  155. package/fixtures/atelier-inquiry-contract/legacy-assessment/invalid/document.json +19 -0
  156. package/fixtures/atelier-inquiry-contract/legacy-assessment/valid/document.json +18 -0
  157. package/fixtures/atelier-inquiry-contract/request/invalid/document.json +50 -0
  158. package/fixtures/atelier-inquiry-contract/request/valid/document.json +49 -0
  159. package/fixtures/atelier-inquiry-contract/source/invalid/document.json +18 -0
  160. package/fixtures/atelier-inquiry-contract/source/valid/document.json +17 -0
  161. package/fixtures/atelier-inquiry-contract/withdrawal/invalid/document.json +16 -0
  162. package/fixtures/atelier-inquiry-contract/withdrawal/valid/document.json +15 -0
  163. package/fixtures/atelier-instruction-adoption/context-receipt/invalid/document.json +18 -0
  164. package/fixtures/atelier-instruction-adoption/context-receipt/valid/document.json +17 -0
  165. package/fixtures/atelier-instruction-adoption/plan/invalid/document.json +63 -0
  166. package/fixtures/atelier-instruction-adoption/plan/valid/document.json +62 -0
  167. package/fixtures/atelier-instruction-adoption/receipt/invalid/document.json +22 -0
  168. package/fixtures/atelier-instruction-adoption/receipt/valid/document.json +21 -0
  169. package/fixtures/atelier-instruction-adoption/state/invalid/document.json +30 -0
  170. package/fixtures/atelier-instruction-adoption/state/valid/document.json +29 -0
  171. package/fixtures/atelier-interaction/act/invalid/document.json +25 -0
  172. package/fixtures/atelier-interaction/act/valid/document.json +24 -0
  173. package/fixtures/atelier-interaction/assessment/invalid/document.json +32 -0
  174. package/fixtures/atelier-interaction/assessment/valid/document.json +31 -0
  175. package/fixtures/atelier-interaction/observation/invalid/document.json +22 -0
  176. package/fixtures/atelier-interaction/observation/valid/document.json +21 -0
  177. package/fixtures/atelier-interaction/policy/invalid/document.json +20 -0
  178. package/fixtures/atelier-interaction/policy/valid/document.json +19 -0
  179. package/fixtures/atelier-judgment/case/invalid/document.json +76 -0
  180. package/fixtures/atelier-judgment/case/valid/document.json +75 -0
  181. package/fixtures/atelier-judgment/decision/invalid/document.json +38 -0
  182. package/fixtures/atelier-judgment/decision/valid/document.json +37 -0
  183. package/fixtures/atelier-judgment/native-decision.md +3 -0
  184. package/fixtures/atelier-judgment/practice-reconsideration/definition.json +92 -0
  185. package/fixtures/atelier-judgment/practice-reconsideration/scenario.json +435 -0
  186. package/fixtures/atelier-knowledge-contract/activation/invalid/document.json +26 -0
  187. package/fixtures/atelier-knowledge-contract/activation/valid/document.json +25 -0
  188. package/fixtures/atelier-knowledge-contract/contribution/invalid/document.json +34 -0
  189. package/fixtures/atelier-knowledge-contract/contribution/valid/document.json +33 -0
  190. package/fixtures/atelier-knowledge-contract/domain/invalid/document.json +41 -0
  191. package/fixtures/atelier-knowledge-contract/domain/valid/document.json +40 -0
  192. package/fixtures/atelier-knowledge-contract/domain-revision/invalid/document.json +46 -0
  193. package/fixtures/atelier-knowledge-contract/domain-revision/valid/document.json +45 -0
  194. package/fixtures/atelier-knowledge-contract/evaluation/invalid/document.json +21 -0
  195. package/fixtures/atelier-knowledge-contract/evaluation/valid/document.json +20 -0
  196. package/fixtures/atelier-knowledge-contract/ledger/invalid/document.json +318 -0
  197. package/fixtures/atelier-knowledge-contract/ledger/valid/document.json +317 -0
  198. package/fixtures/atelier-knowledge-contract/relation/invalid/document.json +25 -0
  199. package/fixtures/atelier-knowledge-contract/relation/valid/document.json +24 -0
  200. package/fixtures/atelier-knowledge-contract/review/invalid/document.json +18 -0
  201. package/fixtures/atelier-knowledge-contract/review/valid/document.json +17 -0
  202. package/fixtures/atelier-knowledge-contract/withdrawal/invalid/document.json +16 -0
  203. package/fixtures/atelier-knowledge-contract/withdrawal/valid/document.json +15 -0
  204. package/fixtures/atelier-learning/invalid/authority.json +14 -0
  205. package/fixtures/atelier-learning/valid/capture.json +13 -0
  206. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/authority-key.json +17 -0
  207. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/nonempty-ext.json +25 -0
  208. package/fixtures/atelier-personal-workspace-contract/manifest/invalid/wrong-schema.json +22 -0
  209. package/fixtures/atelier-personal-workspace-contract/manifest/valid/manifest.json +22 -0
  210. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/authority-key.json +25 -0
  211. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/unknown-top-level-field.json +27 -0
  212. package/fixtures/atelier-personal-workspace-contract/overlay/invalid/wrong-schema.json +24 -0
  213. package/fixtures/atelier-trackable/definition/invalid/document.json +15 -0
  214. package/fixtures/atelier-trackable/definition/valid/document.json +14 -0
  215. package/fixtures/atelier-trackable/request/invalid/document.json +23 -0
  216. package/fixtures/atelier-trackable/request/valid/document.json +22 -0
  217. package/fixtures/boundary-delegations/invalid/authority-key.v1.json +30 -0
  218. package/fixtures/boundary-delegations/invalid/push-operation.v1.json +28 -0
  219. package/fixtures/boundary-delegations/invalid/unsigned.v1.json +25 -0
  220. package/fixtures/boundary-delegations/valid/empty.v1.json +4 -0
  221. package/fixtures/boundary-delegations/valid/signed-operator.v1.json +30 -0
  222. package/fixtures/boundary-owner-keys/invalid/wrong-algorithm.v1.json +15 -0
  223. package/fixtures/boundary-owner-keys/invalid/wrong-curve.v1.json +15 -0
  224. package/fixtures/boundary-owner-keys/valid/one-owner.v1.json +17 -0
  225. package/fixtures/capability-packages/adoption.example.json +70 -0
  226. package/fixtures/capability-packages/evidence-review/capability-package.json +58 -0
  227. package/fixtures/capability-packages/evidence-review/capability-release.json +84 -0
  228. package/fixtures/capability-packages/evidence-review/evaluation.md +15 -0
  229. package/fixtures/capability-packages/evidence-review/skills/evidence-review/SKILL.md +22 -0
  230. package/fixtures/capability-packages/evidence-review/skills/evidence-review/references/ledger.md +7 -0
  231. package/fixtures/capability-packages/research/capability-package.json +88 -0
  232. package/fixtures/capability-packages/research/capability-release.json +134 -0
  233. package/fixtures/capability-packages/research/evaluation.md +15 -0
  234. package/fixtures/capability-packages/research/skills/research-integrate/SKILL.md +29 -0
  235. package/fixtures/capability-packages/research/skills/research-integrate/references/integration.md +10 -0
  236. package/fixtures/capability-packages/research/skills/research-plan/SKILL.md +27 -0
  237. package/fixtures/capability-packages/research/skills/research-plan/references/inquiries.md +26 -0
  238. package/fixtures/capability-packages/research/skills/research-synthesize/SKILL.md +23 -0
  239. package/fixtures/capability-packages/research/skills/research-synthesize/references/synthesis.md +12 -0
  240. package/fixtures/evidence-navigation/invalid/duplicate-operation.json +16 -0
  241. package/fixtures/evidence-navigation/invalid/instruction-kind.json +36 -0
  242. package/fixtures/evidence-navigation/invalid/invalid-digest.json +36 -0
  243. package/fixtures/evidence-navigation/invalid/invalid-time.json +36 -0
  244. package/fixtures/evidence-navigation/invalid/missing-attribution.json +35 -0
  245. package/fixtures/evidence-navigation/invalid/reserved-extension.json +19 -0
  246. package/fixtures/evidence-navigation/invalid/unattributed-acceptance.json +36 -0
  247. package/fixtures/evidence-navigation/invalid/uncoerced-version.json +16 -0
  248. package/fixtures/evidence-navigation/invalid/unknown-currency.json +17 -0
  249. package/fixtures/evidence-navigation/invalid/unknown-selector-field.json +37 -0
  250. package/fixtures/evidence-navigation/invalid/unsupported-operation.json +15 -0
  251. package/fixtures/evidence-navigation/valid/claim.json +36 -0
  252. package/fixtures/evidence-navigation/valid/host.json +16 -0
  253. package/fixtures/evidence-navigation/valid/profile.json +16 -0
  254. package/fixtures/evidence-navigation/valid/snapshot.json +17 -0
  255. package/fixtures/harness-packages/build-harness/capability-package.json +61 -0
  256. package/fixtures/harness-packages/build-harness/capability-release.json +82 -0
  257. package/fixtures/harness-packages/build-harness/evaluation.md +3 -0
  258. package/fixtures/harness-packages/build-harness/skills/atelier-build-harness/SKILL.md +59 -0
  259. package/fixtures/harness-packages/knowledge-harness/capability-package.json +61 -0
  260. package/fixtures/harness-packages/knowledge-harness/capability-release.json +82 -0
  261. package/fixtures/harness-packages/knowledge-harness/evaluation.md +3 -0
  262. package/fixtures/harness-packages/knowledge-harness/skills/atelier-knowledge-harness/SKILL.md +60 -0
  263. package/fixtures/harnesses/learning-cycle.json +780 -0
  264. package/fixtures/inquiry/workshop.json +675 -0
  265. package/fixtures/inquiry-packages/discovery-harness/capability-package.json +61 -0
  266. package/fixtures/inquiry-packages/discovery-harness/capability-release.json +82 -0
  267. package/fixtures/inquiry-packages/discovery-harness/evaluation.md +3 -0
  268. package/fixtures/inquiry-packages/discovery-harness/skills/atelier-discovery-harness/SKILL.md +48 -0
  269. package/fixtures/inquiry-packages/research-harness/capability-package.json +61 -0
  270. package/fixtures/inquiry-packages/research-harness/capability-release.json +82 -0
  271. package/fixtures/inquiry-packages/research-harness/evaluation.md +3 -0
  272. package/fixtures/inquiry-packages/research-harness/skills/atelier-research-harness/SKILL.md +43 -0
  273. package/fixtures/knowledge-health/calibration-suite.json +26 -0
  274. package/fixtures/knowledge-health/calibration-trial.json +37 -0
  275. package/fixtures/knowledge-health/corrected/checklist.md +18 -0
  276. package/fixtures/knowledge-health/devday/participant-record.json +19 -0
  277. package/fixtures/knowledge-health/expected-summary.json +27 -0
  278. package/fixtures/knowledge-health/workshop/README.md +20 -0
  279. package/fixtures/knowledge-health/workshop/atelier.project.json +7 -0
  280. package/fixtures/knowledge-health/workshop/knowledge-plan.json +65 -0
  281. package/fixtures/knowledge-health/workshop/records/checklist.md +18 -0
  282. package/fixtures/knowledge-health/workshop/records/workshop.md +18 -0
  283. package/fixtures/knowledge-health/workshop/repo-access.v1.json +5 -0
  284. package/fixtures/knowledge-health/workspace/atelier.project.json +18 -0
  285. package/fixtures/knowledge-health/workspace/knowledge-plan.json +74 -0
  286. package/fixtures/knowledge-health/workspace/records/checklist.md +18 -0
  287. package/fixtures/knowledge-health/workspace/records/pilot.md +16 -0
  288. package/fixtures/knowledge-health/workspace/repo-access.v1.json +9 -0
  289. package/fixtures/personal-workspace/overlay.json +24 -0
  290. package/fixtures/templates/local-library.v1.json +75 -0
  291. package/fixtures/templates/upgrade-contracts/adoption-policy.v2/invalid.json +16 -0
  292. package/fixtures/templates/upgrade-contracts/adoption-policy.v2/valid.json +13 -0
  293. package/fixtures/templates/upgrade-contracts/migration.v3/invalid.json +24 -0
  294. package/fixtures/templates/upgrade-contracts/migration.v3/valid.json +21 -0
  295. package/fixtures/templates/upgrade-contracts/template-adoption.v1/invalid.json +60 -0
  296. package/fixtures/templates/upgrade-contracts/template-adoption.v1/valid.json +57 -0
  297. package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/invalid.json +85 -0
  298. package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/valid.json +82 -0
  299. package/package.json +59 -5
  300. package/skills/claude/atelier-build-harness/SKILL.md +59 -0
  301. package/skills/claude/atelier-coordination/SKILL.md +32 -0
  302. package/skills/claude/atelier-discovery-harness/SKILL.md +48 -0
  303. package/skills/claude/atelier-guided-upgrade/SKILL.md +29 -0
  304. package/skills/claude/atelier-interaction/SKILL.md +34 -0
  305. package/skills/claude/atelier-knowledge-harness/SKILL.md +60 -0
  306. package/skills/claude/atelier-knowledge-setup/SKILL.md +72 -0
  307. package/skills/claude/atelier-practical-judgment/SKILL.md +64 -0
  308. package/skills/claude/atelier-research-harness/SKILL.md +43 -0
  309. package/skills/claude/atelier-skill-steward/SKILL.md +53 -0
  310. package/skills/claude/atelier-trackables/SKILL.md +40 -0
  311. package/skills/codex/atelier-build-harness/SKILL.md +59 -0
  312. package/skills/codex/atelier-coordination/SKILL.md +32 -0
  313. package/skills/codex/atelier-discovery-harness/SKILL.md +48 -0
  314. package/skills/codex/atelier-guided-upgrade/SKILL.md +29 -0
  315. package/skills/codex/atelier-interaction/SKILL.md +34 -0
  316. package/skills/codex/atelier-knowledge-harness/SKILL.md +60 -0
  317. package/skills/codex/atelier-knowledge-setup/SKILL.md +72 -0
  318. package/skills/codex/atelier-practical-judgment/SKILL.md +64 -0
  319. package/skills/codex/atelier-research-harness/SKILL.md +43 -0
  320. package/skills/codex/atelier-skill-steward/SKILL.md +53 -0
  321. package/skills/codex/atelier-trackables/SKILL.md +40 -0
  322. package/src/architecture/catalog.mjs +355 -0
  323. package/src/architecture/index.mjs +93 -0
  324. package/src/boundary/content-rules.mjs +4 -2
  325. package/src/boundary/delegation-command.mjs +158 -0
  326. package/src/boundary/delegation.mjs +396 -0
  327. package/src/boundary/policy.mjs +52 -10
  328. package/src/build/git.mjs +18 -0
  329. package/src/build/index.mjs +3 -0
  330. package/src/build/ledger.mjs +88 -0
  331. package/src/capabilities/adoption.mjs +381 -0
  332. package/src/capabilities/evidence.mjs +140 -0
  333. package/src/capabilities/files.mjs +124 -0
  334. package/src/capabilities/index.mjs +4 -0
  335. package/src/capabilities/instructions.mjs +250 -0
  336. package/src/capabilities/package.mjs +136 -0
  337. package/src/cli/command-failure.mjs +36 -0
  338. package/src/cli/execute-command.mjs +16 -2
  339. package/src/cli/run.mjs +65 -9
  340. package/src/coauthor/store.mjs +43 -2
  341. package/src/collaboration/proposals.mjs +189 -0
  342. package/src/commands/architecture.mjs +27 -0
  343. package/src/commands/boundary.mjs +3 -0
  344. package/src/commands/capability.mjs +73 -0
  345. package/src/commands/enroll.mjs +3 -0
  346. package/src/commands/harness.mjs +79 -0
  347. package/src/commands/ingest.mjs +39 -0
  348. package/src/commands/init.mjs +4 -1
  349. package/src/commands/inquiry.mjs +66 -0
  350. package/src/commands/knowledge-semantic.mjs +128 -0
  351. package/src/commands/knowledge.mjs +119 -0
  352. package/src/commands/learn.mjs +61 -0
  353. package/src/commands/obsidian.mjs +754 -63
  354. package/src/commands/practice.mjs +24 -0
  355. package/src/commands/setup.mjs +22 -2
  356. package/src/commands/trackable.mjs +19 -0
  357. package/src/contracts/corpus.mjs +30 -0
  358. package/src/coordination/index.mjs +110 -0
  359. package/src/evidence-navigation/contracts.mjs +60 -0
  360. package/src/evidence-navigation/evaluate.mjs +69 -0
  361. package/src/evidence-navigation/generation.mjs +22 -0
  362. package/src/evidence-navigation/index.mjs +2 -0
  363. package/src/evidence-navigation/local.mjs +167 -0
  364. package/src/evidence-navigation/schema.generated.mjs +604 -0
  365. package/src/evidence-navigation/types.mjs +12 -0
  366. package/src/export/atelier-export-contract.mjs +35 -8
  367. package/src/graph/enroll.mjs +248 -0
  368. package/src/graph/graph.mjs +17 -1
  369. package/src/graph/knowledge-graph.mjs +58 -8
  370. package/src/harnesses/contracts.mjs +41 -0
  371. package/src/harnesses/exchange.mjs +154 -0
  372. package/src/harnesses/feedback.mjs +16 -0
  373. package/src/harnesses/history.mjs +37 -0
  374. package/src/harnesses/index.mjs +4 -0
  375. package/src/harnesses/store.mjs +29 -0
  376. package/src/ingestion/contracts.mjs +41 -0
  377. package/src/ingestion/evaluation.mjs +119 -0
  378. package/src/ingestion/optional/composition/index.mjs +171 -0
  379. package/src/ingestion/optional/evaluation/index.mjs +219 -0
  380. package/src/ingestion/optional/graphify/composition-binding.mjs +60 -0
  381. package/src/ingestion/optional/graphify/composition_receiving.py +185 -0
  382. package/src/ingestion/optional/graphify/graphify_supplier.py +933 -0
  383. package/src/ingestion/optional/graphify/json_bridge.py +163 -0
  384. package/src/ingestion/optional/graphify/query_receiving.py +209 -0
  385. package/src/ingestion/optional/index.mjs +9 -0
  386. package/src/ingestion/optional/jev/bridge.mjs +166 -0
  387. package/src/ingestion/optional/jev/composition-binding.mjs +116 -0
  388. package/src/ingestion/optional/jev/judgments.mjs +174 -0
  389. package/src/ingestion/optional/jev/native-translation.mjs +32 -0
  390. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/__init__.py +7 -0
  391. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/adapter.py +966 -0
  392. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/artifacts.py +101 -0
  393. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/projection.py +146 -0
  394. package/src/ingestion/optional/lightrag/composition-binding.mjs +67 -0
  395. package/src/ingestion/optional/vanilla/composition-binding.mjs +102 -0
  396. package/src/ingestion/optional/vanilla/index.mjs +218 -0
  397. package/src/ingestion/optional/vanilla/native-normalization.mjs +187 -0
  398. package/src/ingestion/processors.mjs +218 -0
  399. package/src/ingestion/semantic.mjs +203 -0
  400. package/src/ingestion/store.mjs +372 -0
  401. package/src/inquiry/beliefs.mjs +32 -0
  402. package/src/inquiry/contracts.mjs +23 -0
  403. package/src/inquiry/index.mjs +5 -0
  404. package/src/inquiry/ledger.mjs +135 -0
  405. package/src/inquiry/lenses.mjs +15 -0
  406. package/src/inquiry/projection.mjs +77 -0
  407. package/src/inquiry/store.mjs +35 -0
  408. package/src/intake/read-scope.mjs +12 -0
  409. package/src/intake/store.mjs +69 -6
  410. package/src/interaction/index.mjs +91 -0
  411. package/src/judgment/index.mjs +82 -0
  412. package/src/judgment/practice-evaluation.mjs +70 -0
  413. package/src/judgment/practice.mjs +144 -0
  414. package/src/knowledge/context.mjs +217 -0
  415. package/src/knowledge/index.mjs +5 -0
  416. package/src/knowledge/ingestion.mjs +79 -0
  417. package/src/knowledge/intake.mjs +33 -0
  418. package/src/knowledge/ledger.mjs +110 -0
  419. package/src/knowledge/participatory/guidance.mjs +36 -0
  420. package/src/knowledge/participatory/guided-contribution.mjs +44 -0
  421. package/src/knowledge/participatory/index.mjs +2 -0
  422. package/src/knowledge/participatory/installed-workshop.mjs +108 -0
  423. package/src/knowledge/plan.mjs +67 -0
  424. package/src/knowledge/projection.mjs +43 -0
  425. package/src/knowledge/semantic-operation.mjs +567 -0
  426. package/src/knowledge/sessions.mjs +467 -0
  427. package/src/knowledge/workspace.mjs +295 -0
  428. package/src/knowledge-health/assessment.mjs +165 -0
  429. package/src/knowledge-health/capabilities.mjs +350 -0
  430. package/src/knowledge-health/context.mjs +62 -0
  431. package/src/knowledge-health/example.mjs +47 -0
  432. package/src/knowledge-health/index.mjs +10 -0
  433. package/src/knowledge-health/owner-join.mjs +88 -0
  434. package/src/knowledge-health/proof/common.mjs +24 -0
  435. package/src/knowledge-health/proof/installed-check.mjs +100 -0
  436. package/src/knowledge-health/proof/native-readback.mjs +37 -0
  437. package/src/knowledge-health/proof/rehearse.mjs +68 -0
  438. package/src/knowledge-health/proof/validate-participant.mjs +17 -0
  439. package/src/knowledge-health/proof/verify-native-capture.mjs +14 -0
  440. package/src/knowledge-health/proof/workshop-check.mjs +36 -0
  441. package/src/knowledge-health/rule-identity.mjs +44 -0
  442. package/src/knowledge-health/workshop-composition.mjs +19 -0
  443. package/src/knowledge-health/workshop-profile.mjs +176 -0
  444. package/src/knowledge-health/workshop.mjs +99 -0
  445. package/src/learning/adapters.mjs +68 -0
  446. package/src/learning/assistance.mjs +127 -0
  447. package/src/learning/contracts.mjs +65 -0
  448. package/src/learning/store.mjs +272 -0
  449. package/src/personal-workspace/index.mjs +391 -0
  450. package/src/personal-workspace/selection.mjs +385 -0
  451. package/src/project/config.mjs +8 -0
  452. package/src/project/durable-state.mjs +3 -1
  453. package/src/project/file-class.mjs +1 -1
  454. package/src/projection/obsidian/edits/apply.mjs +55 -16
  455. package/src/projection/obsidian/personal-workspace.mjs +436 -0
  456. package/src/projection/obsidian/proposals/adapter.mjs +47 -8
  457. package/src/projection/obsidian/proposals/observation.mjs +10 -2
  458. package/src/projection/obsidian/publication/publisher.mjs +142 -13
  459. package/src/projection/obsidian/publication/vault-list.mjs +4 -3
  460. package/src/projection/obsidian/recovery/index.mjs +4 -1
  461. package/src/projection/obsidian/recovery/store.mjs +160 -7
  462. package/src/projection/obsidian/selection-ui/contribution.mjs +6 -5
  463. package/src/readiness/readiness.mjs +10 -3
  464. package/src/reflection/index.mjs +56 -0
  465. package/src/runtime/obsidian/app-production-seams.mjs +48 -16
  466. package/src/runtime/obsidian/app-registration.mjs +175 -28
  467. package/src/runtime/obsidian/app-restart.mjs +154 -0
  468. package/src/runtime/obsidian/engine.mjs +163 -20
  469. package/src/runtime/obsidian/extension-points.mjs +1 -1
  470. package/src/runtime/obsidian/index.mjs +10 -7
  471. package/src/runtime/obsidian/launch-plan.mjs +7 -4
  472. package/src/runtime/obsidian/lifecycle.mjs +92 -12
  473. package/src/runtime/obsidian/login-item.mjs +332 -0
  474. package/src/runtime/obsidian/machine-settings.mjs +119 -12
  475. package/src/runtime/obsidian/opening.mjs +171 -37
  476. package/src/runtime/obsidian/pipeline.mjs +71 -3
  477. package/src/runtime/obsidian/plugin-channel.mjs +11 -3
  478. package/src/runtime/obsidian/plugin-choice.mjs +16 -4
  479. package/src/runtime/obsidian/plugin-drift.mjs +59 -11
  480. package/src/runtime/obsidian/plugin-presence.mjs +14 -1
  481. package/src/runtime/obsidian/process-identity.mjs +20 -10
  482. package/src/runtime/obsidian/project-views.mjs +282 -0
  483. package/src/runtime/obsidian/questions.mjs +48 -0
  484. package/src/runtime/obsidian/release-watch.mjs +56 -0
  485. package/src/runtime/obsidian/service-main.mjs +99 -16
  486. package/src/runtime/obsidian/service-manager-production.mjs +61 -0
  487. package/src/runtime/obsidian/service-managers.mjs +275 -0
  488. package/src/runtime/obsidian/service-record.mjs +87 -23
  489. package/src/runtime/obsidian/service.mjs +36 -3
  490. package/src/runtime/obsidian/startup-adapters.mjs +59 -21
  491. package/src/runtime/obsidian/unheld-evidence.mjs +84 -0
  492. package/src/runtime/obsidian/vault-location.mjs +300 -0
  493. package/src/runtime/obsidian/view-counts.mjs +34 -0
  494. package/src/server/local-sidecar.mjs +169 -2
  495. package/src/server/server.mjs +28 -2
  496. package/src/template-bindings/project.mjs +92 -0
  497. package/src/templates/profile.mjs +225 -0
  498. package/src/trackables/domain.mjs +175 -0
  499. package/src/trackables/store.mjs +114 -0
  500. package/src/ui/knowledge-page.mjs +1388 -0
  501. package/src/upgrade/explanation.mjs +1 -1
  502. package/src/upgrade/template-participant.mjs +171 -0
  503. package/src/upgrade/transaction.mjs +72 -25
  504. package/src/upgrade/upgrade.mjs +1 -0
  505. package/templates/external-project-workspace/pack-lifecycle.json +6 -1
  506. package/templates/knowledge-workspace/.gitattributes +2 -0
  507. package/templates/knowledge-workspace/AGENTS.md +27 -0
  508. package/templates/knowledge-workspace/README.md +44 -0
  509. package/templates/knowledge-workspace/atelier.project.json +22 -0
  510. package/templates/knowledge-workspace/gitignore +6 -0
  511. package/templates/knowledge-workspace/knowledge-plan.json +111 -0
  512. package/templates/knowledge-workspace/knowledge-plan.schema.json +281 -0
  513. package/templates/knowledge-workspace/records/forecast.md +22 -0
  514. package/templates/knowledge-workspace/records/inspection.md +25 -0
  515. package/templates/knowledge-workspace/records/telescope.md +24 -0
  516. package/templates/knowledge-workspace/repo-access.v1.json +9 -0
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: atelier-trackables
3
+ description: Author, adopt, record, inspect or correct governed Trackables using shared definition and occurrence semantics; integrate existing domain writers without creating a separate coaching store.
4
+ ---
5
+
6
+ # Governed Trackables
7
+
8
+ Identify the existing domain writer, subject, purpose and exact private scope.
9
+ Separate tracking lifecycle, domain fulfillment, occurrence result, evidence
10
+ quality and attention. Recording a daily practice does not finish the practice;
11
+ pausing tracking does not abandon a goal. Missing evidence is not zero or failure.
12
+
13
+ Check the installed `atelier trackable` interface and supported profile before
14
+ promising behavior. The reference profile supports daily recurring practice,
15
+ one-off milestones and unscheduled qualitative observations. It does not provide
16
+ arbitrary recurrence, quantitative metrics or a developmental score. Preserve
17
+ native profiles and report unsupported mappings rather than converting meaning.
18
+
19
+ Release and pin a validated definition. Preview through the same reducer that the
20
+ runtime uses. Adopt an exact revision with an effective instant; do not silently
21
+ change existing instances when authoring changes. Preserve timezone, local-day
22
+ identity and the definition applicable to late evidence. Persist resolved
23
+ occurrences for replay; do not recompute historical local days after a calendar
24
+ update. A legacy export with `stateVerified: false` preserves raw history, not
25
+ a usable reconstructed state. Restore compatible calendar rules before writes.
26
+
27
+ Within the user's existing authority, use typed commands with request identity
28
+ and expected revision. Preserve subject, recorder, source event and assistance
29
+ separately. Retry the same command after a lost reply; do not create another
30
+ completion. Reconcile manual and session reports of one occurrence. Corrections
31
+ retain source history and cause affected fulfillment evidence to be reconsidered.
32
+
33
+ Verify durable readback and refreshed presentation. Show unobserved, skipped,
34
+ waived, partial and disputed states honestly. A proposed mutation is not saved.
35
+ Companion can present the same view; Witness is optional and cannot maintain a
36
+ second progress truth or infer independent ability from assisted completion.
37
+
38
+ Use the local private store only as the standalone reference adapter. Product
39
+ hosts retain authenticated persistence, evidence validation and access control.
40
+ Do not implicitly export personal history, enable reminders or broaden observation.
@@ -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
+ }