@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
package/README.md
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# MNSTRY Atelier
|
|
2
|
+
|
|
3
|
+
A methodology that creates real transformation cannot scale through static
|
|
4
|
+
content, generic AI, or manual labor. The Atelier is a local-first toolkit for
|
|
5
|
+
authoring that body of work as structured documents machines can validate —
|
|
6
|
+
in plain files, on your machine, under your control.
|
|
7
|
+
|
|
8
|
+
It is built for methodology holders and the studios that serve them: you
|
|
9
|
+
author primitives, sources, and offers in your own repositories; the Atelier
|
|
10
|
+
builds a knowledge graph over them, projects a local review surface, checks
|
|
11
|
+
readiness against published protocols, and validates exports against public
|
|
12
|
+
contracts. The MNSTRY runtime remains the authority for identity, consent,
|
|
13
|
+
visibility, provisioning, bookings, commerce, sessions, audit, and
|
|
14
|
+
client-grade sharing — using it is optional, and everything here works
|
|
15
|
+
without it.
|
|
16
|
+
|
|
17
|
+
## Status
|
|
18
|
+
|
|
19
|
+
- Version: `0.2.0-alpha.1`
|
|
20
|
+
- Stability: alpha — contracts are under a compatibility gate from the
|
|
21
|
+
`v0.2.0-alpha.0` epoch tag onward; everything else may still move
|
|
22
|
+
- Runtime: Node.js `>=22.18.0 <23`
|
|
23
|
+
- Dependencies: ajv, ajv-formats (JSON Schema validation); nothing else at
|
|
24
|
+
runtime
|
|
25
|
+
- Distribution: `@mnstry/atelier@0.2.0-alpha.1` on npm, published from the
|
|
26
|
+
`v0.2.0-alpha.1` tag. The older `v0.2.0-alpha.0` tag is the contract
|
|
27
|
+
epoch marker, not an install target — it predates the current tree.
|
|
28
|
+
- Telemetry: none. Network egress: none, with one documented exception —
|
|
29
|
+
see "Nothing leaves your machine" below.
|
|
30
|
+
|
|
31
|
+
## Claims you can check
|
|
32
|
+
|
|
33
|
+
This package makes three promises. None of them asks for your trust — each
|
|
34
|
+
one names the command that proves it.
|
|
35
|
+
|
|
36
|
+
**Nothing leaves your machine, with one exception you can see.** There is no
|
|
37
|
+
telemetry, no update check, no crash reporting, and no send path anywhere in
|
|
38
|
+
the package. The exception: when no actor is configured, `boundary check` and
|
|
39
|
+
`doctor` fall back to the `gh` CLI to resolve your GitHub login, which is an
|
|
40
|
+
authenticated request to GitHub made with your own credentials. Set
|
|
41
|
+
`MNSTRY_ATELIER_ACTOR` and that path is never taken. The only network client
|
|
42
|
+
refuses non-loopback URLs, the served pages carry a policy that authorizes no
|
|
43
|
+
external origin, and a fail-closed gate scans the executable and markup files
|
|
44
|
+
under `src/`, `bin/`, `scripts/`, and `examples/` for egress primitives. Two
|
|
45
|
+
limits worth stating plainly: the gate does not read the `.json` and `.md`
|
|
46
|
+
files under `templates/` and `skills/`, and it does not model
|
|
47
|
+
`child_process`, which is why the `gh` fallback above does not trip it:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm run egress:check
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Compatibility is checked by machinery, not memory.** Documents valid
|
|
54
|
+
against the `v0.2.0-alpha.0` contracts stay valid: every change is checked
|
|
55
|
+
against the baseline tag's validators, and schema widening outside `ext`
|
|
56
|
+
containers is refused by a schema-vs-schema differ. Breaking changes require
|
|
57
|
+
a new contract version and a recorded migration. Known limit: the differ
|
|
58
|
+
compares schemas structurally and does not resolve `$ref` pointers, so a
|
|
59
|
+
`$ref` retargeted at a looser definition is not caught by this gate — the
|
|
60
|
+
fixture tests catch that for contracts with negative fixtures, and closing
|
|
61
|
+
the gap in the differ is tracked work:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npm run contract:compat
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Conformance works offline, forever.** Validating a document against the
|
|
68
|
+
published contracts needs this package and nothing else — no account, no
|
|
69
|
+
service, no network:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
atelier dry-run ./atelier-export.json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`docs/continuity.md` records the distribution commitments behind these
|
|
76
|
+
claims, including the perpetual Apache-2.0 grant on every tagged release you
|
|
77
|
+
receive.
|
|
78
|
+
|
|
79
|
+
## Quickstart
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm install --save-dev @mnstry/atelier@0.2.0-alpha.1
|
|
83
|
+
|
|
84
|
+
npx atelier init --fixture=sample-workspace --target ./sample
|
|
85
|
+
npx atelier graph --project ./sample/atelier.project.json
|
|
86
|
+
npx atelier project --project ./sample/atelier.project.json
|
|
87
|
+
npx atelier readiness --project ./sample/atelier.project.json
|
|
88
|
+
MNSTRY_ATELIER_ACTOR=owner npx atelier boundary check --project ./sample/atelier.project.json
|
|
89
|
+
npx atelier dev --project ./sample/atelier.project.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`npx` here runs the binary already installed in `./node_modules/.bin`. Always
|
|
93
|
+
install first, and keep the `@mnstry/` scope — the unscoped name `atelier`
|
|
94
|
+
belongs to an unrelated third-party package.
|
|
95
|
+
|
|
96
|
+
`init` scaffolds a fictional sample workspace, `graph` builds the knowledge
|
|
97
|
+
graph from front matter and sidecars, `project` generates the local review
|
|
98
|
+
surface, `dev` serves it on loopback only. From there:
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
import { validateAtelierExportDryRun } from '@mnstry/atelier'
|
|
102
|
+
|
|
103
|
+
const report = validateAtelierExportDryRun(exportDocument)
|
|
104
|
+
console.log(report.accepted, report.importable, report.errors)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Real projects start from the `private-domain`, `shared-project`, or
|
|
108
|
+
`distribution` templates instead of the sample fixture.
|
|
109
|
+
|
|
110
|
+
## What this package does
|
|
111
|
+
|
|
112
|
+
- Initializes neutral local Atelier projects.
|
|
113
|
+
- Builds a front-matter and sidecar-led knowledge graph; a `.kg.json` sidecar
|
|
114
|
+
enrolls any file — Markdown, JSON, YAML, CSV, media — without the kit ever
|
|
115
|
+
parsing the foreign format.
|
|
116
|
+
- Generates and serves a local GUI projection over a loopback-only sidecar.
|
|
117
|
+
- Produces agent-harness context and capability envelopes, and ships neutral
|
|
118
|
+
Codex and Claude skill wrappers for readiness review work.
|
|
119
|
+
- Records proposal metadata without browser apply/write endpoints.
|
|
120
|
+
- Enforces the local source `audience` and runtime `visibility` boundary, and
|
|
121
|
+
rejects unresolved, disguised, or non-public-projectable source references.
|
|
122
|
+
- Enforces Repo Boundary Guard V1 for private domain and shared project
|
|
123
|
+
repos: strict policies fail closed when private or sensitive source is
|
|
124
|
+
placed in a shared repo, when protected local files are staged, or when
|
|
125
|
+
private-domain material appears in shared work without a `git.promote`
|
|
126
|
+
disclosure record.
|
|
127
|
+
- Validates `atelier-export@v1` JSON against the published schema and
|
|
128
|
+
produces deterministic dry-run reports with `accepted`, `importable`, and
|
|
129
|
+
`worstOperationStatus`.
|
|
130
|
+
- Ships the bundled `mnstry-readiness-pack@v1` with twelve claim-first
|
|
131
|
+
readiness protocols, extensible through validated extension packs.
|
|
132
|
+
- Writes and checks `atelier.lock.json`, and applies branch-based,
|
|
133
|
+
review-first upgrades that refuse dirty repos and never silently overwrite
|
|
134
|
+
authored content.
|
|
135
|
+
- Checks first-party source, templates, and examples for forbidden
|
|
136
|
+
non-localhost egress — a fail-closed discipline gate over this repo's own
|
|
137
|
+
code, not a runtime sandbox.
|
|
138
|
+
|
|
139
|
+
## What this package does not do
|
|
140
|
+
|
|
141
|
+
- It does not write to a MNSTRY runtime database.
|
|
142
|
+
- It does not import, provision, publish, or send anything.
|
|
143
|
+
- It does not contact external services.
|
|
144
|
+
- It does not execute model-assisted analysis or any model provider.
|
|
145
|
+
- It does not include client project content.
|
|
146
|
+
|
|
147
|
+
These limits are the design. An authoring tool for private material earns
|
|
148
|
+
trust by what it refuses to be able to do.
|
|
149
|
+
|
|
150
|
+
## Your documents and the boundary
|
|
151
|
+
|
|
152
|
+
What you author is yours. Documents live in your repositories, in formats you
|
|
153
|
+
chose, readable without this tool. The one vocabulary the contracts enforce:
|
|
154
|
+
`audience` describes local source readership (`public`, `team`, `operator`,
|
|
155
|
+
`staff`, `private`, `sensitive`); runtime/export `visibility` describes
|
|
156
|
+
runtime exposure and accepts only `private`, `shared`, `platform`, or
|
|
157
|
+
`public`. A public export referencing a source whose audience is not public
|
|
158
|
+
is refused — that check is fixture-pinned and mutation-tested.
|
|
159
|
+
|
|
160
|
+
## Build a branded distribution
|
|
161
|
+
|
|
162
|
+
The Atelier is designed to be white-labeled. A distribution wraps the CLI
|
|
163
|
+
under its own name, contributes a validated extension pack (branded
|
|
164
|
+
protocols, terms, templates), and themes the projection — while the root
|
|
165
|
+
contracts, guards, and conformance stay canonical underneath. Start by
|
|
166
|
+
copying the worked example:
|
|
167
|
+
|
|
168
|
+
- `examples/loomworks-studio` — a complete fictional distribution: branded
|
|
169
|
+
bin, extension pack, themed workspace template.
|
|
170
|
+
- `docs/distributions.md` — the contract a distribution must honor.
|
|
171
|
+
- `TRADEMARKS.md` — naming rules; Apache-2.0 grants code rights, not brand
|
|
172
|
+
rights. Every distribution carries "powered by MNSTRY Atelier" attribution,
|
|
173
|
+
checked by `atelier distribution check`.
|
|
174
|
+
|
|
175
|
+
## The MNSTRY relationship
|
|
176
|
+
|
|
177
|
+
The Atelier is the front porch, not the house. Conformance — is this document
|
|
178
|
+
valid against the published contracts? — is public, offline, and free,
|
|
179
|
+
forever. Admission — will MNSTRY's governed runtime accept it for delivery to
|
|
180
|
+
clients? — is a separate, opt-in step: a signed attestation issued by MNSTRY
|
|
181
|
+
against criteria this package publishes (`docs/attestation.md`). You can
|
|
182
|
+
build on the Atelier without ever talking to MNSTRY. If you want your work to
|
|
183
|
+
run on MNSTRY runtimes, the path is admission, and the rejection message is
|
|
184
|
+
part of the contract.
|
|
185
|
+
|
|
186
|
+
## Feedback and announcements
|
|
187
|
+
|
|
188
|
+
Both channels respect consent by construction. `atelier feedback` writes a
|
|
189
|
+
scanned, redaction-checked report to a local file — there is no send path;
|
|
190
|
+
you choose whether and where to share it. `announcements list` verifies
|
|
191
|
+
project-shipped announcements against a committed public key — pull-only,
|
|
192
|
+
nothing phones home to ask.
|
|
193
|
+
|
|
194
|
+
## Running the test suite from a fresh clone
|
|
195
|
+
|
|
196
|
+
`npm test` includes one fail-closed check that expects a private denylist
|
|
197
|
+
file (`release-denylist.local.json`, gitignored) used by MNSTRY's release
|
|
198
|
+
lane. On a fresh clone that file is absent, so the check **fails** — it never
|
|
199
|
+
passes silently on missing protection. Expect this, after `npm install`:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
npm install
|
|
203
|
+
npm test # 509 tests: 508 pass, 1 fail — the denylist check, by design
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
To acknowledge the missing file and run the rest, which turns that failure
|
|
207
|
+
into a recorded skip:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
ATELIER_ALLOW_MISSING_DENYLIST=1 npm test # 508 pass, 0 fail, 1 skipped
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Command reference
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
atelier dry-run ./atelier-export.json
|
|
217
|
+
atelier contract check
|
|
218
|
+
atelier graph --project ./atelier.project.json
|
|
219
|
+
atelier project --project ./atelier.project.json
|
|
220
|
+
atelier readiness --project ./atelier.project.json
|
|
221
|
+
atelier readiness protocols
|
|
222
|
+
atelier readiness journey --project ./atelier.project.json
|
|
223
|
+
atelier readiness run mnstry.readiness:identity-map --project ./atelier.project.json
|
|
224
|
+
atelier readiness packet --project ./atelier.project.json
|
|
225
|
+
atelier readiness export --dry-run --project ./atelier.project.json
|
|
226
|
+
atelier boundary check --project ./atelier.project.json
|
|
227
|
+
atelier boundary check --staged --project ./atelier.project.json
|
|
228
|
+
atelier boundary install-hooks --project ./atelier.project.json
|
|
229
|
+
atelier promote --source-repo tenant-private-domain --target-repo project-alpha --kg-id tenant-private-domain:seed
|
|
230
|
+
atelier lock write --project ./atelier.project.json
|
|
231
|
+
atelier lock check --project ./atelier.project.json
|
|
232
|
+
atelier upgrade --dry-run --project ./atelier.project.json
|
|
233
|
+
atelier upgrade --apply --project ./atelier.project.json --branch codex/atelier-upgrade-YYYYMMDD
|
|
234
|
+
atelier extension-pack validate --project ./atelier.project.json
|
|
235
|
+
atelier attestation verify ./attestation.json
|
|
236
|
+
atelier feedback create --message "what happened"
|
|
237
|
+
atelier announcements list
|
|
238
|
+
atelier distribution check --target ./my-distribution
|
|
239
|
+
atelier dev --project ./atelier.project.json
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
`upgrade --apply` creates or switches to the requested branch, refuses dirty
|
|
243
|
+
authored repos, preserves unrelated user hooks through composed hook files,
|
|
244
|
+
runs only registered migrations, refreshes generated projections, and leaves
|
|
245
|
+
a Git commit for review. It will not weaken boundary policy, introduce
|
|
246
|
+
telemetry, enable non-localhost egress, run model-assisted analysis, or write/import/apply
|
|
247
|
+
runtime state.
|
|
248
|
+
|
|
249
|
+
## Sample fixtures
|
|
250
|
+
|
|
251
|
+
Fixtures in this package are fictional and generic. Project-specific adapter
|
|
252
|
+
fixtures belong in their project repositories, not in the published Atelier
|
|
253
|
+
package.
|
|
254
|
+
|
|
255
|
+
## License and contributing
|
|
256
|
+
|
|
257
|
+
Apache-2.0. See `LICENSE`, `NOTICE` (attribution obligations that survive
|
|
258
|
+
forks), `TRADEMARKS.md` (naming), and `docs/continuity.md` (distribution
|
|
259
|
+
continuity commitments). Contributions are accepted under inbound-equals-
|
|
260
|
+
outbound Apache-2.0 with a DCO sign-off — `CONTRIBUTING.md` is the working
|
|
261
|
+
agreement, including how to contribute without exposing client material or
|
|
262
|
+
your own private methodology.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
The Atelier is an authoring tool for private material. Its guarantees are
|
|
4
|
+
enforcement claims, not aspirations — so a way around a guarantee is a
|
|
5
|
+
vulnerability here even when nothing crashes and no data is lost.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
**Use GitHub private vulnerability reporting**:
|
|
10
|
+
<https://github.com/MNSTRY/atelier/security/advisories/new>. That channel is
|
|
11
|
+
private, gives you a tracked advisory, and lets a fix and a disclosure be
|
|
12
|
+
prepared together.
|
|
13
|
+
|
|
14
|
+
If that is unavailable to you, email **erik@mnstry.ai** with `atelier security`
|
|
15
|
+
in the subject line.
|
|
16
|
+
|
|
17
|
+
Do not open a public issue for a vulnerability, and do not include client
|
|
18
|
+
material, private methodology, or key material in a report. A report needs the
|
|
19
|
+
mechanism, not your real data — if you cannot demonstrate the finding without
|
|
20
|
+
sensitive content, say so and describe the shape instead.
|
|
21
|
+
|
|
22
|
+
### What to expect
|
|
23
|
+
|
|
24
|
+
Maintenance is small and deliberate, so these are honest targets rather than
|
|
25
|
+
guarantees:
|
|
26
|
+
|
|
27
|
+
- Acknowledgement within 3 business days.
|
|
28
|
+
- An initial assessment — accepted, needs more information, or out of scope,
|
|
29
|
+
with reasoning — within 10 business days.
|
|
30
|
+
- Fixes released as a new tagged version. Where a fix changes a published
|
|
31
|
+
contract, it follows the same compatibility rules as any other change:
|
|
32
|
+
a new contract version and a recorded migration.
|
|
33
|
+
- Credit in the advisory and changelog under the name you choose, or no
|
|
34
|
+
credit if you prefer. You will be asked before being named.
|
|
35
|
+
|
|
36
|
+
Coordinated disclosure is the expectation. Give a fix a reasonable window
|
|
37
|
+
before publishing; you keep the right to publish, and there is no embargo
|
|
38
|
+
you have to sign.
|
|
39
|
+
|
|
40
|
+
## In scope
|
|
41
|
+
|
|
42
|
+
These are the claims the package makes. Defeating any of them is a
|
|
43
|
+
vulnerability, and the more quietly it can be defeated, the more severe:
|
|
44
|
+
|
|
45
|
+
- **Egress.** Any network send path in first-party code, or any way to make
|
|
46
|
+
the local sidecar reachable off loopback or serve a policy that authorizes
|
|
47
|
+
an external origin.
|
|
48
|
+
- **Boundary guard.** Any way to get private or sensitive source into a
|
|
49
|
+
shared repo, to stage a protected local file, or to promote private-domain
|
|
50
|
+
material without the required disclosure record — while the guard reports
|
|
51
|
+
clean.
|
|
52
|
+
- **Disclosure scanners.** Any way to get denylisted or structurally
|
|
53
|
+
forbidden content past `repo:check` or `release:audit`, including through
|
|
54
|
+
encoding, line splitting, file types the scanner skips, or symlinks.
|
|
55
|
+
- **Audience and visibility.** Any export accepted as `public` that
|
|
56
|
+
references a source whose audience is not public.
|
|
57
|
+
- **Attestation.** Signature or verification flaws in `attestation verify`,
|
|
58
|
+
or announcement verification accepting content the published key did not
|
|
59
|
+
sign.
|
|
60
|
+
- **Upgrade.** Any path where `upgrade --apply` overwrites authored content,
|
|
61
|
+
weakens boundary policy, or runs an unregistered migration.
|
|
62
|
+
- **Contract compatibility.** Any way to widen a schema outside `ext`
|
|
63
|
+
containers without the compatibility gate refusing it.
|
|
64
|
+
|
|
65
|
+
Supply-chain reports about this repository's own release and CI machinery are
|
|
66
|
+
in scope: workflow injection, secret exposure to untrusted code, or a way to
|
|
67
|
+
make a released tarball differ from the reviewed tag.
|
|
68
|
+
|
|
69
|
+
## Out of scope
|
|
70
|
+
|
|
71
|
+
- **The sidecar is loopback-only and unauthenticated by design.** Someone who
|
|
72
|
+
already has a local account and can reach loopback is inside the trust
|
|
73
|
+
boundary. A way to reach it from off-host is in scope; using it from on-host
|
|
74
|
+
is not.
|
|
75
|
+
- **Local file access.** The Atelier reads and writes files you point it at,
|
|
76
|
+
with your own permissions. That is the design.
|
|
77
|
+
- **Vulnerabilities in your own authored content** or in extension packs and
|
|
78
|
+
distributions maintained outside this repository.
|
|
79
|
+
- **Dependency advisories with no reachable path** through this package.
|
|
80
|
+
Report them anyway if you are unsure — but a bare scanner dump against
|
|
81
|
+
`ajv` with no exploitation path is not a finding.
|
|
82
|
+
- **Missing hardening with no demonstrated impact.** Show the mechanism.
|
|
83
|
+
|
|
84
|
+
## Supported versions
|
|
85
|
+
|
|
86
|
+
The package is alpha. Only the latest tagged release receives fixes; there
|
|
87
|
+
are no backports to earlier tags. Published contracts carry a separate and
|
|
88
|
+
stronger promise — `docs/contract-stability.md` and `docs/continuity.md`
|
|
89
|
+
record it — and that promise is not weakened by a security fix.
|
|
90
|
+
|
|
91
|
+
## Received advisories
|
|
92
|
+
|
|
93
|
+
None to date.
|
package/TRADEMARKS.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# MNSTRY trademarks
|
|
2
|
+
|
|
3
|
+
The names MNSTRY and MNSTRY Atelier, and the associated logos, are trademarks
|
|
4
|
+
of MNSTRY. The Apache-2.0 license for this package (see LICENSE section 6, "Trademarks")
|
|
5
|
+
grants no trademark rights: you may use, modify, and redistribute the code
|
|
6
|
+
without any right to use these marks except as described in this document.
|
|
7
|
+
|
|
8
|
+
## What this document binds
|
|
9
|
+
|
|
10
|
+
These terms are conditions on using the MNSTRY marks and on claiming
|
|
11
|
+
Distribution status. They are not conditions on the code. Apache-2.0 governs
|
|
12
|
+
copying, modification, and redistribution, section 4 states those conditions
|
|
13
|
+
in full, and this document adds none: you may redistribute this package,
|
|
14
|
+
modified or not, without displaying the attribution string, so long as you
|
|
15
|
+
make no use of the MNSTRY marks and claim no Distribution status. Everything
|
|
16
|
+
below is the price of carrying the marks, not the price of using the
|
|
17
|
+
software — including the attribution that `atelier distribution check`
|
|
18
|
+
verifies, which checks distributions that have chosen to carry the marks.
|
|
19
|
+
|
|
20
|
+
## Required attribution
|
|
21
|
+
|
|
22
|
+
Distributions built on this package must display the exact attribution string
|
|
23
|
+
|
|
24
|
+
powered by MNSTRY Atelier
|
|
25
|
+
|
|
26
|
+
in two places:
|
|
27
|
+
|
|
28
|
+
- the distribution's root `README.md` (byte-for-byte match on the phrase;
|
|
29
|
+
the surrounding text is free), and
|
|
30
|
+
- the distribution's user-facing credits or about surface.
|
|
31
|
+
|
|
32
|
+
The README requirement is normative and mechanically checked by
|
|
33
|
+
`atelier distribution check`. As an advisory (reported, non-blocking) signal,
|
|
34
|
+
a distribution's extension-pack manifest may also carry
|
|
35
|
+
`ext["mnstry.atelier/attribution"]` set to the same attribution string, using
|
|
36
|
+
the reserved `ext` container — no schema change is involved. Attribution in
|
|
37
|
+
`--version` output is a distribution-side test convention, not a runtime
|
|
38
|
+
check.
|
|
39
|
+
|
|
40
|
+
## Quiet software
|
|
41
|
+
|
|
42
|
+
The kit, and anything carrying the "powered by MNSTRY Atelier" attribution, must not
|
|
43
|
+
emit commercially motivated interruptions: no upsells, no calls-to-action, no
|
|
44
|
+
prompts to sign up, upgrade, rate, subscribe, or purchase. Attribution stays a
|
|
45
|
+
passive line — it identifies, it never solicits. MNSTRY binds itself to the
|
|
46
|
+
same standard, including this channel policy: outbound communication is
|
|
47
|
+
limited to user-initiated artifacts, inbound communication is pull-only, and
|
|
48
|
+
there is no telemetry, ever. Violating this clause forfeits the right to carry
|
|
49
|
+
the MNSTRY marks.
|
|
50
|
+
|
|
51
|
+
## Applications
|
|
52
|
+
|
|
53
|
+
An application powered by this package that ships no CLI carries the
|
|
54
|
+
attribution in its user-facing credits or about surface. The wording
|
|
55
|
+
requirements mirror the distribution rule above: the exact attribution string,
|
|
56
|
+
byte for byte, with the surrounding text free.
|
|
57
|
+
|
|
58
|
+
## Naming your distribution
|
|
59
|
+
|
|
60
|
+
MNSTRY marks may not appear in product names, package names, or domain names.
|
|
61
|
+
Nominative use is permitted in the form "<YourName> for MNSTRY Atelier", which
|
|
62
|
+
names the compatibility target without implying that MNSTRY publishes or
|
|
63
|
+
endorses your distribution.
|
|
64
|
+
|
|
65
|
+
## Compatibility claims
|
|
66
|
+
|
|
67
|
+
The sanctioned phrasing for a compatibility claim is:
|
|
68
|
+
|
|
69
|
+
implements atelier contracts v1
|
|
70
|
+
|
|
71
|
+
Conformance is public and offline: anyone can run the published validators in
|
|
72
|
+
this package and reach the same answer (see `docs/attestation.md`). No
|
|
73
|
+
permission is needed to make a truthful compatibility claim in this form, and
|
|
74
|
+
no attestation can substitute for it.
|
|
75
|
+
|
|
76
|
+
## Certification and admission
|
|
77
|
+
|
|
78
|
+
The phrases "MNSTRY certified" and "MNSTRY admitted" (and equivalents) are
|
|
79
|
+
reserved to holders of a signed MNSTRY attestation that verifies per the
|
|
80
|
+
procedure in `docs/attestation.md`. Self-issued or unsigned attestations
|
|
81
|
+
confer no such claim: an attestation with `"signature": null` is
|
|
82
|
+
non-authoritative by definition, and a signature is only meaningful under a
|
|
83
|
+
key the relying party recognizes as MNSTRY's.
|
|
84
|
+
|
|
85
|
+
## Questions
|
|
86
|
+
|
|
87
|
+
For trademark questions or permission requests beyond what this document
|
|
88
|
+
covers, contact MNSTRY through the channels listed in the package README.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "mnstry.announcement@v1",
|
|
3
|
+
"announcementId": "announcement:2026-08-06:announcements-channel",
|
|
4
|
+
"publishedAt": "2026-08-06",
|
|
5
|
+
"title": "Signed announcements channel",
|
|
6
|
+
"body": "MNSTRY now publishes announcements as signed JSON documents committed\nunder `announcements/` in this repository. This is a pull-only channel:\nyou receive announcements by running `git pull`, and pulling is the\nconsent act. There is no push channel, no subscription, and no tracking —\nthe kit never fetches announcements or anything else over a network.\n\nEvery announcement is signed with the MNSTRY announcements key. The\npublic half is committed at\n`announcements/keys/mnstry-announcements.public.v1.json`; verify any\nannouncement with:\n\n atelier announcements verify announcements/<file>.json\n\nor list and verify everything at once with\n`atelier announcements list`. A document that does not verify should be\ntreated as not from MNSTRY. See docs/announcements.md for the full\nconvention.",
|
|
7
|
+
"signature": {
|
|
8
|
+
"algorithm": "ed25519",
|
|
9
|
+
"keyId": "mnstry-announcements-2026",
|
|
10
|
+
"value": "iiSYs00uJMhFEb6VSovZohv4zNrdEt3tBv4sqjs7v6XMN7EpxJnzHdBwb8jBGZ5zWp3SZEKsA76VYbarWfvBBA"
|
|
11
|
+
}
|
|
12
|
+
}
|
package/bin/atelier.mjs
ADDED