@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.
- package/CHANGELOG.md +383 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +262 -0
- package/SECURITY.md +93 -0
- package/TRADEMARKS.md +88 -0
- package/announcements/2026-08-06-announcements-channel.v1.json +12 -0
- package/announcements/keys/mnstry-announcements.public.v1.json +9 -0
- package/bin/atelier.mjs +2 -0
- package/bin/mnstry-atelier.mjs +3 -0
- package/contracts/analysis-adapter.v1.schema.json +248 -0
- package/contracts/atelier-action-intent.v1.schema.json +143 -0
- package/contracts/atelier-analysis-adapter.v1.schema.json +360 -0
- package/contracts/atelier-attestation.v1.schema.json +239 -0
- package/contracts/atelier-boundary-policy.v1.schema.json +339 -0
- package/contracts/atelier-claim.v1.schema.json +97 -0
- package/contracts/atelier-export.v1.schema.json +1015 -0
- package/contracts/atelier-extension-pack.v1.schema.json +290 -0
- package/contracts/atelier-kit-manifest.v1.schema.json +273 -0
- package/contracts/atelier-lock.v1.schema.json +364 -0
- package/contracts/atelier-migration.v1.schema.json +162 -0
- package/contracts/atelier-project-config.v1.schema.json +352 -0
- package/contracts/atelier-readiness-protocol.v1.schema.json +517 -0
- package/contracts/atelier-readiness-run.v1.schema.json +229 -0
- package/contracts/atelier-readiness.v1.schema.json +457 -0
- package/contracts/compat-baseline.json +10 -0
- package/contracts/git-promote-event.v1.schema.json +145 -0
- package/contracts/knowledge-source-sidecar.v1.schema.json +157 -0
- package/contracts/mnstry-atelier-semantic-profile.v1.json +254 -0
- package/docs/announcements.md +101 -0
- package/docs/atelier-runtime.md +34 -0
- package/docs/attestation.md +201 -0
- package/docs/continuity.md +55 -0
- package/docs/contract-stability.md +111 -0
- package/docs/distributions.md +220 -0
- package/docs/install.md +140 -0
- package/docs/knowledge-graph.md +140 -0
- package/docs/ontology.md +206 -0
- package/docs/release-engineering.md +151 -0
- package/docs/repo-boundary-guard.md +199 -0
- package/docs/tenant-readiness.md +64 -0
- package/docs/upgrade.md +124 -0
- package/fixtures/analysis/invalid/native-graph.v1.json +4 -0
- package/fixtures/analysis/invalid/promoted-claim.v1.json +17 -0
- package/fixtures/analysis/invalid/runtime-import.v1.json +20 -0
- package/fixtures/analysis/valid/output.claims.v1.json +17 -0
- package/fixtures/analysis-adapter/invalid/manifest-hidden-provider.v1.json +24 -0
- package/fixtures/analysis-adapter/invalid/output-frontmatter-mutation.v1.json +21 -0
- package/fixtures/analysis-adapter/invalid/output-native-graph.v1.json +14 -0
- package/fixtures/analysis-adapter/manifest.disabled.v1.json +22 -0
- package/fixtures/analysis-adapter/manifest.enabled-local.v1.json +23 -0
- package/fixtures/analysis-adapter/output.claims.v1.json +21 -0
- package/fixtures/atelier-action-intent/invalid/runtime-mutation-authority.v1.json +16 -0
- package/fixtures/atelier-action-intent/invalid/unknown-top-level-field.v1.json +17 -0
- package/fixtures/atelier-action-intent/invalid/writes-beyond-clipboard.v1.json +16 -0
- package/fixtures/atelier-action-intent/valid/copy-agent-prompt.v1.json +16 -0
- package/fixtures/atelier-action-intent/valid/copy-repo-path.v1.json +22 -0
- package/fixtures/atelier-analysis-adapter/invalid/hidden-model-provider.v1.json +24 -0
- package/fixtures/atelier-analysis-adapter/invalid/inert-with-execute-command.v1.json +24 -0
- package/fixtures/atelier-analysis-adapter/invalid/proposals-with-runtime-import.v1.json +30 -0
- package/fixtures/atelier-analysis-adapter/valid/manifest-inert.v1.json +24 -0
- package/fixtures/atelier-analysis-adapter/valid/proposals-claim-only.v1.json +27 -0
- package/fixtures/atelier-attestation/invalid/bad-digest.v1.json +23 -0
- package/fixtures/atelier-attestation/invalid/conformance-scope.v1.json +23 -0
- package/fixtures/atelier-attestation/invalid/missing-signature.v1.json +22 -0
- package/fixtures/atelier-attestation/invalid/unknown-root-field.v1.json +24 -0
- package/fixtures/atelier-attestation/keys/roundtrip-issuer.public.v1.json +9 -0
- package/fixtures/atelier-attestation/valid/rejected-with-reasons.v1.json +49 -0
- package/fixtures/atelier-attestation/valid/signed-admitted.v1.json +35 -0
- package/fixtures/atelier-attestation/valid/signed-roundtrip.v1.json +29 -0
- package/fixtures/atelier-attestation/valid/unsigned-advisory.v1.json +23 -0
- package/fixtures/atelier-claim/invalid/unknown-provider.v1.json +15 -0
- package/fixtures/atelier-claim/invalid/unknown-top-level-field.v1.json +16 -0
- package/fixtures/atelier-claim/invalid/wrong-schema-const.v1.json +15 -0
- package/fixtures/atelier-claim/valid/adapter-style-proposed-relation.v1.json +19 -0
- package/fixtures/atelier-claim/valid/codex-proposed-relation.v1.json +16 -0
- package/fixtures/atelier-claim/valid/manual-proposed-relation.v1.json +16 -0
- package/fixtures/atelier-claim/valid/readiness-proposed-relation.v1.json +18 -0
- package/fixtures/atelier-export/invalid/dirty-unforced-empty-taint.v1.json +19 -0
- package/fixtures/atelier-export/invalid/object-local-audience-visibility.v1.json +11 -0
- package/fixtures/atelier-export/invalid/open-object-class-owner.v1.json +23 -0
- package/fixtures/atelier-export/invalid/pricing-legacy-amount.v1.json +23 -0
- package/fixtures/atelier-export/invalid/public-disguised-internal-source-ref.v1.json +11 -0
- package/fixtures/atelier-export/invalid/public-nested-private-source-ref.v1.json +17 -0
- package/fixtures/atelier-export/invalid/public-resolved-private-source-ref.v1.json +13 -0
- package/fixtures/atelier-export/invalid/public-resolved-sensitive-source-ref.v1.json +13 -0
- package/fixtures/atelier-export/invalid/public-source-ref-missing-provenance.v1.json +20 -0
- package/fixtures/atelier-export/invalid/public-source-team-kg.json +12 -0
- package/fixtures/atelier-export/invalid/source-node-legacy-visibility.v1.json +21 -0
- package/fixtures/atelier-export/invalid/source-node-unknown-field.v1.json +18 -0
- package/fixtures/atelier-export/invalid/unresolved-public-source-ref.v1.json +11 -0
- package/fixtures/atelier-export/sample-studio-offer.v1.json +397 -0
- package/fixtures/atelier-extension-pack/invalid/bundled-slug-collision.v1.json +22 -0
- package/fixtures/atelier-extension-pack/invalid/escapes-root.v1.json +22 -0
- package/fixtures/atelier-extension-pack/invalid/posture-tampered.v1.json +22 -0
- package/fixtures/atelier-extension-pack/invalid/protocols/autonomous-authority.v1.json +118 -0
- package/fixtures/atelier-extension-pack/invalid/protocols/offer-map.v1.json +109 -0
- package/fixtures/atelier-extension-pack/invalid/redefines-runtime-term.v1.json +19 -0
- package/fixtures/atelier-extension-pack/invalid/wrong-namespace.v1.json +19 -0
- package/fixtures/atelier-extension-pack/valid/protocols/contract-gate.v1.json +109 -0
- package/fixtures/atelier-extension-pack/valid/sample-pack.v1.json +48 -0
- package/fixtures/atelier-kit-manifest/invalid/runtime-copy-without-canonical-role.v1.json +53 -0
- package/fixtures/atelier-kit-manifest/invalid/telemetry-send-path.v1.json +21 -0
- package/fixtures/atelier-kit-manifest/valid/mnstry-atelier.valid.v1.json +76 -0
- package/fixtures/atelier-lock/invalid/absolute-contract-path.v1.json +40 -0
- package/fixtures/atelier-lock/invalid/runtime-mutation-enabled.v1.json +41 -0
- package/fixtures/atelier-lock/invalid/unknown-top-level-field.v1.json +42 -0
- package/fixtures/atelier-lock/valid/extension-pack.v1.json +55 -0
- package/fixtures/atelier-lock/valid/minimal.v1.json +44 -0
- package/fixtures/atelier-migration/invalid/live-apply-mode.v1.json +21 -0
- package/fixtures/atelier-migration/invalid/missing-review-evidence.v1.json +20 -0
- package/fixtures/atelier-migration/invalid/runtime-mutation-enabled.v1.json +21 -0
- package/fixtures/atelier-migration/valid/minimal.v1.json +32 -0
- package/fixtures/atelier-project-config/invalid/absolute-repo-path.v1.json +11 -0
- package/fixtures/atelier-project-config/invalid/ext-not-object.v1.json +12 -0
- package/fixtures/atelier-project-config/invalid/external-kind-read-boundary.v1.json +12 -0
- package/fixtures/atelier-project-config/invalid/missing-repos-and-alignment.v1.json +7 -0
- package/fixtures/atelier-project-config/invalid/unknown-top-level-field.v1.json +14 -0
- package/fixtures/atelier-project-config/valid/alignment-scaffold.v1.json +15 -0
- package/fixtures/atelier-project-config/valid/ext-extension-packs.v1.json +36 -0
- package/fixtures/atelier-project-config/valid/repo-workspace.v1.json +23 -0
- package/fixtures/atelier-project-config/validator-only/ext-member-not-object.v1.json +14 -0
- package/fixtures/atelier-readiness/invalid/dry-run-only-false.v1.json +87 -0
- package/fixtures/atelier-readiness/invalid/support-bundle-send-path.v1.json +87 -0
- package/fixtures/atelier-readiness/invalid/unknown-top-level-field.v1.json +88 -0
- package/fixtures/atelier-readiness/valid/ready-workspace.v1.json +84 -0
- package/fixtures/boundary-policy/invalid/content-rule-exception-blanket-path.v1.json +67 -0
- package/fixtures/boundary-policy/invalid/invalid-actor-private-repo-mapping.v1.json +20 -0
- package/fixtures/boundary-policy/invalid/legacy-warning-missing-warning.v1.json +20 -0
- package/fixtures/boundary-policy/invalid/missing-repo-coverage.v1.json +19 -0
- package/fixtures/boundary-policy/invalid/unknown-key.v1.json +12 -0
- package/fixtures/boundary-policy/valid/content-rule-exception.v1.json +67 -0
- package/fixtures/boundary-policy/valid/legacy-warning.v1.json +33 -0
- package/fixtures/boundary-policy/valid/strict-private-shared.v1.json +40 -0
- package/fixtures/git-promote/invalid/provision-named-revocable.v1.json +29 -0
- package/fixtures/git-promote/private-to-team.v1.json +29 -0
- package/fixtures/knowledge-source-sidecar/invalid/legacy-visibility-field.v1.json +17 -0
- package/fixtures/knowledge-source-sidecar/invalid/missing-audience.v1.json +15 -0
- package/fixtures/knowledge-source-sidecar/invalid/unknown-relation-kind.v1.json +18 -0
- package/fixtures/knowledge-source-sidecar/valid/html-source.v1.json +18 -0
- package/fixtures/knowledge-source-sidecar/valid/pdf-evidence.v1.json +18 -0
- package/fixtures/projects/neutral-project/atelier.project.json +15 -0
- package/fixtures/projects/neutral-project/ops/config/repo-access.v1.json +12 -0
- package/fixtures/projects/neutral-project/project-knowledge.graph.json +69 -0
- package/fixtures/projects/sample-workspace/atelier.project.json +23 -0
- package/fixtures/projects/sample-workspace/boundary-policy.v1.json +59 -0
- package/fixtures/projects/sample-workspace/content/README.md +16 -0
- package/fixtures/projects/sample-workspace/content/source.html +5 -0
- package/fixtures/projects/sample-workspace/content/source.html.kg.json +15 -0
- package/fixtures/projects/sample-workspace/repo-access.v1.json +9 -0
- package/fixtures/projects/source-formats-workspace/atelier.project.json +23 -0
- package/fixtures/projects/source-formats-workspace/content/README.md +17 -0
- package/fixtures/projects/source-formats-workspace/content/data.json +7 -0
- package/fixtures/projects/source-formats-workspace/content/data.json.kg.json +15 -0
- package/fixtures/projects/source-formats-workspace/content/logo.png.kg.json +15 -0
- package/fixtures/projects/source-formats-workspace/content/metrics.csv +3 -0
- package/fixtures/projects/source-formats-workspace/content/metrics.csv.kg.json +15 -0
- package/fixtures/projects/source-formats-workspace/content/pipeline.yaml +4 -0
- package/fixtures/projects/source-formats-workspace/content/pipeline.yaml.kg.json +15 -0
- package/fixtures/projects/source-formats-workspace/repo-access.v1.json +9 -0
- package/fixtures/readiness-protocols/extension-pack/invalid/protocol-missing-path.v1.json +20 -0
- package/fixtures/readiness-protocols/extension-pack/valid/with-protocol.v1.json +24 -0
- package/fixtures/readiness-protocols/protocol/invalid/missing-check-target.v1.json +103 -0
- package/fixtures/readiness-protocols/protocol/invalid/runtime-mutation-enabled.v1.json +107 -0
- package/fixtures/readiness-protocols/protocol/valid/minimal.v1.json +100 -0
- package/fixtures/readiness-protocols/run/invalid/missing-evidence.v1.json +37 -0
- package/fixtures/readiness-protocols/run/invalid/pass-with-blocker.v1.json +22 -0
- package/fixtures/readiness-protocols/run/invalid/runtime-mutation-enabled.v1.json +22 -0
- package/fixtures/readiness-protocols/run/valid/pass.v1.json +44 -0
- package/fixtures/support/invalid/leaky-support.v1.json +13 -0
- package/fixtures/support/valid/minimal-safe.v1.json +20 -0
- package/package.json +98 -0
- package/skills/claude/atelier-open/SKILL.md +68 -0
- package/skills/claude/mnstry-readiness/SKILL.md +41 -0
- package/skills/codex/atelier-open/SKILL.md +68 -0
- package/skills/codex/mnstry-readiness/SKILL.md +41 -0
- package/src/analysis/adapter.mjs +20 -0
- package/src/analysis/analysis-claim-contract.mjs +335 -0
- package/src/attestation/jcs.mjs +64 -0
- package/src/attestation/sign.mjs +305 -0
- package/src/boundary/content-rules.mjs +262 -0
- package/src/boundary/policy.mjs +806 -0
- package/src/check-atelier-export-contract.mjs +116 -0
- package/src/cli/run.mjs +283 -0
- package/src/collaboration/proposals.mjs +262 -0
- package/src/commands/analysis.mjs +8 -0
- package/src/commands/announcements.mjs +308 -0
- package/src/commands/attestation.mjs +198 -0
- package/src/commands/boundary.mjs +25 -0
- package/src/commands/config.mjs +4 -0
- package/src/commands/context.mjs +3 -0
- package/src/commands/distribution.mjs +224 -0
- package/src/commands/egress.mjs +11 -0
- package/src/commands/extension-pack.mjs +209 -0
- package/src/commands/feedback.mjs +3 -0
- package/src/commands/graph.mjs +3 -0
- package/src/commands/init.mjs +130 -0
- package/src/commands/lock.mjs +3 -0
- package/src/commands/project.mjs +3 -0
- package/src/commands/promote.mjs +4 -0
- package/src/commands/readiness.mjs +3 -0
- package/src/commands/server.mjs +6 -0
- package/src/commands/setup.mjs +250 -0
- package/src/commands/support.mjs +3 -0
- package/src/commands/upgrade.mjs +3 -0
- package/src/contracts/corpus.mjs +171 -0
- package/src/egress/check.mjs +45 -0
- package/src/egress/forbidden-egress.mjs +323 -0
- package/src/export/atelier-export-contract.mjs +722 -0
- package/src/extension-packs/loader.mjs +491 -0
- package/src/graph/graph.mjs +370 -0
- package/src/graph/knowledge-graph.mjs +887 -0
- package/src/harness/context-client.mjs +144 -0
- package/src/harness/context.mjs +27 -0
- package/src/index.mjs +88 -0
- package/src/project/config.mjs +557 -0
- package/src/project/file-class.mjs +113 -0
- package/src/project/git-ignore.mjs +31 -0
- package/src/project/path-match.mjs +30 -0
- package/src/project/repo-identity.mjs +176 -0
- package/src/projection/alignment-projection.mjs +169 -0
- package/src/projection/policy.mjs +90 -0
- package/src/projection/project.mjs +152 -0
- package/src/readiness/readiness.mjs +312 -0
- package/src/readiness-protocols/bundled-pack.mjs +766 -0
- package/src/readiness-protocols/runtime.mjs +419 -0
- package/src/server/local-sidecar.mjs +640 -0
- package/src/server/security.mjs +229 -0
- package/src/server/server.mjs +42 -0
- package/src/support/feedback-report.mjs +414 -0
- package/src/support/support-bundle.mjs +226 -0
- package/src/ui/html-primitives.mjs +104 -0
- package/src/upgrade/upgrade.mjs +701 -0
- package/src/validate-atelier-export-dry-run.mjs +75 -0
- package/templates/atelier.project.example.json +23 -0
- package/templates/distribution-workspace/.claude/launch.json +12 -0
- package/templates/distribution-workspace/README.md +86 -0
- package/templates/distribution-workspace/atelier.project.json +36 -0
- package/templates/distribution-workspace/boundary-policy.v1.json +61 -0
- package/templates/distribution-workspace/gitignore +29 -0
- package/templates/distribution-workspace/governance/repo-boundary-ledger.md +5 -0
- package/templates/distribution-workspace/project/README.md +19 -0
- package/templates/distribution-workspace/repo-access.v1.json +9 -0
- package/templates/launch.json +12 -0
- package/templates/private-domain-workspace/.claude/launch.json +12 -0
- package/templates/private-domain-workspace/README.md +50 -0
- package/templates/private-domain-workspace/atelier.project.json +28 -0
- package/templates/private-domain-workspace/boundary-policy.v1.json +54 -0
- package/templates/private-domain-workspace/domain/README.md +19 -0
- package/templates/private-domain-workspace/gitignore +29 -0
- package/templates/private-domain-workspace/governance/repo-boundary-ledger.md +4 -0
- package/templates/private-domain-workspace/repo-access.v1.json +9 -0
- package/templates/shared-project-workspace/.claude/launch.json +12 -0
- package/templates/shared-project-workspace/README.md +51 -0
- package/templates/shared-project-workspace/atelier.project.json +28 -0
- package/templates/shared-project-workspace/boundary-policy.v1.json +61 -0
- package/templates/shared-project-workspace/gitignore +29 -0
- package/templates/shared-project-workspace/governance/repo-boundary-ledger.md +5 -0
- package/templates/shared-project-workspace/project/README.md +19 -0
- 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.
|