@mnstry/atelier 0.2.0-alpha.12 → 0.2.0-alpha.14

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 (531) hide show
  1. package/CHANGELOG.md +894 -0
  2. package/README.md +159 -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 +267 -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 +210 -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 +237 -0
  65. package/docs/learning.md +215 -0
  66. package/docs/local-services.md +223 -19
  67. package/docs/obsidian-contract.md +246 -15
  68. package/docs/obsidian-plugin.md +252 -7
  69. package/docs/obsidian.md +874 -52
  70. package/docs/optional-ingestion.md +83 -0
  71. package/docs/personal-workspace.md +266 -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 +50 -0
  77. package/docs/repo-boundary-guard.md +120 -3
  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 +318 -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 +219 -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 +76 -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 +60 -5
  300. package/plugins/obsidian/main.js +57 -8
  301. package/plugins/obsidian/manifest.json +1 -1
  302. package/skills/claude/atelier-build-harness/SKILL.md +59 -0
  303. package/skills/claude/atelier-coordination/SKILL.md +32 -0
  304. package/skills/claude/atelier-discovery-harness/SKILL.md +48 -0
  305. package/skills/claude/atelier-guided-upgrade/SKILL.md +29 -0
  306. package/skills/claude/atelier-interaction/SKILL.md +34 -0
  307. package/skills/claude/atelier-knowledge-harness/SKILL.md +60 -0
  308. package/skills/claude/atelier-knowledge-setup/SKILL.md +72 -0
  309. package/skills/claude/atelier-practical-judgment/SKILL.md +64 -0
  310. package/skills/claude/atelier-research-harness/SKILL.md +43 -0
  311. package/skills/claude/atelier-skill-steward/SKILL.md +53 -0
  312. package/skills/claude/atelier-trackables/SKILL.md +40 -0
  313. package/skills/codex/atelier-build-harness/SKILL.md +59 -0
  314. package/skills/codex/atelier-coordination/SKILL.md +32 -0
  315. package/skills/codex/atelier-discovery-harness/SKILL.md +48 -0
  316. package/skills/codex/atelier-guided-upgrade/SKILL.md +29 -0
  317. package/skills/codex/atelier-interaction/SKILL.md +34 -0
  318. package/skills/codex/atelier-knowledge-harness/SKILL.md +60 -0
  319. package/skills/codex/atelier-knowledge-setup/SKILL.md +72 -0
  320. package/skills/codex/atelier-practical-judgment/SKILL.md +64 -0
  321. package/skills/codex/atelier-research-harness/SKILL.md +43 -0
  322. package/skills/codex/atelier-skill-steward/SKILL.md +53 -0
  323. package/skills/codex/atelier-trackables/SKILL.md +40 -0
  324. package/src/architecture/catalog.mjs +355 -0
  325. package/src/architecture/index.mjs +93 -0
  326. package/src/boundary/content-rules.mjs +536 -69
  327. package/src/boundary/delegation-command.mjs +158 -0
  328. package/src/boundary/delegation.mjs +396 -0
  329. package/src/boundary/policy.mjs +185 -64
  330. package/src/build/git.mjs +18 -0
  331. package/src/build/index.mjs +3 -0
  332. package/src/build/ledger.mjs +88 -0
  333. package/src/capabilities/adoption.mjs +381 -0
  334. package/src/capabilities/evidence.mjs +140 -0
  335. package/src/capabilities/files.mjs +124 -0
  336. package/src/capabilities/index.mjs +4 -0
  337. package/src/capabilities/instructions.mjs +250 -0
  338. package/src/capabilities/package.mjs +136 -0
  339. package/src/cli/command-failure.mjs +36 -0
  340. package/src/cli/execute-command.mjs +16 -2
  341. package/src/cli/run.mjs +66 -9
  342. package/src/coauthor/store.mjs +43 -2
  343. package/src/collaboration/proposals.mjs +189 -0
  344. package/src/commands/architecture.mjs +27 -0
  345. package/src/commands/boundary.mjs +3 -0
  346. package/src/commands/capability.mjs +73 -0
  347. package/src/commands/enroll.mjs +3 -0
  348. package/src/commands/harness.mjs +79 -0
  349. package/src/commands/ingest.mjs +39 -0
  350. package/src/commands/init.mjs +4 -1
  351. package/src/commands/inquiry.mjs +66 -0
  352. package/src/commands/knowledge-semantic.mjs +128 -0
  353. package/src/commands/knowledge.mjs +119 -0
  354. package/src/commands/learn.mjs +61 -0
  355. package/src/commands/obsidian.mjs +772 -65
  356. package/src/commands/practice.mjs +24 -0
  357. package/src/commands/setup.mjs +22 -2
  358. package/src/commands/trackable.mjs +19 -0
  359. package/src/contracts/corpus.mjs +30 -0
  360. package/src/coordination/index.mjs +110 -0
  361. package/src/evidence-navigation/contracts.mjs +60 -0
  362. package/src/evidence-navigation/evaluate.mjs +69 -0
  363. package/src/evidence-navigation/generation.mjs +22 -0
  364. package/src/evidence-navigation/index.mjs +2 -0
  365. package/src/evidence-navigation/local.mjs +167 -0
  366. package/src/evidence-navigation/schema.generated.mjs +604 -0
  367. package/src/evidence-navigation/types.mjs +12 -0
  368. package/src/export/atelier-export-contract.mjs +35 -8
  369. package/src/graph/enroll.mjs +248 -0
  370. package/src/graph/graph.mjs +30 -6
  371. package/src/graph/knowledge-graph.mjs +77 -9
  372. package/src/harnesses/contracts.mjs +41 -0
  373. package/src/harnesses/exchange.mjs +154 -0
  374. package/src/harnesses/feedback.mjs +16 -0
  375. package/src/harnesses/history.mjs +37 -0
  376. package/src/harnesses/index.mjs +4 -0
  377. package/src/harnesses/store.mjs +29 -0
  378. package/src/ingestion/contracts.mjs +41 -0
  379. package/src/ingestion/evaluation.mjs +119 -0
  380. package/src/ingestion/optional/composition/index.mjs +171 -0
  381. package/src/ingestion/optional/evaluation/index.mjs +219 -0
  382. package/src/ingestion/optional/graphify/composition-binding.mjs +60 -0
  383. package/src/ingestion/optional/graphify/composition_receiving.py +185 -0
  384. package/src/ingestion/optional/graphify/graphify_supplier.py +938 -0
  385. package/src/ingestion/optional/graphify/json_bridge.py +163 -0
  386. package/src/ingestion/optional/graphify/native-closure-pins.json +275 -0
  387. package/src/ingestion/optional/graphify/native-pins.json +306 -0
  388. package/src/ingestion/optional/graphify/query_receiving.py +209 -0
  389. package/src/ingestion/optional/index.mjs +9 -0
  390. package/src/ingestion/optional/jev/bridge.mjs +166 -0
  391. package/src/ingestion/optional/jev/composition-binding.mjs +116 -0
  392. package/src/ingestion/optional/jev/judgments.mjs +174 -0
  393. package/src/ingestion/optional/jev/native-translation.mjs +32 -0
  394. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/__init__.py +7 -0
  395. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/adapter.py +966 -0
  396. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/artifacts.py +101 -0
  397. package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/projection.py +146 -0
  398. package/src/ingestion/optional/lightrag/composition-binding.mjs +67 -0
  399. package/src/ingestion/optional/vanilla/composition-binding.mjs +102 -0
  400. package/src/ingestion/optional/vanilla/index.mjs +218 -0
  401. package/src/ingestion/optional/vanilla/native-normalization.mjs +187 -0
  402. package/src/ingestion/processors.mjs +218 -0
  403. package/src/ingestion/semantic.mjs +203 -0
  404. package/src/ingestion/store.mjs +372 -0
  405. package/src/inquiry/beliefs.mjs +32 -0
  406. package/src/inquiry/contracts.mjs +23 -0
  407. package/src/inquiry/index.mjs +5 -0
  408. package/src/inquiry/ledger.mjs +135 -0
  409. package/src/inquiry/lenses.mjs +15 -0
  410. package/src/inquiry/projection.mjs +77 -0
  411. package/src/inquiry/store.mjs +35 -0
  412. package/src/intake/read-scope.mjs +12 -0
  413. package/src/intake/store.mjs +69 -6
  414. package/src/interaction/index.mjs +91 -0
  415. package/src/judgment/index.mjs +82 -0
  416. package/src/judgment/practice-evaluation.mjs +70 -0
  417. package/src/judgment/practice.mjs +144 -0
  418. package/src/knowledge/context.mjs +217 -0
  419. package/src/knowledge/index.mjs +5 -0
  420. package/src/knowledge/ingestion.mjs +79 -0
  421. package/src/knowledge/intake.mjs +33 -0
  422. package/src/knowledge/ledger.mjs +110 -0
  423. package/src/knowledge/participatory/guidance.mjs +36 -0
  424. package/src/knowledge/participatory/guided-contribution.mjs +44 -0
  425. package/src/knowledge/participatory/index.mjs +2 -0
  426. package/src/knowledge/participatory/installed-workshop.mjs +108 -0
  427. package/src/knowledge/plan.mjs +67 -0
  428. package/src/knowledge/projection.mjs +43 -0
  429. package/src/knowledge/semantic-operation.mjs +567 -0
  430. package/src/knowledge/sessions.mjs +467 -0
  431. package/src/knowledge/workspace.mjs +295 -0
  432. package/src/knowledge-health/assessment.mjs +165 -0
  433. package/src/knowledge-health/capabilities.mjs +350 -0
  434. package/src/knowledge-health/context.mjs +62 -0
  435. package/src/knowledge-health/example.mjs +47 -0
  436. package/src/knowledge-health/index.mjs +10 -0
  437. package/src/knowledge-health/owner-join.mjs +88 -0
  438. package/src/knowledge-health/proof/common.mjs +24 -0
  439. package/src/knowledge-health/proof/installed-check.mjs +100 -0
  440. package/src/knowledge-health/proof/native-readback.mjs +37 -0
  441. package/src/knowledge-health/proof/rehearse.mjs +68 -0
  442. package/src/knowledge-health/proof/validate-participant.mjs +17 -0
  443. package/src/knowledge-health/proof/verify-native-capture.mjs +14 -0
  444. package/src/knowledge-health/proof/workshop-check.mjs +36 -0
  445. package/src/knowledge-health/rule-identity.mjs +49 -0
  446. package/src/knowledge-health/workshop-composition.mjs +19 -0
  447. package/src/knowledge-health/workshop-profile.mjs +176 -0
  448. package/src/knowledge-health/workshop.mjs +99 -0
  449. package/src/learning/adapters.mjs +68 -0
  450. package/src/learning/assistance.mjs +127 -0
  451. package/src/learning/contracts.mjs +65 -0
  452. package/src/learning/store.mjs +272 -0
  453. package/src/personal-workspace/index.mjs +391 -0
  454. package/src/personal-workspace/selection.mjs +401 -0
  455. package/src/project/config.mjs +8 -0
  456. package/src/project/durable-state.mjs +3 -1
  457. package/src/project/file-class.mjs +1 -1
  458. package/src/project/path-match.mjs +2 -1
  459. package/src/projection/obsidian/edits/apply.mjs +55 -16
  460. package/src/projection/obsidian/materialize/prepare-view.mjs +87 -5
  461. package/src/projection/obsidian/personal-workspace.mjs +519 -0
  462. package/src/projection/obsidian/proposals/adapter.mjs +79 -17
  463. package/src/projection/obsidian/proposals/observation.mjs +50 -4
  464. package/src/projection/obsidian/publication/publisher.mjs +214 -18
  465. package/src/projection/obsidian/publication/vault-list.mjs +4 -3
  466. package/src/projection/obsidian/recovery/index.mjs +4 -1
  467. package/src/projection/obsidian/recovery/store.mjs +160 -7
  468. package/src/projection/obsidian/selection-ui/contribution.mjs +6 -5
  469. package/src/projection/project.mjs +3 -2
  470. package/src/readiness/readiness.mjs +10 -3
  471. package/src/reflection/index.mjs +56 -0
  472. package/src/runtime/obsidian/app-production-seams.mjs +48 -16
  473. package/src/runtime/obsidian/app-registration.mjs +175 -28
  474. package/src/runtime/obsidian/app-restart.mjs +154 -0
  475. package/src/runtime/obsidian/engine.mjs +437 -56
  476. package/src/runtime/obsidian/extension-points.mjs +1 -1
  477. package/src/runtime/obsidian/index.mjs +10 -7
  478. package/src/runtime/obsidian/launch-plan.mjs +7 -4
  479. package/src/runtime/obsidian/lifecycle.mjs +108 -23
  480. package/src/runtime/obsidian/login-item.mjs +335 -0
  481. package/src/runtime/obsidian/machine-settings.mjs +119 -12
  482. package/src/runtime/obsidian/observation.mjs +36 -4
  483. package/src/runtime/obsidian/opening.mjs +173 -38
  484. package/src/runtime/obsidian/personal-selection.mjs +125 -0
  485. package/src/runtime/obsidian/pipeline.mjs +115 -6
  486. package/src/runtime/obsidian/plugin-channel.mjs +11 -3
  487. package/src/runtime/obsidian/plugin-choice.mjs +16 -4
  488. package/src/runtime/obsidian/plugin-drift.mjs +59 -11
  489. package/src/runtime/obsidian/plugin-presence.mjs +14 -1
  490. package/src/runtime/obsidian/private-lock.mjs +39 -4
  491. package/src/runtime/obsidian/process-identity.mjs +20 -10
  492. package/src/runtime/obsidian/project-views.mjs +282 -0
  493. package/src/runtime/obsidian/questions.mjs +48 -0
  494. package/src/runtime/obsidian/release-watch.mjs +56 -0
  495. package/src/runtime/obsidian/service-main.mjs +148 -19
  496. package/src/runtime/obsidian/service-manager-production.mjs +61 -0
  497. package/src/runtime/obsidian/service-managers.mjs +275 -0
  498. package/src/runtime/obsidian/service-record.mjs +87 -23
  499. package/src/runtime/obsidian/service.mjs +102 -9
  500. package/src/runtime/obsidian/startup-adapters.mjs +59 -21
  501. package/src/runtime/obsidian/unheld-evidence.mjs +84 -0
  502. package/src/runtime/obsidian/vault-location.mjs +300 -0
  503. package/src/runtime/obsidian/view-counts.mjs +34 -0
  504. package/src/runtime/obsidian/view-permission.mjs +334 -0
  505. package/src/server/local-sidecar.mjs +169 -2
  506. package/src/server/server.mjs +28 -2
  507. package/src/template-bindings/project.mjs +92 -0
  508. package/src/templates/profile.mjs +225 -0
  509. package/src/trackables/domain.mjs +175 -0
  510. package/src/trackables/store.mjs +114 -0
  511. package/src/ui/control-system.mjs +201 -0
  512. package/src/ui/html-primitives.mjs +3 -0
  513. package/src/ui/knowledge-page.mjs +1388 -0
  514. package/src/upgrade/closure-diagnostics.mjs +135 -0
  515. package/src/upgrade/closure.mjs +649 -0
  516. package/src/upgrade/explanation.mjs +1 -1
  517. package/src/upgrade/template-participant.mjs +171 -0
  518. package/src/upgrade/transaction.mjs +72 -25
  519. package/src/upgrade/upgrade.mjs +20 -7
  520. package/templates/external-project-workspace/pack-lifecycle.json +7 -1
  521. package/templates/knowledge-workspace/.gitattributes +2 -0
  522. package/templates/knowledge-workspace/AGENTS.md +27 -0
  523. package/templates/knowledge-workspace/README.md +44 -0
  524. package/templates/knowledge-workspace/atelier.project.json +22 -0
  525. package/templates/knowledge-workspace/gitignore +6 -0
  526. package/templates/knowledge-workspace/knowledge-plan.json +111 -0
  527. package/templates/knowledge-workspace/knowledge-plan.schema.json +281 -0
  528. package/templates/knowledge-workspace/records/forecast.md +22 -0
  529. package/templates/knowledge-workspace/records/inspection.md +25 -0
  530. package/templates/knowledge-workspace/records/telescope.md +24 -0
  531. package/templates/knowledge-workspace/repo-access.v1.json +9 -0
@@ -35,6 +35,11 @@ Portable shapes refuse absolute paths. `atelier-project-config.v1` is
35
35
  unchanged: extension settings are validated by their own schema, and an
36
36
  unknown extension key refuses in the adapter, not in the project validator.
37
37
 
38
+ The `ext-settings` key `ext["mnstry.atelier.personal-workspace"]` is reserved.
39
+ Only a personal-workspace binding sets it, in memory, to name its generation.
40
+ A project whose settings declare it without a binding is refused at every
41
+ build with `personal-binding-lost`.
42
+
38
43
  ## Selection
39
44
 
40
45
  `selectScope({ canonicalSnapshot, profile, selector, expansion })` is the only
@@ -47,6 +52,31 @@ proceeds in canonical-identity order and reports truncation. Relation types are
47
52
  `contradicts`, `belongs_to` and the derived `links_to`. Literal oracles and
48
53
  refusals live in `fixtures/obsidian/contracts/oracles/scope-cases.json`.
49
54
 
55
+ ### Which notes are eligible
56
+
57
+ The eligibility a view is built with is decided by the machine settings of
58
+ the workspace (`eligibilityFor` in `src/runtime/obsidian/pipeline.mjs`), and
59
+ the engine, source apply, the proposal adapter and the selection operation
60
+ all ask it, so they agree on what a view holds. By default
61
+ (`DEFAULT_ELIGIBILITY`, revision
62
+ `classified-documents/v2+assets-embedded-by-eligible-documents/v1`) a node is
63
+ eligible only when the census classified it. When the audience decision is
64
+ `only-you` with `unclassified: shown`, and only then, an unclassified note is
65
+ eligible too, provided its bytes pass the byte lens the emitter reads notes
66
+ with, and it has no front matter or front matter whose every top-level line
67
+ starts at column 0 with a plain `key:` (an ASCII letter or `_`, then ASCII
68
+ letters, digits, `_` and `-`), none of them `kg`, with indented lines only as
69
+ the values of such keys, and in which the graph's own reading finds no `kg`
70
+ key either. A quoted key, a flow or JSON mapping, a complex key, a top-level
71
+ list, an indented root mapping or front matter the graph could not read keeps
72
+ it withheld, since it may carry a `kg.audience` such as `sensitive`
73
+ (`onlyYouEligibility`, revision
74
+ `classified-documents/v2+unclassified-notes-read-as-notes-for-only-you/v4+assets-embedded-by-eligible-documents/v1`).
75
+ An unclassified note carries the `private` audience, which "only you" admits.
76
+ An admitted note is an ordinary member of the view for the redaction guard:
77
+ its identity may appear in generated bytes of that view, and stays forbidden
78
+ in every view it is not part of. Assets follow the documents that embed them.
79
+
50
80
  ### What redaction covers
51
81
 
52
82
  The guarantee: Atelier never generates a reference to a note outside the
@@ -635,6 +665,29 @@ again, so bytes that drift under an unchanged pinned digest are not seen by
635
665
  describes, and the next observation by digest sees the drift. A note whose pin
636
666
  changed is read and verified against the pin as always.
637
667
 
668
+ The maintenance engine prepares a view cooperatively (the
669
+ `prepareViewCooperatively` production seam): it waits between notes so that
670
+ the service keeps answering. The bound above holds there too. After a
671
+ cooperative preparation, and again while the publisher holds its locks,
672
+ before the journal entry that says the publication settled and before the
673
+ commit, the engine checks every selected source as observation does: a source
674
+ that still has the stat hint it was indexed with is taken as unchanged and is
675
+ not opened, and one whose hint moved is read and must still be the pinned
676
+ bytes. A source that changed during the tick, or was removed, refuses the
677
+ generation as `mixed-read`: its manifest is not committed, at that tick or by the restart
678
+ recovery of a later one, and the next tick observes in full and prepares the
679
+ view again. The same waits check that the configuration files, the machine
680
+ settings and the eligibility revision are still the ones the tick read. A
681
+ configuration file that cannot be read at such a check (no permission, an I/O
682
+ error) refuses the view as `mixed-read` too, and the tick goes on to its
683
+ other views.
684
+
685
+ Called on its own, a cooperative preparation reads every selected source
686
+ against its pin once more before it returns, a reused note's included, unless
687
+ its caller says it checks them itself (`scheduling.recheckSources: false`, as
688
+ the engine does). A preparation refused or cancelled on the way leaves the
689
+ preparation cache as it was.
690
+
638
691
  The engine holds one graph file cache and one preparation cache per scope for
639
692
  its lifetime and hands them through the `createGraphCache` and
640
693
  `createPreparationCache` production seams; a test replaces either with
@@ -740,6 +793,77 @@ Before 0.2.0-alpha.10 no production reading was ever absent, because the probe
740
793
  found Atelier's own service; from that release this path, and this window, are
741
794
  live.
742
795
 
796
+ ### First publication into a vault no Obsidian lists
797
+
798
+ A running or unknowable app that cannot be coordinated with still refuses the
799
+ whole publication, with one exception, the `direct-unheld` path. It is chosen
800
+ at path selection only when all of these hold:
801
+
802
+ 1. The view has no committed generation.
803
+ 2. Its vault is the folder allocated for it (`vaultOrigin: 'allocated'`), and
804
+ that folder's device and inode are the ones its record names.
805
+ 3. The app's own settings file (`obsidian.json`) was read, and none of its
806
+ entries is the vault folder, a folder above it or a folder inside it. Both
807
+ sides are compared as written and by their real paths, in any letter case.
808
+ A file that cannot be read is read again, up to three times 50 ms apart,
809
+ because the app rewrites it with a plain write. A missing or unreadable
810
+ file, an entry whose folder is not an absolute path, an entry with a `..`
811
+ segment (the folder it names through a link cannot be placed by its text),
812
+ or a Flatpak or snap build of the app anywhere on the account (its list is
813
+ elsewhere) gives no evidence.
814
+ 4. The platform is macOS or Linux.
815
+
816
+ Any other case gives the refusal it gave before. The maintenance service reads
817
+ the evidence from the file and never asks the app.
818
+
819
+ On this path the publisher writes only creates: a file appears through the
820
+ exclusive link where nothing is, or not at all. A unit that would replace or
821
+ remove a file, or write a settings file over one that is there, refuses as
822
+ `editor-uncoordinated` (blocking) and writes nothing. A settings file that
823
+ already holds exactly what the policy asks is left as it is, which is what an
824
+ interrupted run of this path leaves. A file already at a note path is kept as
825
+ `create-conflict`. The evidence is read again immediately before the first
826
+ unit and whenever two seconds have passed. Once a reading gives none, every
827
+ remaining unit refuses, a kept one included, and nothing is committed. The
828
+ view lock and the vault lock are taken as on every path, and the journal
829
+ records `mode: 'direct-unheld'`. Restart recovery and the late-writer check
830
+ treat it as a `direct` journal.
831
+
832
+ Why this loses nothing a person wrote, whoever holds the vault: no editor can
833
+ hold an unsaved buffer of a file that does not exist; the link either makes
834
+ the whole file appear or fails because something is there, which is kept; and
835
+ an editor that later saves over a created file wins, and is read as an edit.
836
+ The list evidence is for the experience, and it holds only for a run that
837
+ completes: that run is committed before `open` first tells the app about the
838
+ vault. A run that stops partway commits nothing. That happens when the list
839
+ names the folder meanwhile, a settings file with other bytes is already there,
840
+ or an interrupted run left a replacement or a removal. The view then reports
841
+ `editor-uncoordinated` and falls back to the coordinated path: `open` may add
842
+ the vault to the app and open it before it is complete, and what is left,
843
+ every replacement and removal included, is published through the app with its
844
+ usual base and buffer checks. The person may see an incomplete vault then;
845
+ nothing they write is at risk. Lists this account's app does not keep are
846
+ covered by the argument above alone: another user-data folder, another
847
+ machine through a synced folder.
848
+
849
+ A maintenance service whose app does not qualify (its command line off, no
850
+ vault open, a version below the floor) no longer keeps such a view from its
851
+ first publication: the publisher is reached with an adapter that coordinates
852
+ with nothing, and takes this path when every condition holds. When the path
853
+ does not apply, or the run stops partway at a unit refused as
854
+ `editor-uncoordinated`, the view reports the app's refusal, as before. `open`
855
+ then answers that refusal without adding the vault to the app, unless the
856
+ person asks it to restart Obsidian (`--restart-obsidian`): the vault is then
857
+ added and opened, and may be incomplete until the app has published the rest.
858
+ One case opens a vault without that flag: with the app running and no vault
859
+ open, a vault the app already lists is opened by its path, as before this
860
+ path existed, and may be incomplete. A run that stops only on a file in its
861
+ way reports that (`create-conflict`). When it stops for more than one reason,
862
+ one is reported: while the app does not qualify, the app's refusal wins over a
863
+ file in the way, and while it qualifies, the first blocking unit's reason is
864
+ reported. A reason not reported comes back at a later run, and nothing is
865
+ written meanwhile.
866
+
743
867
  ### Proven boundary
744
868
 
745
869
  macOS (Darwin 25, arm64) with Obsidian 1.13.7 (installer 1.12.7), CLI enabled,
@@ -793,9 +917,13 @@ each open item is discharged with its own evidence.
793
917
  Obsidian opens a vault from a link only when the folder is in its own vault
794
918
  list. `atelier obsidian open` puts the view's vault there.
795
919
  Outside its own storage (the data root, which holds the vaults and their
796
- policy-owned `.obsidian/core-plugins.json`), the list is the only file of
797
- another application that Atelier writes; to write it, Atelier writes nothing
798
- else outside the app's user-data directory, and no vault note.
920
+ policy-owned `.obsidian/core-plugins.json`), the settings file that holds the
921
+ list is the only file of another application that Atelier writes, and in it
922
+ only two things: the view's vault entry and the command-line switch `cli`. To
923
+ write it, Atelier writes nothing else outside the app's user-data directory,
924
+ and no vault note. Every write is shown in `open`'s answer
925
+ (`obsidianSettings`: the file, whether it was created, whether the vault was
926
+ added, whether the switch was turned on, and the backup).
799
927
 
800
928
  **The file.** `obsidian.json` in the app's user-data directory:
801
929
  `$HOME/Library/Application Support/obsidian/` on macOS and
@@ -833,7 +961,14 @@ root under another name is not recognised.
833
961
  **While Obsidian runs with no vault open**, its command line answers nothing
834
962
  and the file is still the running app's: it is read, never written. A vault
835
963
  it already lists is opened by path; one it does not is refused as
836
- `no-vault-open`.
964
+ `no-vault-open`, unless the person asked for a restart (below).
965
+
966
+ **While Obsidian runs with its command line off**, it answers every command
967
+ but a link with "Command line interface is not enabled", read as
968
+ `app-cli-unavailable` / `cli-turned-off`. The file is the running app's, which
969
+ holds the switch in memory and writes it back with its list, so it is not
970
+ written; the switch is turned on only while no Obsidian runs, or through the
971
+ restart below.
837
972
 
838
973
  **Never inside another vault.** In every state, a vault inside a folder the
839
974
  list has as a vault already (compared as written, against the vault root and
@@ -879,19 +1014,21 @@ then:
879
1014
  a JSON object whose `vaults`, when present, is an object, of at most 4 MiB.
880
1015
  A file with a second name (a hard link) is refused as
881
1016
  `obsidian-settings-unsafe`: the replacement would leave that name with the
882
- old list. A missing
883
- directory or file means Obsidian has not run on this account and is
884
- refused (`obsidian-settings-missing`): the file is never created. The other
1017
+ old list. A missing file means Obsidian never started on this account; it
1018
+ is created as described under "Obsidian never started" below. The other
885
1019
  refusals are `obsidian-settings-unsafe`, `obsidian-settings-not-owned`,
886
1020
  `obsidian-settings-unreadable` and `obsidian-settings-not-object`.
887
- 3. A vault whose real path an entry already has is left as it is; nothing is
888
- written. A vault inside a folder an entry has is refused
889
- (`vault-inside-another-vault`).
1021
+ 3. A vault whose real path an entry already has is left as it is. When `cli`
1022
+ is already `true` too, nothing is written. A vault inside a folder an
1023
+ entry has is refused (`vault-inside-another-vault`).
890
1024
  4. The new document is the file's object with one entry added under a fresh
891
1025
  random 16-hex id that no entry has: `{ path: <the vault root's real path>,
892
- ts: <now, ms>, open: true }`. Every other key and every other entry is kept
893
- in its place, as values. A document that would be larger than 4 MiB is
894
- refused (`obsidian-settings-too-large`).
1026
+ ts: <now, ms>, open: true }`, unless the vault is listed already, and with
1027
+ `cli` set to `true` when it is not (the command-line switch: in its place
1028
+ when the file has the key, otherwise last, as the app adds it). Every
1029
+ other key and every other entry is kept in its place, as values. A
1030
+ document that would be larger than 4 MiB is refused
1031
+ (`obsidian-settings-too-large`).
895
1032
  5. A temporary file in the same directory is written with the file's mode and
896
1033
  fsynced; the bytes as they were are written, fsynced, to
897
1034
  `obsidian.json.atelier-backup-<UTC time>` beside it.
@@ -912,6 +1049,91 @@ then:
912
1049
 
913
1050
  Every refusal writes nothing and leaves nothing behind: a temporary file or
914
1051
  backup created on the way is removed again whichever later step fails.
1052
+
1053
+ **Obsidian never started.** When the file does not exist and the process
1054
+ table says, positively, `absent` (read before, and again immediately before
1055
+ the file appears), the file is created, and only then:
1056
+
1057
+ 1. The user-data directory must be this user's own real directory. When it
1058
+ does not exist, it is created with mode 0700, only inside an existing
1059
+ parent directory that is this user's own and no link; a missing parent is
1060
+ `obsidian-settings-missing`, and nothing is created above the directory.
1061
+ 2. The content is exactly `{ "vaults": { "<16 hex>": { "path": <the vault
1062
+ root's real path>, "ts": <now, ms>, "open": true } }, "cli": true }`, mode
1063
+ 0600. The app reads the file at start-up (a missing or unreadable one reads
1064
+ as no settings) and opens every vault flagged open, so a plain start opens
1065
+ this one, with its command line on.
1066
+ 3. The bytes are written and fsynced to a temporary file in the directory,
1067
+ which is then hard-linked to `obsidian.json` and removed: the file appears
1068
+ complete or not at all, and the link fails on any file there, one the app
1069
+ wrote meanwhile included, which is kept (`obsidian-settings-changed`). The
1070
+ directory is fsynced. There is nothing to back up.
1071
+ 4. An app that appears before the link refuses (`app-may-be-running`); one
1072
+ that appears right after it leaves the addition unconfirmed, as in step 7
1073
+ above. A refusal removes the temporary file and a directory created on the
1074
+ way.
1075
+
1076
+ `open` answers `registration.how: 'created-settings'` for it.
1077
+
1078
+ **Restart, only when the person asks** (`open --restart-obsidian`; never
1079
+ implied, and refused by every other operation). Only in the two states above
1080
+ where the app runs and cannot be reached: its command line off, or no vault
1081
+ open and the view's vault not in its list. Module:
1082
+ `src/runtime/obsidian/app-restart.mjs`.
1083
+
1084
+ 0. Read-only, before anything is sent (`settingsWriteOutlook`): the view's
1085
+ vault folder exists, the settings file reads as in step 2 above (no
1086
+ Flatpak or snap build), has one name, would stay within 4 MiB with the
1087
+ entry, and lists no vault at a folder above the vault's. A file that does
1088
+ not exist (the app has shown only its starter window, which writes none)
1089
+ is the create case, checked as "Obsidian never started" checks before it
1090
+ writes (step 1 there); it is created after the quit. Otherwise `open`
1091
+ answers that refusal and the app keeps running. Once the main process is
1092
+ proven (step 2 below), right before the first signal, a copy of an existing
1093
+ file is kept beside it under the backup name (`backupObsidianSettings`,
1094
+ fsynced, the file's mode; `restart.settingsCopy`); a copy that cannot be
1095
+ kept sends nothing. The write in the same run does not prune that copy
1096
+ (`keepBackups`); a later write prunes it as step 7 says.
1097
+ 1. The app's main process is proven from the process table
1098
+ (`ps -ww -A -o pid=,ppid=,uid=,comm=`; a uid is signed, since macOS shows
1099
+ `nobody` as -2): every Obsidian process (the names the process probe
1100
+ counts) runs as this user, exactly one names the app bundle's main
1101
+ executable by an absolute path (`…/Contents/MacOS/Obsidian`), and every
1102
+ other one is its child. `comm` is the process's argv[0], not a verified
1103
+ image: a process of the same user could take that name, which proves
1104
+ nothing while the real app runs too (two main processes). Otherwise nothing
1105
+ is sent (`app-main-process-unproven`, with `restart.detail`).
1106
+ 2. That process is read again (`ps -o ppid=,uid=,lstart=,comm=`): it must be
1107
+ this user's, under the parent the table showed, with the same name, and
1108
+ read the same twice in a row; then it, and only it, gets SIGTERM, which
1109
+ Electron handles as a quit. The app closes every window, keeping the
1110
+ vaults that were open flagged open, and its helpers end (1.13.7, checked on
1111
+ an isolated instance).
1112
+ 3. The process probe must say `absent` within 30 seconds. On macOS the main
1113
+ process can stay after the first SIGTERM, with no window (seen on
1114
+ an isolated 1.13.7, with vaults open and with only the starter window).
1115
+ Electron handles only the first SIGTERM as a quit; a second one ends the
1116
+ process at once, without its quit handlers. It is sent once, only when the
1117
+ table shows that same process alone (no helper) and it reads the same, at
1118
+ two readings at least 5 seconds apart. There is never a third signal, and
1119
+ never another kind; `restart.signals` counts the signals delivered.
1120
+ Otherwise `open` answers `launch-failed` / `app-did-not-quit`, writes
1121
+ nothing and starts nothing.
1122
+ 4. The file is written as above, with the vault and the switch.
1123
+ 5. The app is started plainly (`open -b md.obsidian`) by the launch steps
1124
+ below, and reopens its vaults and this one. An answer given after the quit
1125
+ and before the launch (the file could not take the vault, say) starts the
1126
+ app plainly first, as it was; a start that fails is said, with the next
1127
+ step to start it by hand.
1128
+
1129
+ The answer carries `restart: { asked, state, quit, signalled, pid, signals,
1130
+ settingsCopy, startedAgain }`, and `reason` and `detail` when it did not quit.
1131
+ An `open` interrupted between the quit and the start leaves the app quit (a
1132
+ known limit). At a terminal the restart still needs the flag; the question the
1133
+ design asks in that state comes with the first-run command. Qualified on macOS only; elsewhere the answer is
1134
+ `restart-platform-unqualified`, since a quit app there is started with a
1135
+ link, which would drop the other vaults' reopen flags.
1136
+
915
1137
  `open` then shows the vault by the steps of `launchPlan`
916
1138
  (`src/runtime/obsidian/launch-plan.mjs`, carried out by `runLaunchPlan`),
917
1139
  naming it `obsidian://open?vault=<id>` when the id reaches it first (a path is
@@ -925,7 +1147,13 @@ plainly (`open -b md.obsidian`), which reopens every vault the list flags open
925
1147
  tool once the app itself answers the tool (`appAnswered`: a version or one of
926
1148
  the app's own lines; the tool's "unable to find Obsidian" while the app starts
927
1149
  does not count). A link is never handed to the operating system for an app
928
- this launch started, since that would reach it while it starts. An app started with a link would delete the
1150
+ this launch started, since that would reach it while it starts. A link the
1151
+ started app did not take is left to it when the list flags the vault open,
1152
+ since the plain start reopens it; for a listed vault that is closed, which a
1153
+ plain start does not reopen, the link is handed once more, through the tool
1154
+ only (this launch started the app), one wait round later, before `open`
1155
+ answers `launch-failed` /
1156
+ `app-did-not-answer-for-this-vault`. An app started with a link would delete the
929
1157
  reopen flag of every other vault without a window (1.13.7, checked on an
930
1158
  isolated instance). On Linux a quit app is started with the link, a known
931
1159
  limit. With its command line turned off the app answers every other command
@@ -1095,6 +1323,7 @@ today) it refuses `exchange-unavailable`. Both write nothing.
1095
1323
  | `interrupted-before-exchange`, `apply-interrupted-needs-person` | what restart recovery decided for an interrupted apply |
1096
1324
  | `recovery-state-unreadable` | a candidate, backup or source path of an interrupted apply may not be looked at or read; nothing is settled from a read this process was denied, that record is reported with its intent still open, and every other one is still settled |
1097
1325
  | `apply-outcome-unknown` | the source was exchanged and the settlement from digests could not be carried out; the source may have been changed, the intent stays open and `apply recover` decides |
1326
+ | `personal-overlay-proposals-only` | the note is a private note of a personal workspace, whose file belongs to a module-owned generation; nothing is written there. The proposal adapter's observation answers the same edit with `personal-overlay-not-proposed`, and records nothing |
1098
1327
 
1099
1328
  A path that another program removes or replaces between two steps, before the
1100
1329
  intent is recorded, answers one of these refusals (`source-missing`,
@@ -1317,7 +1546,9 @@ line, 16 MiB, 10,000 events, and an unreadable line refuses every append.
1317
1546
  | `ledger-corrupt` | refused, for that repository only; other repositories progress in the same tick |
1318
1547
  | `store-unavailable` | the store cannot be read or is locked now; waits like a full one |
1319
1548
 
1320
- A waiting operation is tried at most 8 times, 60 seconds after the first attempt
1549
+ For a personal workspace whose graph the engine has not confirmed yet, a due
1550
+ operation is left as it is (`personal-validation-pending`), and that tick is not
1551
+ counted as an attempt. A waiting operation is tried at most 8 times, 60 seconds after the first attempt
1321
1552
  and twice as long after each, up to an hour. At most 8 operations per repository
1322
1553
  and 64 unexamined edits are looked at per tick. A repository holds at most 4096
1323
1554
  operations, 256 of them open, 64 records of 16 KiB each; a full queue refuses