@mnstry/atelier 0.2.0-alpha.1 → 0.2.0-alpha.11

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 (414) hide show
  1. package/CHANGELOG.md +413 -0
  2. package/README.md +402 -205
  3. package/SECURITY.md +6 -1
  4. package/contracts/atelier-adoption-policy.v1.schema.json +49 -0
  5. package/contracts/atelier-coauthor.v1.schema.json +163 -0
  6. package/contracts/atelier-decision-request.v1.schema.json +476 -0
  7. package/contracts/atelier-decision-result.v1.schema.json +500 -0
  8. package/contracts/atelier-guide.v1.schema.json +227 -0
  9. package/contracts/atelier-intake.v1.schema.json +151 -0
  10. package/contracts/atelier-migration.v2.schema.json +61 -0
  11. package/contracts/atelier-obsidian-acceptance-receipt.v1.schema.json +211 -0
  12. package/contracts/atelier-obsidian-apply-policy.v1.schema.json +298 -0
  13. package/contracts/atelier-obsidian-corpus-profile.v1.schema.json +98 -0
  14. package/contracts/atelier-obsidian-edit-operation.v1.schema.json +138 -0
  15. package/contracts/atelier-obsidian-ext-settings.v1.schema.json +287 -0
  16. package/contracts/atelier-obsidian-generation-manifest.v1.schema.json +353 -0
  17. package/contracts/atelier-obsidian-proposal-receipt.v1.schema.json +110 -0
  18. package/contracts/atelier-obsidian-publication-journal.v1.schema.json +167 -0
  19. package/contracts/atelier-obsidian-scope.v1.schema.json +264 -0
  20. package/contracts/atelier-obsidian-service-state.v1.schema.json +149 -0
  21. package/contracts/atelier-obsidian-source-snapshot.v1.schema.json +179 -0
  22. package/contracts/atelier-pane-presentation.v1.schema.json +76 -0
  23. package/contracts/atelier-presentation.v1.schema.json +1293 -0
  24. package/contracts/atelier-repository-observation.v1.schema.json +163 -0
  25. package/contracts/atelier-review.v1.schema.json +1601 -0
  26. package/contracts/atelier-skill-steward.v1.schema.json +692 -0
  27. package/contracts/atelier-upgrade-plan.v2.schema.json +398 -0
  28. package/contracts/atelier-upgrade-receipt.v1.schema.json +99 -0
  29. package/contracts/atelier-vault-publication.v1.schema.json +58 -0
  30. package/contracts/public-api-baseline.json +57 -0
  31. package/docs/assurance-controls.md +49 -0
  32. package/docs/atelier-runtime.md +28 -2
  33. package/docs/atelier-sync.md +172 -0
  34. package/docs/blocks/audience-visibility.md +9 -0
  35. package/docs/blocks/claims.md +61 -0
  36. package/docs/blocks/conformance-admission.md +15 -0
  37. package/docs/blocks/will-not-do.md +18 -0
  38. package/docs/coauthor-session.md +57 -0
  39. package/docs/connected-composition.md +75 -0
  40. package/docs/continuity.md +3 -4
  41. package/docs/decisions.md +167 -0
  42. package/docs/design.md +167 -0
  43. package/docs/exact-upgrades.md +159 -0
  44. package/docs/extension-pack-lifecycle.md +33 -0
  45. package/docs/guided-upgrades.md +99 -0
  46. package/docs/install.md +99 -16
  47. package/docs/intake-and-guides.md +65 -0
  48. package/docs/integration-and-review-plan.md +409 -0
  49. package/docs/integration-contract-decisions.md +22 -0
  50. package/docs/knowledge-graph.md +8 -4
  51. package/docs/local-review.md +84 -0
  52. package/docs/local-services.md +328 -0
  53. package/docs/local-state.md +107 -0
  54. package/docs/obsidian-contract.md +698 -0
  55. package/docs/obsidian.md +484 -0
  56. package/docs/portable-presentation.md +328 -0
  57. package/docs/presentation-consumer-boundaries.md +75 -0
  58. package/docs/presentation-review-disposition.md +47 -0
  59. package/docs/project-command-inventory.md +38 -0
  60. package/docs/project-options.md +53 -0
  61. package/docs/release-engineering.md +174 -12
  62. package/docs/repo-boundary-guard.md +12 -2
  63. package/docs/review-portability.md +55 -0
  64. package/docs/skill-steward.md +156 -0
  65. package/docs/upgrade.md +155 -5
  66. package/docs/vault-service.md +292 -0
  67. package/fixtures/atelier-coauthor/invalid/authority.v1.json +5 -0
  68. package/fixtures/atelier-coauthor/valid/config.v1.json +12 -0
  69. package/fixtures/atelier-guide/invalid/authority.v1.json +11 -0
  70. package/fixtures/atelier-guide/valid/capability.v1.json +10 -0
  71. package/fixtures/atelier-guide/valid/consent.v1.json +11 -0
  72. package/fixtures/atelier-guide/valid/engagement.v1.json +7 -0
  73. package/fixtures/atelier-guide/valid/offer.v1.json +10 -0
  74. package/fixtures/atelier-intake/invalid/authority.v1.json +9 -0
  75. package/fixtures/atelier-intake/valid/attempt.v1.json +8 -0
  76. package/fixtures/atelier-intake/valid/completion.v1.json +9 -0
  77. package/fixtures/atelier-intake/valid/source.v1.json +7 -0
  78. package/fixtures/atelier-repository-observation/invalid/complete-with-blocker.v1.json +18 -0
  79. package/fixtures/atelier-repository-observation/valid/complete-local.v1.json +48 -0
  80. package/fixtures/atelier-review/invalid/authenticated-identity.v1.json +22 -0
  81. package/fixtures/atelier-review/valid/bound.v1.json +229 -0
  82. package/fixtures/atelier-review/valid/bundle.v1.json +267 -0
  83. package/fixtures/atelier-review/valid/contribution.v1.json +22 -0
  84. package/fixtures/atelier-review/valid/lifecycle.v1.json +14 -0
  85. package/fixtures/atelier-skill-steward/audit/invalid/source-mutation.v1.json +26 -0
  86. package/fixtures/atelier-skill-steward/audit/valid/clean.v1.json +26 -0
  87. package/fixtures/atelier-skill-steward/candidates/invalid/workflow-key.v1.json +37 -0
  88. package/fixtures/atelier-skill-steward/candidates/valid/create.v1.json +37 -0
  89. package/fixtures/atelier-skill-steward/lock/invalid/bad-digest.v1.json +18 -0
  90. package/fixtures/atelier-skill-steward/lock/valid/installed.v1.json +23 -0
  91. package/fixtures/atelier-skill-steward/plan/invalid/delete-action.v1.json +33 -0
  92. package/fixtures/atelier-skill-steward/plan/valid/add.v1.json +33 -0
  93. package/fixtures/atelier-upgrade-transaction/adoption-policy/invalid/example.json +12 -0
  94. package/fixtures/atelier-upgrade-transaction/adoption-policy/valid/example.json +11 -0
  95. package/fixtures/atelier-upgrade-transaction/migration/invalid/example.json +20 -0
  96. package/fixtures/atelier-upgrade-transaction/migration/valid/example.json +19 -0
  97. package/fixtures/atelier-upgrade-transaction/upgrade-plan/invalid/example.json +58 -0
  98. package/fixtures/atelier-upgrade-transaction/upgrade-plan/valid/example.json +57 -0
  99. package/fixtures/atelier-upgrade-transaction/upgrade-receipt/invalid/example.json +15 -0
  100. package/fixtures/atelier-upgrade-transaction/upgrade-receipt/valid/example.json +14 -0
  101. package/fixtures/atelier-vault-publication/invalid/publication.json +5 -0
  102. package/fixtures/atelier-vault-publication/valid/publication.json +11 -0
  103. package/fixtures/decisions/request/invalid/unknown-authority.v1.json +61 -0
  104. package/fixtures/decisions/request/valid/triage.v1.json +60 -0
  105. package/fixtures/decisions/result/invalid/execution-authority.v1.json +50 -0
  106. package/fixtures/decisions/result/valid/abstained.v1.json +23 -0
  107. package/fixtures/decisions/result/valid/assessed.v1.json +50 -0
  108. package/fixtures/obsidian/acceptance/ap05-extra-notes.json +14 -0
  109. package/fixtures/obsidian/acceptance/receipts/G07.valid.v1.json +63 -0
  110. package/fixtures/obsidian/acceptance/receipts/G13.valid.v1.json +69 -0
  111. package/fixtures/obsidian/acceptance/receipts/G14.valid.v1.json +62 -0
  112. package/fixtures/obsidian/acceptance/receipts/G15.valid.v1.json +56 -0
  113. package/fixtures/obsidian/acceptance/receipts/G16.valid.v1.json +73 -0
  114. package/fixtures/obsidian/acceptance/receipts/G17.valid.v1.json +75 -0
  115. package/fixtures/obsidian/acceptance/receipts/G18.valid.v1.json +64 -0
  116. package/fixtures/obsidian/acceptance/service-sentinels.json +10 -0
  117. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/duplicate-evidence-name.v1.json +39 -0
  118. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/evidence-by-absolute-path.v1.json +34 -0
  119. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/missing-candidate-tree.v1.json +33 -0
  120. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/no-evidence.v1.json +28 -0
  121. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/unknown-outcome.v1.json +34 -0
  122. package/fixtures/obsidian/contracts/acceptance-receipt/invalid/unknown-top-level-field.v1.json +35 -0
  123. package/fixtures/obsidian/contracts/acceptance-receipt/valid/node-gate.v1.json +34 -0
  124. package/fixtures/obsidian/contracts/apply-policy/invalid/automatic-without-edit-class.v1.json +27 -0
  125. package/fixtures/obsidian/contracts/apply-policy/invalid/conflict-overwrite.v1.json +29 -0
  126. package/fixtures/obsidian/contracts/apply-policy/invalid/missing-policy-digest.v1.json +28 -0
  127. package/fixtures/obsidian/contracts/apply-policy/invalid/unbounded-batch.v1.json +29 -0
  128. package/fixtures/obsidian/contracts/apply-policy/invalid/unimplemented-edit-class.v1.json +30 -0
  129. package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-mode.v1.json +29 -0
  130. package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-selector-operator.v1.json +22 -0
  131. package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-top-level-field.v1.json +30 -0
  132. package/fixtures/obsidian/contracts/apply-policy/valid/automatic-scoped.v1.json +29 -0
  133. package/fixtures/obsidian/contracts/apply-policy/valid/manual-default.v1.json +20 -0
  134. package/fixtures/obsidian/contracts/corpus-profile/invalid/absolute-path-in-ext.v1.json +30 -0
  135. package/fixtures/obsidian/contracts/corpus-profile/invalid/absolute-repository-root.v1.json +27 -0
  136. package/fixtures/obsidian/contracts/corpus-profile/invalid/duplicate-repository-id.v1.json +27 -0
  137. package/fixtures/obsidian/contracts/corpus-profile/invalid/overlapping-managed-roots.v1.json +27 -0
  138. package/fixtures/obsidian/contracts/corpus-profile/invalid/unknown-enrollment.v1.json +27 -0
  139. package/fixtures/obsidian/contracts/corpus-profile/invalid/unknown-top-level-field.v1.json +28 -0
  140. package/fixtures/obsidian/contracts/corpus-profile/valid/three-repositories.v1.json +27 -0
  141. package/fixtures/obsidian/contracts/edit-operation/invalid/absolute-recovery-ref.v1.json +21 -0
  142. package/fixtures/obsidian/contracts/edit-operation/invalid/inline-observed-bytes.v1.json +22 -0
  143. package/fixtures/obsidian/contracts/edit-operation/invalid/missing-base-digest.v1.json +20 -0
  144. package/fixtures/obsidian/contracts/edit-operation/invalid/short-idempotency-key.v1.json +21 -0
  145. package/fixtures/obsidian/contracts/edit-operation/invalid/unknown-kind.v1.json +21 -0
  146. package/fixtures/obsidian/contracts/edit-operation/valid/pending-body-replacement.v1.json +21 -0
  147. package/fixtures/obsidian/contracts/ext-settings/invalid/absolute-path-prefix.v1.json +28 -0
  148. package/fixtures/obsidian/contracts/ext-settings/invalid/apply-policy-in-portable-settings.v1.json +30 -0
  149. package/fixtures/obsidian/contracts/ext-settings/invalid/duplicate-scope-id.v1.json +27 -0
  150. package/fixtures/obsidian/contracts/ext-settings/invalid/machine-local-vault-path.v1.json +28 -0
  151. package/fixtures/obsidian/contracts/ext-settings/invalid/service-port-in-portable-settings.v1.json +28 -0
  152. package/fixtures/obsidian/contracts/ext-settings/invalid/unknown-default-scope.v1.json +27 -0
  153. package/fixtures/obsidian/contracts/ext-settings/valid/disabled.v1.json +5 -0
  154. package/fixtures/obsidian/contracts/ext-settings/valid/enabled-with-scopes.v1.json +27 -0
  155. package/fixtures/obsidian/contracts/generation-manifest/invalid/absolute-note-path.v1.json +114 -0
  156. package/fixtures/obsidian/contracts/generation-manifest/invalid/complete-with-unwritten-notes.v1.json +114 -0
  157. package/fixtures/obsidian/contracts/generation-manifest/invalid/derived-link-claimed-declared.v1.json +114 -0
  158. package/fixtures/obsidian/contracts/generation-manifest/invalid/duplicate-note-identity.v1.json +114 -0
  159. package/fixtures/obsidian/contracts/generation-manifest/invalid/in-scope-endpoint-missing.v1.json +114 -0
  160. package/fixtures/obsidian/contracts/generation-manifest/invalid/title-only-note-path.v1.json +114 -0
  161. package/fixtures/obsidian/contracts/generation-manifest/invalid/unknown-note-field.v1.json +115 -0
  162. package/fixtures/obsidian/contracts/generation-manifest/invalid/unknown-relation-type.v1.json +114 -0
  163. package/fixtures/obsidian/contracts/generation-manifest/invalid/withheld-endpoint.v1.json +114 -0
  164. package/fixtures/obsidian/contracts/generation-manifest/valid/two-notes.v1.json +114 -0
  165. package/fixtures/obsidian/contracts/oracles/scope-cases.json +412 -0
  166. package/fixtures/obsidian/contracts/proposal-receipt/invalid/accepted-without-proposal-id.v1.json +12 -0
  167. package/fixtures/obsidian/contracts/proposal-receipt/invalid/missing-adapter-operation-id.v1.json +11 -0
  168. package/fixtures/obsidian/contracts/proposal-receipt/invalid/unknown-backpressure-outcome.v1.json +12 -0
  169. package/fixtures/obsidian/contracts/proposal-receipt/invalid/unknown-top-level-field.v1.json +13 -0
  170. package/fixtures/obsidian/contracts/proposal-receipt/valid/accepted-new.v1.json +12 -0
  171. package/fixtures/obsidian/contracts/proposal-receipt/valid/deferred.v1.json +12 -0
  172. package/fixtures/obsidian/contracts/publication-journal/invalid/absolute-recovery-ref.v1.json +47 -0
  173. package/fixtures/obsidian/contracts/publication-journal/invalid/duplicate-sequence.v1.json +47 -0
  174. package/fixtures/obsidian/contracts/publication-journal/invalid/empty-protocol-id.v1.json +47 -0
  175. package/fixtures/obsidian/contracts/publication-journal/invalid/missing-protocol-id.v1.json +46 -0
  176. package/fixtures/obsidian/contracts/publication-journal/invalid/unknown-entry-field.v1.json +48 -0
  177. package/fixtures/obsidian/contracts/publication-journal/invalid/unknown-state.v1.json +47 -0
  178. package/fixtures/obsidian/contracts/publication-journal/valid/committed.v1.json +47 -0
  179. package/fixtures/obsidian/contracts/publication-journal/valid/updating-after-restart.v1.json +22 -0
  180. package/fixtures/obsidian/contracts/scope/invalid/absolute-path-prefix.v1.json +15 -0
  181. package/fixtures/obsidian/contracts/scope/invalid/duplicate-ids.v1.json +18 -0
  182. package/fixtures/obsidian/contracts/scope/invalid/expansion-without-node-budget.v1.json +40 -0
  183. package/fixtures/obsidian/contracts/scope/invalid/full-mode-with-subset.v1.json +8 -0
  184. package/fixtures/obsidian/contracts/scope/invalid/unknown-mode.v1.json +41 -0
  185. package/fixtures/obsidian/contracts/scope/invalid/unknown-selector-key.v1.json +15 -0
  186. package/fixtures/obsidian/contracts/scope/invalid/unknown-selector-operator.v1.json +14 -0
  187. package/fixtures/obsidian/contracts/scope/invalid/unknown-top-level-field.v1.json +42 -0
  188. package/fixtures/obsidian/contracts/scope/valid/explicit-empty.v1.json +8 -0
  189. package/fixtures/obsidian/contracts/scope/valid/focus.v1.json +11 -0
  190. package/fixtures/obsidian/contracts/scope/valid/full.v1.json +8 -0
  191. package/fixtures/obsidian/contracts/scope/valid/scoped-set-expression.v1.json +41 -0
  192. package/fixtures/obsidian/contracts/service-state/invalid/hostname-instead-of-literal-loopback.v1.json +23 -0
  193. package/fixtures/obsidian/contracts/service-state/invalid/missing-consent.v1.json +18 -0
  194. package/fixtures/obsidian/contracts/service-state/invalid/privileged-port.v1.json +23 -0
  195. package/fixtures/obsidian/contracts/service-state/invalid/unknown-top-level-field.v1.json +24 -0
  196. package/fixtures/obsidian/contracts/service-state/invalid/wildcard-bind.v1.json +23 -0
  197. package/fixtures/obsidian/contracts/service-state/valid/healthy.v1.json +23 -0
  198. package/fixtures/obsidian/contracts/source-snapshot/invalid/absolute-file-path.v1.json +48 -0
  199. package/fixtures/obsidian/contracts/source-snapshot/invalid/duplicate-repository-id.v1.json +48 -0
  200. package/fixtures/obsidian/contracts/source-snapshot/invalid/mixed-read.v1.json +48 -0
  201. package/fixtures/obsidian/contracts/source-snapshot/invalid/parent-traversal-path.v1.json +48 -0
  202. package/fixtures/obsidian/contracts/source-snapshot/invalid/unknown-file-field.v1.json +49 -0
  203. package/fixtures/obsidian/contracts/source-snapshot/valid/two-repositories.v1.json +48 -0
  204. package/fixtures/obsidian/edits/workspace.json +65 -0
  205. package/fixtures/obsidian/materialization/expected-full.json +99 -0
  206. package/fixtures/obsidian/materialization/expected-scoped.json +39 -0
  207. package/fixtures/obsidian/materialization/workspace.json +54 -0
  208. package/fixtures/obsidian/proposals/expected-shapes.json +11 -0
  209. package/fixtures/projects/sample-workspace/content/source.html.kg.json +4 -1
  210. package/fixtures/projects/source-formats-workspace/content/data.json.kg.json +4 -1
  211. package/fixtures/projects/source-formats-workspace/content/logo.png.kg.json +4 -1
  212. package/fixtures/projects/source-formats-workspace/content/metrics.csv.kg.json +4 -1
  213. package/fixtures/projects/source-formats-workspace/content/pipeline.yaml.kg.json +4 -1
  214. package/fixtures/ui/presentation/pane.v1.json +7 -0
  215. package/fixtures/ui/presentation/reference.v1.json +293 -0
  216. package/package.json +86 -10
  217. package/skills/claude/atelier-guided-coauthor/SKILL.md +49 -0
  218. package/skills/claude/atelier-guided-upgrade/SKILL.md +97 -0
  219. package/skills/claude/atelier-local-service/SKILL.md +47 -0
  220. package/skills/claude/atelier-open/SKILL.md +11 -5
  221. package/skills/claude/atelier-public-boundary/SKILL.md +31 -0
  222. package/skills/claude/atelier-skill-steward/SKILL.md +62 -0
  223. package/skills/claude/mnstry-readiness/SKILL.md +5 -0
  224. package/skills/codex/atelier-guided-coauthor/SKILL.md +49 -0
  225. package/skills/codex/atelier-guided-upgrade/SKILL.md +97 -0
  226. package/skills/codex/atelier-local-service/SKILL.md +47 -0
  227. package/skills/codex/atelier-open/SKILL.md +11 -5
  228. package/skills/codex/atelier-public-boundary/SKILL.md +31 -0
  229. package/skills/codex/atelier-skill-steward/SKILL.md +62 -0
  230. package/skills/codex/mnstry-readiness/SKILL.md +5 -0
  231. package/src/access/preview-enforcer.mjs +84 -0
  232. package/src/boundary/content-rules.mjs +283 -20
  233. package/src/boundary/policy.mjs +213 -91
  234. package/src/cli/execute-command.mjs +36 -0
  235. package/src/cli/project-options.mjs +58 -0
  236. package/src/cli/run.mjs +78 -10
  237. package/src/coauthor/session.mjs +161 -0
  238. package/src/coauthor/store.mjs +173 -0
  239. package/src/collaboration/event-ledger.mjs +348 -0
  240. package/src/collaboration/index.mjs +17 -0
  241. package/src/collaboration/inspection-bundle.mjs +223 -0
  242. package/src/collaboration/proposals.mjs +265 -65
  243. package/src/collaboration/review-contracts.mjs +25 -0
  244. package/src/collaboration/review-store.mjs +305 -0
  245. package/src/commands/attestation.mjs +20 -6
  246. package/src/commands/coauthor.mjs +26 -0
  247. package/src/commands/config.mjs +6 -1
  248. package/src/commands/disclosure.mjs +133 -0
  249. package/src/commands/distribution.mjs +2 -1
  250. package/src/commands/extension-pack.mjs +17 -9
  251. package/src/commands/init.mjs +46 -6
  252. package/src/commands/obsidian.mjs +371 -0
  253. package/src/commands/review.mjs +147 -0
  254. package/src/commands/server.mjs +1 -4
  255. package/src/commands/setup.mjs +51 -14
  256. package/src/commands/skills.mjs +199 -0
  257. package/src/commands/sync.mjs +107 -0
  258. package/src/composition/registry.mjs +27 -0
  259. package/src/composition/wire.mjs +122 -0
  260. package/src/contracts/corpus.mjs +35 -0
  261. package/src/decisions/contracts.d.mts +96 -0
  262. package/src/decisions/contracts.mjs +321 -0
  263. package/src/disclosure/content-scan.mjs +206 -0
  264. package/src/egress/check.mjs +7 -38
  265. package/src/egress/forbidden-egress.mjs +32 -18
  266. package/src/export/atelier-export-contract.mjs +16 -1
  267. package/src/extension-packs/lifecycle.mjs +154 -0
  268. package/src/graph/graph.mjs +176 -316
  269. package/src/graph/knowledge-graph.mjs +643 -43
  270. package/src/guides/contracts.mjs +54 -0
  271. package/src/harness/context-client.mjs +9 -1
  272. package/src/index.mjs +41 -0
  273. package/src/intake/store.mjs +119 -0
  274. package/src/preview/channel.mjs +89 -0
  275. package/src/project/config.mjs +112 -52
  276. package/src/project/durable-state.mjs +161 -0
  277. package/src/project/file-class.mjs +180 -0
  278. package/src/project/package-root.mjs +10 -0
  279. package/src/project/path-match.mjs +38 -15
  280. package/src/project/private-state.mjs +120 -0
  281. package/src/projection/obsidian/contracts.mjs +571 -0
  282. package/src/projection/obsidian/edits/align.mjs +169 -0
  283. package/src/projection/obsidian/edits/apply.mjs +889 -0
  284. package/src/projection/obsidian/edits/arbitrate.mjs +414 -0
  285. package/src/projection/obsidian/edits/contribution.mjs +108 -0
  286. package/src/projection/obsidian/edits/index.mjs +19 -0
  287. package/src/projection/obsidian/edits/object-identity.mjs +61 -0
  288. package/src/projection/obsidian/edits/object-store.mjs +517 -0
  289. package/src/projection/obsidian/edits/observe.mjs +123 -0
  290. package/src/projection/obsidian/edits/policy.mjs +123 -0
  291. package/src/projection/obsidian/edits/regions.mjs +648 -0
  292. package/src/projection/obsidian/materialize/byte-lens.mjs +98 -0
  293. package/src/projection/obsidian/materialize/index.mjs +7 -0
  294. package/src/projection/obsidian/materialize/path-registry.mjs +105 -0
  295. package/src/projection/obsidian/materialize/prepare-view.mjs +746 -0
  296. package/src/projection/obsidian/materialize/settings.mjs +57 -0
  297. package/src/projection/obsidian/materialize/stage.mjs +27 -0
  298. package/src/projection/obsidian/proposals/adapter.mjs +572 -0
  299. package/src/projection/obsidian/proposals/backpressure.mjs +113 -0
  300. package/src/projection/obsidian/proposals/contribution.mjs +55 -0
  301. package/src/projection/obsidian/proposals/index.mjs +23 -0
  302. package/src/projection/obsidian/proposals/observation.mjs +216 -0
  303. package/src/projection/obsidian/proposals/queue.mjs +277 -0
  304. package/src/projection/obsidian/proposals/router.mjs +168 -0
  305. package/src/projection/obsidian/publication/bridge-script.mjs +266 -0
  306. package/src/projection/obsidian/publication/exchange.mjs +117 -0
  307. package/src/projection/obsidian/publication/index.mjs +5 -0
  308. package/src/projection/obsidian/publication/publisher.mjs +588 -0
  309. package/src/projection/obsidian/publication/test-seam.mjs +16 -0
  310. package/src/projection/obsidian/publication/transport.mjs +212 -0
  311. package/src/projection/obsidian/recovery/index.mjs +6 -0
  312. package/src/projection/obsidian/recovery/journal.mjs +134 -0
  313. package/src/projection/obsidian/recovery/late-writer.mjs +46 -0
  314. package/src/projection/obsidian/recovery/restart.mjs +316 -0
  315. package/src/projection/obsidian/recovery/store.mjs +234 -0
  316. package/src/projection/obsidian/selection-ui/conflict-view.mjs +91 -0
  317. package/src/projection/obsidian/selection-ui/contribution.mjs +141 -0
  318. package/src/projection/obsidian/selection-ui/focus.mjs +82 -0
  319. package/src/projection/obsidian/selection-ui/index.mjs +12 -0
  320. package/src/projection/obsidian/selection-ui/policy-setup.mjs +107 -0
  321. package/src/projection/obsidian/selection-ui/receipt.mjs +173 -0
  322. package/src/projection/obsidian/selection-ui/selection-state.mjs +122 -0
  323. package/src/projection/obsidian/selection-ui/selection.mjs +109 -0
  324. package/src/projection/project.mjs +28 -19
  325. package/src/readiness-protocols/evidence.mjs +282 -0
  326. package/src/readiness-protocols/runtime.mjs +4 -3
  327. package/src/readiness-protocols/source-read.mjs +39 -0
  328. package/src/runtime/git-adapter.mjs +189 -0
  329. package/src/runtime/local-state.mjs +439 -0
  330. package/src/runtime/obsidian/app-capability.mjs +138 -0
  331. package/src/runtime/obsidian/app-production-seams.mjs +107 -0
  332. package/src/runtime/obsidian/contributions/proposal-adapter.mjs +4 -0
  333. package/src/runtime/obsidian/contributions/selection-ui.mjs +4 -0
  334. package/src/runtime/obsidian/contributions/source-apply.mjs +4 -0
  335. package/src/runtime/obsidian/contributions.mjs +27 -0
  336. package/src/runtime/obsidian/documents.mjs +37 -0
  337. package/src/runtime/obsidian/enablement.mjs +53 -0
  338. package/src/runtime/obsidian/engine.mjs +532 -0
  339. package/src/runtime/obsidian/errors.mjs +14 -0
  340. package/src/runtime/obsidian/extension-points.mjs +103 -0
  341. package/src/runtime/obsidian/index.mjs +34 -0
  342. package/src/runtime/obsidian/lifecycle.mjs +258 -0
  343. package/src/runtime/obsidian/machine-settings.mjs +260 -0
  344. package/src/runtime/obsidian/observation.mjs +158 -0
  345. package/src/runtime/obsidian/opening.mjs +280 -0
  346. package/src/runtime/obsidian/pending-edits.mjs +141 -0
  347. package/src/runtime/obsidian/pipeline.mjs +122 -0
  348. package/src/runtime/obsidian/private-lock.mjs +156 -0
  349. package/src/runtime/obsidian/process-identity.mjs +58 -0
  350. package/src/runtime/obsidian/service-client.mjs +66 -0
  351. package/src/runtime/obsidian/service-entry-path.mjs +9 -0
  352. package/src/runtime/obsidian/service-main.mjs +93 -0
  353. package/src/runtime/obsidian/service-record.mjs +169 -0
  354. package/src/runtime/obsidian/service-server.mjs +121 -0
  355. package/src/runtime/obsidian/service.mjs +216 -0
  356. package/src/runtime/obsidian/startup-adapters.mjs +87 -0
  357. package/src/runtime/obsidian/state-store.mjs +180 -0
  358. package/src/runtime/obsidian/sync-notice.mjs +33 -0
  359. package/src/runtime/obsidian/tick-loop.mjs +84 -0
  360. package/src/runtime/obsidian/watchers.mjs +36 -0
  361. package/src/runtime/repository-observation.mjs +491 -0
  362. package/src/runtime/supervisor.mjs +803 -0
  363. package/src/server/local-sidecar.mjs +125 -59
  364. package/src/server/security.mjs +89 -4
  365. package/src/server/server.mjs +4 -2
  366. package/src/skills/steward.mjs +780 -0
  367. package/src/support/feedback-report.mjs +4 -3
  368. package/src/ui/presentation/browser.mjs +278 -0
  369. package/src/ui/presentation/contract.mjs +116 -0
  370. package/src/ui/presentation/index.mjs +7 -0
  371. package/src/ui/presentation/native.mjs +153 -0
  372. package/src/ui/presentation/proof.mjs +57 -0
  373. package/src/ui/presentation/schema-check.mjs +30 -0
  374. package/src/ui/presentation/schema.generated.mjs +1371 -0
  375. package/src/ui/presentation/state.mjs +43 -0
  376. package/src/ui/presentation/styles.mjs +67 -0
  377. package/src/ui/presentation/tokens.mjs +74 -0
  378. package/src/ui/presentation/web.mjs +85 -0
  379. package/src/ui/review-page.mjs +32 -0
  380. package/src/upgrade/explanation.mjs +33 -0
  381. package/src/upgrade/provenance.mjs +338 -0
  382. package/src/upgrade/transaction-files.mjs +103 -0
  383. package/src/upgrade/transaction.mjs +475 -0
  384. package/src/upgrade/upgrade.mjs +65 -29
  385. package/src/vault/hosts.mjs +21 -0
  386. package/src/vault/identity.mjs +19 -0
  387. package/src/vault/index.mjs +7 -0
  388. package/src/vault/interface.mjs +11 -0
  389. package/src/vault/metadata.mjs +31 -0
  390. package/src/vault/privacy.mjs +148 -0
  391. package/src/vault/probe.mjs +89 -0
  392. package/src/vault/service.mjs +131 -0
  393. package/src/vault/source.mjs +45 -0
  394. package/src/vault/storage.mjs +23 -0
  395. package/templates/distribution-workspace/.claude/launch.json +6 -2
  396. package/templates/distribution-workspace/gitignore +1 -0
  397. package/templates/distribution-workspace/project/README.md +2 -2
  398. package/templates/external-project-workspace/README.md +45 -0
  399. package/templates/external-project-workspace/answers.example.json +4 -0
  400. package/templates/external-project-workspace/atelier.project.json +40 -0
  401. package/templates/external-project-workspace/boundary-policy.v1.json +60 -0
  402. package/templates/external-project-workspace/gitignore +8 -0
  403. package/templates/external-project-workspace/pack-lifecycle.json +14 -0
  404. package/templates/external-project-workspace/packs/protocols/contract-gate.v1.json +109 -0
  405. package/templates/external-project-workspace/packs/sample-pack.v1.json +48 -0
  406. package/templates/external-project-workspace/repo-access.v1.json +9 -0
  407. package/templates/external-project-workspace/source/README.md +11 -0
  408. package/templates/launch.json +6 -2
  409. package/templates/private-domain-workspace/.claude/launch.json +6 -2
  410. package/templates/private-domain-workspace/domain/README.md +2 -2
  411. package/templates/private-domain-workspace/gitignore +1 -0
  412. package/templates/shared-project-workspace/.claude/launch.json +6 -2
  413. package/templates/shared-project-workspace/gitignore +1 -0
  414. package/templates/shared-project-workspace/project/README.md +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,418 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0-alpha.11
4
+
5
+ ### Fixed
6
+
7
+ - `status` now gives the same reason-specific next step as `open` for a
8
+ publication that stopped because an Obsidian that may hold the vault could
9
+ not be coordinated with (`publisher-conflict`, reason
10
+ `editor-uncoordinated`). The text no longer names one cause, since the
11
+ reason has several: another vault open, a command line that did not answer,
12
+ an unknown process table (on Linux, any app on a system Electron), or an app
13
+ started during an app-closed publication. The advice depends on whether the
14
+ view was ever published. Before a first publication: quit Obsidian (on
15
+ Linux, also any app that runs on a system Electron) so the view is
16
+ published, then `atelier obsidian open` starts Obsidian on it. After one:
17
+ the same, or open the view in the app as it is with `atelier obsidian open
18
+ --allow-stale`. A concurrent publisher keeps its advice.
19
+ - The service's app qualification checks no version for an app that is not
20
+ running, and that answer is remembered for up to ten seconds. An editor
21
+ adapter built on it could coordinate with an Obsidian started inside that
22
+ window, whose version nobody had checked, and publish through it in-app.
23
+ The adapter now receives the qualification and does not coordinate, or ask
24
+ the app anything, unless a version was checked. An answer that checked no
25
+ version (the app was not running, or none was found) is no longer reused,
26
+ so the next publication after the app starts reads its version and
27
+ coordinates. A publication that stops this way is tried again on the next
28
+ change or at the next full reconciliation, every five minutes.
29
+ - On macOS the app is found only at `/Applications/Obsidian.app`. An
30
+ Obsidian installed elsewhere is `app-missing`: nothing is published through
31
+ it, and publication waits while it runs. This is now documented.
32
+ - On Linux an app started through a differently named link or launcher was
33
+ read as absent, because the process name is the name it was started
34
+ through. A process whose name is not recognised is now identified by the
35
+ executable `/proc/<pid>/exe` resolves to. A read failure other than a
36
+ process that exited or whose executable this user may not read, or a table
37
+ in which nothing resolves, is `unknown`.
38
+ - The `ps` call of the process probe had no timeout, so a hung `ps` blocked
39
+ the service. It is killed after five seconds and the reading is `unknown`.
40
+ - Documented that from 0.2.0-alpha.10 the app-free publication path runs in
41
+ production, with its re-probe window of up to two seconds plus one note
42
+ while Obsidian is not running (see "Known limits" in `docs/obsidian.md`).
43
+
44
+ ## 0.2.0-alpha.10
45
+
46
+ ### Fixed
47
+
48
+ - A first publication refused because Obsidian runs without that vault open
49
+ (`publisher-conflict`, reason `editor-uncoordinated`) now advises quitting
50
+ Obsidian so the view publishes directly, instead of waiting for "the other
51
+ publisher", which does not exist.
52
+ - The Obsidian process probe matched Atelier's own maintenance service: it
53
+ searched every argument of every process for an `obsidian` path segment, so
54
+ the service (`…/src/runtime/obsidian/service-main.mjs`) and anything naming
55
+ the private data root read as a running app. With the app quit, the service
56
+ reported `app-version-unsupported` and never published, and the app-free
57
+ publication path was blocked. The probe now reads `ps -A -o comm=` and
58
+ recognises the app by its executable: `Obsidian` and `Obsidian Helper…` on
59
+ macOS, `obsidian` on Linux. On Linux a system Electron process makes the
60
+ reading `unknown`, which is treated as a running app.
61
+ - An app running with no vault open answers every command-line call with
62
+ `Vault not found.`, which was read as a version and reported as
63
+ `version-unknown` or `version-unreadable`. It is now the reason
64
+ `no-vault-open` under the existing outcome `app-version-unsupported`, still
65
+ not qualified, and `status` and `open` say to open any vault in Obsidian or
66
+ quit it. `open` waits for an app it launched that is still opening the vault.
67
+
68
+ ## 0.2.0-alpha.9
69
+
70
+ ### Fixed
71
+
72
+ - The maintenance service process could not start from the shipped package:
73
+ its entry awaits the command contributions at top level, and the selection
74
+ contribution shipped in 0.2.0-alpha.8 reaches the entry again through
75
+ `opening.mjs` → `lifecycle.mjs`, so the process deadlocked on its own await
76
+ and exited 13 before it listened. `SERVICE_ENTRY_PATH` now lives in its own
77
+ module that nothing else depends on, and a test spawns the real entry.
78
+
79
+ ## 0.2.0-alpha.8
80
+
81
+ ### Added
82
+
83
+ - Add portable, typed advisory decision requests and results under
84
+ `@mnstry/atelier/decisions`, with versioned schemas, invented fixtures and
85
+ offline validation of evidence bindings, distributions and abstention.
86
+ Provider execution, credentials, budgets and authorization stay with the
87
+ host. See `docs/decisions.md`.
88
+ - Add an experimental, opt-in Obsidian projection. A project that enables
89
+ `ext["mnstry.atelier.obsidian"]` and declares views (`full`, `scoped` or
90
+ `focus`, with an optional bounded expansion) gets readable, linked notes of
91
+ the enrolled workspace in a vault outside every repository, under private
92
+ per-workspace storage. Nothing is published for a project that does not
93
+ enable it. See `docs/obsidian.md`, `docs/obsidian-contract.md` and
94
+ `docs/local-services.md`.
95
+ - Add eleven closed `atelier-obsidian-*.v1` schemas with valid and invalid
96
+ fixtures, each exported under its own `./contracts/` path.
97
+ - Add deterministic materialization: note paths made of a readable title and a
98
+ stable identity suffix, exact byte regions that invert to their source,
99
+ embedded assets, and audience and eligibility rules that fail closed. No
100
+ audience is admitted by default, which publishes an empty view.
101
+ - Add publication that coordinates with a running editor through conditional
102
+ operations, with journals, restart recovery and late-writer rechecks, so
103
+ that a concurrent write by a person or the app is retained rather than
104
+ overwritten. It depends on an atomic file exchange and is proven on macOS
105
+ arm64 with one app version; see the contract for what is open.
106
+ - Add a per-workspace loopback maintenance service and the noninteractive
107
+ `atelier obsidian` command (`status`, `scope`, `audience`, `mode`, `policy`,
108
+ `service`, `open`, `apply`, `proposals`, `conflicts`, `apply-policy`,
109
+ `selection`). Reaching the installed app or the operating system is never a
110
+ default: it needs `--adapter=obsidian-cli`. The app must be version 1.13.7
111
+ or later.
112
+ - Ship the selection contribution on the command: the one-line loader module
113
+ `src/runtime/obsidian/contributions/selection-ui.mjs` puts `selection`,
114
+ `conflicts` and `apply-policy` on `atelier obsidian`, beside `apply` and
115
+ `proposals`. The usage text names every contributed operation, and a
116
+ contributed operation declares under `options` which shared options it
117
+ takes, so `--actor` is refused everywhere but `apply run`.
118
+ - Preserve every edit made in the vault before anything is republished. A
119
+ body replacement is applied to its source manually, or automatically under
120
+ a scoped policy the user installs and can revoke; revocation is read again
121
+ before every write. An edit that is not a body replacement becomes a
122
+ copy-only proposal in the owning repository's proposal store and is never
123
+ applied. Atelier makes no Git commit for any of it.
124
+ - Add selection binding, apply-policy setup, a read-only conflict view and an
125
+ acceptance-receipt validator that is labelled schema validation only and
126
+ closes no gate.
127
+ - Add the package subpaths `./obsidian`, `./obsidian/contracts`,
128
+ `./obsidian/materialize`, `./obsidian/publication`, `./obsidian/recovery`,
129
+ `./obsidian/edits`, `./obsidian/proposals` and `./obsidian/selection`. The
130
+ package root exports nothing of the projection. Names ending
131
+ `ForOracleTests` are test mutation controls, not a supported API.
132
+ - `release:audit` now requires the Obsidian runtime, schemas and documents in
133
+ the tarball, requires every declared export to name a packed file, and
134
+ refuses scripts, tests, experiments, receipt directories, application
135
+ archives, receipts that name a real host or operator, and fixtures above 262,144
136
+ bytes. The path allowlist is unchanged. A package proof packs the tarball,
137
+ imports the subpaths from a bare consumer and publishes a synthetic
138
+ workspace into a temporary vault with no app.
139
+ - Known limits: Windows refuses publication and source apply because no atomic
140
+ exchange is known; the real-app suite has not been run on Linux, and x86_64
141
+ has not been run anywhere; macOS publication needs the stock system perl;
142
+ the app version has a floor and no ceiling; a vault body edit to a note
143
+ whose source uses CRLF becomes a proposal rather than an apply. No adopter
144
+ acceptance is recorded.
145
+
146
+ ### Changed
147
+
148
+ - The resolver that produces `links_to` edges is now shared by the graph and
149
+ the projection, and its behaviour changed in five classes. Graph artifacts a
150
+ consumer has committed may differ after upgrading in exactly these classes
151
+ and no others; each is pinned in `test/graph-knowledge-graph.test.mjs` and
152
+ listed in `docs/obsidian-contract.md`. Regenerate committed graph artifacts
153
+ after upgrading and review the difference.
154
+ 1. Links inside fenced code (backtick or tilde, any info string, up to three
155
+ spaces of indent, CRLF, CommonMark fence-length rules), inside inline
156
+ code and inside front matter no longer produce edges. Two stray backticks
157
+ that happen to pair across a link count as inline code, and links after
158
+ an unbalanced fence that runs to the end of the file are inside code.
159
+ 2. A link to a directory resolves to that directory's `README.md`, then
160
+ `index.md`, testing eligibility per candidate. A link to a parent
161
+ directory now resolves where the earlier reader missed it.
162
+ 3. A link that climbs above its own repository root and re-enters through
163
+ the checkout's directory name is reported as leaving the enrolled roots,
164
+ as before. It is never turned into a repository-local edge.
165
+ 4. Malformed percent-encoding in a link is a `link-href-malformed` finding.
166
+ It no longer throws out of the graph build.
167
+ 5. The workspace graph, not repository artifacts, additionally carries
168
+ wikilink edges and cross-repository Markdown-link edges, de-duplicated.
169
+
170
+ ## 0.2.0-alpha.7
171
+
172
+ - Add a guided owner-agent upgrade skill and read-only `upgrade explain`
173
+ reports derived from saved plans. Retain consent and provenance limits,
174
+ distinguish staged installation from adoption, and route unsupported
175
+ workspaces through their existing operator procedure.
176
+
177
+ - Add explicit saved-plan local upgrade transactions with private receipts,
178
+ existing commit hooks and recovery inspection. Refuse unsupported Git
179
+ attributes before generated writes and explain abandoned preparation state.
180
+ - `lock write` now preserves valid migration and template history and refuses
181
+ a malformed previous lock. Inspect and repair or separately archive the
182
+ invalid lock before retrying; history is no longer silently overwritten.
183
+
184
+ - Add a source-only Astro reference consumer for build-time presentation tokens,
185
+ no-script reading/navigation, local-only form validation and cross-browser proof.
186
+ Keep public-page mechanics consumer-owned; add no Astro runtime dependency.
187
+ - Patch the existing fast-uri dependency and override to 3.1.7. Clarify ordinary
188
+ web-link navigation versus native host navigation requests.
189
+
190
+ - Validate proposed and retained adoption configurations together with their
191
+ policy before writing; refuse an existing default policy during blank init.
192
+ Compare manifests using their serialized JSON representation so omitted
193
+ optional fields do not make freshly generated output stale.
194
+ - Migration: unset or correct globally exported `MNSTRY_ATELIER_ACTOR` values
195
+ that are not declared in the current policy. Invalid explicit selectors now
196
+ refuse even shared-only and legacy-warning checks.
197
+
198
+ - Correct shared-only attribution so ambient platform identities cannot invent
199
+ an ownership requirement or trigger a network lookup. Preserve legacy-warning
200
+ semantics for derived identities; Sync remains strict. Match platform logins
201
+ only to declared logins, refuse prototype-name omissions and duplicate repos.
202
+ - Share manifest generation between project and upgrade, store a relative graph
203
+ path, and compare parsed content independently of object-key order.
204
+ - Resolve preview commands through the scoped package from root or parent installs;
205
+ qualify both layouts with installed health/page smoke tests. Existing preview
206
+ configs require an explicit user update.
207
+ - Validate retained adoption policy/lock state before writing, refuse implicit
208
+ drift acceptance, detect null-digest policy drift, and refuse init collisions
209
+ so retries cannot overwrite authored files or reset the lock.
210
+
211
+ - Repair starter document classifications, shared adoption policy validity and
212
+ initial adoption locks. Existing locks are retained so adoption cannot accept
213
+ managed-file drift implicitly.
214
+ - Resolve template previews through the locally installed scoped package.
215
+ - Refuse unknown or ambiguous actor declarations, prioritize platform login over
216
+ Git metadata, and never infer the current operator from commit history. Shared
217
+ policy declarations do not require ownership of private repos outside the
218
+ configured workspace. These checks remain attribution, not authentication.
219
+ - Check the generated projection manifest as well as its HTML for staleness.
220
+
221
+ - Add evidence-thresholded skill stewardship and exact-plan local projections;
222
+ refuse unmanaged collisions, managed drift and cross-workspace confirmations.
223
+ - Add bounded immutable source copies and extraction attempt receipts, retaining
224
+ originals and separating byte integrity from semantic acceptance.
225
+ - Add inert guide offers, revocable engagement and exact-payload consent contracts.
226
+ No remote execution, commercial authority or proprietary implementation ships.
227
+ See issues #33 and #34 and the skill stewardship and intake/guide documentation.
228
+
229
+ - Add experimental source-bound coauthor sessions, a private draft store, JSON
230
+ stdin CLI and portable guided-coauthor skill. Preserve original answers,
231
+ confirmation, durable receipts, bounded recovery and source-change refusal;
232
+ no canonical source edits or publication authority are introduced.
233
+ - Add an external-project adapter starter with declared source boundaries,
234
+ namespaced synthetic protocols, local-state exclusions and compatibility policy.
235
+ - Add evidence-bound local review runs, per-claim decisions, source-owner
236
+ handoffs, passage responses and reading-position recovery. Current decisions
237
+ refuse changed evidence and stale versions; local typed names remain asserted
238
+ identities and no source edits are applied automatically.
239
+ - Report installed provenance as declared origin, observed bytes or verified
240
+ checkout binding. Compare working bytes with commit objects, including Git
241
+ index hints, sanitize remote metadata, and fail exact-source checks when the
242
+ binding is unresolved. Piped provenance output is no longer truncated.
243
+ - Remove unsupported numeric claim confidence and explain legacy readiness
244
+ scores as input completeness. Supply the required run import-safety field.
245
+ - Add pack lifecycle qualification and dry-run migration guidance plus explicit,
246
+ disclosure-checked historical inspection bundles that never transfer approval.
247
+ - Extend the existing installed consumer gate across moved source layouts,
248
+ durable contributions, stale refusal and inspection-only portability.
249
+
250
+ ## 0.2.0-alpha.6
251
+
252
+ - Share project-location parsing with extension-pack commands, including
253
+ repeated `--repo-path NAME=PATH` overrides and both argument forms. Malformed
254
+ shared options now fail before local-state creation. Add path-free resolution
255
+ diagnostics with `config check --explain`; read boundaries remain declared
256
+ by the project.
257
+ - Add Deliverable Zero for Atelier Sync: explicit single-repository
258
+ enrollment, a pinned direct-process Git adapter, executable repository
259
+ completeness observations, fast-forward-only reconciliation, per-repository
260
+ locking, hash-chained local operation traces, pause/resume control, and a
261
+ two-phase user-confirmed commit-and-publish path. No desktop shell, watcher
262
+ dependency, semantic conflict resolution, force operation, browser apply
263
+ endpoint, telemetry, or hidden upload is introduced.
264
+ - Raise the Sync Git floor to 2.40 so default global and system attributes can
265
+ be observed, bind publication to the single resolved push URL, refuse URL
266
+ rewrite ambiguity, strip every inherited `GIT_*` process control, keep
267
+ read-only commands mutation-free, and return non-zero exits for paused status
268
+ and failed publication.
269
+
270
+ ## 0.2.0-alpha.5
271
+
272
+ - Harden boundary enforcement so path globs use segment-aware matching, an
273
+ explicitly empty or malformed content-rule policy is invalid, staged and
274
+ pushed binary evidence is scanned within bounded budgets, incomplete Git
275
+ reads fail closed, linked worktrees install hooks in the correct Git common
276
+ directory, and `boundary audit` defaults to the current working tree with an
277
+ explicit `--head` snapshot mode.
278
+ - Consolidate graph classification in one canonical engine. Markdown without a
279
+ `kg` block is now represented as `unclassified` with a private audience and
280
+ diagnostics; empty, partial, or malformed declarations remain blocking.
281
+ Generated projection directories remain derived from the file-class manifest
282
+ so graph validation and generated-only upgrade recovery cannot drift apart.
283
+ - Bind release egress verification to the exact `npm pack` inventory, including
284
+ test-shaped paths that are actually published, and make the legacy egress
285
+ checker a thin delegate to the canonical scanner. Packed fixture-suppression
286
+ markers are refused and reviewed local-computed suppressions are counted.
287
+ - Harden `atelier dev` so it binds only to loopback, requires a generated
288
+ `atelier.manifest.json`, serves only enrolled safe static files after
289
+ realpath validation, and applies host, fetch-site, origin, method, and nonce
290
+ checks to the relevant read and mutation routes.
291
+ - Make collaboration records fail closed with typed corrupt-record results,
292
+ bounded ledger reads, POSIX no-follow and cross-platform state-leaf identity
293
+ validation, content-bound event identifiers, write locking, explicit
294
+ compaction, and one-pass proposal-list materialization. Compatibility
295
+ snapshots are best-effort projections of committed events rather than a
296
+ second authority. Proposal authority now follows declared capabilities and
297
+ apply endpoints rather than action-like words, and the never-released
298
+ provider-analysis experiment was removed before it became part of a
299
+ published API.
300
+ - Render expected project and JSON failures as typed, actionable CLI messages
301
+ without stacks by default; set `ATELIER_DEBUG=1` to include diagnostic stacks.
302
+ - Strengthen release proof with negative-control mutations and a bare consumer
303
+ that installs without publisher overrides, validates its dependency tree,
304
+ and imports every declared package export. A candidate is packed once, bound
305
+ by SHA-256, and passed unchanged through tarball audit, consumer, and branded
306
+ distribution gates. The trusted-publishing workflow publishes that same
307
+ retained, audited tarball rather than repacking the source directory.
308
+ - Pin every JavaScript subpath and named export from `v0.2.0-alpha.4` in a
309
+ registry-verified compatibility baseline with immutable tag-commit and
310
+ public-artifact provenance. Release tooling refuses removals, provenance
311
+ drift, and binding modified source to an already-tagged package version.
312
+ - Add a portable `atelier disclosure check` command that scans tracked or
313
+ staged consumer content, requires private denylist coverage by default, and
314
+ refuses tracked repository-local denylist files. Portable and repository
315
+ sweeps now detect the full bounded family of private-key headers and refuse
316
+ binary or invalid-UTF-8 evidence instead of omitting it. Fork sweeps require
317
+ the trusted denylist secret and cannot fall back to the untrusted checkout.
318
+ Repository release sweeps also inspect every bounded blob introduced by the
319
+ commit range, so content added and deleted before the final tree cannot
320
+ become public history unseen.
321
+ - Add public agent instructions and mirrored skills for extracting reusable
322
+ mechanisms from private implementations without carrying tenant material
323
+ into Atelier, plus a managed local-service contract for durable loopback
324
+ authoring and review tools.
325
+ - Document the client-zero adapter rule that exact package identity, installed
326
+ dependency resolution, CLI version, and `atelier.lock.json` must agree. This
327
+ prevents a stale sibling checkout from satisfying a current adapter proof.
328
+ - Declare the audited `fast-uri` pin as a direct runtime dependency so packed
329
+ offline consumer installs resolve the same dependency closure as the source
330
+ checkout.
331
+
332
+ ## 0.2.0-alpha.4
333
+
334
+ Presentation release. No contract changes and no runtime behaviour changes:
335
+ documents valid against `0.2.0-alpha.0` remain valid.
336
+
337
+ - **The README now explains the system before the package.** It begins with
338
+ the repository as a durable substrate, then shows how ontology, enforcement,
339
+ governed projections, and a local runtime make the same work usable by
340
+ people, teams, agents, and tools.
341
+ - **The story progresses with the reader.** Stewards and collaborators get the
342
+ purpose and working loop first; builders get the graph and library surfaces;
343
+ technical readers retain the exact, test-gated claims, limitations, and
344
+ conformance boundaries.
345
+ - **Methodology authoring is presented as the proving ground, not the
346
+ category.** The package can support any file-based body of work whose
347
+ structure, relationships, disclosure, and readiness must remain portable and
348
+ enforceable.
349
+ - **Package and installation metadata match the new public presentation.** The
350
+ prerelease remains explicitly pinned, and the coordinated MNSTRY developer
351
+ documentation carries the same conceptual spine.
352
+ - **Bundled client instructions match the released CLI.** The Codex and Claude
353
+ open-Atelier skills use `atelier dev` and point registry users to the scoped,
354
+ collision-free install path.
355
+
356
+ ## 0.2.0-alpha.3
357
+
358
+ Documentation and metadata release. No contract changes and no runtime
359
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid.
360
+
361
+ - **The package's promises are now under a gate.** The checkable claims,
362
+ the will-not-do list, the conformance/admission separation, and the
363
+ audience/visibility rule live canonically in `docs/blocks/`, the README
364
+ embeds them verbatim between markers, and a test fails when they drift.
365
+ Promises converge by machinery; framing diverges by audience.
366
+ - **The README is restructured as a depth ramp** — category and trust
367
+ posture first, the working loop with its visible result second, the
368
+ checkable claims third, boundaries fourth, architecture fifth, reference
369
+ last — and a new "Where the Atelier stops" section states the boundary
370
+ with MNSTRY's managed platform as a literal table.
371
+ - **Overbroad claims are corrected.** "Trustworthy enough for whatever you
372
+ govern with it" is gone from the README and `docs/design.md` — controls
373
+ shaped for one demanding case do not establish adequacy everywhere; the
374
+ agent-runtime passage now states the narrow, testable control rather
375
+ than a general safety claim; "does not contact external services" now
376
+ carries its documented `gh` exception inline; contract and test counts
377
+ are stated by command, not by number; the contributions text now matches
378
+ `CONTRIBUTING.md`'s outside-PRs-not-open-yet posture; and
379
+ `docs/continuity.md` speaks of npm publication in the present tense.
380
+ - **`npx` examples use the collision-free `mnstry-atelier` form.** The
381
+ unscoped npm name `atelier` belongs to an unrelated third-party package,
382
+ so a bare `npx atelier` outside an installed workspace runs someone
383
+ else's code. Every `npx` example on every surface now uses the branded
384
+ binary, `atelier` remains the documented command inside installed
385
+ workspaces, and `docs/install.md` no longer calls `mnstry-atelier` a
386
+ legacy alias — it is the safe form.
387
+ - **npm metadata describes the package from the outside.** A concrete
388
+ description, registry keywords, and a homepage that resolves to the
389
+ published documentation page.
390
+
391
+ ## 0.2.0-alpha.2
392
+
393
+ Documentation and release-lane release. No contract changes and no runtime
394
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid.
395
+
396
+ - **The README is rebuilt around the system rather than its first
397
+ application.** New `docs/design.md` states the design in five movements —
398
+ a repository with an ontology, rules that refuse, collaboration as governed
399
+ disclosure, a local runtime for humans and for agents, and a platform for
400
+ your own tool — each ending with the command that proves it. Methodology
401
+ authoring is stated as the first application, not the ceiling.
402
+ - **Publishing is automated on tag push** via npm trusted publishing (OIDC),
403
+ so releases carry a provenance attestation and no registry token is stored
404
+ anywhere. Two fail-closed guards: the tagged commit must be an ancestor of
405
+ `main`, and the tag must equal `package.json`'s version.
406
+ - **The disclosure scanner no longer flags the OIDC permission key.**
407
+ `id-token` is a GitHub Actions permission, not a credential; the exemption
408
+ is the literal `id-` prefix only, and every other compound still matches.
409
+ - **`0.2.0` was published in error and unpublished the same day.** A
410
+ `npm version patch` against an alpha resolves the prerelease to `0.2.0`
411
+ rather than advancing it, and `git push --follow-tags` delivered the tag
412
+ even though branch protection rejected the commit, so a release published
413
+ from a commit that never landed on `main`. That number is permanently
414
+ retired on npm. The ancestry guard above exists so this cannot recur.
415
+
3
416
  ## 0.2.0-alpha.1
4
417
 
5
418
  First release published to the npm registry, under `@mnstry/atelier` with