@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,145 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/git-promote-event.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "Atelier Git Promote Event",
6
+ "description": "Append-only local Git disclosure event for promoting a source from one repo/read boundary to another.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "source",
12
+ "target",
13
+ "event"
14
+ ],
15
+ "properties": {
16
+ "schema": {
17
+ "const": "git-promote-event@v1"
18
+ },
19
+ "contractVersion": {
20
+ "type": "string",
21
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
22
+ },
23
+ "source": {
24
+ "$ref": "#/$defs/endpoint"
25
+ },
26
+ "target": {
27
+ "$ref": "#/$defs/endpoint"
28
+ },
29
+ "event": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "required": [
33
+ "type",
34
+ "actor",
35
+ "sourceRepo",
36
+ "targetRepo",
37
+ "sourceKgId",
38
+ "targetKgId",
39
+ "sourceCommit",
40
+ "targetCommit",
41
+ "disclosure_class",
42
+ "revocable"
43
+ ],
44
+ "properties": {
45
+ "type": {
46
+ "const": "git.promote"
47
+ },
48
+ "actor": {
49
+ "type": "string",
50
+ "minLength": 1
51
+ },
52
+ "sourceRepo": {
53
+ "type": "string",
54
+ "minLength": 1
55
+ },
56
+ "targetRepo": {
57
+ "type": "string",
58
+ "minLength": 1
59
+ },
60
+ "sourceKgId": {
61
+ "type": "string",
62
+ "minLength": 1
63
+ },
64
+ "targetKgId": {
65
+ "type": "string",
66
+ "minLength": 1
67
+ },
68
+ "sourceCommit": {
69
+ "$ref": "#/$defs/commit"
70
+ },
71
+ "targetCommit": {
72
+ "$ref": "#/$defs/commit"
73
+ },
74
+ "disclosure_class": {
75
+ "const": "durable"
76
+ },
77
+ "revocable": {
78
+ "const": false
79
+ },
80
+ "ext": {
81
+ "type": "object",
82
+ "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."
83
+ }
84
+ }
85
+ },
86
+ "ext": {
87
+ "type": "object",
88
+ "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."
89
+ }
90
+ },
91
+ "$defs": {
92
+ "commit": {
93
+ "type": "string",
94
+ "pattern": "^[0-9a-f]{40}$"
95
+ },
96
+ "endpoint": {
97
+ "type": "object",
98
+ "additionalProperties": false,
99
+ "required": [
100
+ "repo",
101
+ "repoAccess",
102
+ "kgId",
103
+ "audience",
104
+ "commit"
105
+ ],
106
+ "properties": {
107
+ "repo": {
108
+ "type": "string",
109
+ "minLength": 1
110
+ },
111
+ "repoAccess": {
112
+ "enum": [
113
+ "private",
114
+ "team",
115
+ "operator",
116
+ "staff",
117
+ "public",
118
+ "sensitive"
119
+ ]
120
+ },
121
+ "kgId": {
122
+ "type": "string",
123
+ "minLength": 1
124
+ },
125
+ "audience": {
126
+ "enum": [
127
+ "private",
128
+ "team",
129
+ "operator",
130
+ "staff",
131
+ "public",
132
+ "sensitive"
133
+ ]
134
+ },
135
+ "commit": {
136
+ "$ref": "#/$defs/commit"
137
+ },
138
+ "ext": {
139
+ "type": "object",
140
+ "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."
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
@@ -0,0 +1,157 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/knowledge-source-sidecar.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "Atelier Source Sidecar",
6
+ "description": "Committed metadata sidecar for non-Markdown Atelier knowledge graph sources.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "asset",
12
+ "title",
13
+ "summary",
14
+ "tags",
15
+ "kg"
16
+ ],
17
+ "properties": {
18
+ "schema": {
19
+ "const": "mnstry.source-sidecar@v1"
20
+ },
21
+ "contractVersion": {
22
+ "type": "string",
23
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
24
+ },
25
+ "asset": {
26
+ "description": "Filename of the adjacent non-Markdown asset this sidecar identifies.",
27
+ "type": "string",
28
+ "minLength": 1
29
+ },
30
+ "title": {
31
+ "type": "string",
32
+ "minLength": 1
33
+ },
34
+ "summary": {
35
+ "type": "string"
36
+ },
37
+ "tags": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string",
41
+ "minLength": 1
42
+ },
43
+ "uniqueItems": true
44
+ },
45
+ "kg": {
46
+ "type": "object",
47
+ "additionalProperties": false,
48
+ "required": [
49
+ "id",
50
+ "type",
51
+ "domain",
52
+ "lifecycle",
53
+ "status",
54
+ "audience",
55
+ "relations"
56
+ ],
57
+ "properties": {
58
+ "id": {
59
+ "type": "string",
60
+ "pattern": "^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9:._/-]*$"
61
+ },
62
+ "type": {
63
+ "enum": [
64
+ "html",
65
+ "pdf",
66
+ "docx",
67
+ "artifact",
68
+ "evidence",
69
+ "source",
70
+ "prototype",
71
+ "research",
72
+ "report",
73
+ "manifest"
74
+ ]
75
+ },
76
+ "domain": {
77
+ "type": "string",
78
+ "minLength": 1
79
+ },
80
+ "lifecycle": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ },
84
+ "status": {
85
+ "enum": [
86
+ "active",
87
+ "draft",
88
+ "archived",
89
+ "template"
90
+ ]
91
+ },
92
+ "audience": {
93
+ "enum": [
94
+ "private",
95
+ "team",
96
+ "operator",
97
+ "staff",
98
+ "public",
99
+ "sensitive"
100
+ ]
101
+ },
102
+ "relations": {
103
+ "type": "object",
104
+ "additionalProperties": false,
105
+ "properties": {
106
+ "related": {
107
+ "$ref": "#/$defs/relationTargets"
108
+ },
109
+ "supports": {
110
+ "$ref": "#/$defs/relationTargets"
111
+ },
112
+ "supersedes": {
113
+ "$ref": "#/$defs/relationTargets"
114
+ },
115
+ "implements": {
116
+ "$ref": "#/$defs/relationTargets"
117
+ },
118
+ "depends_on": {
119
+ "$ref": "#/$defs/relationTargets"
120
+ },
121
+ "evidences": {
122
+ "$ref": "#/$defs/relationTargets"
123
+ },
124
+ "contradicts": {
125
+ "$ref": "#/$defs/relationTargets"
126
+ },
127
+ "belongs_to": {
128
+ "$ref": "#/$defs/relationTargets"
129
+ },
130
+ "ext": {
131
+ "type": "object",
132
+ "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."
133
+ }
134
+ }
135
+ },
136
+ "ext": {
137
+ "type": "object",
138
+ "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."
139
+ }
140
+ }
141
+ },
142
+ "ext": {
143
+ "type": "object",
144
+ "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."
145
+ }
146
+ },
147
+ "$defs": {
148
+ "relationTargets": {
149
+ "type": "array",
150
+ "items": {
151
+ "type": "string",
152
+ "minLength": 1
153
+ },
154
+ "uniqueItems": true
155
+ }
156
+ }
157
+ }
@@ -0,0 +1,254 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/mnstry-atelier-semantic-profile.v1.json",
4
+ "schema": "mnstry-atelier-semantic-profile@v1",
5
+ "version": "1.0.0",
6
+ "status": "draft",
7
+ "updatedAt": "2026-06-12",
8
+ "purpose": "Machine-readable semantic profile for the MNSTRY Atelier Kit to keep local Git/source vocabulary distinct from MNSTRY runtime authority vocabulary.",
9
+ "authorityPrinciples": [
10
+ {
11
+ "id": "repo-access-read-boundary",
12
+ "statement": "Git repository access is the hard read boundary for source files. Local audience labels and projection gates do not make a file secret from anyone who can clone or read the repository.",
13
+ "appliesTo": [
14
+ "source",
15
+ "git",
16
+ "projection"
17
+ ]
18
+ },
19
+ {
20
+ "id": "runtime-visibility-reserved",
21
+ "statement": "The word visibility is reserved for the MNSTRY runtime enum and for export artifacts that intentionally carry runtime visibility values.",
22
+ "appliesTo": [
23
+ "runtime",
24
+ "atelier-export@v1"
25
+ ]
26
+ },
27
+ {
28
+ "id": "local-audience-not-runtime-visibility",
29
+ "statement": "Local documentation and corpus classification use audience for intended readership/projection eligibility. Audience is not runtime visibility and is not a security boundary inside a readable Git repository.",
30
+ "appliesTo": [
31
+ "source",
32
+ "frontmatter",
33
+ "projection"
34
+ ]
35
+ },
36
+ {
37
+ "id": "runtime-dry-run-consumer",
38
+ "statement": "The first runtime consumer of this profile is the atelier-export@v1 dry-run importer. Until that importer exists, activation claims remain contract-level and fixture-level only.",
39
+ "appliesTo": [
40
+ "atelier-export@v1",
41
+ "runtime"
42
+ ]
43
+ }
44
+ ],
45
+ "terms": {
46
+ "audience": {
47
+ "tier": "local-source",
48
+ "owner": "atelier",
49
+ "replacesLocalUseOf": "visibility",
50
+ "description": "Intended local readership and projection eligibility for Atelier source documents.",
51
+ "allowedValues": [
52
+ "public",
53
+ "team",
54
+ "operator",
55
+ "staff",
56
+ "private",
57
+ "sensitive"
58
+ ],
59
+ "defaultPolicy": "fail-closed; unclassified content must not project publicly",
60
+ "securityBoundary": false,
61
+ "notes": [
62
+ "A private or sensitive audience value does not hide a file from users with Git repository access.",
63
+ "Projection gates may consume audience, but repository permissions remain the read boundary."
64
+ ]
65
+ },
66
+ "visibility": {
67
+ "tier": "runtime-authority",
68
+ "owner": "mnstry-runtime",
69
+ "description": "Runtime visibility enum on governed MNSTRY objects.",
70
+ "allowedValues": [
71
+ "private",
72
+ "shared",
73
+ "platform",
74
+ "public"
75
+ ],
76
+ "defaultPolicy": "runtime default is private",
77
+ "securityBoundary": true,
78
+ "runtimeReferences": [
79
+ {
80
+ "repo": "mnstry",
81
+ "path": "database/migrations/20260402020000_rebuild_08_core.sql",
82
+ "notes": "Core object visibility constraints and default private posture."
83
+ }
84
+ ],
85
+ "notes": [
86
+ "Use this word locally only when representing a runtime/export value verbatim.",
87
+ "Do not use runtime visibility values to describe source-document readership unless the document is an export fixture or dry-run object."
88
+ ]
89
+ },
90
+ "repo_access": {
91
+ "tier": "git-backed-analog",
92
+ "owner": "git-provider",
93
+ "description": "Actual read/write access to the Git repository or path substrate.",
94
+ "securityBoundary": true,
95
+ "allowedValues": [
96
+ "none",
97
+ "read",
98
+ "triage",
99
+ "write",
100
+ "maintain",
101
+ "admin"
102
+ ],
103
+ "notes": [
104
+ "For source files, repo_access determines who can read the material.",
105
+ "Projection labels cannot reduce access for users who already have repository read permissions."
106
+ ]
107
+ },
108
+ "git.promote": {
109
+ "tier": "git-backed-analog",
110
+ "owner": "atelier",
111
+ "description": "A durable disclosure event that moves or copies source material into a broader Git-readable or projection-eligible container.",
112
+ "substrate": "git",
113
+ "revocable": false,
114
+ "disclosureClass": "durable",
115
+ "mustNotBeNamed": [
116
+ "provision",
117
+ "provisioning_event"
118
+ ],
119
+ "notes": [
120
+ "A git.promote event may be homologous to runtime resource sharing, but it is not a runtime provision.",
121
+ "Undoing promotion requires a new Git history event and cannot guarantee unread by previous readers."
122
+ ]
123
+ },
124
+ "provision": {
125
+ "tier": "runtime-authority",
126
+ "owner": "mnstry-runtime",
127
+ "description": "Runtime resource-shared-into-space grant, not a local Git disclosure event.",
128
+ "substrate": "postgres",
129
+ "revocable": true,
130
+ "runtimeReferences": [
131
+ {
132
+ "repo": "mnstry",
133
+ "path": "database/migrations/20260402025000_rebuild_13_space.sql",
134
+ "notes": "space.provisions resource sharing table and validation trigger."
135
+ }
136
+ ],
137
+ "notes": [
138
+ "Keep the noun provision runtime-reserved.",
139
+ "Use git.promote for local durable disclosure."
140
+ ]
141
+ },
142
+ "sensitivity": {
143
+ "tier": "local-source",
144
+ "owner": "atelier",
145
+ "replacesLocalUseOf": "data_boundary",
146
+ "description": "Local handling risk classification for source documents and generated projections.",
147
+ "securityBoundary": false,
148
+ "notes": [
149
+ "Runtime data_boundary remains reserved for space descriptors using runtime enum values.",
150
+ "Use sensitivity for local document handling until a runtime import object requires data_boundary."
151
+ ]
152
+ },
153
+ "data_boundary": {
154
+ "tier": "runtime-authority",
155
+ "owner": "mnstry-runtime",
156
+ "description": "Runtime sharing-floor enum on spaces.",
157
+ "allowedValues": [
158
+ "public_shareable",
159
+ "member_shareable",
160
+ "client_visible",
161
+ "practitioner_private",
162
+ "specially_protected"
163
+ ],
164
+ "runtimeReferences": [
165
+ {
166
+ "repo": "mnstry",
167
+ "path": "database/migrations/20260402025000_rebuild_13_space.sql",
168
+ "notes": "space.spaces data_boundary values and cross-ministry membership guard."
169
+ }
170
+ ],
171
+ "notes": [
172
+ "Do not attach runtime data_boundary values to arbitrary source documents unless the object is a runtime space descriptor or export fixture."
173
+ ]
174
+ },
175
+ "egress_intent": {
176
+ "tier": "local-source",
177
+ "owner": "atelier",
178
+ "replacesLocalUseOf": "provider_egress",
179
+ "description": "Local declaration of intended provider/model/data egress posture before runtime enforcement exists.",
180
+ "securityBoundary": false,
181
+ "notes": [
182
+ "provider_egress is not a verified runtime canonical today.",
183
+ "Runtime provider controls must be represented by explicit runtime import fields when they exist."
184
+ ]
185
+ },
186
+ "runtime_object": {
187
+ "tier": "local-projection-of-runtime-canonical",
188
+ "owner": "atelier",
189
+ "replacesLocalUseOf": "semantic_object",
190
+ "description": "Local pointer to a real runtime table/object family.",
191
+ "allowedValueExamples": [
192
+ "content.material",
193
+ "core.artifact",
194
+ "core.thread",
195
+ "core.session",
196
+ "core.trackable",
197
+ "space.space"
198
+ ],
199
+ "allowedExportTargets": [
200
+ "content.material",
201
+ "core.artifact",
202
+ "core.trackable",
203
+ "scheduling.commitment",
204
+ "space.space",
205
+ "space.provision"
206
+ ],
207
+ "notes": [
208
+ "semantic_object is not a verified runtime canonical.",
209
+ "Team architecture documents should not default to core.artifact without an explicit personal-actor-content rationale."
210
+ ]
211
+ }
212
+ },
213
+ "optionalAdapters": {
214
+ "analysis": {
215
+ "status": "optional-experimental",
216
+ "role": "derived-discovery-graph",
217
+ "authority": "none",
218
+ "mayAnalyze": [
219
+ "allowlisted source repositories",
220
+ "sanitized contract fixtures",
221
+ "generated public or team-safe exports",
222
+ "development-only architecture maps"
223
+ ],
224
+ "mustNotAnalyzeOrGovern": [
225
+ "live runtime authority",
226
+ "production customer or member data",
227
+ "consent records",
228
+ "bookings, payments, refunds, or commerce truth",
229
+ "permission decisions",
230
+ "raw tenant-private runtime exports"
231
+ ],
232
+ "modelProviderPolicy": "model-assisted analysis must run through the active agentic harness and must not introduce a hidden model provider, second API key, or second inference boundary.",
233
+ "promotionRule": "Adapter suggestions become canonical only after reviewed promotion into source front matter or a governed runtime import path."
234
+ }
235
+ },
236
+ "consumers": {
237
+ "sourceValidation": {
238
+ "status": "implemented-in-sample-ops",
239
+ "description": "build-knowledge-graph.mjs validates mandatory kg.audience, rejects legacy kg.visibility, and checks declared graph relations."
240
+ },
241
+ "projectionGate": {
242
+ "status": "implemented-for-local-projections",
243
+ "description": "projection-policy.mjs gates public/team/operator/local graph, alignment, API, and export source eligibility."
244
+ },
245
+ "atelierExportV1": {
246
+ "status": "graph-resolved-fixture-level",
247
+ "description": "contracts:check resolves sourceRefs/sourceNodes against the Atelier knowledge graph and fails public objects with non-public source kgIds."
248
+ },
249
+ "runtimeDryRunImporter": {
250
+ "status": "implemented-non-mutating-dry-run",
251
+ "description": "MNSTRY runtime worktree provides a non-mutating atelier-export@v1 dry-run validator for enum/classification alignment."
252
+ }
253
+ }
254
+ }
@@ -0,0 +1,101 @@
1
+ # Announcements
2
+
3
+ MNSTRY communicates with kit users through signed announcement documents
4
+ committed under `announcements/` in this repository. The channel is
5
+ pull-only: an announcement reaches you when you run `git pull`, and pulling
6
+ is the consent act. There is no push channel, no subscription list, no
7
+ beacon, and no delivery receipt — and none is ever created.
8
+
9
+ ## The promise
10
+
11
+ This channel is one-way, outbound from MNSTRY. It carries no tracking of any
12
+ kind: reading, verifying, or ignoring an announcement produces no signal
13
+ back to MNSTRY. The kit never fetches this channel — no command, hook, or
14
+ background process contacts a network to look for announcements. The only
15
+ transport is the git history you already chose to pull.
16
+
17
+ ## Document shape
18
+
19
+ An announcement is a JSON document with the runtime-defined shape
20
+ `mnstry.announcement@v1` (validated structurally in code by the verify path;
21
+ deliberately not a `contracts/` schema, so the governed contract corpus
22
+ stays stable):
23
+
24
+ - `schema` — the constant `mnstry.announcement@v1`.
25
+ - `announcementId` — a stable identifier with the `announcement:` prefix.
26
+ - `publishedAt` — an ISO date string.
27
+ - `title` — a non-empty string.
28
+ - `body` — the announcement text, as markdown.
29
+ - `signature` — a detached signature (`algorithm`, `keyId`, `value`), or
30
+ null only while unsigned. An unsigned announcement never verifies.
31
+
32
+ Announcement files live directly in `announcements/`, named
33
+ `YYYY-MM-DD-<slug>.v1.json`. The MNSTRY announcements public key is
34
+ committed at `announcements/keys/mnstry-announcements.public.v1.json`; the
35
+ private half is never in this repository and CI only ever verifies — it
36
+ never re-signs.
37
+
38
+ ## Signing rule
39
+
40
+ The signature covers the UTF-8 encoding of the RFC 8785 (JCS)
41
+ canonicalization of the document with its `signature` member set to null —
42
+ the same normative rule the attestation flow uses (see
43
+ `docs/attestation.md`). The shared implementation is
44
+ `signDocument`/`verifyDocument` in `src/attestation/sign.mjs`.
45
+
46
+ ## Verifying announcements
47
+
48
+ List and verify everything at once:
49
+
50
+ atelier announcements list
51
+
52
+ Every run opens with the key it verified against — the package-relative key
53
+ path, the `keyId`, and whether that key is the committed default:
54
+
55
+ key: announcements/keys/mnstry-announcements.public.v1.json (keyId mnstry-announcements-2026, committed default key)
56
+
57
+ Each verified announcement then prints its id, date, and title. A file that
58
+ does not verify is flagged loudly and fails the exit code; treat its content
59
+ as not from MNSTRY.
60
+
61
+ `--dir DIR` changes only which documents are read. It never relocates the
62
+ trust anchor: `list` verifies against the same committed key that `verify`
63
+ and `show` use, so a public key sitting inside the directory being listed is
64
+ ignored. Pointing `list` at an untrusted copy of an announcements tree is
65
+ therefore safe — a forgery signed with a key planted in that tree fails, no
66
+ matter that the key file is named correctly and carries the genuine `keyId`.
67
+
68
+ Verify a single file (the committed key is the default; pass
69
+ `--public-key FILE` to pin your own copy):
70
+
71
+ atelier announcements verify announcements/<file>.json
72
+
73
+ Read one:
74
+
75
+ atelier announcements show announcements/<file>.json
76
+
77
+ `show` prints the body only after the signature verifies. It refuses —
78
+ without printing any content — otherwise.
79
+
80
+ ## Trust model
81
+
82
+ - Verification is offline and local. Anyone with the repository can reach
83
+ the same verdict; no MNSTRY service participates.
84
+ - The trust anchor is always the committed key, or a key you explicitly
85
+ passed with `--public-key`. Nothing else can become the anchor — in
86
+ particular no directory option, and no key file found next to the
87
+ documents being checked. A key that travels with the documents it signs
88
+ proves only that whoever wrote those documents also wrote that key.
89
+ - Every `list` run names its anchor, so a non-default key is stated rather
90
+ than assumed. If the header does not say `committed default key`, the
91
+ verdicts came from a key you passed.
92
+ - The committed public key travels with the repository. If you want
93
+ protection against a compromised repository rewriting both the key and
94
+ the announcements together, pin a known-good copy of the public key out
95
+ of band and pass it with `--public-key`.
96
+ - The private half of the announcements key is not in this repository, and
97
+ a test sweeps every JSON under `announcements/` for a JWK private member
98
+ to keep it that way. CI only ever verifies; it never signs.
99
+ - A document under `announcements/` that fails verification is noise, not
100
+ an announcement. The tooling never presents unverified content as if it
101
+ were from MNSTRY.
@@ -0,0 +1,34 @@
1
+ # MNSTRY Atelier Runtime
2
+
3
+ MNSTRY Atelier is a local-first authoring and collaboration surface for
4
+ Git-backed project workspaces. It prepares semantic meaning locally and keeps
5
+ runtime enforcement in MNSTRY.
6
+
7
+ The package owns reusable mechanics:
8
+
9
+ - project configuration and adapter resolution;
10
+ - knowledge graph indexing from front matter and sidecars;
11
+ - generated workspace projections;
12
+ - local sidecar serving over loopback only;
13
+ - agent-harness context envelopes;
14
+ - proposal-only collaboration metadata;
15
+ - support-bundle dry runs with no send path;
16
+ - export dry-run validation for `atelier-export@v1`.
17
+
18
+ Project adapters own project facts: repo roster, source roots, read-boundary
19
+ config, extension packs, brand language, and generated project outputs.
20
+
21
+ ## Local Authority
22
+
23
+ Local files plus Git are the source authority. Generated JSON, HTML, SQLite,
24
+ API, and support-bundle outputs are projections. Local view policies are not
25
+ runtime permissions. Runtime-grade identity, consent, visibility, provision,
26
+ bookings, commerce, sessions, audit, and client-grade sharing remain MNSTRY
27
+ runtime authority.
28
+
29
+ ## Safety Posture
30
+
31
+ The default package posture is no telemetry, no external network egress, no
32
+ runtime mutation, no browser apply endpoint, and no model-assisted analysis execution.
33
+ Provider analysis output may only enter as proposed `atelier-claim@v1` records
34
+ until explicitly reviewed by the project owner.