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

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 (236) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +80 -47
  3. package/SECURITY.md +1 -1
  4. package/TRADEMARKS.md +2 -2
  5. package/contracts/atelier-extension-manifest.v1.schema.json +412 -0
  6. package/contracts/atelier-graph-view.v1.schema.json +1085 -0
  7. package/contracts/public-api-baseline.json +298 -19
  8. package/docs/README.md +90 -0
  9. package/docs/blocks/claims.md +2 -2
  10. package/docs/blocks/conformance-admission.md +1 -1
  11. package/docs/{atelier-sync.md → guides/atelier-sync.md} +20 -14
  12. package/docs/guides/co-authoring.md +113 -0
  13. package/docs/{distributions.md → guides/distributions.md} +13 -8
  14. package/docs/guides/extensions.md +189 -0
  15. package/docs/guides/graph-refresh.md +152 -0
  16. package/docs/guides/graph-workspace.md +76 -0
  17. package/docs/{ingestion.md → guides/ingestion.md} +13 -12
  18. package/docs/{knowledge-workspace.md → guides/knowledge-workspace.md} +2 -2
  19. package/docs/{learning.md → guides/learning.md} +12 -5
  20. package/docs/{obsidian.md → guides/obsidian.md} +134 -47
  21. package/docs/guides/ontology-guide.md +111 -0
  22. package/docs/{personal-workspace.md → guides/personal-workspace.md} +7 -4
  23. package/docs/{research-starter.md → guides/research-starter.md} +1 -1
  24. package/docs/{tenant-readiness.md → guides/tenant-readiness.md} +39 -0
  25. package/docs/{upgrade.md → guides/upgrade.md} +40 -9
  26. package/docs/knowledge-health/assessment/capabilities.md +6 -15
  27. package/docs/knowledge-health/facilitator.md +15 -4
  28. package/docs/knowledge-health/{devday/participant-response.md → participant-response.md} +4 -2
  29. package/docs/knowledge-health/quickstart.md +97 -75
  30. package/docs/knowledge-health/readme.md +13 -5
  31. package/docs/maintainers/describing-the-atelier.md +173 -0
  32. package/docs/{release-engineering.md → maintainers/release-engineering.md} +5 -5
  33. package/docs/{announcements.md → reference/announcements.md} +1 -1
  34. package/docs/{architecture.md → reference/architecture.md} +31 -5
  35. package/docs/{atelier-runtime.md → reference/atelier-runtime.md} +1 -1
  36. package/docs/{connected-composition.md → reference/connected-composition.md} +7 -10
  37. package/docs/{coordination.md → reference/coordination.md} +1 -1
  38. package/docs/{decisions.md → reference/decisions.md} +3 -3
  39. package/docs/{design.md → reference/design.md} +1 -1
  40. package/docs/reference/edge-policy.md +151 -0
  41. package/docs/reference/graph-view-structured.md +119 -0
  42. package/docs/reference/graph-view.md +139 -0
  43. package/docs/reference/graph-workspace.md +37 -0
  44. package/docs/{intake-and-guides.md → reference/intake-and-guides.md} +3 -4
  45. package/docs/{knowledge-graph.md → reference/knowledge-graph.md} +120 -6
  46. package/docs/{local-services.md → reference/local-services.md} +1 -1
  47. package/docs/{obsidian-contract.md → reference/obsidian-contract.md} +6 -4
  48. package/docs/{obsidian-plugin.md → reference/obsidian-plugin.md} +5 -66
  49. package/docs/{practical-judgment.md → reference/phronesis.md} +12 -3
  50. package/docs/reference/portability.md +92 -0
  51. package/docs/{portable-presentation.md → reference/portable-presentation.md} +2 -2
  52. package/docs/{presentation-consumer-boundaries.md → reference/presentation-consumer-boundaries.md} +5 -0
  53. package/docs/{project-options.md → reference/project-options.md} +17 -0
  54. package/docs/{repo-boundary-guard.md → reference/repo-boundary-guard.md} +27 -4
  55. package/docs/{review-portability.md → reference/review-portability.md} +4 -0
  56. package/docs/{template-profile.md → reference/template-profile.md} +1 -1
  57. package/docs/{trackables.md → reference/trackables.md} +2 -2
  58. package/docs/start/independent-start.md +89 -0
  59. package/docs/{install.md → start/install.md} +6 -6
  60. package/docs/{knowledge-setup.md → start/knowledge-setup.md} +5 -5
  61. package/docs/{research-starter-quickstart.md → start/research-starter-quickstart.md} +6 -6
  62. package/fixtures/atelier-architecture/catalog/invalid/document.json +2 -2
  63. package/fixtures/atelier-architecture/catalog/valid/document.json +2 -2
  64. package/fixtures/graph-view/synthetic-authorized-input.v1.json +437 -0
  65. package/fixtures/graph-view/synthetic-view.v1.json +1 -0
  66. package/fixtures/knowledge-health/workshop/README.md +1 -1
  67. package/fixtures/templates/local-library.v1.json +3 -1
  68. package/package.json +21 -8
  69. package/skills/claude/atelier-guided-upgrade/SKILL.md +1 -1
  70. package/skills/claude/atelier-knowledge-setup/SKILL.md +2 -2
  71. package/skills/claude/atelier-local-service/SKILL.md +1 -1
  72. package/skills/claude/atelier-practical-judgment/SKILL.md +7 -2
  73. package/skills/claude/atelier-skill-steward/SKILL.md +1 -1
  74. package/skills/claude/mnstry-readiness/SKILL.md +2 -2
  75. package/skills/codex/atelier-guided-upgrade/SKILL.md +1 -1
  76. package/skills/codex/atelier-knowledge-setup/SKILL.md +2 -2
  77. package/skills/codex/atelier-local-service/SKILL.md +1 -1
  78. package/skills/codex/atelier-practical-judgment/SKILL.md +7 -2
  79. package/skills/codex/atelier-skill-steward/SKILL.md +1 -1
  80. package/skills/codex/mnstry-readiness/SKILL.md +2 -2
  81. package/src/architecture/catalog.mjs +2 -2
  82. package/src/attestation/sign.mjs +1 -1
  83. package/src/boundary/content-rules.mjs +5 -4
  84. package/src/boundary/policy.mjs +60 -12
  85. package/src/cli/run.mjs +24 -8
  86. package/src/commands/distribution.mjs +1 -1
  87. package/src/commands/extension.mjs +27 -0
  88. package/src/commands/ingest.mjs +1 -1
  89. package/src/commands/learn.mjs +1 -1
  90. package/src/commands/obsidian.mjs +28 -16
  91. package/src/commands/review.mjs +3 -0
  92. package/src/edge-policy/contract.mjs +69 -0
  93. package/src/edge-policy/policy.mjs +142 -0
  94. package/src/edge-policy/source-citation-adapter.mjs +43 -0
  95. package/src/extension-packs/loader.mjs +4 -3
  96. package/src/extensions/admission.mjs +83 -0
  97. package/src/extensions/client.d.mts +23 -0
  98. package/src/extensions/client.mjs +99 -0
  99. package/src/extensions/contracts.d.mts +29 -0
  100. package/src/extensions/contracts.mjs +163 -0
  101. package/src/extensions/convex.d.mts +24 -0
  102. package/src/extensions/convex.mjs +189 -0
  103. package/src/extensions/delegation.mjs +54 -0
  104. package/src/extensions/drizzle.d.mts +11 -0
  105. package/src/extensions/drizzle.mjs +33 -0
  106. package/src/extensions/postgres.d.mts +7 -0
  107. package/src/extensions/postgres.mjs +66 -0
  108. package/src/extensions/prisma.d.mts +13 -0
  109. package/src/extensions/prisma.mjs +63 -0
  110. package/src/extensions/project.mjs +432 -0
  111. package/src/extensions/scaffold-convex.mjs +130 -0
  112. package/src/extensions/scaffold-sql.mjs +144 -0
  113. package/src/extensions/server.d.mts +20 -0
  114. package/src/extensions/server.mjs +102 -0
  115. package/src/extensions/sql-scope.mjs +22 -0
  116. package/src/graph/knowledge-graph.mjs +1 -1
  117. package/src/graph/repo-contribution.mjs +405 -0
  118. package/src/graph/repo-contribution.types.mjs +32 -0
  119. package/src/graph-access/edge-decision-adapter.mjs +41 -0
  120. package/src/graph-access/edge-record-adapter.mjs +73 -0
  121. package/src/graph-access/index.mjs +253 -0
  122. package/src/graph-access/multi-contribution-record-adapter.mjs +101 -0
  123. package/src/graph-access/multi-record-projection-adapter.mjs +74 -0
  124. package/src/graph-access/source-adapter.mjs +81 -0
  125. package/src/graph-refresh/compare.mjs +110 -0
  126. package/src/graph-refresh/controller.mjs +324 -0
  127. package/src/graph-refresh/index.mjs +3 -0
  128. package/src/graph-refresh/local.mjs +78 -0
  129. package/src/graph-view/babylon/babylon-scene-port.mjs +64 -0
  130. package/src/graph-view/babylon/index.mjs +2 -0
  131. package/src/graph-view/babylon/navigator.mjs +312 -0
  132. package/src/graph-view/babylon/provenance.mjs +36 -0
  133. package/src/graph-view/babylon/scene-controller.mjs +131 -0
  134. package/src/graph-view/babylon/semantic-picking.mjs +35 -0
  135. package/src/graph-view/babylon/web-host.mjs +188 -0
  136. package/src/graph-view/cli.mjs +3 -0
  137. package/src/graph-view/command.mjs +34 -0
  138. package/src/graph-view/contracts.mjs +79 -0
  139. package/src/graph-view/errors.mjs +5 -0
  140. package/src/graph-view/index.mjs +4 -0
  141. package/src/graph-view/intents.mjs +30 -0
  142. package/src/graph-view/query.mjs +213 -0
  143. package/src/graph-view/refs.mjs +2 -0
  144. package/src/graph-view/structured/browser.mjs +262 -0
  145. package/src/graph-view/structured/styles.mjs +8 -0
  146. package/src/graph-workspace/authoring.mjs +185 -0
  147. package/src/graph-workspace/browser/dom.mjs +23 -0
  148. package/src/graph-workspace/browser/index.mjs +6 -0
  149. package/src/graph-workspace/browser/map.mjs +374 -0
  150. package/src/graph-workspace/browser/review.mjs +55 -0
  151. package/src/graph-workspace/browser/styles.mjs +11 -0
  152. package/src/graph-workspace/browser/workbench.mjs +351 -0
  153. package/src/graph-workspace/browser/workspace.mjs +433 -0
  154. package/src/graph-workspace/disclosure.mjs +39 -0
  155. package/src/graph-workspace/geometry.mjs +78 -0
  156. package/src/graph-workspace/index.mjs +11 -0
  157. package/src/graph-workspace/labels.mjs +50 -0
  158. package/src/graph-workspace/model.mjs +109 -0
  159. package/src/graph-workspace/recipes.mjs +100 -0
  160. package/src/graph-workspace/scale.mjs +98 -0
  161. package/src/graph-workspace/theme.mjs +156 -0
  162. package/src/knowledge/ontology-guide.mjs +152 -0
  163. package/src/knowledge-health/proof/installed-check.mjs +2 -2
  164. package/src/knowledge-health/rule-identity.mjs +7 -7
  165. package/src/knowledge-health/workshop.mjs +22 -2
  166. package/src/personal-workspace/selection.mjs +17 -2
  167. package/src/project/config.mjs +1 -1
  168. package/src/project/providers/github.mjs +24 -0
  169. package/src/project/repo-identity.mjs +3 -22
  170. package/src/projection/obsidian/contracts.mjs +1 -1
  171. package/src/projection/obsidian/materialize/path-registry.mjs +1 -1
  172. package/src/projection/obsidian/materialize/prepare-view.mjs +1 -1
  173. package/src/projection/obsidian/materialize/redaction.mjs +1 -1
  174. package/src/projection/obsidian/personal-workspace.mjs +24 -28
  175. package/src/projection/obsidian/plugin-bridge/channel.mjs +1 -1
  176. package/src/projection/obsidian/publication/publisher.mjs +25 -4
  177. package/src/projection/project.mjs +18 -14
  178. package/src/readiness/readiness.mjs +20 -11
  179. package/src/readiness-protocols/bundled-pack.mjs +14 -766
  180. package/src/readiness-protocols/bundled-selection.mjs +32 -0
  181. package/src/readiness-protocols/evidence.mjs +2 -1
  182. package/src/readiness-protocols/packs/mnstry.mjs +766 -0
  183. package/src/readiness-protocols/runtime.mjs +43 -6
  184. package/src/runtime/obsidian/engine.mjs +99 -26
  185. package/src/runtime/obsidian/lifecycle.mjs +3 -3
  186. package/src/runtime/obsidian/login-item.mjs +2 -2
  187. package/src/runtime/obsidian/machine-settings.mjs +52 -8
  188. package/src/runtime/obsidian/opening.mjs +2 -2
  189. package/src/runtime/obsidian/personal-selection.mjs +88 -26
  190. package/src/runtime/obsidian/pipeline.mjs +75 -7
  191. package/src/runtime/obsidian/private-lock.mjs +11 -2
  192. package/src/runtime/obsidian/selection-continuity.mjs +124 -0
  193. package/src/runtime/obsidian/service-main.mjs +15 -9
  194. package/src/runtime/obsidian/service.mjs +14 -0
  195. package/src/runtime/obsidian/unheld-evidence.mjs +1 -1
  196. package/src/runtime/obsidian/view-permission.mjs +2 -1
  197. package/src/upgrade/upgrade.mjs +23 -4
  198. package/templates/distribution-workspace/README.md +2 -2
  199. package/templates/external-project-workspace/atelier.project.json +3 -0
  200. package/templates/external-project-workspace/pack-lifecycle.json +3 -1
  201. package/templates/knowledge-workspace/README.md +2 -2
  202. package/docs/integration-and-review-plan.md +0 -409
  203. package/docs/integration-contract-decisions.md +0 -44
  204. package/docs/knowledge-health/devday/facilitator.md +0 -16
  205. package/docs/knowledge-health/devday/public-default.md +0 -107
  206. package/docs/knowledge-health/devday/quickstart.md +0 -18
  207. package/docs/knowledge-health/devday/support.md +0 -22
  208. package/docs/knowledge-health/exercise.md +0 -17
  209. package/docs/knowledge-health/support.md +0 -34
  210. package/docs/presentation-review-disposition.md +0 -47
  211. package/docs/progressive-ingestion-acceptance.md +0 -89
  212. package/docs/progressive-ingestion.md +0 -235
  213. /package/docs/{capability-stewardship.md → guides/capability-stewardship.md} +0 -0
  214. /package/docs/{exact-upgrades.md → guides/exact-upgrades.md} +0 -0
  215. /package/docs/{guided-upgrades.md → guides/guided-upgrades.md} +0 -0
  216. /package/docs/{inquiry-harnesses.md → guides/inquiry-harnesses.md} +0 -0
  217. /package/docs/{learning-harnesses.md → guides/learning-harnesses.md} +0 -0
  218. /package/docs/{local-review.md → guides/local-review.md} +0 -0
  219. /package/docs/{skill-steward.md → guides/skill-steward.md} +0 -0
  220. /package/docs/{template-upgrades.md → guides/template-upgrades.md} +0 -0
  221. /package/docs/{assurance-controls.md → maintainers/assurance-controls.md} +0 -0
  222. /package/docs/{attestation.md → reference/attestation.md} +0 -0
  223. /package/docs/{coauthor-session.md → reference/coauthor-session.md} +0 -0
  224. /package/docs/{continuity.md → reference/continuity.md} +0 -0
  225. /package/docs/{contract-stability.md → reference/contract-stability.md} +0 -0
  226. /package/docs/{decision-practices.md → reference/decision-practices.md} +0 -0
  227. /package/docs/{evidence-navigation.md → reference/evidence-navigation.md} +0 -0
  228. /package/docs/{extension-pack-lifecycle.md → reference/extension-pack-lifecycle.md} +0 -0
  229. /package/docs/{interaction-and-reflection.md → reference/interaction-and-reflection.md} +0 -0
  230. /package/docs/{local-state.md → reference/local-state.md} +0 -0
  231. /package/docs/{ontology.md → reference/ontology.md} +0 -0
  232. /package/docs/{optional-ingestion.md → reference/optional-ingestion.md} +0 -0
  233. /package/docs/{project-command-inventory.md → reference/project-command-inventory.md} +0 -0
  234. /package/docs/{semantic-ingestion.md → reference/semantic-ingestion.md} +0 -0
  235. /package/docs/{semantic-operation.md → reference/semantic-operation.md} +0 -0
  236. /package/docs/{vault-service.md → reference/vault-service.md} +0 -0
@@ -4,7 +4,7 @@ This document describes the selection binding, the apply policy setup, the
4
4
  conflict-state view and the acceptance receipt validator under
5
5
  `src/projection/obsidian/selection-ui/`. It states what each one does on this
6
6
  machine and what it does not. The contract itself is in
7
- [obsidian-contract.md](obsidian-contract.md).
7
+ [obsidian-contract.md](../reference/obsidian-contract.md).
8
8
 
9
9
  Nothing in this module starts the app, runs `obsidian-cli`, publishes a vault
10
10
  or writes a source file. The test suite installs a spawn guard that throws if
@@ -273,7 +273,7 @@ path. The package root (`@mnstry/atelier`) exports nothing of the projection.
273
273
  Names ending `ForOracleTests` are mutation controls for the test suite, not a
274
274
  supported API. The whole surface is alpha and may change between prereleases.
275
275
  What the tarball must and must not carry, and the package proof, are in
276
- [release-engineering.md](release-engineering.md#obsidian-package-contents).
276
+ [release-engineering.md](../maintainers/release-engineering.md#obsidian-package-contents).
277
277
 
278
278
  ## First vault: what to expect
279
279
 
@@ -564,7 +564,7 @@ its own storage and asks again the next time until the vault is trusted or
564
564
  restricted mode is switched on for good in its settings. Turning the plugin
565
565
  off in a vault, or uninstalling it there, is respected from then on;
566
566
  `atelier obsidian plugin on --scope ID` brings it back. What the plugin does
567
- and never does is in [obsidian-plugin.md](obsidian-plugin.md).
567
+ and never does is in [obsidian-plugin.md](../reference/obsidian-plugin.md).
568
568
 
569
569
  `open` and `status` answer with a freshness state, not a promise. `current`
570
570
  means the vault is the present generation, verified by read-back, and the app
@@ -689,7 +689,7 @@ exactly because the folder is listed.
689
689
  Obsidian does not have to be quit.
690
690
  - **Obsidian is not running.** The view is published on the path with no app,
691
691
  as before. `open` then adds the vault to the app's settings file (see
692
- [Obsidian's vault list](obsidian-contract.md#obsidians-vault-list) for
692
+ [Obsidian's vault list](../reference/obsidian-contract.md#obsidians-vault-list) for
693
693
  exactly when and how that one file is written, marked to reopen) and starts
694
694
  Obsidian plainly, with no link: an Obsidian started with a link opens only
695
695
  that vault and drops the reopen flag of every other one, so your other
@@ -825,7 +825,7 @@ names the folder meanwhile, a settings file with other bytes is already
825
825
  there, or an interrupted run left a replacement or a removal. `open` may then
826
826
  add and open the vault before it is complete, and the app publishes the rest.
827
827
  Anything that would replace or remove a file waits for the app. See "First publication into a vault no Obsidian lists" in
828
- [obsidian-contract.md](obsidian-contract.md). The plugin's entry written this
828
+ [obsidian-contract.md](../reference/obsidian-contract.md). The plugin's entry written this
829
829
  way counts as offered until the plugin says hello from the vault.
830
830
 
831
831
  The publisher still writes into a vault only when it can coordinate with every
@@ -971,9 +971,12 @@ confirmed there (see "A confirmed selection", below).
971
971
  (`personal-views-exceed-settings-limit`), within the Obsidian settings
972
972
  contract. The preferred view, when it names a saved one, is the default. No
973
973
  generation file is written. `view add` refuses `views-from-personal-overlay`;
974
- `audience set`, `audience clear` and `location set` refuse
975
- `personal-binding-decision-unavailable`. Each refuses before anything is
976
- resolved or written.
974
+ `audience set me` records owner-only visibility in the machine settings, and
975
+ `audience clear` withholds every audience. Custom audience lists refuse
976
+ `personal-binding-owner-only`; `location set` still refuses
977
+ `personal-binding-decision-unavailable`. Refused operations do not change
978
+ audience, view or location settings. Following a selection may still keep
979
+ machine-private continuity evidence before the setting operation refuses.
977
980
  - **Preferences and coverage.** `preferences` are returned read only. A theme
978
981
  is reported and never written: `appearance.json` stays the person's.
979
982
  `coverage` is passed through untouched. No Obsidian code reads it: it states
@@ -1024,28 +1027,52 @@ unit and loader is what it was.
1024
1027
  a confirmed generation. `status`, `open` and `service start` load the
1025
1028
  selection and refuse with its code; the service's freshness shows every view
1026
1029
  `stale` with it, and its status document has it as the last tick's reason.
1027
- `selection-history-shortened` comes only from a process that read the
1028
- history longer, which is the running service: a command of the command line
1029
- reads the history in a process of its own, as it then stands, so `status`
1030
- reports the selection a cut history ends with while the service refuses it.
1030
+ The command and service read the same machine-private continuity state, so a
1031
+ restart or a separate command does not accept a shortened history. An invalid
1032
+ checkpoint refuses `invalid-selection-continuity`; a checkpoint that cannot be
1033
+ kept refuses `selection-continuity-unavailable`. No project is returned in either case.
1031
1034
  A confirmed selection is reported by `status` (`selection`: the generation
1032
1035
  and the number of its record).
1033
- - **The service starts whatever the selection.** A bound project's folder is
1034
- its private home, so the home alone locates the workspace
1035
- (`locatePersonalHome`): the service resolves its workspace from that at once
1036
- and starts, and its engine awaits the loader at each tick. Started by a login
1037
- item, the service asks the home, not the loader, for its workspace and log.
1038
- `service status` and `stop`, the ticks `open` asks for, `service unit
1039
- --remove` and `uninstall` locate the service the same way. When no project
1040
- loaded (a restart while nothing is confirmed), the engine locates the
1041
- workspace too, so each view published before says why nothing is published
1042
- now instead of keeping the previous run's `current`. A service given a loader
1043
- that answers a promise and no locator is still refused at start with
1036
+ - **The service starts from an initialized home whatever the selection.** A bound
1037
+ project's folder is its private home. The home must contain its caller-authored
1038
+ `atelier.personal.json`, even when its enrollment is explicitly empty and no
1039
+ generation is confirmed. A bare directory or a missing/unreadable manifest
1040
+ refuses before startup; the locator cannot infer that no repositories were
1041
+ enrolled from missing evidence. This tightens the former lower-level API
1042
+ behavior that could start from a bare home. The locator reads the home and the
1043
+ current manifest's repository roots for exclusion, without composing or
1044
+ selecting a generation. A data root
1045
+ inside a declared repository is refused before private state is created or a
1046
+ login item is removed for a restart, including when nothing is confirmed.
1047
+ The service resolves its workspace from that at once and starts, and its
1048
+ engine awaits the loader at each tick. `atelier obsidian --personal-home`
1049
+ does this for a bound home. A
1050
+ program that runs the service itself (`runMaintenanceService` from
1051
+ `@mnstry/atelier/obsidian`) gives it the same through `locateProject`, a
1052
+ synchronous function that answers, without loading anything, a project whose
1053
+ `configDir` is the folder the workspace is resolved from. The workspace is
1054
+ then resolved from that answer alone: a data root named only in the loaded
1055
+ project's local overlay, and not in the answer, is not seen, so the service's
1056
+ state can lie under another data root than the loaded project's. Name the data
1057
+ root through the `dataRoot` option or the workspace pointer instead, which
1058
+ both see. Started by a login item, the service asks the home, not the loader,
1059
+ for its workspace and log. `service status` and `stop`, the ticks `open` asks
1060
+ for, `service unit --remove` and `uninstall` locate the service the same way.
1061
+ When no project loaded (a restart while nothing is confirmed), the engine
1062
+ locates the workspace too, so each view published before says why nothing is
1063
+ published now instead of keeping the previous run's `current`. A service given
1064
+ a loader that answers a promise and no locator is still refused at start with
1044
1065
  `service-loader-not-synchronous`, and so is one whose locator answers a
1045
1066
  promise; a located value that names no folder refuses
1046
1067
  `service-locator-invalid`. The workspace pointer is under the home, so a home
1047
1068
  that is gone when the service starts leaves it no workspace to find
1048
1069
  (`service-workspace-not-prepared`).
1070
+ - **Cleanup with nothing confirmed.** `service unit --remove` and `uninstall`
1071
+ locate the existing protected workspace without a generation, and remember
1072
+ the machine's login-item decision as `off` there. They do not change the
1073
+ audience or confirm anything. Uninstall reports the actual kept workspace
1074
+ pointer under the personal home, and leaves its bytes, private state,
1075
+ generations and selection history in place.
1049
1076
  - **Following the history.** A loaded project is pinned to the record it was
1050
1077
  loaded under, and the engine observes that record and the place of the next
1051
1078
  one as configuration. A confirmation is therefore loaded at the next tick. A
@@ -1062,7 +1089,7 @@ unit and loader is what it was.
1062
1089
  another), whether or not the
1063
1090
  record's generation could be used, and whichever part of the service read
1064
1091
  it. A history that ends earlier refuses `selection-history-shortened` at a
1065
- load and at a recheck, and nothing is loaded from it while it is shorter; at
1092
+ load and at a recheck until a fresh confirmation accepts it; at
1066
1093
  the read made when a tick stops a view, the view says `mixed-read` at that
1067
1094
  tick and the code at the next. A project already loaded is loaded again at
1068
1095
  the next tick once any part of the service has read the history ending at a
@@ -1078,18 +1105,26 @@ unit and loader is what it was.
1078
1105
  noted. The views say why (`open` and
1079
1106
  `status --json` name the ways out), and the vault keeps what it last
1080
1107
  published.
1081
- - **What ends that refusal.** The removed records put back; a history as long
1082
- again, since a record in a place already read, with other content, is read
1083
- as a confirmation (after a cut of one record the person's next confirmation
1084
- is followed; after a cut of several, one confirmation is not enough); or a
1085
- start of the service. The number is kept in the process only, so a service
1086
- started after the cut cannot tell a cut history from one never longer: it
1087
- reads the history as it then stands and follows what it ends with,
1088
- publishing it if its generation still holds. Every start counts, the
1089
- person's own and one at login, after an upgrade or after a failure. Stopping
1090
- and starting the service is therefore how a person accepts a shorter
1091
- history, and a start nobody chose accepts it too. Nothing here keeps the
1092
- number across a start.
1108
+ - **What ends that refusal.** Put the removed records back, or explicitly confirm
1109
+ the currently eligible generation through `selectPersonalGeneration` again.
1110
+ That existing confirmation operation is the accepting act; no new command is
1111
+ needed. One fresh confirmation accepts a shorter history even when its record
1112
+ number remains below the highest ever observed. Its unique confirmation
1113
+ identity distinguishes it from a previously observed record restored to the
1114
+ same position. Replaying a previously observed prefix refuses, including after
1115
+ a shorter history was accepted. Composition still decides whether the chosen
1116
+ generation is eligible.
1117
+ - **Continuity across starts.** The highest observed number, accepted head and
1118
+ previously observed record digests live in
1119
+ `state/maintenance/selection-continuity.json` under the existing private
1120
+ workspace. Reads validate its closed schema, workspace and personal-home
1121
+ identities; changed writes are serialized through the existing private-state
1122
+ lock, owner-only and atomic. State is bounded at 1 MiB and 8,192 observed record
1123
+ identities; exhausting the identity budget refuses `selection-continuity-capacity`.
1124
+ First use initializes from the current valid history, including historical v1
1125
+ records without a confirmation identity. Retain this private state: deleting
1126
+ all of it removes the evidence that distinguishes prior observation from a first
1127
+ installation. Damaged existing state is never treated as a new installation.
1093
1128
  - **What the history is checked for besides.** At every full reconciliation the
1094
1129
  history is read again, so a record before the last that no longer links, or
1095
1130
  a confirmation that landed before the engine first looked at the record,
@@ -1098,7 +1133,8 @@ unit and loader is what it was.
1098
1133
  refuses `mixed-read` at its next wait, before its generation commits (one
1099
1134
  already committed stays), so do the views after it, and the next tick
1100
1135
  publishes under the new record. While the last load was refused, every tick
1101
- loads again: with nothing confirmed only the history is read, and with a
1136
+ loads again: with nothing confirmed the manifest, history and private continuity
1137
+ state are read without composition, and with a
1102
1138
  confirmed generation that no longer holds, one composition runs in a worker
1103
1139
  per tick.
1104
1140
  - **A narrowing.** When the newly confirmed generation drops a source (a
@@ -1110,10 +1146,14 @@ unit and loader is what it was.
1110
1146
  published (`held-for-your-edit`, `publication-withheld-for-your-edit`): the
1111
1147
  note is neither removed nor overwritten. A note edited during the
1112
1148
  publication itself stays in the vault (`retained-edit`).
1113
- - **Who may see.** The binding never decides it. It stays this machine's
1114
- audience setting, none by default, and `audience set` still refuses for a
1115
- bound project: until an audience is allowed some other way, a bound vault
1116
- shows no note. Deciding who may see a bound vault is not built.
1149
+ - **Who may see.** The existing machine audience setting owns this decision.
1150
+ For a personal binding, an undecided empty audience initializes to `only-you`
1151
+ with notes without a classification shown, recorded with `defaults` provenance.
1152
+ Existing explicit `only-you` lists and unclassified choices retain their exact
1153
+ meaning. An explicit `audience clear` stays empty across ticks and restarts.
1154
+ A nonempty custom setting refuses `personal-binding-owner-only` until
1155
+ `audience set me` or `audience clear` is recorded. Nothing is written into a
1156
+ generation or the personal overlay.
1117
1157
  - **Reading the history on the service's event loop.** The head is one
1118
1158
  directory listing and one bounded read per record. A record that is not a
1119
1159
  regular file (a FIFO, a device) refuses `selection-history-corrupt` without
@@ -1121,6 +1161,9 @@ unit and loader is what it was.
1121
1161
  project (its permissions changed, not removed) fails the tick when the
1122
1162
  engine observes its files, as an unreadable configuration file does: nothing
1123
1163
  is published, and the service reports the failed tick.
1164
+ After a worker composes a generation, the caller still reads generation
1165
+ files, resolves the generation's project configuration and assembles the
1166
+ bound project on its own thread. Composition itself remains in the worker.
1124
1167
 
1125
1168
  Measured once on 2,156 notes in three repositories, with 50 annotations and five
1126
1169
  saved views (six views in all). The production contributions were loaded, as
@@ -1179,7 +1222,7 @@ logged, and what carries no code is a crash.
1179
1222
  A service bound through `--personal-home` is given a locator as well, and starts
1180
1223
  from it (see "A confirmed selection"). The plugin's status read allows for such
1181
1224
  a loader without waiting for it (see "The channel" in
1182
- [obsidian-plugin.md](obsidian-plugin.md)).
1225
+ [obsidian-plugin.md](../reference/obsidian-plugin.md)).
1183
1226
 
1184
1227
  **Since that measurement.** The engine prepares each view cooperatively and
1185
1228
  the publisher yields between complete units, so the service answers health and
@@ -1258,7 +1301,7 @@ personal home they compose in a worker, as the engine's loads do, and the read
1258
1301
  starts each one on the loop by reading the selection history. A load that holds the loop
1259
1302
  for a second or more is logged (`status-project-loaded`), and so is a load at
1260
1303
  every request that names the files it started over (see "What the service
1261
- shows of these loads" in [obsidian-plugin.md](obsidian-plugin.md)).
1304
+ shows of these loads" in [obsidian-plugin.md](../reference/obsidian-plugin.md)).
1262
1305
 
1263
1306
  What the waits cost. The waits of observation and routing are taken at
1264
1307
  every boundary between two edits or two operations and before each
@@ -1302,7 +1345,7 @@ test reported as a pass.
1302
1345
  is admitted although the protocol depends on the view's undocumented
1303
1346
  `lastSavedData` field, and the protocol cases have not been re-run on any
1304
1347
  later release. See the "App capability floor" row of
1305
- [obsidian-contract.md](obsidian-contract.md). An app that was not running
1348
+ [obsidian-contract.md](../reference/obsidian-contract.md). An app that was not running
1306
1349
  when an adapter was qualified had no version to check, and neither had an
1307
1350
  app that was not found. Such an answer is never reused, and the adapter
1308
1351
  built on it does not coordinate with any app it then finds running, and
@@ -1342,6 +1385,50 @@ test reported as a pass.
1342
1385
  first allocation or when a vault is made again. Every other check runs
1343
1386
  again at both, and a vault made again, or published into, through a link on
1344
1387
  the way is refused (`vault-allocation-moved`).
1388
+ - Private state after a wait: that the private state is outside every
1389
+ repository the workspace declares now is proven when a project loads, around
1390
+ each engine phase, inside the engine and selection locks, and after each wait
1391
+ the publisher makes for the app, its list of vaults, its comparison of kept
1392
+ notes or its quiet period. "Declares now" differs by binding. For a project
1393
+ bound to a personal home, each proof reads the home's manifest again, so a
1394
+ repository enrolled while a tick waits is seen at the next proof. For an
1395
+ ordinary project, each proof uses the repositories of the project as it was
1396
+ last loaded. A change to its configuration or overlay that declares a
1397
+ repository enclosing the data root is not seen until the project is loaded
1398
+ again, and the writes of the tick in flight (preserved edits, pending edits
1399
+ and freshness, say) can land under it meanwhile. The proof is not made again
1400
+ at every write, and it is not made at all for writes made outside the
1401
+ engine's phases and the publisher. Those are:
1402
+ - the built-in proposal store's writes for pending edits to shared notes
1403
+ (kept bytes, arbitration records and its queue) while it works through
1404
+ several of them;
1405
+ - everything the service process itself keeps: its log, service settings,
1406
+ runtime record (with its bearer), service-start lock, startup record,
1407
+ error record and login-item record, including those written after it waits
1408
+ for a free port, for its server to listen or for the service manager, and
1409
+ those a login item's start writes in the workspace the unit names when the
1410
+ project's loader fails;
1411
+ - the plugin channel's bearer and the plugin choices it records, including a
1412
+ first-use bearer minted while a view is prepared and the confirmation
1413
+ written when a plugin session opens;
1414
+ - lock cleanup when a proof fails: any private lock that is held, or whose
1415
+ ticket was just published, when its proof refuses is still released or
1416
+ withdrawn, so that ownership is never left behind. This covers the engine
1417
+ lock (a release record, or the withdrawal of a ticket published before
1418
+ the last check of its acquisition), the selection continuity lock and the
1419
+ publication locks, including a release retried at the next acquisition.
1420
+ Lock cleanup and removing staged candidates are the only changes the
1421
+ engine and the publisher make after one of their proofs refuses.
1422
+
1423
+ Each of these writers keeps its file inside the workspace's private state,
1424
+ but none checks the roots declared now. A manifest that comes to enclose the
1425
+ data root, or that cannot be read, while the service runs can therefore
1426
+ receive these writes. A refusal of the private state's own location
1427
+ (`managed-root-unproven`) stops the whole tick, whichever view it is found
1428
+ in: no later view is prepared, given a store or published, and no view is
1429
+ reported current after it. A view whose own vault is in a bad place is still
1430
+ refused alone. A single check of the declared
1431
+ roots at every private-state write is planned as a separate change.
1345
1432
  - Replacing a vault during a publication: the allocated folder is checked
1346
1433
  before the vault lock is taken and again once its folder is made, after the
1347
1434
  app is asked about the vault, before each note and before the generation is
@@ -1366,7 +1453,7 @@ test reported as a pass.
1366
1453
  `~/.config/obsidian`) on Linux. It is written only while the process table
1367
1454
  shows, positively, that no Obsidian runs, only when Obsidian created it
1368
1455
  before, and with a backup beside it; see
1369
- [Obsidian's vault list](obsidian-contract.md#obsidians-vault-list). A
1456
+ [Obsidian's vault list](../reference/obsidian-contract.md#obsidians-vault-list). A
1370
1457
  Flatpak or snap build keeps its list inside its sandbox and never reads that
1371
1458
  file. Which build is in use is read from which vault list was written last
1372
1459
  (every build rewrites its own when a vault window opens or closes), and only
@@ -1421,7 +1508,7 @@ test reported as a pass.
1421
1508
  - The command-line tool (`obsidian-cli`) is a client of the app and is not
1422
1509
  counted. An app packaged under another executable name, an app on
1423
1510
  another machine and an app that starts after a reading are not seen; see
1424
- "The path with no app" in [obsidian-contract.md](obsidian-contract.md).
1511
+ "The path with no app" in [obsidian-contract.md](../reference/obsidian-contract.md).
1425
1512
  - The app-free path is live: before 0.2.0-alpha.10 the probe always found
1426
1513
  Atelier's own service, so publication never took the path with no app.
1427
1514
  From 0.2.0-alpha.10 it does, whenever the process table shows, positively,
@@ -1451,7 +1538,7 @@ test reported as a pass.
1451
1538
  back and a deleted folder is not made again until the person turns it on
1452
1539
  in Obsidian's settings or runs
1453
1540
  `atelier obsidian plugin on --scope ID`. Plugin files are never removed from
1454
- a vault. See [obsidian-plugin.md](obsidian-plugin.md).
1541
+ a vault. See [obsidian-plugin.md](../reference/obsidian-plugin.md).
1455
1542
  - Login items: the tests run the launchd and systemd managers' own code
1456
1543
  against stand-ins that answer as launchctl and systemctl do, and never
1457
1544
  against a real session. What `launchctl print-disabled` says for an item
@@ -0,0 +1,111 @@
1
+ # Source-bound ontology guidance
2
+
3
+ The experimental internal ontology guide prepares a private proposal for the
4
+ existing knowledge workspace. It starts with a decision and preserves concept
5
+ identity, exact source passages, directed relationship meaning and uncertainty.
6
+ It does not edit a plan or source, confirm a participant answer, accept a mapping,
7
+ or execute a decision.
8
+
9
+ This module is not a supported package export or a new browser route. Existing
10
+ knowledge-plan v1 files, the five knowledge views, sessions and package interfaces
11
+ are unchanged. Maintainers can inspect its behavior with:
12
+
13
+ ```sh
14
+ node --test test/ontology-guide.test.mjs
15
+ ```
16
+
17
+ ## One guided loop
18
+
19
+ Choose a question in the current plan, then answer seven prompts:
20
+
21
+ 1. What decision will this help?
22
+ 2. What is the thing you are naming?
23
+ 3. How would you recognize the same thing next week?
24
+ 4. What close example should stay separate?
25
+ 5. Which source supports it?
26
+ 6. What does the relationship mean in each direction?
27
+ 7. What would change your mind?
28
+
29
+ For an existing corpus, select bounded permitted evidence through the current
30
+ knowledge context. For a blank workspace, retain its enrolled source directory
31
+ and begin with a permitted observation/interview note or an explicit unknown.
32
+ A synthetic practice observation remains labelled synthetic. An absent or broken
33
+ enrollment is a source configuration error; it cannot establish an abstention.
34
+ Both routes lead to source-owner review and a proposed next decision or test.
35
+ Observed outcomes belong in Learn after they exist.
36
+
37
+ The seven prompts map to the four existing Model fields: `concept`, `identity`,
38
+ `relation` and `test`. A host should use the existing session answer/propose,
39
+ confirmation and private-save operations. The guide returns wording; it does not
40
+ send those operations. A saved draft remains a proposal. Agent-written wording
41
+ still requires the existing explicit participant confirmation before saving.
42
+
43
+ ## Identity, evidence and limits
44
+
45
+ Choose concepts by their existing IDs. Definitions, stable identity rules and
46
+ `concept:` tags remain in the v1 plan. Examples, near misses, distinction
47
+ rationale and disconfirming observations stay in private proposal metadata;
48
+ they do not widen the closed plan schema. Identical definitions or identity
49
+ rules require an explanation of how the concepts differ. Similar labels or
50
+ aliases never establish identity. This small check cannot detect every semantic
51
+ ambiguity; a reviewer still judges the proposed definitions and examples.
52
+
53
+ The guide reads context through the existing local knowledge workspace. Evidence
54
+ must match a unique selected source ID, its current full-file digest, a valid
55
+ line range and its exact text. The handoff retains repo/path, digest, locator
56
+ and passage, including qualifications. A source or plan change requires a new
57
+ binding; earlier evidence and drafts remain historical. This is local-operator
58
+ source binding, not a recipient permission check or hosted access decision.
59
+
60
+ Explain each required relation using its existing forward predicate and both
61
+ endpoint concepts. A reverse reading helps a person understand the original
62
+ relation; it creates no inverse assertion. Evidence retrieval cannot establish a
63
+ business claim, certainty or semantic truth.
64
+
65
+ A proposed answer can say `supported` or `abstain`. These are the participant's
66
+ proposed labels. `ready-for-human-review` checks draft completeness and source
67
+ binding only. It does not certify that the answer is supported. Require stated
68
+ scope and uncertainty, alternative explanations, and what could change the
69
+ answer. Missing evidence suggests narrowing the claim or abstaining. Omitted
70
+ sources remain explicit in the handoff; an abstention with omissions is marked
71
+ `unverified-omissions`, so it cannot imply corpus-wide absence of evidence.
72
+
73
+ ## Review handoff
74
+
75
+ The internal `createOntologyGuide()` adapter reads an already-loaded local
76
+ workspace and a current question ID:
77
+
78
+ - `prompts(workspace, questionId, entry)` returns ordered guidance for `corpus`
79
+ or `blank` entry and the existing view/Model field for each step.
80
+ - `inspect(workspace, questionId, draft)` returns field-specific next actions,
81
+ verified source passages and retained retrieval limitations.
82
+ - `prepareReview(workspace, questionId, draft, {basePlanText, planRef})` returns
83
+ an input body for the existing copy-only proposal store, or diagnostics.
84
+
85
+ `draft` retains the workspace snapshot, raw base-plan SHA-256, entry route,
86
+ decision, exact concept IDs with examples/counterexamples and identity basis,
87
+ required relation readings, selected evidence pins, proposed answer/limits and
88
+ disconfirming observation. An optional `proposedPlan` must still validate as v1.
89
+ The source owner reviews changes before any canonical admission.
90
+
91
+ The handoff binds exact raw plan bytes, retains complete before/proposed text
92
+ and structural changes, and uses `proposal.copy-only` with `directWrite: false`
93
+ and no apply endpoint. Oversize handoffs refuse with a request to narrow the
94
+ change, before the existing store can truncate them. The guide never calls the
95
+ store or persists a second draft ledger. A host explicitly supplies the body to
96
+ the existing proposal workflow after reviewing the private audience.
97
+
98
+ Review and source edit remain separate. The source owner inspects the exact diff,
99
+ checks identity and passage meaning, applies an admitted change using the normal
100
+ Git path, reruns knowledge check/evaluate, then starts a newly bound session.
101
+ No source pin is replaced automatically to clear a failed check.
102
+
103
+ Cross-repository concept mappings remain proposals preserving both source
104
+ identities. Conversion to an edge-governance record requires the allocated
105
+ stable repository/source descriptor, exact current source revisions and raw
106
+ byte locators, plus the receiving review policy. This internal guide does not
107
+ invent those values, emit accepted equivalence or activate a semantic edge.
108
+
109
+ The synthetic tests exercise software behavior on the invented equipment library.
110
+ They do not demonstrate a cold participant's comprehension, answer correctness,
111
+ host ACL behavior or a completed human corpus/blank-start drill.
@@ -117,7 +117,9 @@ remove only their own temporary files. Every failure is a
117
117
  that `readPersonalSelection` returns, so a choice shown against an older history
118
118
  does not apply. Selections are append-only, numbered, hash-chained records under
119
119
  `selections/`, each written completely before it is published, so a crash leaves
120
- only a temporary file. Concurrent selections refuse `selection-concurrent`. An
120
+ only a temporary file. New records include a unique confirmation identity: confirming the
121
+ same generation against the same predecessor again produces a distinct record. Existing
122
+ v1 records without this identity remain readable. Concurrent selections refuse `selection-concurrent`. An
121
123
  ineligible generation refuses with its composition code, such as
122
124
  `stale-generation`.
123
125
  - `readPersonalSelection({ personalHome })` returns the current selection and
@@ -128,9 +130,10 @@ remove only their own temporary files. Every failure is a
128
130
  rewriting, any trailing run of records (up to the whole history) yields another
129
131
  valid chain; it changes the returned `head`, so a host that needs to detect it
130
132
  keeps the head it last observed and compares it. The Obsidian maintenance
131
- service keeps the highest record number it has read a history ending at, for
132
- as long as it runs and no longer, and refuses a history that ends earlier
133
- (see [obsidian.md](obsidian.md)).
133
+ service persists the highest observed record number, accepted head and observed
134
+ record identities in its machine-private continuity state. A restart keeps that
135
+ evidence. A shorter history refuses until the removed records return or the person
136
+ makes one fresh confirmation (see [obsidian.md](obsidian.md)).
134
137
  - `readPersonalSelectionHead({ personalHome })` returns `{ selected, sequence,
135
138
  head }` from the history alone, with `sequence` 0 while nothing is selected.
136
139
  It composes nothing, so it does not say whether the selection is still
@@ -108,7 +108,7 @@ demonstrate framing, research return, uncertainty, review and graph proposals.
108
108
  local ingestion, persistent Knowledge records, retrieval and graph projection.
109
109
  The tests are synthetic conformance evidence, not real research validation.
110
110
 
111
- When useful practice emerges, use [Practical Judgment](practical-judgment.md):
111
+ When useful practice emerges, use [Phronesis — practical judgment](../reference/phronesis.md):
112
112
  retain its reason, cases and exceptions, then adopt it into the appropriate
113
113
  instruction, capability or implementation through that destination's owner.
114
114
  Ordinary research does not require a new skill, ADR or personal tracking.
@@ -19,6 +19,38 @@ write through a browser view.
19
19
  commerce, sessions, audit, and client-grade sharing as MNSTRY runtime
20
20
  authority.
21
21
 
22
+ ## Select the Readiness Pack
23
+
24
+ Projects include the bundled MNSTRY readiness pack by default. To use only
25
+ declared custom protocols, set this in the tracked `atelier.project.json`,
26
+ preserving the project's other settings:
27
+
28
+ ```json
29
+ {
30
+ "ext": {
31
+ "mnstry.atelier": {
32
+ "readiness": { "includeBundled": false }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ An absent setting or explicit `true` keeps the existing bundled protocols and
39
+ twelve-dimension tenant journey. Local preferences cannot re-enable a bundle
40
+ that the tracked project deselects.
41
+
42
+ After reviewing a selection change, update the existing lock explicitly:
43
+
44
+ ```bash
45
+ atelier lock write --project ./atelier.project.json
46
+ atelier lock check --project ./atelier.project.json
47
+ ```
48
+
49
+ The lock records the selected packs while preserving its template and migration
50
+ history. A lock that still pins the deselected bundle fails `lock check` and
51
+ `upgrade --dry-run`. To select the bundle again, set `includeBundled` to `true`
52
+ and write the lock after review.
53
+
22
54
  ## Local Review Pass
23
55
 
24
56
  Run checks from the copied workspace:
@@ -36,6 +68,13 @@ Use `--check` modes where available when validating committed generated output.
36
68
  If a command is unavailable in an older workspace, report the exact command and
37
69
  stderr instead of substituting a new protocol.
38
70
 
71
+ With the bundle deselected, the graph, project projection and generic readiness
72
+ checks remain available. The projection and readiness output omit the MNSTRY
73
+ tenant journey; they do not create a replacement journey or packet. Selected
74
+ custom protocols use the existing [extension-pack workflow](extensions.md#readiness-extension-packs).
75
+ `readiness journey`, `readiness packet` and `readiness export --dry-run` refuse
76
+ with `readiness-pack-disabled`, including when custom packs are selected.
77
+
39
78
  ## Claim-First Output
40
79
 
41
80
  Readiness summaries should lead with claims, then evidence:
@@ -9,6 +9,37 @@ workspace between Atelier package releases. The flow is local-only: it does not
9
9
  provision repositories, contact a Git host, mutate the MNSTRY runtime, or write
10
10
  through a browser view.
11
11
 
12
+ ## Upgrading to 0.2.0-alpha.16
13
+
14
+ This release renames two graph workspace names; nothing else changes and no
15
+ stored record changes format.
16
+
17
+ - The room `constellation` is now `map`, and the middle recipe and theme layer
18
+ `coach` is now `distribution`. Use `room: 'map'`,
19
+ `composeRecipes({ distribution })`, `planMap`, `createMap`, and the shell
20
+ handle's `map` and `backToMap`. Provenance now reads `setBy: 'distribution'`;
21
+ code that compared `setBy` values with `'coach'` must compare with
22
+ `'distribution'`.
23
+ - The alpha.15 names still work in this release and are removed in the next:
24
+ `room: 'constellation'`, `composeRecipes({ coach })` (do not pass both),
25
+ `planConstellation`, `createConstellation`, `constellation`,
26
+ `backToConstellation` and the `.constellation` class. Styles that target
27
+ `.atelier-gw .constellation` should move to `.atelier-gw .map`.
28
+
29
+ ## Upgrading to 0.2.0-alpha.15
30
+
31
+ This release adds the graph workspace (`@mnstry/atelier/graph-workspace` and
32
+ `@mnstry/atelier/graph-workspace/browser`) and the graph view, access and
33
+ source-contribution modules. Existing consumers do not need to change. No schema
34
+ or stored record format changes, with one effect on Knowledge Health:
35
+
36
+ - Knowledge Health regenerates its rule identity for the knowledge-graph file:
37
+ the `check` each assessment carries names a new `version` and `sourceTree`.
38
+ The rule it applies is unchanged. A workshop contribution started on
39
+ 0.2.0-alpha.14, completed or not, cannot start Review on this release
40
+ (`finding changed; refresh before selecting a new draft`); start Review
41
+ before upgrading, or record a new contribution.
42
+
12
43
  ## Upgrading to 0.2.0-alpha.14
13
44
 
14
45
  `atelier upgrade closure --npm-root ABSOLUTE_NPM_ROOT` plans a check of a staged
@@ -64,7 +95,7 @@ version in a disposable workspace before client use.
64
95
 
65
96
  ## Upgrading to 0.2.0-alpha.13
66
97
 
67
- The public [Knowledge Health workshop](knowledge-health/devday/public-default.md)
98
+ The public [Knowledge Health workshop](../knowledge-health/quickstart.md)
68
99
  uses an invented local workspace. Participants can retain their original words,
69
100
  a separate interpretation and a `note`, `perspective-only`, `disagreement` or
70
101
  `pause` response. Review is a separate optional session. A selected draft can
@@ -75,7 +106,7 @@ then reads it back and reassesses. The browser host grants no source-apply route
75
106
 
76
107
  `atelier knowledge semantic` exposes the existing semantic runner's eleven
77
108
  operations through JSON stdin. It retains the runner's refusal codes and saved
78
- failure details. The [semantic operation contract](semantic-operation.md)
109
+ failure details. The [semantic operation contract](../reference/semantic-operation.md)
79
110
  remains authoritative; this release adds no schema or package export.
80
111
 
81
112
  Existing source and local history remain owned by their original repositories.
@@ -96,13 +127,13 @@ The next release adds the responsibility workflows, source-current ingestion,
96
127
  Trackables, governed instruction adoption and local template profiles. Template
97
128
  adoption uses the existing exact-plan transaction engine with explicit v2 policy
98
129
  and v3 plans; existing policies are never converted automatically. See
99
- [template profiles](template-profile.md) and [template adoption](template-upgrades.md).
130
+ [template profiles](../reference/template-profile.md) and [template adoption](template-upgrades.md).
100
131
  Optional advisory decisions require no provider installation or activation.
101
132
 
102
133
  New Trackable journals retain resolved calendar occurrences and byte-bound state.
103
134
  Legacy v1 journals remain available as chain-verified exports when state replay
104
135
  cannot be established. Preserve historical records and use the documented
105
- [Trackables](trackables.md) host limits before adopting a new profile.
136
+ [Trackables](../reference/trackables.md) host limits before adopting a new profile.
106
137
  Regenerate local graph/projection artifacts through the ordinary upgrade process
107
138
  and qualify each consuming host independently. A package update supplies no
108
139
  publication permission or runtime activation.
@@ -165,7 +196,7 @@ The link resolver that produces `links_to` edges changed in five classes
165
196
  the repository root, malformed percent-encoding, and workspace-only wikilink
166
197
  and cross-repository edges). Regenerate committed graph artifacts after
167
198
  upgrading and review the difference; the classes are listed in the changelog
168
- and in [obsidian-contract.md](obsidian-contract.md).
199
+ and in [obsidian-contract.md](../reference/obsidian-contract.md).
169
200
 
170
201
  ## Upgrading to 0.2.0-alpha.7
171
202
 
@@ -264,7 +295,7 @@ compensating for that.
264
295
  This release breaks the export vocabulary. The runtime owner names are now
265
296
  the vendor-neutral domain terms `identity`, `catalog`, `commitments`,
266
297
  `events`, `projection`, `consent`, `messaging`, `providers`, and `audit`
267
- (defined in `docs/ontology.md`), and documents written against
298
+ (defined in `docs/reference/ontology.md`), and documents written against
268
299
  `v0.1.0-alpha.2` do not validate here. Regenerate exports and projections rather than hand-editing
269
300
  them, and update any consumer that pins an owner name. `CHANGELOG.md` lists
270
301
  every breaking change in this release, including the contract-stability epoch
@@ -276,7 +307,7 @@ current corpus against the validators of the baseline recorded in
276
307
  a tag sets `baselineTag` to that tag in the release commit, so the following
277
308
  development cycle is checked against the released validators. Until the first
278
309
  post-epoch tag is cut the baseline is null and the gate is inert by design.
279
- See `docs/contract-stability.md`.
310
+ See `docs/reference/contract-stability.md`.
280
311
 
281
312
  ## Before You Upgrade
282
313
 
@@ -378,8 +409,8 @@ and dependency trees; two observed byte inventories must agree and match the com
378
409
  checkout does not authenticate an upstream publisher.
379
410
 
380
411
  Review snapshots and decisions are separate from historical v1 locks. See
381
- [pack lifecycle](extension-pack-lifecycle.md) and
382
- [inspection portability](review-portability.md) before replacing packs or moving
412
+ [pack lifecycle](../reference/extension-pack-lifecycle.md) and
413
+ [inspection portability](../reference/review-portability.md) before replacing packs or moving
383
414
  state. Updating a package or a digest never silently renews old approval.
384
415
 
385
416
  ## Exact local candidate transactions