@mnstry/atelier 0.2.0-alpha.1 → 0.2.0-alpha.3

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 CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0-alpha.3
4
+
5
+ Documentation and metadata release. No contract changes and no runtime
6
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid.
7
+
8
+ - **The package's promises are now under a gate.** The checkable claims,
9
+ the will-not-do list, the conformance/admission separation, and the
10
+ audience/visibility rule live canonically in `docs/blocks/`, the README
11
+ embeds them verbatim between markers, and a test fails when they drift.
12
+ Promises converge by machinery; framing diverges by audience.
13
+ - **The README is restructured as a depth ramp** — category and trust
14
+ posture first, the working loop with its visible result second, the
15
+ checkable claims third, boundaries fourth, architecture fifth, reference
16
+ last — and a new "Where the Atelier stops" section states the boundary
17
+ with MNSTRY's managed platform as a literal table.
18
+ - **Overbroad claims are corrected.** "Trustworthy enough for whatever you
19
+ govern with it" is gone from the README and `docs/design.md` — controls
20
+ shaped for one demanding case do not establish adequacy everywhere; the
21
+ agent-runtime passage now states the narrow, testable control rather
22
+ than a general safety claim; "does not contact external services" now
23
+ carries its documented `gh` exception inline; contract and test counts
24
+ are stated by command, not by number; the contributions text now matches
25
+ `CONTRIBUTING.md`'s outside-PRs-not-open-yet posture; and
26
+ `docs/continuity.md` speaks of npm publication in the present tense.
27
+ - **`npx` examples use the collision-free `mnstry-atelier` form.** The
28
+ unscoped npm name `atelier` belongs to an unrelated third-party package,
29
+ so a bare `npx atelier` outside an installed workspace runs someone
30
+ else's code. Every `npx` example on every surface now uses the branded
31
+ binary, `atelier` remains the documented command inside installed
32
+ workspaces, and `docs/install.md` no longer calls `mnstry-atelier` a
33
+ legacy alias — it is the safe form.
34
+ - **npm metadata describes the package from the outside.** A concrete
35
+ description, registry keywords, and a homepage that resolves to the
36
+ published documentation page.
37
+
38
+ ## 0.2.0-alpha.2
39
+
40
+ Documentation and release-lane release. No contract changes and no runtime
41
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid.
42
+
43
+ - **The README is rebuilt around the system rather than its first
44
+ application.** New `docs/design.md` states the design in five movements —
45
+ a repository with an ontology, rules that refuse, collaboration as governed
46
+ disclosure, a local runtime for humans and for agents, and a platform for
47
+ your own tool — each ending with the command that proves it. Methodology
48
+ authoring is stated as the first application, not the ceiling.
49
+ - **Publishing is automated on tag push** via npm trusted publishing (OIDC),
50
+ so releases carry a provenance attestation and no registry token is stored
51
+ anywhere. Two fail-closed guards: the tagged commit must be an ancestor of
52
+ `main`, and the tag must equal `package.json`'s version.
53
+ - **The disclosure scanner no longer flags the OIDC permission key.**
54
+ `id-token` is a GitHub Actions permission, not a credential; the exemption
55
+ is the literal `id-` prefix only, and every other compound still matches.
56
+ - **`0.2.0` was published in error and unpublished the same day.** A
57
+ `npm version patch` against an alpha resolves the prerelease to `0.2.0`
58
+ rather than advancing it, and `git push --follow-tags` delivered the tag
59
+ even though branch protection rejected the commit, so a release published
60
+ from a commit that never landed on `main`. That number is permanently
61
+ retired on npm. The ancestry guard above exists so this cannot recur.
62
+
3
63
  ## 0.2.0-alpha.1
4
64
 
5
65
  First release published to the npm registry, under `@mnstry/atelier` with
package/README.md CHANGED
@@ -1,35 +1,106 @@
1
1
  # MNSTRY Atelier
2
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.
3
+ **The Atelier makes a repository mean something.** It is a local governance
4
+ toolkit for file-based bodies of work a Node CLI and library with no
5
+ service, no account, and no telemetry. Git is the database. The ontology is
6
+ the schema. The validators are the constraints. The runtime is local.
7
+
8
+ An ordinary file gains a small structured header: what this is, who it is
9
+ for, what it relates to. That is the entire enrollment. From those
10
+ declarations the Atelier builds a knowledge graph over your work, generates
11
+ a review page you read in a browser on loopback, checks the work against
12
+ published readiness protocols, and rejects what must never happen — a
13
+ public export that quietly references a private source.
14
+
15
+ MNSTRY publishes it under Apache-2.0 and authors its own workspaces with
16
+ it. Everything here runs without ever talking to a MNSTRY runtime, so it
17
+ can govern a methodology, a research corpus, an editorial pipeline, or any
18
+ body of work that must outlive the tools that touch it. Every promise on
19
+ this page ends in a command you can run.
16
20
 
17
- ## Status
21
+ ```bash
22
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.3
23
+ npx mnstry-atelier init --fixture=sample-workspace --target ./sample
24
+ npx mnstry-atelier graph --project ./sample/atelier.project.json
25
+ ```
18
26
 
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.
27
+ `npx` here runs the binary already installed in `./node_modules/.bin`
28
+ always install first. Keep the `@mnstry/` scope: the unscoped npm name
29
+ `atelier` belongs to an unrelated third-party package, so a bare
30
+ `npx atelier` outside an installed workspace runs someone else's code.
31
+ The branded `npx mnstry-atelier` form never collides with it; inside an
32
+ installed workspace the shorter `atelier` command is also available, and
33
+ that is the form npm scripts and the command reference below use.
34
+
35
+ ## What authoring looks like
36
+
37
+ Here is a complete, working source document — fictional, like every
38
+ fixture in this package:
39
+
40
+ ```markdown
41
+ ---
42
+ title: "Grounding practice"
43
+ summary: "The opening practice every offer in this catalog builds on."
44
+ kg:
45
+ id: "my-studio:grounding-practice"
46
+ type: "document"
47
+ status: "active"
48
+ audience: "team"
49
+ relations:
50
+ supports: "my-studio:flagship-offer"
51
+ ---
52
+
53
+ # Grounding practice
54
+
55
+ The practice itself, in your words, in your file, in your repository.
56
+ ```
57
+
58
+ That header is the entire enrollment. The graph builder reads front matter
59
+ like this, and `.kg.json` sidecars for files that are not Markdown — JSON,
60
+ YAML, CSV, media, anything — without ever parsing the foreign format. Your
61
+ documents stay in your repositories, in formats you chose, readable
62
+ without this tool. From there the working loop is four commands:
63
+
64
+ ```bash
65
+ npx mnstry-atelier graph --project ./sample/atelier.project.json # build the knowledge graph
66
+ npx mnstry-atelier project --project ./sample/atelier.project.json # generate the local review page
67
+ npx mnstry-atelier readiness --project ./sample/atelier.project.json # check against published protocols
68
+ npx mnstry-atelier dry-run ./atelier-export.json # validate against the public contracts
69
+ ```
70
+
71
+ After those four commands you have a generated graph, a browsable review
72
+ page under your project's output directory, a readiness summary, and a
73
+ dry-run report — all of them files in your repository, all of them
74
+ diffable. `npx mnstry-atelier dev` serves the review page on loopback.
75
+
76
+ <!-- atelier:block:audience-visibility:start -->
77
+ The `audience` field in the header is the load-bearing word. It declares who
78
+ a source is written for — `public`, `team`, `operator`, `staff`, `private`,
79
+ or `sensitive` — and the machinery downstream refuses to let material travel
80
+ further than its audience allows. Runtime and export `visibility` is a
81
+ separate vocabulary (`private`, `shared`, `platform`, `public`) describing
82
+ runtime exposure, and the validators reject every crossing between the two.
83
+ Above all: a public export that references a source whose audience is not
84
+ public is refused. That check is fixture-pinned and mutation-tested —
85
+ deleting its enforcement fails tests, not documentation.
86
+ <!-- atelier:block:audience-visibility:end -->
87
+
88
+ The same machinery is a library:
89
+
90
+ ```js
91
+ import { validateAtelierExportDryRun } from '@mnstry/atelier'
92
+
93
+ const report = validateAtelierExportDryRun(exportDocument)
94
+ console.log(report.accepted, report.importable, report.errors)
95
+ ```
96
+
97
+ Real projects start from the `private-domain`, `shared-project`, or
98
+ `distribution` templates instead of the sample fixture —
99
+ [`docs/install.md`](docs/install.md) is the full install guide.
30
100
 
31
101
  ## Claims you can check
32
102
 
103
+ <!-- atelier:block:claims:start -->
33
104
  This package makes three promises. None of them asks for your trust — each
34
105
  one names the command that proves it.
35
106
 
@@ -75,143 +146,152 @@ atelier dry-run ./atelier-export.json
75
146
  `docs/continuity.md` records the distribution commitments behind these
76
147
  claims, including the perpetual Apache-2.0 grant on every tagged release you
77
148
  receive.
149
+ <!-- atelier:block:claims:end -->
78
150
 
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
151
+ ## What it will not do
140
152
 
153
+ <!-- atelier:block:will-not-do:start -->
141
154
  - It does not write to a MNSTRY runtime database.
142
155
  - It does not import, provision, publish, or send anything.
143
- - It does not contact external services.
156
+ - Except for the documented `gh` actor-resolution fallback, it initiates no
157
+ external network requests.
144
158
  - It does not execute model-assisted analysis or any model provider.
145
159
  - It does not include client project content.
146
160
 
147
161
  These limits are the design. An authoring tool for private material earns
148
162
  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:
163
+ <!-- atelier:block:will-not-do:end -->
164
+
165
+ ## Conformance is public, admission is separate
166
+
167
+ <!-- atelier:block:conformance-admission:start -->
168
+ The Atelier export format is MNSTRY's format, offered openly.
169
+
170
+ **Anyone can check a document against the published contracts, forever,
171
+ offline.** The contracts, fixtures, and dry-run validator all ship in the
172
+ package, so conformance needs no account, no network, and no MNSTRY
173
+ involvement.
174
+
175
+ Admission is a narrower, opt-in decision: whether a MNSTRY governed runtime
176
+ accepts a document for delivery to the people it serves. That is what
177
+ admission buys delivery through a runtime that enforces consent and
178
+ visibility at serve time — and it takes the form of a signed MNSTRY
179
+ attestation against criteria this package publishes (`docs/attestation.md`).
180
+ The criteria are public, the checker is private, and the rejection message
181
+ is part of the contract. You can build on the Atelier without ever talking
182
+ to MNSTRY, and a document MNSTRY declines can still be fully conformant.
183
+ <!-- atelier:block:conformance-admission:end -->
184
+
185
+ ## Where the Atelier stops
186
+
187
+ The Atelier is a complete, standalone tool; nothing on the right side of
188
+ this table is required to use it. MNSTRY's managed platform begins where
189
+ local preparation ends:
190
+
191
+ | The Atelier, today | The MNSTRY managed platform |
192
+ | ------------------------------------- | ---------------------------------- |
193
+ | Local files and Git authority | Runtime authority |
194
+ | Knowledge graph and review projection | Governed delivery |
195
+ | Readiness checks and proposed claims | Runtime consent and identity |
196
+ | Offline conformance | Signed admission |
197
+ | Proposal-only harness access | Tenant applications and operations |
198
+
199
+ ## The system
200
+
201
+ The full design lives in [`docs/design.md`](docs/design.md) — five
202
+ movements, each grounded in shipped machinery, each ending with the command
203
+ that proves it. In brief:
204
+
205
+ **A repository with an ontology.** Front matter — or a `.kg.json` sidecar
206
+ beside any format the kit never parses — declares a file's identity, type,
207
+ audience, and relations. A node's `kg.id` names its canonical: the stable
208
+ source-of-truth version of a thing that people, tools, and agents can refer
209
+ to without losing meaning. The graph builder compiles the repository into a
210
+ deterministic knowledge graph. No import step, no database: the repository
211
+ is the store, and Git is the history, the review process, and the read
212
+ boundary.
213
+
214
+ **Rules that refuse.** JSON Schema contracts under a compatibility epoch
215
+ define the vocabulary, and fail-closed validators enforce it — including
216
+ the audience/visibility refusal above. Schema widening outside `ext`
217
+ containers is refused by a schema-vs-schema differ, breaking changes
218
+ require a new contract version with a recorded migration, and twelve
219
+ claim-first readiness protocols check a workspace against published
220
+ criteria to produce proposed claims, never runtime mutations.
221
+
222
+ **Collaboration as governed disclosure.** Repositories have enforced roles:
223
+ private-domain repos hold one person's source material, shared-project
224
+ repos hold what a team may read, and the boundary guard fails closed when
225
+ material crosses without a record. Crossing the boundary requires a
226
+ recorded `git.promote` disclosure event — disclosure is a commit, not an
227
+ accident. Change to the machinery itself is governed the same way: the
228
+ lockfile records exactly what a workspace runs, and upgrades are
229
+ branch-based, review-first, and refuse dirty repositories.
230
+
231
+ **A local runtime for humans and for agents.** `atelier project` renders a
232
+ projection — a contextual view of the same governed workspace. Humans get a
233
+ generated review page over a loopback-only sidecar; agent harnesses get
234
+ session-bound context and capability envelopes, with a place to record
235
+ proposals and no apply endpoints. That is a narrow, testable control — a
236
+ bounded view, and no write authority to grant — not a general claim that an
237
+ agent is safe around private material. Neutral Claude and Codex skill
238
+ wrappers ship in the package.
239
+
240
+ **A platform for your own tool.** A distribution wraps the CLI under its
241
+ own name, contributes a validated extension pack, and themes the
242
+ projection, while the root contracts, guards, and conformance stay
243
+ canonical underneath.
244
+
245
+ It exists because some bodies of work are too important to live inside
246
+ someone else's platform. MNSTRY built the Atelier to carry its own most
247
+ demanding case — private transformational work, where a leaked document is
248
+ a betrayal — and that case shaped the defaults: fail-closed boundaries, no
249
+ telemetry, no send path, agents without authority, disclosure as a recorded
250
+ event. Other domains reuse the mechanics and define their own ontology,
251
+ protocols, and boundary policies. Methodology authoring is the first
252
+ application, not the ceiling.
253
+
254
+ ## Build your own tool on it
255
+
256
+ The Atelier is designed to be built on, under your name — including
257
+ commercially. A distribution wraps the CLI under its own command,
258
+ contributes a validated extension pack (branded protocols, terms,
259
+ templates), and themes the projection, while the root contracts, guards,
260
+ and conformance stay canonical underneath. Apache-2.0 makes commercial use
261
+ a right, not a favor; the trademark policy keeps the name ours and the
262
+ code yours. Start by copying the worked example:
167
263
 
168
264
  - `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.
265
+ bin, extension pack, themed workspace template. It lives in this
266
+ repository and deliberately never ships in the npm tarball.
267
+ - [`docs/distributions.md`](docs/distributions.md) — the contract a
268
+ distribution must honor.
171
269
  - `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
270
+ rights. Every distribution carries "powered by MNSTRY Atelier"
271
+ attribution, checked by `atelier distribution check`.
195
272
 
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:
273
+ ## Status
208
274
 
209
- ```bash
210
- ATELIER_ALLOW_MISSING_DENYLIST=1 npm test # 508 pass, 0 fail, 1 skipped
211
- ```
275
+ - Version: `0.2.0-alpha.3`
276
+ - Stability: alpha contracts are under a compatibility gate from the
277
+ `v0.2.0-alpha.0` epoch tag onward; everything else may still move
278
+ - Runtime: Node.js `>=22.18.0 <23`
279
+ - Dependencies: ajv, ajv-formats (JSON Schema validation); nothing else at
280
+ runtime
281
+ - Distribution: `@mnstry/atelier@0.2.0-alpha.3` on npm, published from the
282
+ `v0.2.0-alpha.3` tag. The `v0.2.0-alpha.0` tag is the contract epoch
283
+ marker, not an install target — it predates the current tree. The version
284
+ `0.2.0` was published in error and unpublished the same day; that number
285
+ is permanently retired on npm and will never be reused.
286
+ - Telemetry: none. Network egress: none, with one documented exception —
287
+ see "Claims you can check" above.
212
288
 
213
289
  ## Command reference
214
290
 
291
+ Commands below use the `atelier` form, which is what an installed
292
+ workspace sees; from outside a workspace, invoke the same commands as
293
+ `npx mnstry-atelier`.
294
+
215
295
  ```bash
216
296
  atelier dry-run ./atelier-export.json
217
297
  atelier contract check
@@ -243,20 +323,26 @@ atelier dev --project ./atelier.project.json
243
323
  authored repos, preserves unrelated user hooks through composed hook files,
244
324
  runs only registered migrations, refreshes generated projections, and leaves
245
325
  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
326
+ telemetry, enable non-loopback egress, run model-assisted analysis, or
327
+ write, import, or apply runtime state.
250
328
 
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.
329
+ `feedback create` writes a scanned, redaction-checked report to a local
330
+ file there is no send path; you choose whether and where to share it.
331
+ `announcements list` verifies project-shipped announcements against a
332
+ committed public key — pull-only, nothing phones home to ask
333
+ ([`docs/announcements.md`](docs/announcements.md)).
254
334
 
255
335
  ## License and contributing
256
336
 
257
337
  Apache-2.0. See `LICENSE`, `NOTICE` (attribution obligations that survive
258
338
  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.
339
+ continuity commitments).
340
+
341
+ Issues and questions are welcome. Outside pull requests are not open yet —
342
+ a required CI check currently asserts maintainer commit identity — and
343
+ `CONTRIBUTING.md` states that posture plainly, along with the
344
+ inbound-equals-outbound Apache-2.0 terms and DCO sign-off that will govern
345
+ contributions when they open. One expectation worth knowing before you run
346
+ the suite: `npm test` from a fresh clone fails exactly one check by
347
+ design — a release-lane protection whose private file is absent — and
348
+ `CONTRIBUTING.md` explains the acknowledged-skip form.
@@ -0,0 +1,9 @@
1
+ The `audience` field in the header is the load-bearing word. It declares who
2
+ a source is written for — `public`, `team`, `operator`, `staff`, `private`,
3
+ or `sensitive` — and the machinery downstream refuses to let material travel
4
+ further than its audience allows. Runtime and export `visibility` is a
5
+ separate vocabulary (`private`, `shared`, `platform`, `public`) describing
6
+ runtime exposure, and the validators reject every crossing between the two.
7
+ Above all: a public export that references a source whose audience is not
8
+ public is refused. That check is fixture-pinned and mutation-tested —
9
+ deleting its enforcement fails tests, not documentation.
@@ -0,0 +1,45 @@
1
+ This package makes three promises. None of them asks for your trust — each
2
+ one names the command that proves it.
3
+
4
+ **Nothing leaves your machine, with one exception you can see.** There is no
5
+ telemetry, no update check, no crash reporting, and no send path anywhere in
6
+ the package. The exception: when no actor is configured, `boundary check` and
7
+ `doctor` fall back to the `gh` CLI to resolve your GitHub login, which is an
8
+ authenticated request to GitHub made with your own credentials. Set
9
+ `MNSTRY_ATELIER_ACTOR` and that path is never taken. The only network client
10
+ refuses non-loopback URLs, the served pages carry a policy that authorizes no
11
+ external origin, and a fail-closed gate scans the executable and markup files
12
+ under `src/`, `bin/`, `scripts/`, and `examples/` for egress primitives. Two
13
+ limits worth stating plainly: the gate does not read the `.json` and `.md`
14
+ files under `templates/` and `skills/`, and it does not model
15
+ `child_process`, which is why the `gh` fallback above does not trip it:
16
+
17
+ ```bash
18
+ npm run egress:check
19
+ ```
20
+
21
+ **Compatibility is checked by machinery, not memory.** Documents valid
22
+ against the `v0.2.0-alpha.0` contracts stay valid: every change is checked
23
+ against the baseline tag's validators, and schema widening outside `ext`
24
+ containers is refused by a schema-vs-schema differ. Breaking changes require
25
+ a new contract version and a recorded migration. Known limit: the differ
26
+ compares schemas structurally and does not resolve `$ref` pointers, so a
27
+ `$ref` retargeted at a looser definition is not caught by this gate — the
28
+ fixture tests catch that for contracts with negative fixtures, and closing
29
+ the gap in the differ is tracked work:
30
+
31
+ ```bash
32
+ npm run contract:compat
33
+ ```
34
+
35
+ **Conformance works offline, forever.** Validating a document against the
36
+ published contracts needs this package and nothing else — no account, no
37
+ service, no network:
38
+
39
+ ```bash
40
+ atelier dry-run ./atelier-export.json
41
+ ```
42
+
43
+ `docs/continuity.md` records the distribution commitments behind these
44
+ claims, including the perpetual Apache-2.0 grant on every tagged release you
45
+ receive.
@@ -0,0 +1,15 @@
1
+ The Atelier export format is MNSTRY's format, offered openly.
2
+
3
+ **Anyone can check a document against the published contracts, forever,
4
+ offline.** The contracts, fixtures, and dry-run validator all ship in the
5
+ package, so conformance needs no account, no network, and no MNSTRY
6
+ involvement.
7
+
8
+ Admission is a narrower, opt-in decision: whether a MNSTRY governed runtime
9
+ accepts a document for delivery to the people it serves. That is what
10
+ admission buys — delivery through a runtime that enforces consent and
11
+ visibility at serve time — and it takes the form of a signed MNSTRY
12
+ attestation against criteria this package publishes (`docs/attestation.md`).
13
+ The criteria are public, the checker is private, and the rejection message
14
+ is part of the contract. You can build on the Atelier without ever talking
15
+ to MNSTRY, and a document MNSTRY declines can still be fully conformant.
@@ -0,0 +1,9 @@
1
+ - It does not write to a MNSTRY runtime database.
2
+ - It does not import, provision, publish, or send anything.
3
+ - Except for the documented `gh` actor-resolution fallback, it initiates no
4
+ external network requests.
5
+ - It does not execute model-assisted analysis or any model provider.
6
+ - It does not include client project content.
7
+
8
+ These limits are the design. An authoring tool for private material earns
9
+ trust by what it refuses to be able to do.
@@ -21,10 +21,9 @@ NOTICE attribution obligation and the trademark limits in `TRADEMARKS.md`).
21
21
  tag you fetched, with full Apache-2.0 rights over it. MNSTRY will not ask
22
22
  for deletion of received tagged source and has no license mechanism to do
23
23
  so.
24
- 2. **npm publication at public release.** When the package's public flip
25
- happens, tagged releases will be published to the npm registry under
26
- `@mnstry/atelier` with public access, making the registry not repository
27
- permission — the distribution channel of record.
24
+ 2. **npm publication.** Tagged releases are published to the npm registry
25
+ under `@mnstry/atelier` with public access, making the registry — not
26
+ repository permission the distribution channel of record.
28
27
  3. **Contract compatibility by machinery.** From tag `v0.2.0-alpha.0`
29
28
  onward, the published contracts are under a compatibility gate
30
29
  (`npm run contract:compat`): documents valid against the baseline tag must
package/docs/design.md ADDED
@@ -0,0 +1,161 @@
1
+ # The design
2
+
3
+ The Atelier makes a repository mean something. Files declare what they are,
4
+ who they are for, and how they relate — and machinery enforces it.
5
+
6
+ **Git is the database. The ontology is the schema. The validators are the
7
+ constraints. The runtime is local.**
8
+
9
+ This page states the design in five movements. Each one is a general
10
+ primitive, grounded in a shipped mechanism, ending with the command that
11
+ proves it — because a design document that cannot be checked is marketing.
12
+
13
+ ## 1. A repository with an ontology
14
+
15
+ A small structured header turns a file into a node: front matter on
16
+ Markdown, or a `.kg.json` sidecar beside any other format — JSON, YAML,
17
+ CSV, media, anything — which the kit enrolls without ever parsing the
18
+ foreign format. The header declares identity (`kg.id`), type, status,
19
+ audience, and relations to other nodes.
20
+
21
+ The graph builder compiles the repository into a knowledge graph,
22
+ deterministically: same tree in, same graph out, and `--check` mode fails
23
+ when a generated graph has drifted from its sources. There is no import
24
+ step, no database, and no export lock-in. The repository is the store. Git
25
+ is the history, the review process, and the read boundary you already
26
+ trust — an audience label guides projection, but repository access is what
27
+ actually hides a file.
28
+
29
+ ```bash
30
+ atelier graph --project ./atelier.project.json
31
+ atelier graph --check --project ./atelier.project.json
32
+ ```
33
+
34
+ ## 2. Rules that refuse
35
+
36
+ The ontology is not documentation. It is the enforcement mechanism.
37
+
38
+ The JSON Schema contracts under `contracts/` define the vocabulary —
39
+ exports, project configuration, boundary policy, sidecars, locks,
40
+ migrations, readiness, attestation — and fail-closed validators enforce
41
+ it. The load-bearing
42
+ separation is `audience` versus `visibility`: audience is local readership
43
+ (`public`, `team`, `operator`, `staff`, `private`, `sensitive`), visibility
44
+ is runtime authority (`private`, `shared`, `platform`, `public`), and the
45
+ validators reject every crossing — a local audience word in a visibility
46
+ field, a `visibility` key on a source node, and above all a public export
47
+ that resolves any source reference to a non-public source. That last check
48
+ is fixture-pinned and mutation-tested: deleting its enforcement makes tests
49
+ fail, not documentation drift.
50
+
51
+ The contracts sit under a stability epoch. Every change is checked against
52
+ the baseline tag's validators, schema widening outside namespaced `ext`
53
+ containers is refused by a schema-vs-schema differ, and a breaking change
54
+ requires a new contract version with a recorded migration. Twelve bundled
55
+ claim-first readiness protocols check a workspace against published
56
+ criteria and produce proposed claims — never runtime mutations.
57
+
58
+ ```bash
59
+ atelier dry-run ./atelier-export.json
60
+ atelier contract check
61
+ npm run contract:compat
62
+ ```
63
+
64
+ ## 3. Collaboration as governed disclosure
65
+
66
+ Repositories have roles. A private-domain repo holds one person's source
67
+ material; a shared-project repo holds what a team may read. The boundary
68
+ guard enforces the difference and fails closed: private or sensitive
69
+ source placed in a shared repo blocks, protected local files staged for
70
+ commit block, and private-domain material appearing in shared work without
71
+ a recorded disclosure blocks.
72
+
73
+ Crossing the boundary is an event with a record: `atelier promote` writes a
74
+ `git.promote` disclosure event, reviewable like any other commit.
75
+ Disclosure is a commit, not an accident.
76
+
77
+ Change to the machinery itself is governed the same way. The workspace
78
+ lockfile records exactly which package version, contracts, extension
79
+ packs, and migrations a workspace runs; upgrades are branch-based,
80
+ review-first, refuse dirty repos, and never silently overwrite authored
81
+ content.
82
+
83
+ ```bash
84
+ atelier boundary check --project ./atelier.project.json
85
+ atelier boundary check --staged --project ./atelier.project.json
86
+ atelier promote --source-repo <private-repo> --target-repo <shared-repo> --kg-id <node>
87
+ atelier lock check --project ./atelier.project.json
88
+ ```
89
+
90
+ ## 4. A local runtime for humans and for agents
91
+
92
+ The same governed workspace projects two ways.
93
+
94
+ For humans: a generated review surface, served by a sidecar that binds to
95
+ loopback only. The served pages carry a policy that authorizes no external
96
+ origin, and the only network client in the package refuses non-loopback
97
+ URLs.
98
+
99
+ For agents: session-bound context and capability envelopes that hand an
100
+ agent harness a governed view of the workspace — what exists, what it may
101
+ look at, what it may propose. Proposals are recorded as metadata; there
102
+ are no browser apply endpoints and no write authority to grant. Context
103
+ without authority. Neutral Claude and Codex skill wrappers ship in the
104
+ package, so a harness can do readiness review work against the workspace
105
+ without a single line of custom glue.
106
+
107
+ This is a deliberately narrow answer to a broad question. It does not make
108
+ an agent safe around private material in general; it makes one surface
109
+ checkable: within the Atelier sidecar, a harness receives session-bound
110
+ context and can record proposals, and there is no apply endpoint and no
111
+ write authority to grant. A bounded view, with writing made impossible —
112
+ a testable control, not a trust exercise.
113
+
114
+ ```bash
115
+ atelier dev --project ./atelier.project.json
116
+ atelier context flow --project ./atelier.project.json
117
+ ```
118
+
119
+ ## 5. A platform for your own tool
120
+
121
+ The Atelier is designed to be built on, under your name, including
122
+ commercially.
123
+
124
+ A distribution wraps the CLI under its own command, contributes a
125
+ validated extension pack — branded protocols, terms, templates — and
126
+ themes the projection, while the root contracts, guards, and conformance
127
+ stay canonical underneath. The repository carries a complete fictional
128
+ reference distribution (`examples/loomworks-studio`) small enough to read
129
+ in one sitting: a wrapper bin, a pack, a themed workspace.
130
+
131
+ Apache-2.0 makes commercial use a right, not a favor. The trademark policy
132
+ keeps the name ours and the code yours: every distribution carries
133
+ "powered by MNSTRY Atelier" attribution, and the check is a command, not a
134
+ request. The contribution terms are inbound-equals-outbound with a DCO
135
+ sign-off and no CLA — nobody, including MNSTRY, holds rights over a
136
+ contribution that the contributor does not also hold. Outside pull
137
+ requests are not open yet; `CONTRIBUTING.md` states the posture and the
138
+ terms that will govern them when they open.
139
+
140
+ ```bash
141
+ atelier distribution check --target ./my-distribution
142
+ atelier extension-pack validate --project ./atelier.project.json
143
+ ```
144
+
145
+ ## The first application
146
+
147
+ Methodology authoring is the Atelier's first application, not its ceiling.
148
+ MNSTRY built this to carry its own most demanding case: private
149
+ transformational work, where a leaked document is not a bug but a
150
+ betrayal. That case set the bar — fail-closed boundaries, no telemetry, no
151
+ send path, agents without authority, disclosure as a recorded event.
152
+
153
+ That case shaped the defaults. Other bodies of work — a research corpus, a
154
+ client practice, an editorial pipeline, anything that must outlive the
155
+ tools that touch it — reuse the mechanics, and each defines and validates
156
+ its own ontology, protocols, and boundary policies.
157
+
158
+ The claims behind this page are stated precisely, with their known limits,
159
+ in the README's "Claims you can check" — each with the command that proves
160
+ it. `docs/continuity.md` records the distribution commitments, including
161
+ the perpetual Apache-2.0 grant on every tagged release you receive.
package/docs/install.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Install
2
2
 
3
- Repo Boundary Guard V1 is a local-first pattern for Atelier workspaces. It
4
- keeps private domain source in user-owned Git repositories and keeps shared
5
- project work in shared project repositories.
3
+ This is the install guide for Atelier workspaces. The workspace pattern it
4
+ installs Repo Boundary Guard V1 keeps private domain source in
5
+ user-owned Git repositories and keeps shared project work in shared project
6
+ repositories.
6
7
 
7
8
  ## Posture
8
9
 
@@ -16,32 +17,36 @@ Git repository access is the hard read boundary for source files. Local
16
17
  `kg.audience` labels guide projection and review, but they do not hide files
17
18
  from anyone who can read the repository.
18
19
 
19
- Use `atelier` as the primary CLI command in copied workspaces. The older
20
- `mnstry-atelier` binary is a legacy alias for compatibility.
20
+ Two command forms ship, and each has a place. Inside an installed
21
+ workspace, use `atelier` it resolves from `node_modules/.bin`, so npm
22
+ scripts and workspace shells get the real binary. From outside a
23
+ workspace, always use the branded `npx mnstry-atelier` form: the unscoped
24
+ npm name `atelier` belongs to an unrelated third-party package, so a bare
25
+ `npx atelier` outside a workspace runs someone else's code.
21
26
 
22
- ## Install Shape
27
+ ## Install shape
23
28
 
24
29
  The registry is the distribution channel of record, as `docs/continuity.md`
25
30
  commits:
26
31
 
27
32
  ```bash
28
- npm install --save-dev @mnstry/atelier@0.2.0-alpha.1
33
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.3
29
34
  ```
30
35
 
31
36
  Installing from the matching Git tag resolves to the same reviewed commit:
32
37
 
33
38
  ```bash
34
- npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.1"
39
+ npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.3"
35
40
  ```
36
41
 
37
42
  Or over SSH:
38
43
 
39
44
  ```bash
40
- npm install --save-dev "git+ssh://git@github.com/MNSTRY/atelier.git#v0.2.0-alpha.1"
45
+ npm install --save-dev "git+ssh://git@github.com/MNSTRY/atelier.git#v0.2.0-alpha.3"
41
46
  ```
42
47
 
43
- Keep the `@mnstry/` scope. The unscoped name `atelier` on npm belongs to an
44
- unrelated third-party package, so a bare `npx atelier` runs someone else's code.
48
+ Keep the `@mnstry/` scope see the command-form note above for why the
49
+ unscoped name is dangerous.
45
50
 
46
51
  Do not install from `v0.2.0-alpha.0`. That tag is the **contract epoch
47
52
  marker** — `contracts/compat-baseline.json` pins the compatibility gate to it,
@@ -68,7 +73,7 @@ github.com/<org>/project-shared-library
68
73
  The repository names above are examples. Create and permission repositories in
69
74
  GitHub or your internal Git host before pointing Atelier at them.
70
75
 
71
- ## Tenant Workspace Example
76
+ ## Tenant workspace example
72
77
 
73
78
  Default placeholder shape:
74
79
 
@@ -82,7 +87,7 @@ values only inside the copied private workspace or through initializer flags.
82
87
  The example repositories are placeholders, not repositories created by this
83
88
  package release.
84
89
 
85
- ## Local Setup
90
+ ## Local setup
86
91
 
87
92
  Copy one of the starter templates:
88
93
 
@@ -128,7 +133,7 @@ atelier readiness export --dry-run --project ./atelier.project.json
128
133
 
129
134
  These commands read local files and write generated local outputs only.
130
135
 
131
- ## Upgrade Path
136
+ ## Upgrade path
132
137
 
133
138
  The starter commands create `atelier.lock.json` inside the copied workspace so
134
139
  the installed Atelier package source, version, contracts, and migration state
package/docs/upgrade.md CHANGED
@@ -5,6 +5,29 @@ workspace between Atelier package releases. The flow is local-only: it does not
5
5
  provision repositories, contact a Git host, mutate the MNSTRY runtime, or write
6
6
  through a browser view.
7
7
 
8
+ ## Upgrading to 0.2.0-alpha.3
9
+
10
+ No contract changes and no runtime behaviour changes: documents valid against
11
+ `0.2.0-alpha.0` remain valid, and `npm run contract:compat` is clean against
12
+ the same epoch baseline. Upgrading is a dependency bump.
13
+
14
+ One thing worth knowing, because it changes what you type. Outside an
15
+ installed workspace, use `npx mnstry-atelier` rather than `npx atelier`: the
16
+ unscoped npm name `atelier` belongs to an unrelated third-party package, so a
17
+ bare `npx atelier` there runs someone else's code. Inside an installed
18
+ workspace both names resolve from `node_modules/.bin`, so npm scripts and
19
+ workspace shells need no change.
20
+
21
+ ## Upgrading to 0.2.0-alpha.2
22
+
23
+ No contract changes and no runtime behaviour changes: documents valid against
24
+ `0.2.0-alpha.0` remain valid, and `npm run contract:compat` is clean against
25
+ the same epoch baseline. Upgrading is a dependency bump.
26
+
27
+ Note on version numbering: `0.2.0` was published in error and unpublished the
28
+ same day. If a lockfile anywhere pins `0.2.0`, repin it to `0.2.0-alpha.2` —
29
+ that number is permanently retired on npm and will not resolve.
30
+
8
31
  ## Upgrading to 0.2.0-alpha.1
9
32
 
10
33
  No contract changes and no authored-content changes: documents valid against
@@ -12,7 +35,7 @@ No contract changes and no authored-content changes: documents valid against
12
35
  the same epoch baseline. Upgrading is a dependency bump.
13
36
 
14
37
  Two things worth knowing. The package is now on the npm registry, so the
15
- install command changes from a Git reference to `@mnstry/atelier@0.2.0-alpha.1`
38
+ install command changes from a Git reference to `@mnstry/atelier@0.2.0-alpha.2`
16
39
  — keep the `@mnstry/` scope, since the unscoped name belongs to an unrelated
17
40
  package. And a local sidecar that previously exited on a malformed request now
18
41
  answers it, so anything that supervised `atelier dev` through restarts can stop
@@ -62,16 +85,16 @@ For registry installs, pin the exact version and record the resolved version
62
85
  in the lockfile:
63
86
 
64
87
  ```bash
65
- npm install --save-dev @mnstry/atelier@0.2.0-alpha.1
66
- npx atelier lock write --project ./atelier.project.json
88
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.3
89
+ npx mnstry-atelier lock write --project ./atelier.project.json
67
90
  ```
68
91
 
69
92
  For Git installs, pin the release tag rather than a branch, so the lock file
70
93
  records exactly what was reviewed:
71
94
 
72
95
  ```bash
73
- npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.1"
74
- npx atelier lock write --project ./atelier.project.json
96
+ npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.3"
97
+ npx mnstry-atelier lock write --project ./atelier.project.json
75
98
  ```
76
99
 
77
100
  Before accepting upstream changes, run the non-mutating upgrade planner:
package/package.json CHANGED
@@ -1,8 +1,22 @@
1
1
  {
2
2
  "name": "@mnstry/atelier",
3
- "version": "0.2.0-alpha.1",
3
+ "version": "0.2.0-alpha.3",
4
4
  "private": false,
5
- "description": "Local-first MNSTRY Atelier workspace for agentic authoring, graph projection, and dry-run runtime readiness.",
5
+ "description": "Local CLI that compiles a Git repository into a validated knowledge graph — front-matter ontology, fail-closed audience boundaries, offline contract conformance. No telemetry, no service, no account.",
6
+ "keywords": [
7
+ "knowledge-graph",
8
+ "ontology",
9
+ "front-matter",
10
+ "local-first",
11
+ "json-schema",
12
+ "validation",
13
+ "provenance",
14
+ "governance",
15
+ "markdown",
16
+ "cli",
17
+ "agent-context",
18
+ "offline"
19
+ ],
6
20
  "type": "module",
7
21
  "bin": {
8
22
  "atelier": "bin/atelier.mjs",
@@ -65,7 +79,7 @@
65
79
  "type": "git",
66
80
  "url": "git+https://github.com/MNSTRY/atelier.git"
67
81
  },
68
- "homepage": "https://mnstry.org",
82
+ "homepage": "https://docs.mnstry.ai/public-product/developers/atelier",
69
83
  "bugs": {
70
84
  "url": "https://github.com/MNSTRY/atelier/issues"
71
85
  },