@mnstry/atelier 0.2.0-alpha.1

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 (260) hide show
  1. package/CHANGELOG.md +383 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +5 -0
  4. package/README.md +262 -0
  5. package/SECURITY.md +93 -0
  6. package/TRADEMARKS.md +88 -0
  7. package/announcements/2026-08-06-announcements-channel.v1.json +12 -0
  8. package/announcements/keys/mnstry-announcements.public.v1.json +9 -0
  9. package/bin/atelier.mjs +2 -0
  10. package/bin/mnstry-atelier.mjs +3 -0
  11. package/contracts/analysis-adapter.v1.schema.json +248 -0
  12. package/contracts/atelier-action-intent.v1.schema.json +143 -0
  13. package/contracts/atelier-analysis-adapter.v1.schema.json +360 -0
  14. package/contracts/atelier-attestation.v1.schema.json +239 -0
  15. package/contracts/atelier-boundary-policy.v1.schema.json +339 -0
  16. package/contracts/atelier-claim.v1.schema.json +97 -0
  17. package/contracts/atelier-export.v1.schema.json +1015 -0
  18. package/contracts/atelier-extension-pack.v1.schema.json +290 -0
  19. package/contracts/atelier-kit-manifest.v1.schema.json +273 -0
  20. package/contracts/atelier-lock.v1.schema.json +364 -0
  21. package/contracts/atelier-migration.v1.schema.json +162 -0
  22. package/contracts/atelier-project-config.v1.schema.json +352 -0
  23. package/contracts/atelier-readiness-protocol.v1.schema.json +517 -0
  24. package/contracts/atelier-readiness-run.v1.schema.json +229 -0
  25. package/contracts/atelier-readiness.v1.schema.json +457 -0
  26. package/contracts/compat-baseline.json +10 -0
  27. package/contracts/git-promote-event.v1.schema.json +145 -0
  28. package/contracts/knowledge-source-sidecar.v1.schema.json +157 -0
  29. package/contracts/mnstry-atelier-semantic-profile.v1.json +254 -0
  30. package/docs/announcements.md +101 -0
  31. package/docs/atelier-runtime.md +34 -0
  32. package/docs/attestation.md +201 -0
  33. package/docs/continuity.md +55 -0
  34. package/docs/contract-stability.md +111 -0
  35. package/docs/distributions.md +220 -0
  36. package/docs/install.md +140 -0
  37. package/docs/knowledge-graph.md +140 -0
  38. package/docs/ontology.md +206 -0
  39. package/docs/release-engineering.md +151 -0
  40. package/docs/repo-boundary-guard.md +199 -0
  41. package/docs/tenant-readiness.md +64 -0
  42. package/docs/upgrade.md +124 -0
  43. package/fixtures/analysis/invalid/native-graph.v1.json +4 -0
  44. package/fixtures/analysis/invalid/promoted-claim.v1.json +17 -0
  45. package/fixtures/analysis/invalid/runtime-import.v1.json +20 -0
  46. package/fixtures/analysis/valid/output.claims.v1.json +17 -0
  47. package/fixtures/analysis-adapter/invalid/manifest-hidden-provider.v1.json +24 -0
  48. package/fixtures/analysis-adapter/invalid/output-frontmatter-mutation.v1.json +21 -0
  49. package/fixtures/analysis-adapter/invalid/output-native-graph.v1.json +14 -0
  50. package/fixtures/analysis-adapter/manifest.disabled.v1.json +22 -0
  51. package/fixtures/analysis-adapter/manifest.enabled-local.v1.json +23 -0
  52. package/fixtures/analysis-adapter/output.claims.v1.json +21 -0
  53. package/fixtures/atelier-action-intent/invalid/runtime-mutation-authority.v1.json +16 -0
  54. package/fixtures/atelier-action-intent/invalid/unknown-top-level-field.v1.json +17 -0
  55. package/fixtures/atelier-action-intent/invalid/writes-beyond-clipboard.v1.json +16 -0
  56. package/fixtures/atelier-action-intent/valid/copy-agent-prompt.v1.json +16 -0
  57. package/fixtures/atelier-action-intent/valid/copy-repo-path.v1.json +22 -0
  58. package/fixtures/atelier-analysis-adapter/invalid/hidden-model-provider.v1.json +24 -0
  59. package/fixtures/atelier-analysis-adapter/invalid/inert-with-execute-command.v1.json +24 -0
  60. package/fixtures/atelier-analysis-adapter/invalid/proposals-with-runtime-import.v1.json +30 -0
  61. package/fixtures/atelier-analysis-adapter/valid/manifest-inert.v1.json +24 -0
  62. package/fixtures/atelier-analysis-adapter/valid/proposals-claim-only.v1.json +27 -0
  63. package/fixtures/atelier-attestation/invalid/bad-digest.v1.json +23 -0
  64. package/fixtures/atelier-attestation/invalid/conformance-scope.v1.json +23 -0
  65. package/fixtures/atelier-attestation/invalid/missing-signature.v1.json +22 -0
  66. package/fixtures/atelier-attestation/invalid/unknown-root-field.v1.json +24 -0
  67. package/fixtures/atelier-attestation/keys/roundtrip-issuer.public.v1.json +9 -0
  68. package/fixtures/atelier-attestation/valid/rejected-with-reasons.v1.json +49 -0
  69. package/fixtures/atelier-attestation/valid/signed-admitted.v1.json +35 -0
  70. package/fixtures/atelier-attestation/valid/signed-roundtrip.v1.json +29 -0
  71. package/fixtures/atelier-attestation/valid/unsigned-advisory.v1.json +23 -0
  72. package/fixtures/atelier-claim/invalid/unknown-provider.v1.json +15 -0
  73. package/fixtures/atelier-claim/invalid/unknown-top-level-field.v1.json +16 -0
  74. package/fixtures/atelier-claim/invalid/wrong-schema-const.v1.json +15 -0
  75. package/fixtures/atelier-claim/valid/adapter-style-proposed-relation.v1.json +19 -0
  76. package/fixtures/atelier-claim/valid/codex-proposed-relation.v1.json +16 -0
  77. package/fixtures/atelier-claim/valid/manual-proposed-relation.v1.json +16 -0
  78. package/fixtures/atelier-claim/valid/readiness-proposed-relation.v1.json +18 -0
  79. package/fixtures/atelier-export/invalid/dirty-unforced-empty-taint.v1.json +19 -0
  80. package/fixtures/atelier-export/invalid/object-local-audience-visibility.v1.json +11 -0
  81. package/fixtures/atelier-export/invalid/open-object-class-owner.v1.json +23 -0
  82. package/fixtures/atelier-export/invalid/pricing-legacy-amount.v1.json +23 -0
  83. package/fixtures/atelier-export/invalid/public-disguised-internal-source-ref.v1.json +11 -0
  84. package/fixtures/atelier-export/invalid/public-nested-private-source-ref.v1.json +17 -0
  85. package/fixtures/atelier-export/invalid/public-resolved-private-source-ref.v1.json +13 -0
  86. package/fixtures/atelier-export/invalid/public-resolved-sensitive-source-ref.v1.json +13 -0
  87. package/fixtures/atelier-export/invalid/public-source-ref-missing-provenance.v1.json +20 -0
  88. package/fixtures/atelier-export/invalid/public-source-team-kg.json +12 -0
  89. package/fixtures/atelier-export/invalid/source-node-legacy-visibility.v1.json +21 -0
  90. package/fixtures/atelier-export/invalid/source-node-unknown-field.v1.json +18 -0
  91. package/fixtures/atelier-export/invalid/unresolved-public-source-ref.v1.json +11 -0
  92. package/fixtures/atelier-export/sample-studio-offer.v1.json +397 -0
  93. package/fixtures/atelier-extension-pack/invalid/bundled-slug-collision.v1.json +22 -0
  94. package/fixtures/atelier-extension-pack/invalid/escapes-root.v1.json +22 -0
  95. package/fixtures/atelier-extension-pack/invalid/posture-tampered.v1.json +22 -0
  96. package/fixtures/atelier-extension-pack/invalid/protocols/autonomous-authority.v1.json +118 -0
  97. package/fixtures/atelier-extension-pack/invalid/protocols/offer-map.v1.json +109 -0
  98. package/fixtures/atelier-extension-pack/invalid/redefines-runtime-term.v1.json +19 -0
  99. package/fixtures/atelier-extension-pack/invalid/wrong-namespace.v1.json +19 -0
  100. package/fixtures/atelier-extension-pack/valid/protocols/contract-gate.v1.json +109 -0
  101. package/fixtures/atelier-extension-pack/valid/sample-pack.v1.json +48 -0
  102. package/fixtures/atelier-kit-manifest/invalid/runtime-copy-without-canonical-role.v1.json +53 -0
  103. package/fixtures/atelier-kit-manifest/invalid/telemetry-send-path.v1.json +21 -0
  104. package/fixtures/atelier-kit-manifest/valid/mnstry-atelier.valid.v1.json +76 -0
  105. package/fixtures/atelier-lock/invalid/absolute-contract-path.v1.json +40 -0
  106. package/fixtures/atelier-lock/invalid/runtime-mutation-enabled.v1.json +41 -0
  107. package/fixtures/atelier-lock/invalid/unknown-top-level-field.v1.json +42 -0
  108. package/fixtures/atelier-lock/valid/extension-pack.v1.json +55 -0
  109. package/fixtures/atelier-lock/valid/minimal.v1.json +44 -0
  110. package/fixtures/atelier-migration/invalid/live-apply-mode.v1.json +21 -0
  111. package/fixtures/atelier-migration/invalid/missing-review-evidence.v1.json +20 -0
  112. package/fixtures/atelier-migration/invalid/runtime-mutation-enabled.v1.json +21 -0
  113. package/fixtures/atelier-migration/valid/minimal.v1.json +32 -0
  114. package/fixtures/atelier-project-config/invalid/absolute-repo-path.v1.json +11 -0
  115. package/fixtures/atelier-project-config/invalid/ext-not-object.v1.json +12 -0
  116. package/fixtures/atelier-project-config/invalid/external-kind-read-boundary.v1.json +12 -0
  117. package/fixtures/atelier-project-config/invalid/missing-repos-and-alignment.v1.json +7 -0
  118. package/fixtures/atelier-project-config/invalid/unknown-top-level-field.v1.json +14 -0
  119. package/fixtures/atelier-project-config/valid/alignment-scaffold.v1.json +15 -0
  120. package/fixtures/atelier-project-config/valid/ext-extension-packs.v1.json +36 -0
  121. package/fixtures/atelier-project-config/valid/repo-workspace.v1.json +23 -0
  122. package/fixtures/atelier-project-config/validator-only/ext-member-not-object.v1.json +14 -0
  123. package/fixtures/atelier-readiness/invalid/dry-run-only-false.v1.json +87 -0
  124. package/fixtures/atelier-readiness/invalid/support-bundle-send-path.v1.json +87 -0
  125. package/fixtures/atelier-readiness/invalid/unknown-top-level-field.v1.json +88 -0
  126. package/fixtures/atelier-readiness/valid/ready-workspace.v1.json +84 -0
  127. package/fixtures/boundary-policy/invalid/content-rule-exception-blanket-path.v1.json +67 -0
  128. package/fixtures/boundary-policy/invalid/invalid-actor-private-repo-mapping.v1.json +20 -0
  129. package/fixtures/boundary-policy/invalid/legacy-warning-missing-warning.v1.json +20 -0
  130. package/fixtures/boundary-policy/invalid/missing-repo-coverage.v1.json +19 -0
  131. package/fixtures/boundary-policy/invalid/unknown-key.v1.json +12 -0
  132. package/fixtures/boundary-policy/valid/content-rule-exception.v1.json +67 -0
  133. package/fixtures/boundary-policy/valid/legacy-warning.v1.json +33 -0
  134. package/fixtures/boundary-policy/valid/strict-private-shared.v1.json +40 -0
  135. package/fixtures/git-promote/invalid/provision-named-revocable.v1.json +29 -0
  136. package/fixtures/git-promote/private-to-team.v1.json +29 -0
  137. package/fixtures/knowledge-source-sidecar/invalid/legacy-visibility-field.v1.json +17 -0
  138. package/fixtures/knowledge-source-sidecar/invalid/missing-audience.v1.json +15 -0
  139. package/fixtures/knowledge-source-sidecar/invalid/unknown-relation-kind.v1.json +18 -0
  140. package/fixtures/knowledge-source-sidecar/valid/html-source.v1.json +18 -0
  141. package/fixtures/knowledge-source-sidecar/valid/pdf-evidence.v1.json +18 -0
  142. package/fixtures/projects/neutral-project/atelier.project.json +15 -0
  143. package/fixtures/projects/neutral-project/ops/config/repo-access.v1.json +12 -0
  144. package/fixtures/projects/neutral-project/project-knowledge.graph.json +69 -0
  145. package/fixtures/projects/sample-workspace/atelier.project.json +23 -0
  146. package/fixtures/projects/sample-workspace/boundary-policy.v1.json +59 -0
  147. package/fixtures/projects/sample-workspace/content/README.md +16 -0
  148. package/fixtures/projects/sample-workspace/content/source.html +5 -0
  149. package/fixtures/projects/sample-workspace/content/source.html.kg.json +15 -0
  150. package/fixtures/projects/sample-workspace/repo-access.v1.json +9 -0
  151. package/fixtures/projects/source-formats-workspace/atelier.project.json +23 -0
  152. package/fixtures/projects/source-formats-workspace/content/README.md +17 -0
  153. package/fixtures/projects/source-formats-workspace/content/data.json +7 -0
  154. package/fixtures/projects/source-formats-workspace/content/data.json.kg.json +15 -0
  155. package/fixtures/projects/source-formats-workspace/content/logo.png.kg.json +15 -0
  156. package/fixtures/projects/source-formats-workspace/content/metrics.csv +3 -0
  157. package/fixtures/projects/source-formats-workspace/content/metrics.csv.kg.json +15 -0
  158. package/fixtures/projects/source-formats-workspace/content/pipeline.yaml +4 -0
  159. package/fixtures/projects/source-formats-workspace/content/pipeline.yaml.kg.json +15 -0
  160. package/fixtures/projects/source-formats-workspace/repo-access.v1.json +9 -0
  161. package/fixtures/readiness-protocols/extension-pack/invalid/protocol-missing-path.v1.json +20 -0
  162. package/fixtures/readiness-protocols/extension-pack/valid/with-protocol.v1.json +24 -0
  163. package/fixtures/readiness-protocols/protocol/invalid/missing-check-target.v1.json +103 -0
  164. package/fixtures/readiness-protocols/protocol/invalid/runtime-mutation-enabled.v1.json +107 -0
  165. package/fixtures/readiness-protocols/protocol/valid/minimal.v1.json +100 -0
  166. package/fixtures/readiness-protocols/run/invalid/missing-evidence.v1.json +37 -0
  167. package/fixtures/readiness-protocols/run/invalid/pass-with-blocker.v1.json +22 -0
  168. package/fixtures/readiness-protocols/run/invalid/runtime-mutation-enabled.v1.json +22 -0
  169. package/fixtures/readiness-protocols/run/valid/pass.v1.json +44 -0
  170. package/fixtures/support/invalid/leaky-support.v1.json +13 -0
  171. package/fixtures/support/valid/minimal-safe.v1.json +20 -0
  172. package/package.json +98 -0
  173. package/skills/claude/atelier-open/SKILL.md +68 -0
  174. package/skills/claude/mnstry-readiness/SKILL.md +41 -0
  175. package/skills/codex/atelier-open/SKILL.md +68 -0
  176. package/skills/codex/mnstry-readiness/SKILL.md +41 -0
  177. package/src/analysis/adapter.mjs +20 -0
  178. package/src/analysis/analysis-claim-contract.mjs +335 -0
  179. package/src/attestation/jcs.mjs +64 -0
  180. package/src/attestation/sign.mjs +305 -0
  181. package/src/boundary/content-rules.mjs +262 -0
  182. package/src/boundary/policy.mjs +806 -0
  183. package/src/check-atelier-export-contract.mjs +116 -0
  184. package/src/cli/run.mjs +283 -0
  185. package/src/collaboration/proposals.mjs +262 -0
  186. package/src/commands/analysis.mjs +8 -0
  187. package/src/commands/announcements.mjs +308 -0
  188. package/src/commands/attestation.mjs +198 -0
  189. package/src/commands/boundary.mjs +25 -0
  190. package/src/commands/config.mjs +4 -0
  191. package/src/commands/context.mjs +3 -0
  192. package/src/commands/distribution.mjs +224 -0
  193. package/src/commands/egress.mjs +11 -0
  194. package/src/commands/extension-pack.mjs +209 -0
  195. package/src/commands/feedback.mjs +3 -0
  196. package/src/commands/graph.mjs +3 -0
  197. package/src/commands/init.mjs +130 -0
  198. package/src/commands/lock.mjs +3 -0
  199. package/src/commands/project.mjs +3 -0
  200. package/src/commands/promote.mjs +4 -0
  201. package/src/commands/readiness.mjs +3 -0
  202. package/src/commands/server.mjs +6 -0
  203. package/src/commands/setup.mjs +250 -0
  204. package/src/commands/support.mjs +3 -0
  205. package/src/commands/upgrade.mjs +3 -0
  206. package/src/contracts/corpus.mjs +171 -0
  207. package/src/egress/check.mjs +45 -0
  208. package/src/egress/forbidden-egress.mjs +323 -0
  209. package/src/export/atelier-export-contract.mjs +722 -0
  210. package/src/extension-packs/loader.mjs +491 -0
  211. package/src/graph/graph.mjs +370 -0
  212. package/src/graph/knowledge-graph.mjs +887 -0
  213. package/src/harness/context-client.mjs +144 -0
  214. package/src/harness/context.mjs +27 -0
  215. package/src/index.mjs +88 -0
  216. package/src/project/config.mjs +557 -0
  217. package/src/project/file-class.mjs +113 -0
  218. package/src/project/git-ignore.mjs +31 -0
  219. package/src/project/path-match.mjs +30 -0
  220. package/src/project/repo-identity.mjs +176 -0
  221. package/src/projection/alignment-projection.mjs +169 -0
  222. package/src/projection/policy.mjs +90 -0
  223. package/src/projection/project.mjs +152 -0
  224. package/src/readiness/readiness.mjs +312 -0
  225. package/src/readiness-protocols/bundled-pack.mjs +766 -0
  226. package/src/readiness-protocols/runtime.mjs +419 -0
  227. package/src/server/local-sidecar.mjs +640 -0
  228. package/src/server/security.mjs +229 -0
  229. package/src/server/server.mjs +42 -0
  230. package/src/support/feedback-report.mjs +414 -0
  231. package/src/support/support-bundle.mjs +226 -0
  232. package/src/ui/html-primitives.mjs +104 -0
  233. package/src/upgrade/upgrade.mjs +701 -0
  234. package/src/validate-atelier-export-dry-run.mjs +75 -0
  235. package/templates/atelier.project.example.json +23 -0
  236. package/templates/distribution-workspace/.claude/launch.json +12 -0
  237. package/templates/distribution-workspace/README.md +86 -0
  238. package/templates/distribution-workspace/atelier.project.json +36 -0
  239. package/templates/distribution-workspace/boundary-policy.v1.json +61 -0
  240. package/templates/distribution-workspace/gitignore +29 -0
  241. package/templates/distribution-workspace/governance/repo-boundary-ledger.md +5 -0
  242. package/templates/distribution-workspace/project/README.md +19 -0
  243. package/templates/distribution-workspace/repo-access.v1.json +9 -0
  244. package/templates/launch.json +12 -0
  245. package/templates/private-domain-workspace/.claude/launch.json +12 -0
  246. package/templates/private-domain-workspace/README.md +50 -0
  247. package/templates/private-domain-workspace/atelier.project.json +28 -0
  248. package/templates/private-domain-workspace/boundary-policy.v1.json +54 -0
  249. package/templates/private-domain-workspace/domain/README.md +19 -0
  250. package/templates/private-domain-workspace/gitignore +29 -0
  251. package/templates/private-domain-workspace/governance/repo-boundary-ledger.md +4 -0
  252. package/templates/private-domain-workspace/repo-access.v1.json +9 -0
  253. package/templates/shared-project-workspace/.claude/launch.json +12 -0
  254. package/templates/shared-project-workspace/README.md +51 -0
  255. package/templates/shared-project-workspace/atelier.project.json +28 -0
  256. package/templates/shared-project-workspace/boundary-policy.v1.json +61 -0
  257. package/templates/shared-project-workspace/gitignore +29 -0
  258. package/templates/shared-project-workspace/governance/repo-boundary-ledger.md +5 -0
  259. package/templates/shared-project-workspace/project/README.md +19 -0
  260. package/templates/shared-project-workspace/repo-access.v1.json +9 -0
@@ -0,0 +1,364 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-lock.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "mnstry.atelier-lock@v1",
6
+ "description": "Reviewable lock document recording the installed Atelier package, contract versions, boundary digest, and applied migration state for a workspace.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "generatedAt",
12
+ "package",
13
+ "template",
14
+ "runtime",
15
+ "contracts",
16
+ "extensionPacks",
17
+ "boundaryPolicy",
18
+ "lastSuccessfulUpgrade",
19
+ "appliedMigrations"
20
+ ],
21
+ "properties": {
22
+ "schema": {
23
+ "const": "mnstry.atelier-lock@v1"
24
+ },
25
+ "contractVersion": {
26
+ "type": "string",
27
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
28
+ },
29
+ "generatedAt": {
30
+ "type": "string",
31
+ "format": "date-time"
32
+ },
33
+ "package": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": [
37
+ "name",
38
+ "version",
39
+ "source"
40
+ ],
41
+ "properties": {
42
+ "name": {
43
+ "const": "@mnstry/atelier"
44
+ },
45
+ "version": {
46
+ "type": "string",
47
+ "minLength": 1
48
+ },
49
+ "source": {
50
+ "$ref": "#/$defs/packageSource"
51
+ },
52
+ "ext": {
53
+ "type": "object",
54
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
55
+ }
56
+ }
57
+ },
58
+ "template": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "required": [
62
+ "id",
63
+ "version"
64
+ ],
65
+ "properties": {
66
+ "id": {
67
+ "type": "string",
68
+ "minLength": 1
69
+ },
70
+ "version": {
71
+ "type": "string",
72
+ "minLength": 1
73
+ },
74
+ "ext": {
75
+ "type": "object",
76
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
77
+ }
78
+ }
79
+ },
80
+ "runtime": {
81
+ "type": "object",
82
+ "additionalProperties": false,
83
+ "required": [
84
+ "node",
85
+ "telemetry",
86
+ "egress",
87
+ "mutation",
88
+ "runtimeImport",
89
+ "analysisExecution"
90
+ ],
91
+ "properties": {
92
+ "node": {
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": [
96
+ "range"
97
+ ],
98
+ "properties": {
99
+ "range": {
100
+ "type": "string",
101
+ "minLength": 1
102
+ },
103
+ "ext": {
104
+ "type": "object",
105
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
106
+ }
107
+ }
108
+ },
109
+ "telemetry": {
110
+ "const": "none"
111
+ },
112
+ "egress": {
113
+ "const": "local-only"
114
+ },
115
+ "mutation": {
116
+ "const": "not-implemented"
117
+ },
118
+ "runtimeImport": {
119
+ "const": false
120
+ },
121
+ "analysisExecution": {
122
+ "const": false
123
+ },
124
+ "ext": {
125
+ "type": "object",
126
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
127
+ }
128
+ }
129
+ },
130
+ "contracts": {
131
+ "type": "object",
132
+ "additionalProperties": false,
133
+ "required": [
134
+ "projectConfig",
135
+ "knowledgeGraph",
136
+ "boundaryPolicy",
137
+ "exportContract"
138
+ ],
139
+ "properties": {
140
+ "projectConfig": {
141
+ "const": "mnstry.atelier-project-config@v1"
142
+ },
143
+ "knowledgeGraph": {
144
+ "const": "mnstry.atelier-knowledge-graph@v1"
145
+ },
146
+ "boundaryPolicy": {
147
+ "const": "mnstry.atelier-boundary-policy@v1"
148
+ },
149
+ "exportContract": {
150
+ "const": "atelier-export@v1"
151
+ },
152
+ "ext": {
153
+ "type": "object",
154
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
155
+ }
156
+ }
157
+ },
158
+ "extensionPacks": {
159
+ "type": "array",
160
+ "items": {
161
+ "$ref": "#/$defs/extensionPackRef"
162
+ },
163
+ "uniqueItems": true
164
+ },
165
+ "boundaryPolicy": {
166
+ "type": "object",
167
+ "additionalProperties": false,
168
+ "required": [
169
+ "path",
170
+ "digest",
171
+ "snapshot"
172
+ ],
173
+ "properties": {
174
+ "path": {
175
+ "type": [
176
+ "string",
177
+ "null"
178
+ ],
179
+ "not": {
180
+ "pattern": "^/"
181
+ }
182
+ },
183
+ "digest": {
184
+ "type": [
185
+ "string",
186
+ "null"
187
+ ],
188
+ "pattern": "^sha256:[0-9a-f]{64}$"
189
+ },
190
+ "snapshot": {
191
+ "type": [
192
+ "object",
193
+ "null"
194
+ ]
195
+ },
196
+ "ext": {
197
+ "type": "object",
198
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
199
+ }
200
+ }
201
+ },
202
+ "lastSuccessfulUpgrade": {
203
+ "type": [
204
+ "string",
205
+ "null"
206
+ ],
207
+ "format": "date-time"
208
+ },
209
+ "appliedMigrations": {
210
+ "type": "array",
211
+ "items": {
212
+ "$ref": "#/$defs/appliedMigration"
213
+ }
214
+ },
215
+ "ext": {
216
+ "type": "object",
217
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
218
+ }
219
+ },
220
+ "$defs": {
221
+ "packageSource": {
222
+ "type": "object",
223
+ "additionalProperties": false,
224
+ "required": [
225
+ "type"
226
+ ],
227
+ "properties": {
228
+ "type": {
229
+ "enum": [
230
+ "git",
231
+ "private_github",
232
+ "npm",
233
+ "local_path",
234
+ "tarball"
235
+ ]
236
+ },
237
+ "repository": {
238
+ "type": [
239
+ "string",
240
+ "null"
241
+ ],
242
+ "minLength": 1
243
+ },
244
+ "gitSha": {
245
+ "type": [
246
+ "string",
247
+ "null"
248
+ ],
249
+ "pattern": "^[0-9a-f]{40}$"
250
+ },
251
+ "path": {
252
+ "type": [
253
+ "string",
254
+ "null"
255
+ ],
256
+ "not": {
257
+ "pattern": "^/"
258
+ }
259
+ },
260
+ "registry": {
261
+ "type": [
262
+ "string",
263
+ "null"
264
+ ],
265
+ "minLength": 1
266
+ },
267
+ "ext": {
268
+ "type": "object",
269
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
270
+ }
271
+ },
272
+ "allOf": [
273
+ {
274
+ "if": {
275
+ "properties": {
276
+ "type": {
277
+ "const": "git"
278
+ }
279
+ },
280
+ "required": [
281
+ "type"
282
+ ]
283
+ },
284
+ "then": {
285
+ "required": [
286
+ "repository",
287
+ "gitSha"
288
+ ]
289
+ }
290
+ },
291
+ {
292
+ "if": {
293
+ "properties": {
294
+ "type": {
295
+ "const": "local_path"
296
+ }
297
+ },
298
+ "required": [
299
+ "type"
300
+ ]
301
+ },
302
+ "then": {
303
+ "required": [
304
+ "path"
305
+ ]
306
+ }
307
+ }
308
+ ]
309
+ },
310
+ "extensionPackRef": {
311
+ "type": "object",
312
+ "additionalProperties": false,
313
+ "required": [
314
+ "id",
315
+ "version"
316
+ ],
317
+ "properties": {
318
+ "id": {
319
+ "type": "string",
320
+ "minLength": 1
321
+ },
322
+ "version": {
323
+ "type": "string",
324
+ "minLength": 1
325
+ },
326
+ "digest": {
327
+ "type": "string",
328
+ "pattern": "^sha256:[0-9a-f]{64}$"
329
+ },
330
+ "ext": {
331
+ "type": "object",
332
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
333
+ }
334
+ }
335
+ },
336
+ "appliedMigration": {
337
+ "type": "object",
338
+ "additionalProperties": false,
339
+ "required": [
340
+ "id",
341
+ "hash",
342
+ "appliedAt"
343
+ ],
344
+ "properties": {
345
+ "id": {
346
+ "type": "string",
347
+ "minLength": 1
348
+ },
349
+ "hash": {
350
+ "type": "string",
351
+ "pattern": "^[0-9a-f]{64}$"
352
+ },
353
+ "appliedAt": {
354
+ "type": "string",
355
+ "format": "date-time"
356
+ },
357
+ "ext": {
358
+ "type": "object",
359
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
360
+ }
361
+ }
362
+ }
363
+ }
364
+ }
@@ -0,0 +1,162 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-migration.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "mnstry.atelier-migration@v1",
6
+ "description": "Reviewable migration registry entry for moving an Atelier workspace between package/contract states.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "id",
12
+ "class",
13
+ "title",
14
+ "description",
15
+ "files",
16
+ "requiredPostChecks",
17
+ "authority"
18
+ ],
19
+ "properties": {
20
+ "schema": {
21
+ "const": "mnstry.atelier-migration@v1"
22
+ },
23
+ "contractVersion": {
24
+ "type": "string",
25
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
26
+ },
27
+ "id": {
28
+ "type": "string",
29
+ "pattern": "^[a-z0-9][a-z0-9._:@-]*$"
30
+ },
31
+ "from": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ },
35
+ "to": {
36
+ "type": "string",
37
+ "minLength": 1
38
+ },
39
+ "class": {
40
+ "enum": [
41
+ "generated_refresh",
42
+ "config_schema",
43
+ "hook_update",
44
+ "template_scaffold",
45
+ "extension_pack",
46
+ "semantic_review",
47
+ "breaking"
48
+ ]
49
+ },
50
+ "title": {
51
+ "type": "string",
52
+ "minLength": 1
53
+ },
54
+ "description": {
55
+ "type": "string",
56
+ "minLength": 1
57
+ },
58
+ "files": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "string",
62
+ "minLength": 1
63
+ }
64
+ },
65
+ "safety": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "reviewMarkerRequired": {
70
+ "type": "boolean"
71
+ },
72
+ "explicitConfirmationRequired": {
73
+ "type": "boolean"
74
+ },
75
+ "apply": {
76
+ "type": "string",
77
+ "minLength": 1
78
+ },
79
+ "requiredPostChecks": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "string",
83
+ "minLength": 1
84
+ }
85
+ },
86
+ "authority": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": [
90
+ "telemetry",
91
+ "egress",
92
+ "sendPath",
93
+ "runtimeMutation",
94
+ "runtimeImport",
95
+ "runtimeApply",
96
+ "analysisExecution",
97
+ "hiddenProvider"
98
+ ],
99
+ "properties": {
100
+ "telemetry": {
101
+ "const": false
102
+ },
103
+ "egress": {
104
+ "const": false
105
+ },
106
+ "sendPath": {
107
+ "const": false
108
+ },
109
+ "runtimeMutation": {
110
+ "const": false
111
+ },
112
+ "runtimeImport": {
113
+ "const": false
114
+ },
115
+ "runtimeApply": {
116
+ "const": false
117
+ },
118
+ "analysisExecution": {
119
+ "const": false
120
+ },
121
+ "hiddenProvider": {
122
+ "const": false
123
+ },
124
+ "ext": {
125
+ "type": "object",
126
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
127
+ }
128
+ }
129
+ },
130
+ "active": {
131
+ "type": "boolean"
132
+ },
133
+ "ext": {
134
+ "type": "object",
135
+ "description": "Reserved extension container. Producers MAY add namespaced members (recommend vendor-prefixed keys). Consumers MUST ignore members they do not recognize. Contents are not validated at v1 and carry no authority over first-class fields."
136
+ }
137
+ },
138
+ "allOf": [
139
+ {
140
+ "if": {
141
+ "properties": {
142
+ "class": {
143
+ "const": "breaking"
144
+ }
145
+ },
146
+ "required": [
147
+ "class"
148
+ ]
149
+ },
150
+ "then": {
151
+ "properties": {
152
+ "explicitConfirmationRequired": {
153
+ "const": true
154
+ }
155
+ },
156
+ "required": [
157
+ "explicitConfirmationRequired"
158
+ ]
159
+ }
160
+ }
161
+ ]
162
+ }