@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,339 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-boundary-policy.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "mnstry.atelier-boundary-policy@v1",
6
+ "description": "Local repo boundary policy for enforcing private-domain and shared-repo placement in MNSTRY Atelier workspaces.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "mode",
12
+ "actors",
13
+ "repos"
14
+ ],
15
+ "properties": {
16
+ "schema": {
17
+ "const": "mnstry.atelier-boundary-policy@v1"
18
+ },
19
+ "contractVersion": {
20
+ "type": "string",
21
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
22
+ },
23
+ "mode": {
24
+ "enum": [
25
+ "strict",
26
+ "legacy-warning"
27
+ ]
28
+ },
29
+ "actors": {
30
+ "type": "object",
31
+ "propertyNames": {
32
+ "$ref": "#/$defs/actorId"
33
+ },
34
+ "additionalProperties": {
35
+ "$ref": "#/$defs/actorPolicy"
36
+ },
37
+ "minProperties": 1
38
+ },
39
+ "repos": {
40
+ "type": "object",
41
+ "propertyNames": {
42
+ "$ref": "#/$defs/repoName"
43
+ },
44
+ "additionalProperties": {
45
+ "$ref": "#/$defs/repoPolicy"
46
+ },
47
+ "minProperties": 1
48
+ },
49
+ "promotion": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "properties": {
53
+ "requiresGitPromote": {
54
+ "type": "boolean"
55
+ },
56
+ "recordsPath": {
57
+ "$ref": "#/$defs/relativePath"
58
+ },
59
+ "ext": {
60
+ "type": "object",
61
+ "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."
62
+ }
63
+ }
64
+ },
65
+ "forbiddenPaths": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ },
71
+ "uniqueItems": true
72
+ },
73
+ "contentRules": {
74
+ "description": "Rules judged against added lines and added file paths, not the whole tree. Omit to use the kit defaults.",
75
+ "type": "array",
76
+ "items": {
77
+ "$ref": "#/$defs/contentRule"
78
+ },
79
+ "uniqueItems": true
80
+ },
81
+ "contentRuleExceptions": {
82
+ "description": "Reviewable, per-repo, per-path carve-outs. An exception IS the approval record, which is why every field is required — a repo-specific decision must not live as a hardcoded pathspec inside shared guard infrastructure.",
83
+ "type": "array",
84
+ "items": {
85
+ "$ref": "#/$defs/contentRuleException"
86
+ },
87
+ "uniqueItems": true
88
+ },
89
+ "governanceLedgerPath": {
90
+ "$ref": "#/$defs/relativePath"
91
+ },
92
+ "ext": {
93
+ "type": "object",
94
+ "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."
95
+ }
96
+ },
97
+ "$defs": {
98
+ "contentRule": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": [
102
+ "id",
103
+ "pattern"
104
+ ],
105
+ "properties": {
106
+ "id": {
107
+ "type": "string",
108
+ "minLength": 1
109
+ },
110
+ "kind": {
111
+ "description": "content matches added lines; path matches added file paths.",
112
+ "enum": [
113
+ "content",
114
+ "path"
115
+ ]
116
+ },
117
+ "severity": {
118
+ "enum": [
119
+ "error",
120
+ "warning"
121
+ ]
122
+ },
123
+ "pattern": {
124
+ "type": "string",
125
+ "minLength": 1
126
+ },
127
+ "paths": {
128
+ "type": "array",
129
+ "items": {
130
+ "type": "string",
131
+ "minLength": 1
132
+ },
133
+ "uniqueItems": true
134
+ },
135
+ "description": {
136
+ "type": "string",
137
+ "minLength": 1
138
+ },
139
+ "ext": {
140
+ "type": "object",
141
+ "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."
142
+ }
143
+ }
144
+ },
145
+ "contentRuleException": {
146
+ "type": "object",
147
+ "additionalProperties": false,
148
+ "required": [
149
+ "rule",
150
+ "repo",
151
+ "paths",
152
+ "reason"
153
+ ],
154
+ "properties": {
155
+ "rule": {
156
+ "type": "string",
157
+ "minLength": 1
158
+ },
159
+ "repo": {
160
+ "$ref": "#/$defs/repoName"
161
+ },
162
+ "paths": {
163
+ "description": "Specific paths only. A blanket wildcard is disabling the rule, not excepting it.",
164
+ "type": "array",
165
+ "minItems": 1,
166
+ "items": {
167
+ "type": "string",
168
+ "minLength": 1,
169
+ "not": {
170
+ "enum": [
171
+ "*",
172
+ "**",
173
+ ".",
174
+ "./",
175
+ "**/*",
176
+ "*/**"
177
+ ]
178
+ }
179
+ },
180
+ "uniqueItems": true
181
+ },
182
+ "reason": {
183
+ "description": "Why this usage is accepted, in terms a reviewer can act on.",
184
+ "type": "string",
185
+ "minLength": 8
186
+ },
187
+ "ext": {
188
+ "type": "object",
189
+ "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."
190
+ }
191
+ }
192
+ },
193
+ "actorId": {
194
+ "type": "string",
195
+ "pattern": "^[a-z0-9][a-z0-9._:-]*$"
196
+ },
197
+ "actorPolicy": {
198
+ "type": "object",
199
+ "additionalProperties": false,
200
+ "required": [
201
+ "privateDomainRepo"
202
+ ],
203
+ "properties": {
204
+ "githubLogin": {
205
+ "type": "string",
206
+ "minLength": 1
207
+ },
208
+ "gitEmails": {
209
+ "type": "array",
210
+ "items": {
211
+ "type": "string",
212
+ "minLength": 3
213
+ },
214
+ "uniqueItems": true
215
+ },
216
+ "privateDomainRepo": {
217
+ "$ref": "#/$defs/repoName"
218
+ },
219
+ "ext": {
220
+ "type": "object",
221
+ "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."
222
+ }
223
+ },
224
+ "anyOf": [
225
+ {
226
+ "required": [
227
+ "githubLogin"
228
+ ]
229
+ },
230
+ {
231
+ "required": [
232
+ "gitEmails"
233
+ ]
234
+ }
235
+ ]
236
+ },
237
+ "repoName": {
238
+ "type": "string",
239
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
240
+ },
241
+ "repoPolicy": {
242
+ "type": "object",
243
+ "additionalProperties": false,
244
+ "required": [
245
+ "kind",
246
+ "readBoundary",
247
+ "allowedAudiences",
248
+ "forbiddenAudiences",
249
+ "autoCommit"
250
+ ],
251
+ "properties": {
252
+ "kind": {
253
+ "enum": [
254
+ "private_domain",
255
+ "shared",
256
+ "generated",
257
+ "archive"
258
+ ]
259
+ },
260
+ "ownerActor": {
261
+ "$ref": "#/$defs/actorId"
262
+ },
263
+ "readBoundary": {
264
+ "$ref": "#/$defs/audience"
265
+ },
266
+ "allowedAudiences": {
267
+ "$ref": "#/$defs/audienceList"
268
+ },
269
+ "forbiddenAudiences": {
270
+ "$ref": "#/$defs/audienceList"
271
+ },
272
+ "autoCommit": {
273
+ "enum": [
274
+ "allowed",
275
+ "blocked",
276
+ "guarded"
277
+ ]
278
+ },
279
+ "ext": {
280
+ "type": "object",
281
+ "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."
282
+ }
283
+ },
284
+ "allOf": [
285
+ {
286
+ "if": {
287
+ "properties": {
288
+ "kind": {
289
+ "const": "private_domain"
290
+ }
291
+ },
292
+ "required": [
293
+ "kind"
294
+ ]
295
+ },
296
+ "then": {
297
+ "required": [
298
+ "ownerActor"
299
+ ]
300
+ }
301
+ }
302
+ ]
303
+ },
304
+ "audience": {
305
+ "enum": [
306
+ "private",
307
+ "team",
308
+ "operator",
309
+ "staff",
310
+ "public",
311
+ "sensitive"
312
+ ]
313
+ },
314
+ "audienceList": {
315
+ "type": "array",
316
+ "items": {
317
+ "$ref": "#/$defs/audience"
318
+ },
319
+ "uniqueItems": true
320
+ },
321
+ "relativePath": {
322
+ "type": "string",
323
+ "minLength": 1,
324
+ "not": {
325
+ "anyOf": [
326
+ {
327
+ "pattern": "\\u0000"
328
+ },
329
+ {
330
+ "pattern": "^/"
331
+ },
332
+ {
333
+ "pattern": "^[a-z][a-z0-9+.-]*:"
334
+ }
335
+ ]
336
+ }
337
+ }
338
+ }
339
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://mnstry.ai/schemas/atelier/atelier-claim.v1.schema.json",
4
+ "$comment": "contract revision 1.1.0 (contract-stability epoch)",
5
+ "title": "atelier-claim@v1",
6
+ "description": "Proposal-only relationship claim emitted by an agent, human, script, or optional provider. It cannot mutate canonical front matter, graph relations, public exports, MCP feeds, or runtime imports.",
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": [
10
+ "schema",
11
+ "claimId",
12
+ "subject",
13
+ "predicate",
14
+ "object",
15
+ "provider",
16
+ "status",
17
+ "promoted"
18
+ ],
19
+ "properties": {
20
+ "schema": {
21
+ "const": "atelier-claim@v1"
22
+ },
23
+ "contractVersion": {
24
+ "type": "string",
25
+ "pattern": "^1\\.[0-9]+\\.[0-9]+$"
26
+ },
27
+ "claimId": {
28
+ "type": "string",
29
+ "pattern": "^claim:[a-z0-9][a-z0-9:-]*$"
30
+ },
31
+ "subject": {
32
+ "description": "Stable kg.id for the source node being described.",
33
+ "type": "string",
34
+ "pattern": "^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9:-]*$"
35
+ },
36
+ "predicate": {
37
+ "description": "Proposed relation type. Promotion into kg.relations is a separate reviewed edit.",
38
+ "enum": [
39
+ "related",
40
+ "supports",
41
+ "supersedes",
42
+ "implements",
43
+ "depends_on",
44
+ "evidences",
45
+ "contradicts",
46
+ "belongs_to"
47
+ ]
48
+ },
49
+ "object": {
50
+ "description": "Stable kg.id for the target node being described.",
51
+ "type": "string",
52
+ "pattern": "^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9:-]*$"
53
+ },
54
+ "provider": {
55
+ "description": "Claim proposer, not authority.",
56
+ "enum": [
57
+ "codex",
58
+ "manual",
59
+ "analysis",
60
+ "claude",
61
+ "script",
62
+ "atelier-readiness"
63
+ ]
64
+ },
65
+ "status": {
66
+ "const": "proposed"
67
+ },
68
+ "promoted": {
69
+ "const": false
70
+ },
71
+ "confidence": {
72
+ "type": "number",
73
+ "minimum": 0,
74
+ "maximum": 1
75
+ },
76
+ "evidence": {
77
+ "type": "array",
78
+ "items": {
79
+ "type": "string"
80
+ }
81
+ },
82
+ "notes": {
83
+ "type": "array",
84
+ "items": {
85
+ "type": "string"
86
+ }
87
+ },
88
+ "createdAt": {
89
+ "type": "string",
90
+ "format": "date-time"
91
+ },
92
+ "ext": {
93
+ "type": "object",
94
+ "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."
95
+ }
96
+ }
97
+ }