@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,198 @@
1
+ # Vanilla semantic proposal processor
2
+
3
+ `src/ingestion/semantic.mjs` connects a host's extractor to Atelier's existing
4
+ ingestion evidence reader. It produces qualified entity and assertion proposals
5
+ and an evidence-revalidated searchable proposal view. The host chooses and
6
+ invokes its extractor;
7
+ this module has no provider selection, model call, subprocess, network client,
8
+ runtime dependency, durable write, or graph mutation. Graphify, LightRAG, and Jev
9
+ are optional host adapters and are not required for this processor.
10
+
11
+ This is an internal first-consumer module. Its `atelier.semantic-candidate/v0`,
12
+ `atelier.semantic-input/v0`, `atelier.semantic-proposals/v0`, and
13
+ `atelier.semantic-proposal-view/v0` formats are not registered public contracts.
14
+ There is no package subpath export or CLI command for them. Published v1 records
15
+ and their closed extension fields remain unchanged.
16
+
17
+ ## Host flow
18
+
19
+ 1. Establish the existing permission to read the **whole ingestion plan** and
20
+ supply the current owner-adopted knowledge domain. `readScope: 'all-plan'` is
21
+ a reader precondition, not a permission granted by this module.
22
+ 2. Complete structural intake using the existing ingestion store. Select exact
23
+ evidence references from its completed attempts.
24
+ 3. Call `prepareSemanticInput({store, plan, domain, references,
25
+ identityCandidates})`. It reads each selected span using `store.getEvidence`
26
+ and pins the domain definition, source bytes, attempt, and locator.
27
+ 4. Invoke the chosen extractor with that input in the host. Include the returned
28
+ input digest in its candidate envelope. An extractor may be local,
29
+ deterministic, or model-backed; its permissions, budgets, retries, and
30
+ provider calls belong to the host.
31
+ 5. Call `prepareSemanticProposals({store, input, candidates})`. It rereads the
32
+ exact evidence, verifies the binding, and validates the candidate envelope.
33
+ 6. Use `readSemanticProposals({store, input, proposals, query, limit})` for a
34
+ fresh, literal search over assertions. It matches all whitespace-separated
35
+ query terms against endpoint IDs and labels, the predicate, the assertion's
36
+ own quotes, and its time expression. It excludes JSON field names, digests,
37
+ domain scope boilerplate and endpoint evidence from other assertions. It
38
+ verifies the same evidence and candidate binding before returning results.
39
+ Before serving a view the host must compare `domainRef` with its currently
40
+ adopted domain; this module checks the pinned snapshot, not an external
41
+ current-domain registry.
42
+ 7. Present the proposals to the existing knowledge evaluation and review owner.
43
+ That owner separately decides identity, semantic acceptance, activation, and
44
+ any permitted canonical projection. This module never performs those steps.
45
+
46
+ An edit to an original source makes the earlier attempt stale. Intake and extract
47
+ the changed source again, then create a new input and proposals. The module
48
+ processes one source per input, so hosts can keep independent extraction caches
49
+ and correction histories. It does not implement those caches or histories.
50
+ Serving a saved proposal object without the fresh read does not revalidate it.
51
+
52
+ ## Input and candidate shape
53
+
54
+ `plan` has exactly `planId` and `planDigest`. Each selected reference has exactly
55
+ `sourceId`, `sourceDigest`, `attemptId`, and `locator: {kind, value}`. Locator kinds
56
+ are the existing `line`, `csv-cell`, and `json-pointer` formats. Source digests
57
+ are 64-character hexadecimal values; plan and input digests have a `sha256:`
58
+ prefix. Evidence receipts must be current, verified, unsynthesized, and pending
59
+ semantic acceptance, and must match every requested binding.
60
+
61
+ The domain is an existing v1 knowledge `domain` or `domain-revision` record.
62
+ Duplicate type or predicate IDs are refused. Identity candidates are optional
63
+ host-supplied `{id, label, type}` proposals with unique IDs and vocabulary types.
64
+ Their presence does not establish canonical identity or authenticate an owner.
65
+
66
+ A candidate envelope has exactly:
67
+
68
+ ```js
69
+ {
70
+ schema: SEMANTIC_CANDIDATE_VERSION,
71
+ inputDigest: input.digest,
72
+ entities: [{
73
+ id: 'nora', label: 'Nora', type: 'person',
74
+ identity: {status: 'source-local', candidateIds: []},
75
+ evidence: ['span-1'],
76
+ }],
77
+ assertions: [{
78
+ id: 'availability', subjectId: 'nora', predicate: 'available',
79
+ objectId: null, direction: 'subject-only', negated: true,
80
+ modality: 'asserted', scope: input.domain.data.scope,
81
+ time: {from: null, until: null, expression: 'Friday', unknowns: ['calendar-date']},
82
+ evidence: [{id: 'span-1', quote: 'Nora is not available on Friday.'}],
83
+ }],
84
+ unknowns: [],
85
+ }
86
+ ```
87
+
88
+ The example assumes `span-1` is that exact located source passage and the domain
89
+ contains `person` and `available`. Candidate IDs use lowercase ASCII letters,
90
+ digits, and hyphens, begin with a letter, and are at most 64 characters. IDs are
91
+ unique across entities, assertions, and unknown findings. Labels never merge
92
+ entities: two objects named Atlas can have different types and identities.
93
+
94
+ Entity identity status is `source-local`, `existing-candidate`, or `unknown`.
95
+ Only `existing-candidate` includes nonempty `candidateIds`; each must be a
96
+ supplied candidate of the same type. Resolution remains pending even with one
97
+ matching candidate.
98
+
99
+ Binary assertions require two supplied entity IDs and `subject-to-object`.
100
+ Unary assertions require `objectId: null` and `subject-only`. The predicate must
101
+ belong to the domain vocabulary. Negation is a Boolean. Modality is `asserted`,
102
+ `conditional`, `proposed`, `possible`, `uncertain`, or `unknown`. Scope must equal
103
+ the supplied domain scope. Separate assertions between the same entities remain
104
+ separate, including statements with different polarity or time.
105
+ The vocabulary supplies IDs and meanings; it does not declare predicate arity
106
+ or allowed endpoint types. The knowledge review owner checks those meanings.
107
+
108
+ Time has exactly `from`, `until`, `expression`, and `unknowns`. Dates are nullable
109
+ valid `YYYY-MM-DD` calendar dates, with an ordered interval when both are given.
110
+ A temporal expression must occur in a cited quote. An unresolved expression such
111
+ as Friday or through June requires explicit unknowns when neither boundary is
112
+ resolved. Resolved dates without an expression are unanchored extractor
113
+ interpretation; calendar validity alone does not provide a textual anchor.
114
+ Quote matching establishes location; it does not establish that a
115
+ date interpretation, predicate, polarity, or identity is semantically correct.
116
+
117
+ Unknown findings have exactly `{id, relatedCandidateId, reason, evidence}`.
118
+ The optional related ID refers to a supplied entity or assertion, or is null.
119
+ The nonempty reason and supporting span IDs remain visible. An unmodeled
120
+ predicate must be reported as a finding instead of an unsupported assertion.
121
+ An assertion without evidence is refused; the caller can separately report a
122
+ retrieval gap without presenting it as a supported assertion.
123
+
124
+ ## Results and refusals
125
+
126
+ Proposals hydrate each support with the source ID, source digest, attempt ID,
127
+ locator, relative source ref, and exact quote. They retain the original candidate
128
+ envelope, pending identity and assertion acceptance, declared unknowns, input
129
+ digest, and domain ref. The read model reports total assertion matches and omitted
130
+ assertion matches when its limit truncates results. Entities and unknown findings
131
+ are returned without filtering, to retain interpretation context. The view carries
132
+ the pinned domain reference. It does not synthesize an answer.
133
+
134
+ Every proposal and view declares `authority: 'none'`, `canonicalMutation: false`,
135
+ `semanticAcceptance: 'pending'`, and `coverage: 'selected-spans-only'`.
136
+ Counts report proposed entities, assertions, and explicit unknown findings
137
+ (`abstentions`); successful validation reports zero refusals. A refused request
138
+ throws `SemanticProposalError` with `refusalCount: 1` and a typed code:
139
+
140
+ | Code | Boundary |
141
+ | --- | --- |
142
+ | `SEMANTIC_INVALID` | Closed, bounded plain JSON and valid query |
143
+ | `SEMANTIC_PROFILE` | Existing domain definition and unique vocabulary |
144
+ | `SEMANTIC_LIMIT` | Input, candidate, or result bounds |
145
+ | `SEMANTIC_READ_SCOPE` | Whole-plan reader profile |
146
+ | `SEMANTIC_EVIDENCE` | Available verified spans and literal quote support |
147
+ | `SEMANTIC_STALE` | Existing reader reports a stale source or mismatched plan, digest, or attempt binding |
148
+ | `SEMANTIC_BINDING` | Exact plan, source, attempt, locator, and input digest |
149
+ | `SEMANTIC_IDENTITY` | Unique IDs, supplied identity mappings, and endpoints |
150
+ | `SEMANTIC_TYPE` / `SEMANTIC_PREDICATE` | Declared vocabulary |
151
+ | `SEMANTIC_DIRECTION` / `SEMANTIC_NEGATION` | Participant roles and Boolean polarity |
152
+ | `SEMANTIC_MODALITY` / `SEMANTIC_SCOPE` | Declared qualification |
153
+ | `SEMANTIC_TIME` / `SEMANTIC_UNKNOWN` | Retained time and explicit findings |
154
+
155
+ The first failing rule refuses the entire request; there is no partial admission.
156
+ There are at most 64 references, identity candidates, entities, assertions, or
157
+ unknown findings per input, and at most 16 supporting spans per candidate.
158
+ Identity alternatives and time unknowns also have a 16-item ceiling. Text limits
159
+ are 8192 characters for labels, reasons, time expressions and time unknowns;
160
+ 256 for plan and attempt IDs; 16384 for locators and source refs; 65536 for
161
+ quotes; and 512 for queries. Entity and unknown supports copy the full located
162
+ span, so that span must also fit the 65536-character quote ceiling. Result
163
+ limits must be safe integers between one and 64. Empty evidence selections
164
+ are evidence errors; malformed collections and noninteger result limits retain
165
+ shape errors rather than reporting capacity overflow.
166
+ The existing ingestion plain-JSON bounds apply, including the 256 KiB payload
167
+ limit, to caller inputs, assembled semantic inputs, hydrated proposals and read
168
+ views. Hydration can exceed this limit even when raw candidates fit: entity
169
+ supports include source span text and proposals retain raw candidates as well.
170
+ Count, text-length, depth, member and byte overflow reports `SEMANTIC_LIMIT`;
171
+ malformed JSON, invalid identifiers and invalid field shapes retain their typed
172
+ validation codes. Oversized input or output is refused instead of silently
173
+ truncated. This is a bounded evidence selection, not a complete-document
174
+ extraction guarantee. It does not report coverage within the selection or list
175
+ selected spans that no candidate cites; zero refusals is not a coverage score.
176
+
177
+ ## Qualification limits
178
+
179
+ The tests exercise invented candidates, targeted mutation controls for the
180
+ refusal scenarios represented in the test tables, successful pending identity
181
+ mappings, direct receipt bindings, saved-proposal tampering, every declared
182
+ collection
183
+ bound, text/query/result limits, assembled and hydrated byte overflow, search
184
+ exclusion and literal escaped characters, and the real local
185
+ ingestion evidence reader. They check fidelity and refusal mechanics, including
186
+ source correction. They do not qualify a semantic extractor, human review,
187
+ permissions of an installed host, or economic benefit.
188
+
189
+ This profile supports unary or binary entity-valued assertions and one domain
190
+ scope string. It does not yet represent literal-valued assertions, structured
191
+ per-assertion scope, attributed speakers, UTF-8 byte-range locators, or native
192
+ engine graph projection. A richer adapter needs an explicitly reviewed mapping
193
+ that retains those qualifications and reports projection omissions. A document
194
+ graph's `related` edge must not replace a qualified real-world assertion.
195
+
196
+ Graphify, LightRAG, and Jev integration must separately qualify their native
197
+ capabilities, provenance mapping, optional configuration, lifecycle, and composed
198
+ behavior. These tests make no quality, latency, token, or cost savings claim.
@@ -0,0 +1,317 @@
1
+ # Semantic operation: internal vanilla profile
2
+
3
+ `src/knowledge/semantic-operation.mjs` connects a host's extraction to the
4
+ existing intake and knowledge owners. It is an internal library. There is no
5
+ public export, registered schema or CLI command yet. The proposed consumer is
6
+ an agent operating the experimental Atelier CLI after Foundation registers it.
7
+
8
+ Atelier never invokes a model. The host supplies its raw output, its normalized
9
+ candidate envelope, configuration pins and usage report. A deterministic or
10
+ authored route explicitly declares that it automates no model extraction.
11
+ Every receiver decision comes from the host's actual receiver session. The
12
+ library checks consistency; it does not authenticate a person or grant source,
13
+ model, publication or projection permission.
14
+
15
+ ## Owners and sequence
16
+
17
+ Create the internal runner with `{workspaceRoot, workspaceId, run}`. The domain
18
+ must already exist in the knowledge harness. All writes use its history digest
19
+ through `appendHarness`; intake retains the original source and raw output.
20
+ There is no second canonical ledger.
21
+
22
+ 1. Complete structural ingestion through the existing ingestion owner. Use
23
+ a separate one-source plan for each independent correction unit. The exact
24
+ reader checks the whole plan: editing another source in a shared plan also
25
+ invalidates that plan. Independent plans let unaffected operations reuse
26
+ their completed attempts without rebinding an old model response.
27
+ 2. Call `begin` before the host starts extraction. It reads current all-plan
28
+ evidence and the current ledger domain, pins the semantic input, records a
29
+ reservation in the existing ledger, then calls intake `beginAttempt`.
30
+ Only the new successful reservation returns `execution: 'ready-for-host'`.
31
+ A reopened begun, partial or reserved attempt has unknown execution.
32
+ 3. The host runs its extractor separately. Call `complete` with exact raw
33
+ output bytes, their SHA-256 digest, the normalized candidates and usage.
34
+ Raw output is retained even if candidate interpretation, plain-JSON bounds
35
+ or usage validation fails. Resume that
36
+ interpretation on the same attempt; never rerun extraction silently.
37
+ 4. Prepare the structural source contribution through
38
+ `prepareIngestionContribution`, retaining its real `extracted` origin and
39
+ source binding. The receiver evaluates and reviews that source.
40
+ 5. Call `prepareContribution` for each entity, assertion or unknown finding.
41
+ Entities are `concept` contributions, assertions are `claim` contributions.
42
+ Their author identifies the host machine, and `origin.method: 'authored'`
43
+ explicitly means a machine-authored interpretation pending review.
44
+ Their bodies retain the complete qualified candidate, citations, raw attempt
45
+ pins, input digest and host-reported usage.
46
+ 6. Submit receiver `evaluation`, `review` and `activation` records through
47
+ `record`. Assertion endpoints require currently accepted entity records.
48
+ A source-local identity stays distinct. An existing or unknown identity
49
+ requires an explicit identity choice in the receiver's review basis.
50
+ 7. Call `prepareRelation` only after assertion acceptance. Qualified assertions
51
+ return an explicit projection omission. An eligible plain relation remains
52
+ pending until the receiver reviews it. Activate the accepted assertions and
53
+ permitted relations, then call `project`.
54
+ 8. Reopen with the same workspace and run. Use `proposals` for pending results
55
+ and `context` for accepted knowledge. Read both through the supported runner.
56
+ 9. Record a receiver withdrawal or a superseding source/identity contribution.
57
+ `cascade` performs idempotent relation cleanup after an assertion withdrawal.
58
+ Old projection activations refuse as soon as their support is ineligible,
59
+ including before cleanup. The receiver selects a new current activation.
60
+
61
+ ## Proposed experimental commands and request shapes
62
+
63
+ Foundation owns command registration. The proposed group is
64
+ `atelier knowledge semantic <operation>`, with one JSON stdin request (at most
65
+ 1 MiB), a caller-selected workspace and a run. These internal operation names
66
+ and shapes are the proposed binding; they are not a shipped command contract.
67
+
68
+ | Operation | Request fields |
69
+ | --- | --- |
70
+ | `begin` | `operationId`, `attemptId`, `at`, `term`, `plan: {planId, planDigest}`, `references`, `identityCandidates`, `extractor`, `confirm` |
71
+ | `status` | `operationId` |
72
+ | `reconcile` | `operationId`, `at`, `by`, `reason`, `outcome`, `confirm` |
73
+ | `complete` | `operationId`, `output`, `expectedOutputDigest`, `candidates`, `usage`, `at`, `confirm` |
74
+ | `proposals` | `operationId`, `query`, optional `limit` |
75
+ | `prepareContribution` | `operationId`, `id`, `kind`, `candidateId`, `source` pointer, `sourceBinding`, `term`, `at`, `confirm`; optional exact `supersedes` and `revisionReason` |
76
+ | `prepareRelation` | `assertion` pointer, `at`, `confirm` |
77
+ | `record` | A complete receiver `record`, `confirm` |
78
+ | `cascade` | Existing `withdrawalId`, `at`, `confirm` |
79
+ | `context` | `query` |
80
+ | `project` | `activationId`, `namespace` |
81
+
82
+ `extractor` has exactly `id`, `version`, `route`, `model`, `promptDigest` and
83
+ `parameters`. Routes are `model`, `deterministic` or `authored`; only the model
84
+ route has a nonnull model ID. The configuration digest covers all these fields
85
+ and the exact semantic input digest. Parameters and input remain bounded plain
86
+ JSON. Byte, member and depth overflow reports `SEMANTIC_OPERATION_LIMIT`;
87
+ malformed plain JSON reports `SEMANTIC_OPERATION_INVALID`. A pin records what the host declares; it is not a provider receipt.
88
+
89
+ `usage` has exactly `inputTokens`, `outputTokens`, `cost`, `currency`,
90
+ `elapsedMs` and `retries`. Unknown values are `null`, never zero. Counts are
91
+ nonnegative safe integers; cost is nonnegative and currency is an explicit
92
+ three-letter code or null. Usage is labelled host-reported. Record actual
93
+ provider receipts separately when available.
94
+
95
+ Reconciliation outcomes are `not-executed` or `failed-no-output`, with an
96
+ explicit actor and reason. They are host declarations, not independently
97
+ verified cleanup. A partial raw output must be completed on its original
98
+ attempt. A completed capture cannot be abandoned to permit another execution.
99
+ Matching completed source/configuration operations return a cache hit with the
100
+ existing operation ID; they do not create the requested new attempt.
101
+
102
+ An explicit identity review basis uses JSON shaped as:
103
+
104
+ ```json
105
+ {
106
+ "schema": "atelier.semantic-identity-decision/v0",
107
+ "operationId": "example-operation",
108
+ "candidateId": "example-entity",
109
+ "resolution": {
110
+ "status": "existing",
111
+ "contribution": {"id": "accepted-entity", "digest": "sha256:..."}
112
+ }
113
+ }
114
+ ```
115
+
116
+ The existing contribution must be a supplied identity candidate of the matching
117
+ type and currently accepted. An explicit `resolution: {status: 'source-local'}`
118
+ chooses the new contribution instead. A label never resolves identity by itself.
119
+ An explicit contribution revision supersedes the latest interpretation for that
120
+ operation and candidate, with a stated reason. It still needs fresh receiver
121
+ evaluation, review and activation. Rebinding assertions to a revised entity
122
+ reuses the immutable raw capture; it does not re-execute extraction. Changing
123
+ the extracted candidate itself requires a separately declared interpretation
124
+ route and capture, rather than rewriting the recorded model output.
125
+
126
+ ## Citations, witnesses and supported representation
127
+
128
+ The profile is `atelier.semantic-operation-profile/v0`. It retains the semantic
129
+ candidate's binary or unary participants, direction, negation, six modalities,
130
+ domain scope, full time qualifications, unknowns and located quotes. Original
131
+ quotes remain unchanged in the body and are revalidated against exact source
132
+ evidence. See [semantic ingestion](semantic-ingestion.md) for candidate bounds.
133
+
134
+ The structural source body is JSON extraction output. Ledger `basedOn` quotes
135
+ are limited to 8192 characters, with unique contribution IDs. Each dependency
136
+ therefore gets one labelled witness: the JSON-string encoding of its first
137
+ cited quote, without outer quotation marks, cut only at complete code points
138
+ and escape sequences. It must occur in the stored contribution body. Endpoint
139
+ dependencies use encoded candidate IDs when present in the entity body, or a
140
+ bounded actual text substring for an ordinary accepted concept. Its record ID
141
+ need not occur in its body. A body with no representable witness is refused.
142
+ The body labels `sourceWitness` entries
143
+ with `encoding: 'json-string-substring'` and `purpose: 'ledger-dependency-only'`.
144
+ Display citations from the candidate, never the dependency witness.
145
+
146
+ The witness helper can form distinct source dependencies, but this operation
147
+ profile processes one source per semantic input. It refuses missing or
148
+ ambiguous current structural sources, attempt/digest mismatch, absent witnesses
149
+ and more than 64 source-plus-endpoint dependencies with
150
+ `SEMANTIC_UNSUPPORTED_LEDGER_CITATION` (`unsupported-ledger-citation`). It
151
+ retains all cited spans in the candidate even when they share one dependency.
152
+
153
+ UTF-8 byte-range locators, multiline quotes, structured per-assertion scope,
154
+ literal-valued objects and speaker attribution are outside this profile.
155
+ The runner returns named `SEMANTIC_UNSUPPORTED_LOCATOR`,
156
+ `SEMANTIC_UNSUPPORTED_SCOPE` and `SEMANTIC_UNSUPPORTED_LITERAL_OBJECT` refusals
157
+ for these richer locator, scope and object forms. Richer forms require an
158
+ owner-reviewed mapping. They must be refused or retained
159
+ as explicit unknowns by the host, rather than dropped or coerced into entities
160
+ or edges. Canonical identity resolution stays in explicit receiver reviews.
161
+
162
+ ## Projection and freshness
163
+
164
+ Only a binary `subject-to-object` assertion with `negated: false`,
165
+ `modality: 'asserted'`, the domain scope, and no time boundaries, expression or
166
+ unknowns can become a plain relation. Every other assertion remains a qualified
167
+ contribution and appears in `projectionOmissions`.
168
+
169
+ The relation ID is derived from its assertion contribution ID. Its rationale
170
+ ends with `semantic-support: <assertionId> <sha256:digest>`. On every projection,
171
+ that assertion must exist at the exact digest, be currently accepted and active,
172
+ and be neither stale, withdrawn nor superseded. Relation participants must match
173
+ the assertion. An ineligible relation refuses the whole activation; it is never
174
+ silently filtered out. This guard is required because harness v1 relations do
175
+ not have a supporting-assertion dependency field.
176
+
177
+ `project` calls the existing `knowledgeGraphProposal` only after this check. Its
178
+ document graph stays a document graph; typed `semanticEntities` and
179
+ `semanticAssertions` retain the interpretation and qualifications separately.
180
+ Calling the ordinary graph projector directly does not implement this semantic
181
+ support profile. Neither projection applies canonical graph mutations.
182
+
183
+ When a freshness or concurrent-history check fails after an interpretation write,
184
+ the error carries `recorded: {record, head, nextAction: 'reopen-recorded-write'}`.
185
+ Reopen that saved record; do not blindly repeat the write. A completed raw attempt
186
+ always stays immutable, including a refused interpretation.
187
+
188
+ Within one synchronous runner call, repeated validation can reuse one verified
189
+ ledger snapshot and raw capture. Sources and ledger history are rechecked before
190
+ returning. This cache is discarded after the call. Subsequent calls reread
191
+ current state. Edited originals make earlier operations stale; a new structural
192
+ plan and extraction are required. Unaffected independent plans reuse their
193
+ completed raw attempts. History remains intact.
194
+
195
+ `proposals` declares `answerClass: 'pending-proposals'`; `context` declares
196
+ `answerClass: 'accepted-knowledge'` and does not synthesize an answer. Accepted
197
+ source material is evidence, not automatic acceptance of every statement in it.
198
+ A host-generated derived answer is a separate host artifact with explicit
199
+ support and limitations; this runner neither creates nor admits such answers.
200
+
201
+ ## Qualification and optional tools
202
+
203
+ Tests use invented sources and simulated receiver decisions. They establish
204
+ mechanics, not model quality, authenticated human acceptance or economic benefit.
205
+ Durable intake execution uses the qualified POSIX profile; portable stateless
206
+ eligibility and witness tests run on Windows as well.
207
+
208
+ This runner needs none of Graphify, LightRAG or Jev. It has no native adapter
209
+ binding yet. Their implementations and all eight presence profiles remain
210
+ separate qualification work. A real receiver run through the installed command,
211
+ saved-state readback, a correction repeat and an independent useful-task repeat
212
+ are required before claiming completion. Measure cold ingestion, incremental
213
+ correction and warm retrieval separately, retaining unknown cost and omissions.
214
+
215
+
216
+ ### Correction dependencies and captured-output refusals
217
+
218
+ An assertion depends on each reviewed endpoint interpretation, including the
219
+ receiver's explicit identity choice, as well as a distinct resolved canonical
220
+ contribution. These dependency-only witnesses are labelled `identity-choice`
221
+ and `resolved-identity`. Withdrawing, re-evaluating, superseding or changing the
222
+ reviewed interpretation makes the affected assertion or its acceptance require
223
+ reconsideration through the existing ledger. Unaffected accepted knowledge stays
224
+ retrievable. Corrected interpretations reuse immutable raw capture.
225
+
226
+ A ledger reservation owns its attempt identifier even before intake publication.
227
+ After intake begins, the reservation must still be reserved at the returned
228
+ history head before `ready-for-host` is returned. A refused saved reservation
229
+ carries `recorded` with the actual record reference and the head returned by its
230
+ successful append. This saved head is diagnostic; reopen with `status` to obtain
231
+ the current history head before supplying confirmation for another write.
232
+
233
+ Executed output is captured before source-freshness or interpretation checks.
234
+ If the original or adopted domain changed, interpretation refuses as stale and
235
+ carries `captured` with the actual intake completion. Its head identifies a
236
+ successful append made by this call, or the history observed at call entry when
237
+ no append returned. It is diagnostic and may be older than later history; it
238
+ does not establish current custody or authority for another write. Reopen with
239
+ `status` for the current head and the stored completion readback. Compare
240
+ completion records canonically; their object key order is not a digest contract.
241
+ `status` can reopen those exact bytes as complete while the semantic operation
242
+ remains reserved and stale; it does not imply accepted interpretation or permit
243
+ claiming the output was never executed. The existing completed-attempt guard
244
+ still prevents abandonment, and identical-byte completion remains idempotent.
245
+
246
+ Saved receipts survive whatever value a failure throws. After a write or capture
247
+ has returned, the runner adds `recorded` or `captured` in place when the original
248
+ object or function has writable data properties for those receipts, or can accept
249
+ new properties. It preserves that object’s identity, `code` and message. Otherwise,
250
+ including a primitive or an object with missing receipt properties that cannot be
251
+ added, it throws `SemanticOperationError` with a generic message and the receipts
252
+ as its own properties. The wrapper retains the original value as a non-enumerable
253
+ `cause` and its original own-data `SEMANTIC_*` code, or uses
254
+ `SEMANTIC_OPERATION_INTERRUPTED`. A write that failed before returning saved
255
+ nothing and attaches nothing. Existing writable receipt properties retain their
256
+ attributes, so `JSON.stringify(error)` can omit non-enumerable receipts. The
257
+ wrapper’s non-enumerable `cause` is also omitted; an original error decorated in
258
+ place retains its existing properties and their visibility. Read `recorded` and
259
+ `captured` explicitly when reporting a failure. Neither `cause` nor property order
260
+ is a serialization contract.
261
+
262
+ The semantic projection also returns labelled `dependencyWitnesses`. The existing
263
+ generic projector emits `evidences` claims for ledger dependencies; these are
264
+ provenance/dependency proposals, not additional extracted domain assertions.
265
+ Use `semanticAssertions` and their qualifiers for those assertions. Consequential
266
+ withdrawal cleanup matches both the generated semantic relation identity and its
267
+ exact supporting assertion digest, leaving ordinary support-like rationale text
268
+ untouched.
269
+
270
+ If a receiver re-accepts an immutable assertion after changing its endpoint
271
+ identity choice, acceptance in the ledger alone does not restore semantic
272
+ compatibility. Context reports the affected record in `diagnostics` and
273
+ `reconsider`, withholds it and dependent records, and preserves unrelated
274
+ accepted retrieval and projection. Its old body is never rewritten. An
275
+ activation selecting the incompatible assertion refuses; an independent
276
+ activation remains usable. Named semantic pin mismatches are withheld with record-specific diagnostics.
277
+ Low-level IO/intake errors and unexpected history failures still refuse the
278
+ request. The receiver must explicitly revise the assertion for the new choice.
279
+
280
+ Reconciled reservations permit a fresh operation only after checking that their
281
+ own intake has no partial or completed output. Intake IDs remain workspace-wide: a collision with
282
+ another run refuses exact status readback rather than attributing that run's
283
+ bytes to the old reservation. It does not prevent beginning with a new ID after
284
+ explicit reconciliation. The runner does not add a workspace-wide reservation
285
+ owner or claim atomic publication across intake and knowledge ledgers.
286
+
287
+ Activation membership is recomputed against the merged reconsideration set.
288
+ A mixed activation containing an incompatible assertion cannot activate its
289
+ other members in context. A separate current activation can make those
290
+ compatible members available again; retrieval and projection use the same
291
+ activation eligibility.
292
+
293
+ If an interrupted reserved operation discovers a different immutable intake
294
+ manifest under its attempt ID, explicit `not-executed` reconciliation records a
295
+ `foreign-manifest-before-readiness` recovery pin and the exact manifest digest.
296
+ That conflicting manifest confirms this reservation did not publish a matching
297
+ attempt or reach the supported host-readiness return. The host declaration
298
+ remains labelled, not independently authenticated. Reconciled status reports
299
+ `foreign-manifest` with its pin and never returns the other run's raw bytes. A
300
+ fresh distinct attempt ID is required. Own partial or completed output remains
301
+ ineligible for abandonment. Completion requires a present immutable manifest
302
+ with the operation's exact pins before raw publication. An absent manifest
303
+ refuses with `SEMANTIC_RECONCILE_REQUIRED`; a foreign manifest refuses with
304
+ `SEMANTIC_OPERATION_INTEGRITY`. A manifest appearing after an absent read cannot
305
+ receive the refused completion's bytes. The readiness return also requires the
306
+ own attempt to remain `begun`, alongside the unchanged reservation phase/head.
307
+
308
+ Reconciliation rechecks intake through its post-write status. If contradictory
309
+ own partial or completed output was captured, status and a later fresh-execution
310
+ request refuse with `SEMANTIC_RECONCILE_REQUIRED` and `captured` custody. The
311
+ reconciliation failure also carries its saved `recorded` custody. Raw bytes and
312
+ the original host declaration remain immutable; neither is called unexecuted
313
+ or silently discarded. The intake owner's exact readback remains available.
314
+ These current-read checks do not provide an atomic transaction across the two
315
+ stores or independently prove a host's declaration. Hosts must serialize their
316
+ completion and reconciliation decisions; the runner creates no automatic
317
+ unreconciliation or new execution permission after a detected contradiction.
@@ -1,5 +1,11 @@
1
1
  # Skill stewardship
2
2
 
3
+ For publishing and governing multiple capability packages across repositories,
4
+ use the [capability stewardship foundation](capability-stewardship.md). It adds
5
+ explicit publisher identity, release pins, local ownership modes, host profiles
6
+ and version-bound evidence. The catalog commands below retain their original
7
+ contracts; use the new layer when a catalog has multiple independent sources.
8
+
3
9
  Atelier skill stewardship is a local, evidence-gated loop for keeping agent
4
10
  skills useful without turning every repeated request into permanent
5
11
  instructions. It separates four concerns that are easy to blur together: