@mnstry/atelier 0.2.0-alpha.2 → 0.2.0-alpha.4

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,64 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0-alpha.4
4
+
5
+ Presentation release. No contract changes and no runtime behaviour changes:
6
+ documents valid against `0.2.0-alpha.0` remain valid.
7
+
8
+ - **The README now explains the system before the package.** It begins with
9
+ the repository as a durable substrate, then shows how ontology, enforcement,
10
+ governed projections, and a local runtime make the same work usable by
11
+ people, teams, agents, and tools.
12
+ - **The story progresses with the reader.** Stewards and collaborators get the
13
+ purpose and working loop first; builders get the graph and library surfaces;
14
+ technical readers retain the exact, test-gated claims, limitations, and
15
+ conformance boundaries.
16
+ - **Methodology authoring is presented as the proving ground, not the
17
+ category.** The package can support any file-based body of work whose
18
+ structure, relationships, disclosure, and readiness must remain portable and
19
+ enforceable.
20
+ - **Package and installation metadata match the new public presentation.** The
21
+ prerelease remains explicitly pinned, and the coordinated MNSTRY developer
22
+ documentation carries the same conceptual spine.
23
+ - **Bundled client instructions match the released CLI.** The Codex and Claude
24
+ open-Atelier skills use `atelier dev` and point registry users to the scoped,
25
+ collision-free install path.
26
+
27
+ ## 0.2.0-alpha.3
28
+
29
+ Documentation and metadata release. No contract changes and no runtime
30
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid.
31
+
32
+ - **The package's promises are now under a gate.** The checkable claims,
33
+ the will-not-do list, the conformance/admission separation, and the
34
+ audience/visibility rule live canonically in `docs/blocks/`, the README
35
+ embeds them verbatim between markers, and a test fails when they drift.
36
+ Promises converge by machinery; framing diverges by audience.
37
+ - **The README is restructured as a depth ramp** — category and trust
38
+ posture first, the working loop with its visible result second, the
39
+ checkable claims third, boundaries fourth, architecture fifth, reference
40
+ last — and a new "Where the Atelier stops" section states the boundary
41
+ with MNSTRY's managed platform as a literal table.
42
+ - **Overbroad claims are corrected.** "Trustworthy enough for whatever you
43
+ govern with it" is gone from the README and `docs/design.md` — controls
44
+ shaped for one demanding case do not establish adequacy everywhere; the
45
+ agent-runtime passage now states the narrow, testable control rather
46
+ than a general safety claim; "does not contact external services" now
47
+ carries its documented `gh` exception inline; contract and test counts
48
+ are stated by command, not by number; the contributions text now matches
49
+ `CONTRIBUTING.md`'s outside-PRs-not-open-yet posture; and
50
+ `docs/continuity.md` speaks of npm publication in the present tense.
51
+ - **`npx` examples use the collision-free `mnstry-atelier` form.** The
52
+ unscoped npm name `atelier` belongs to an unrelated third-party package,
53
+ so a bare `npx atelier` outside an installed workspace runs someone
54
+ else's code. Every `npx` example on every surface now uses the branded
55
+ binary, `atelier` remains the documented command inside installed
56
+ workspaces, and `docs/install.md` no longer calls `mnstry-atelier` a
57
+ legacy alias — it is the safe form.
58
+ - **npm metadata describes the package from the outside.** A concrete
59
+ description, registry keywords, and a homepage that resolves to the
60
+ published documentation page.
61
+
3
62
  ## 0.2.0-alpha.2
4
63
 
5
64
  Documentation and release-lane release. No contract changes and no runtime
package/README.md CHANGED
@@ -1,170 +1,234 @@
1
1
  # MNSTRY Atelier
2
2
 
3
- **Author your methodology once, in files you own, in a form machines can
4
- validate and runtimes can honor.**
5
-
6
- A methodology that creates real transformation cannot scale through static
7
- content, generic AI, or manual labor. Scaling it means giving it a form
8
- machines can carry and most tools do that by taking the work into their
9
- platform, their format, their database, where it stops being fully yours.
10
- The Atelier answers the same problem the other way around.
11
-
12
- The Atelier is a local-first toolkit for authoring a body of work as
13
- structured documents machines can validate plain files, in your own Git
14
- repositories, on your machine, under your control. You author primitives,
15
- sources, and offers; the Atelier builds a knowledge graph over them,
16
- projects a local review surface, checks readiness against published
17
- protocols, and validates exports against public contracts. There is no
18
- telemetry and no send path, and the commands that prove the package's
19
- promises are further down this page.
20
-
21
- It is built for methodology holders and the studios that serve them. The
22
- MNSTRY runtime — the governed platform for identity, consent, visibility,
23
- provisioning, bookings, commerce, sessions, audit, and client-grade
24
- sharing is a separate, optional destination. The Atelier is the front
25
- porch, not the house: everything here works without ever talking to MNSTRY.
3
+ **Turn a repository into a living, governed system.**
4
+
5
+ Important bodies of work often begin as files: methods, research, programs,
6
+ policies, editorial systems, product knowledge, or something no existing app
7
+ quite understands. A folder can hold that work, but it cannot explain what each
8
+ file is, how the pieces relate, who may see them, or whether the whole is ready
9
+ to use.
10
+
11
+ The Atelier adds that missing layer without taking the work away from you. It
12
+ turns a repository into an ontology-governed knowledge graph, gives rules the
13
+ power to refuse invalid states, and produces bounded views for people, teams,
14
+ agents, and tools. Git remains the source of record. Your files remain readable.
15
+ The runtime remains local.
16
+
17
+ That makes the same repository useful at several levels:
18
+
19
+ - A **steward** can shape a coherent system without surrendering it to a
20
+ proprietary database.
21
+ - A **team** can collaborate through explicit roles, handoffs, and disclosure
22
+ boundaries.
23
+ - A **person or agent** can receive the right context and capabilities for the
24
+ task, without receiving the entire repository.
25
+ - A **toolmaker** can build a specialized or commercial product on the graph,
26
+ contracts, validators, and projections instead of inventing a new source of
27
+ truth.
28
+
29
+ MNSTRY built the Atelier for a demanding case: a living body of methodology
30
+ that must stay legible, internally connected, privacy-aware, and usable across
31
+ many interfaces. Methodology authoring is one application of the system, not
32
+ its definition or ceiling.
33
+
34
+ ## From files to a working system
35
+
36
+ ```text
37
+ files you own
38
+ ↓ declare identity, type, audience, and relationships
39
+ ontology-governed graph
40
+ ↓ apply contracts, policies, and readiness rules
41
+ governed projections
42
+ ├── local review
43
+ ├── bounded agent context
44
+ ├── collaboration and disclosure
45
+ └── specialized tools and commercial distributions
46
+ ```
47
+
48
+ You can see the complete loop in a disposable sample workspace:
49
+
50
+ ```bash
51
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.4
52
+ npx mnstry-atelier init --fixture=sample-workspace --target ./sample
53
+ npx mnstry-atelier graph --project ./sample/atelier.project.json
54
+ npx mnstry-atelier project --project ./sample/atelier.project.json
55
+ npx mnstry-atelier dev --project ./sample/atelier.project.json
56
+ ```
57
+
58
+ Open the loopback URL printed by `dev`. The browser page is generated from
59
+ the same graph and rules that the CLI and library expose.
60
+
61
+ `npx` here runs the binary installed in `./node_modules/.bin`, so install the
62
+ scoped package first. Keep the `@mnstry/` scope: the unscoped npm package
63
+ `atelier` is unrelated. The branded `npx mnstry-atelier` command avoids that
64
+ collision; inside an installed workspace, the shorter `atelier` command is
65
+ also available.
26
66
 
27
67
  ## What authoring looks like
28
68
 
29
- A source document is a plain file with a small structured header. This is a
30
- complete, working example — fictional, like every fixture in this package:
69
+ Enrollment is deliberately small. A source file declares its identity, type,
70
+ audience, and relationships in front matter:
31
71
 
32
72
  ```markdown
33
73
  ---
34
- title: "Grounding practice"
35
- summary: "The opening practice every offer in this catalog builds on."
74
+ title: Breath practice
75
+ summary: A simple preparation practice.
76
+ tags: []
36
77
  kg:
37
- id: "my-studio:grounding-practice"
38
- type: "document"
39
- status: "active"
40
- audience: "team"
78
+ id: example:breath-practice
79
+ type: document
80
+ status: active
81
+ audience: public
41
82
  relations:
42
- supports: "my-studio:flagship-offer"
83
+ belongs_to: example:flagship-program
43
84
  ---
44
85
 
45
- # Grounding practice
86
+ # Breath practice
46
87
 
47
- The practice itself, in your words, in your file, in your repository.
88
+ Let the exhale become slightly longer than the inhale.
48
89
  ```
49
90
 
50
- That header is the entire enrollment. The graph builder reads front matter
51
- like this, and `.kg.json` sidecars for files that are not Markdown — JSON,
52
- YAML, CSV, media, anything without ever parsing the foreign format. From
53
- there the working loop is four commands:
91
+ The file is still Markdown. Git still records its history. The declarations
92
+ let the Atelier resolve one canonical identity, validate its declared shape,
93
+ connect it to neighboring work, and decide where it may
94
+ travel.
54
95
 
55
- ```bash
56
- atelier graph --project ./atelier.project.json # build the knowledge graph
57
- atelier project --project ./atelier.project.json # generate the local review surface
58
- atelier readiness --project ./atelier.project.json # check against published protocols
59
- atelier dry-run ./atelier-export.json # validate against the public contracts
60
- ```
96
+ When a source format cannot carry front matter, a sidecar can provide the same
97
+ declarations. The graph does not require every source to become Markdown.
61
98
 
62
- Each one reads local files and writes local files. The `audience` field in
63
- the header is the load-bearing word: it declares who a source is written
64
- for (`public`, `team`, `operator`, `staff`, `private`, `sensitive`), and
65
- the machinery downstream refuses to let material travel further than its
66
- audience allows. A public export that references a non-public source is
67
- rejected — that check is fixture-pinned and mutation-tested.
68
-
69
- ## The system
70
-
71
- Git is the database. The ontology is the schema. The validators are the
72
- constraints. The runtime is local. The design is five movements, each
73
- grounded in shipped machinery — [docs/design.md](docs/design.md) states
74
- them in full, ending each one with the command that proves it:
75
-
76
- **A repository with an ontology.** Front matter — or a `.kg.json` sidecar
77
- beside any format the kit never parses — declares a file's identity, type,
78
- audience, and relations. The graph builder compiles the repository into a
79
- deterministic knowledge graph. No import step, no database: the repository
80
- is the store, and Git is the history, the review process, and the read
81
- boundary.
82
-
83
- **Rules that refuse.** Eighteen contracts under a compatibility epoch
84
- define the vocabulary; fail-closed validators enforce it. A public export
85
- that references a non-public source is rejected — fixture-pinned and
86
- mutation-tested — and dry-run reports are deterministic: `accepted`,
87
- `importable`, `worstOperationStatus`. Twelve bundled claim-first readiness
88
- protocols check the work against published criteria and produce proposed
89
- claims, never runtime mutations.
90
-
91
- **Collaboration as governed disclosure.** Private-domain and shared-project
92
- repos have enforced roles: the boundary guard fails closed when private or
93
- sensitive material lands in shared space, when protected local files are
94
- staged, or when private-domain material appears in shared work without a
95
- recorded `git.promote` disclosure event. Disclosure is a commit, not an
96
- accident. Change to the machinery itself is governed the same way — the
97
- lockfile records exactly what a workspace runs, and upgrades are
98
- branch-based, review-first, and refuse dirty repos.
99
-
100
- **A local runtime for humans and for agents.** The workspace projects two
101
- ways: a generated review surface over a loopback-only sidecar for humans,
102
- and session-bound context and capability envelopes for agent harnesses — a
103
- governed view with proposals recorded as metadata and no apply endpoints.
104
- Context without authority. Neutral Claude and Codex skill wrappers ship in
105
- the package.
106
-
107
- **A platform for your own tool.** A distribution wraps the CLI under your
108
- own name, contributes a validated extension pack, and themes the
109
- projection, while the root contracts, guards, and conformance stay
110
- canonical underneath — commercially if you want. See "Build your own tool
111
- on it" below.
112
-
113
- Methodology authoring is the first application, not the ceiling. MNSTRY
114
- built the Atelier to carry its own most demanding case — private
115
- transformational work, where a leaked document is a betrayal — and a
116
- system trustworthy enough for that is trustworthy enough for whatever you
117
- govern with it.
118
-
119
- ## Quickstart
99
+ From there, one source can inform a human-readable review page, a session-bound
100
+ context envelope for an agent, or structured input to another tool. These are
101
+ interfaces to the same governed repository, not copies that quietly drift apart.
120
102
 
121
- ```bash
122
- npm install --save-dev @mnstry/atelier@0.2.0-alpha.2
123
-
124
- npx atelier init --fixture=sample-workspace --target ./sample
125
- npx atelier graph --project ./sample/atelier.project.json
126
- npx atelier project --project ./sample/atelier.project.json
127
- npx atelier readiness --project ./sample/atelier.project.json
128
- MNSTRY_ATELIER_ACTOR=owner npx atelier boundary check --project ./sample/atelier.project.json
129
- npx atelier dev --project ./sample/atelier.project.json
130
- ```
103
+ ## Rules travel with the work
131
104
 
132
- `npx` here runs the binary already installed in `./node_modules/.bin`. Always
133
- install first, and keep the `@mnstry/` scope the unscoped name `atelier`
134
- belongs to an unrelated third-party package.
105
+ The ontology is not only a vocabulary. It is an enforcement surface. Contracts
106
+ define valid shapes, policies govern movement and disclosure, readiness rules
107
+ make completion testable, and validators fail closed when a boundary cannot be
108
+ proven.
135
109
 
136
- `init` scaffolds a fictional sample workspace, `graph` builds the knowledge
137
- graph from front matter and sidecars, `project` generates the local review
138
- surface, `dev` serves it on loopback only. From there:
110
+ <!-- atelier:block:audience-visibility:start -->
111
+ The `audience` field in the header is the load-bearing word. It declares who
112
+ a source is written for `public`, `team`, `operator`, `staff`, `private`,
113
+ or `sensitive` — and the machinery downstream refuses to let material travel
114
+ further than its audience allows. Runtime and export `visibility` is a
115
+ separate vocabulary (`private`, `shared`, `platform`, `public`) describing
116
+ runtime exposure, and the validators reject every crossing between the two.
117
+ Above all: a public export that references a source whose audience is not
118
+ public is refused. That check is fixture-pinned and mutation-tested —
119
+ deleting its enforcement fails tests, not documentation.
120
+ <!-- atelier:block:audience-visibility:end -->
139
121
 
140
- ```js
141
- import { validateAtelierExportDryRun } from '@mnstry/atelier'
122
+ That distinction matters whenever several interfaces share one body of work.
123
+ A public site, an internal review tool, and an agent session can all use the
124
+ same graph while receiving different, mechanically checked projections.
125
+
126
+ ## The system beneath it
127
+
128
+ ### 1. The repository becomes an ontology
129
+
130
+ The project manifest tells the Atelier where sources live and which boundaries
131
+ govern the workspace. Source declarations establish typed nodes and relationships. The
132
+ graph command resolves those declarations into a deterministic index that can
133
+ be queried, validated, rendered, and extended.
134
+
135
+ This is what makes a collection of files behave like a system while remaining
136
+ portable. The repository contains both the knowledge and the terms needed to
137
+ interpret it.
138
+
139
+ ### 2. Rules can refuse
140
+
141
+ A useful rule must do more than advise. The Atelier checks schema validity,
142
+ relationship integrity, audience boundaries, readiness protocols, and export
143
+ contracts. Invalid or ambiguous states produce a failing command instead of a
144
+ best-effort publication.
145
+
146
+ Because the checks are local and versioned with the work, the repository can
147
+ prove its state in CI, on a laptop, or inside a larger toolchain.
148
+
149
+ ### 3. Collaboration becomes governed disclosure
150
+
151
+ Collaboration is not equivalent to giving every participant every file. The
152
+ Atelier models audience, runtime visibility, roles, and capability envelopes
153
+ as separate concerns. A projection can therefore disclose the material needed
154
+ for a task while withholding material outside that boundary.
142
155
 
143
- const report = validateAtelierExportDryRun(exportDocument)
144
- console.log(report.accepted, report.importable, report.errors)
156
+ This creates a shared language for human handoffs, agent sessions, reviews,
157
+ and eventual managed delivery. The open package validates the declared
158
+ boundary; it does not silently make access decisions on your behalf.
159
+
160
+ ### 4. The local runtime serves people and agents
161
+
162
+ `atelier dev` exposes a loopback-only review surface backed by the compiled
163
+ graph. The library exposes the same project, graph, validation, and projection
164
+ primitives to code.
165
+
166
+ The shipped agent model is intentionally bounded: the Atelier can assemble
167
+ session context, capability envelopes, and proposed changes, but it does not
168
+ apply those proposals or grant direct write access. It is a local context and
169
+ control layer that another interface can build on, not an autonomous editor.
170
+
171
+ ### 5. The repository can power another product
172
+
173
+ The CLI is one interface. The package is also a library, and its contracts are
174
+ published artifacts. A tool can use the repository as its durable source of
175
+ truth, compile the graph, select an audience-safe projection, and present a
176
+ purpose-built experience without reimplementing the governance model.
177
+
178
+ That tool may be private, open source, or commercial. Apache-2.0 permits all
179
+ three. Conformance to the public Atelier contracts does not require a MNSTRY
180
+ account or service.
181
+
182
+ Read [the design document](./docs/design.md) for the five-part architecture and
183
+ [the ontology](./docs/ontology.md) and
184
+ [contract-stability policy](./docs/contract-stability.md) for the stable
185
+ boundaries.
186
+
187
+ ## Build your own tool on it
188
+
189
+ Use the CLI when a shell command or CI gate is enough. Use the library when the
190
+ Atelier is the substrate beneath a custom interface:
191
+
192
+ ```js
193
+ import {
194
+ buildGraph,
195
+ resolveProjectConfig,
196
+ } from '@mnstry/atelier'
197
+
198
+ const project = resolveProjectConfig({
199
+ cwd: process.cwd(),
200
+ argv: ['--project=./atelier.project.json'],
201
+ })
202
+ const graph = buildGraph(project)
203
+
204
+ if (graph.errors.length > 0) throw new Error(graph.errors.join('\n'))
205
+ console.log(graph.nodes)
145
206
  ```
146
207
 
147
- Real projects start from the `private-domain`, `shared-project`, or
148
- `distribution` templates instead of the sample fixture.
208
+ The package exports change over the alpha series, so pin the exact prerelease
209
+ version and treat the package export map and shipped source modules as the
210
+ executable API reference. [Distribution contracts](./docs/distributions.md) explain
211
+ how a governed subset can be packaged for another surface without widening its
212
+ audience.
213
+
214
+ ## Where the Atelier stops
149
215
 
150
- ## Status
216
+ The open package owns repository-side structure and proof. A managed runtime
217
+ may consume a conformant export, but that is a separate system with a separate
218
+ trust boundary.
151
219
 
152
- - Version: `0.2.0-alpha.2`
153
- - Stability: alpha contracts are under a compatibility gate from the
154
- `v0.2.0-alpha.0` epoch tag onward; everything else may still move
155
- - Runtime: Node.js `>=22.18.0 <23`
156
- - Dependencies: ajv, ajv-formats (JSON Schema validation); nothing else at
157
- runtime
158
- - Distribution: `@mnstry/atelier@0.2.0-alpha.2` on npm, published from the
159
- `v0.2.0-alpha.2` tag. The `v0.2.0-alpha.0` tag is the contract epoch
160
- marker, not an install target — it predates the current tree. The version
161
- `0.2.0` was published in error and unpublished the same day; that number
162
- is permanently retired on npm and will never be reused.
163
- - Telemetry: none. Network egress: none, with one documented exception —
164
- see "Nothing leaves your machine" below.
220
+ | The local Atelier does | A managed runtime may do |
221
+ | --- | --- |
222
+ | Parse sources and sidecars | Authenticate participants |
223
+ | Compile and query the graph | Resolve live authorization |
224
+ | Validate contracts and relationships | Persist runtime state |
225
+ | Enforce export audience boundaries | Deliver governed experiences |
226
+ | Generate local review and agent context | Record consent and operational events |
227
+ | Check offline conformance | Decide optional admission |
165
228
 
166
- ## Claims you can check
229
+ ### Claims you can verify
167
230
 
231
+ <!-- atelier:block:claims:start -->
168
232
  This package makes three promises. None of them asks for your trust — each
169
233
  one names the command that proves it.
170
234
 
@@ -210,132 +274,99 @@ atelier dry-run ./atelier-export.json
210
274
  `docs/continuity.md` records the distribution commitments behind these
211
275
  claims, including the perpetual Apache-2.0 grant on every tagged release you
212
276
  receive.
277
+ <!-- atelier:block:claims:end -->
213
278
 
214
- ## What this package will not do
279
+ ### What it will not do
215
280
 
281
+ <!-- atelier:block:will-not-do:start -->
216
282
  - It does not write to a MNSTRY runtime database.
217
283
  - It does not import, provision, publish, or send anything.
218
- - It does not contact external services.
284
+ - Except for the documented `gh` actor-resolution fallback, it initiates no
285
+ external network requests.
219
286
  - It does not execute model-assisted analysis or any model provider.
220
287
  - It does not include client project content.
221
288
 
222
289
  These limits are the design. An authoring tool for private material earns
223
290
  trust by what it refuses to be able to do.
291
+ <!-- atelier:block:will-not-do:end -->
224
292
 
225
- ## Your documents and the boundary
293
+ ### Conformance and admission
226
294
 
227
- What you author is yours. Documents live in your repositories, in formats you
228
- chose, readable without this tool. The one vocabulary the contracts enforce:
229
- `audience` describes local source readership (`public`, `team`, `operator`,
230
- `staff`, `private`, `sensitive`); runtime/export `visibility` describes
231
- runtime exposure and accepts only `private`, `shared`, `platform`, or
232
- `public`. A public export referencing a source whose audience is not public
233
- is refused — that check is fixture-pinned and mutation-tested.
295
+ <!-- atelier:block:conformance-admission:start -->
296
+ The Atelier export format is MNSTRY's format, offered openly.
234
297
 
235
- ## Build your own tool on it
298
+ **Anyone can check a document against the published contracts, forever,
299
+ offline.** The contracts, fixtures, and dry-run validator all ship in the
300
+ package, so conformance needs no account, no network, and no MNSTRY
301
+ involvement.
236
302
 
237
- The Atelier is designed to be built on, under your name — including
238
- commercially. A distribution wraps the CLI under its own command,
239
- contributes a validated extension pack (branded protocols, terms,
240
- templates), and themes the projection, while the root contracts, guards,
241
- and conformance stay canonical underneath. Apache-2.0 makes commercial use
242
- a right, not a favor; the trademark policy keeps the name ours and the
243
- code yours. Start by copying the worked example:
244
-
245
- - `examples/loomworks-studio` — a complete fictional distribution: branded
246
- bin, extension pack, themed workspace template. It lives in this
247
- repository and deliberately never ships in the npm tarball.
248
- - `docs/distributions.md` — the contract a distribution must honor.
249
- - `TRADEMARKS.md` — naming rules; Apache-2.0 grants code rights, not brand
250
- rights. Every distribution carries "powered by MNSTRY Atelier" attribution,
251
- checked by `atelier distribution check`.
252
-
253
- ## The MNSTRY relationship
254
-
255
- The Atelier export format is MNSTRY's format, offered openly. Conformance —
256
- is this document valid against the published contracts? — is public,
257
- offline, and free, forever. Admission — will MNSTRY's governed runtime
258
- accept it for delivery to clients? — is a separate, opt-in step: a signed
259
- attestation issued by MNSTRY against criteria this package publishes
260
- (`docs/attestation.md`). The criteria are public; the checker is private;
261
- the rejection message is part of the contract. You can build on the Atelier
262
- without ever talking to MNSTRY, and a document MNSTRY declines can still be
263
- fully conformant.
264
-
265
- ## Feedback and announcements
266
-
267
- Both channels respect consent by construction. `atelier feedback` writes a
268
- scanned, redaction-checked report to a local file — there is no send path;
269
- you choose whether and where to share it. `announcements list` verifies
270
- project-shipped announcements against a committed public key — pull-only,
271
- nothing phones home to ask.
272
-
273
- ## Running the test suite from a fresh clone
274
-
275
- `npm test` includes one fail-closed check that expects a private denylist
276
- file (`release-denylist.local.json`, gitignored) used by MNSTRY's release
277
- lane. On a fresh clone that file is absent, so the check **fails** — it never
278
- passes silently on missing protection. Expect this, after `npm install`:
303
+ Admission is a narrower, opt-in decision: whether a MNSTRY governed runtime
304
+ accepts a document for delivery to the people it serves. That is what
305
+ admission buys — delivery through a runtime that enforces consent and
306
+ visibility at serve time — and it takes the form of a signed MNSTRY
307
+ attestation against criteria this package publishes (`docs/attestation.md`).
308
+ The criteria are public, the checker is private, and the rejection message
309
+ is part of the contract. You can build on the Atelier without ever talking
310
+ to MNSTRY, and a document MNSTRY declines can still be fully conformant.
311
+ <!-- atelier:block:conformance-admission:end -->
279
312
 
280
- ```bash
281
- npm install
282
- npm test # 510 tests: 509 pass, 1 fail — the denylist check, by design
283
- ```
313
+ ## Install and go deeper
284
314
 
285
- To acknowledge the missing file and run the rest, which turns that failure
286
- into a recorded skip:
315
+ Node.js `>=22.18.0 <23` is required. Pin the prerelease while the package
316
+ remains in alpha:
287
317
 
288
318
  ```bash
289
- ATELIER_ALLOW_MISSING_DENYLIST=1 npm test # 509 pass, 0 fail, 1 skipped
319
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.4
290
320
  ```
291
321
 
292
- ## Command reference
293
-
294
- ```bash
295
- atelier dry-run ./atelier-export.json
296
- atelier contract check
297
- atelier graph --project ./atelier.project.json
298
- atelier project --project ./atelier.project.json
299
- atelier readiness --project ./atelier.project.json
300
- atelier readiness protocols
301
- atelier readiness journey --project ./atelier.project.json
302
- atelier readiness run mnstry.readiness:identity-map --project ./atelier.project.json
303
- atelier readiness packet --project ./atelier.project.json
304
- atelier readiness export --dry-run --project ./atelier.project.json
305
- atelier boundary check --project ./atelier.project.json
306
- atelier boundary check --staged --project ./atelier.project.json
307
- atelier boundary install-hooks --project ./atelier.project.json
308
- atelier promote --source-repo tenant-private-domain --target-repo project-alpha --kg-id tenant-private-domain:seed
309
- atelier lock write --project ./atelier.project.json
310
- atelier lock check --project ./atelier.project.json
311
- atelier upgrade --dry-run --project ./atelier.project.json
312
- atelier upgrade --apply --project ./atelier.project.json --branch codex/atelier-upgrade-YYYYMMDD
313
- atelier extension-pack validate --project ./atelier.project.json
314
- atelier attestation verify ./attestation.json
315
- atelier feedback create --message "what happened"
316
- atelier announcements list
317
- atelier distribution check --target ./my-distribution
318
- atelier dev --project ./atelier.project.json
322
+ Then choose the path that matches what you are building:
323
+
324
+ - [Installation and first run](./docs/install.md)
325
+ - [Design and architecture](./docs/design.md)
326
+ - [Knowledge graph and source model](./docs/knowledge-graph.md)
327
+ - [Local runtime and agent boundary](./docs/atelier-runtime.md)
328
+ - [Distribution contracts](./docs/distributions.md)
329
+ - [Conformance and attestation](./docs/attestation.md)
330
+ - [Continuity commitments](./docs/continuity.md)
331
+ - [Upgrade notes](./docs/upgrade.md)
332
+
333
+ ## Status and command reference
334
+
335
+ Current package: `@mnstry/atelier@0.2.0-alpha.4`.
336
+
337
+ The alpha package is usable and contract-tested, but its library API may still
338
+ change before a stable release. Pin the exact version in production toolchains.
339
+
340
+ ```text
341
+ atelier init
342
+ atelier adopt
343
+ atelier setup
344
+ atelier graph
345
+ atelier project
346
+ atelier build
347
+ atelier dev
348
+ atelier generated check
349
+ atelier config check
350
+ atelier extension-pack
351
+ atelier distribution check
352
+ atelier egress check
353
+ atelier boundary
354
+ atelier readiness
355
+ atelier export
356
+ atelier context flow
357
+ atelier support bundle
358
+ atelier feedback
359
+ atelier announcements
360
+ atelier attestation
361
+ atelier promote
362
+ atelier upgrade
363
+ atelier lock
319
364
  ```
320
365
 
321
- `upgrade --apply` creates or switches to the requested branch, refuses dirty
322
- authored repos, preserves unrelated user hooks through composed hook files,
323
- runs only registered migrations, refreshes generated projections, and leaves
324
- a Git commit for review. It will not weaken boundary policy, introduce
325
- telemetry, enable non-localhost egress, run model-assisted analysis, or write/import/apply
326
- runtime state.
327
-
328
- ## Sample fixtures
329
-
330
- Fixtures in this package are fictional and generic. Project-specific adapter
331
- fixtures belong in their project repositories, not in the published Atelier
332
- package.
366
+ Run `atelier --help` or `atelier <command> --help` for the current flags. The
367
+ full command behavior is also covered by the package's executable tests.
333
368
 
334
- ## License and contributing
369
+ ## Contributing and license
335
370
 
336
- Apache-2.0. See `LICENSE`, `NOTICE` (attribution obligations that survive
337
- forks), `TRADEMARKS.md` (naming), and `docs/continuity.md` (distribution
338
- continuity commitments). Contributions are accepted under inbound-equals-
339
- outbound Apache-2.0 with a DCO sign-off — `CONTRIBUTING.md` is the working
340
- agreement, including how to contribute without exposing client material or
341
- your own private methodology.
371
+ Contributions are welcome through [the contribution guide](./CONTRIBUTING.md).
372
+ MNSTRY Atelier is released under [Apache-2.0](./LICENSE).
@@ -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 CHANGED
@@ -35,9 +35,10 @@ atelier graph --check --project ./atelier.project.json
35
35
 
36
36
  The ontology is not documentation. It is the enforcement mechanism.
37
37
 
38
- Eighteen JSON Schema contracts define the vocabulary — exports, project
39
- configuration, boundary policy, sidecars, locks, migrations, readiness,
40
- attestation — and fail-closed validators enforce it. The load-bearing
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
41
42
  separation is `audience` versus `visibility`: audience is local readership
42
43
  (`public`, `team`, `operator`, `staff`, `private`, `sensitive`), visibility
43
44
  is runtime authority (`private`, `shared`, `platform`, `public`), and the
@@ -103,9 +104,12 @@ without authority. Neutral Claude and Codex skill wrappers ship in the
103
104
  package, so a harness can do readiness review work against the workspace
104
105
  without a single line of custom glue.
105
106
 
106
- This is the honest answer to the question every team has right now: how do
107
- you put an agent inside private material safely? Not by trusting the
108
- agent by projecting a bounded view and making writing impossible.
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.
109
113
 
110
114
  ```bash
111
115
  atelier dev --project ./atelier.project.json
@@ -127,9 +131,11 @@ in one sitting: a wrapper bin, a pack, a themed workspace.
127
131
  Apache-2.0 makes commercial use a right, not a favor. The trademark policy
128
132
  keeps the name ours and the code yours: every distribution carries
129
133
  "powered by MNSTRY Atelier" attribution, and the check is a command, not a
130
- request. Contributions run inbound-equals-outbound with a DCO sign-off and
131
- no CLA — nobody, including MNSTRY, holds rights over your contribution
132
- that you do not also hold.
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.
133
139
 
134
140
  ```bash
135
141
  atelier distribution check --target ./my-distribution
@@ -144,9 +150,10 @@ transformational work, where a leaked document is not a bug but a
144
150
  betrayal. That case set the bar — fail-closed boundaries, no telemetry, no
145
151
  send path, agents without authority, disclosure as a recorded event.
146
152
 
147
- A system trustworthy enough for that is trustworthy enough for whatever
148
- you govern with it: a research corpus, a client practice, an editorial
149
- pipeline, a body of work that must outlive the tools that touch it.
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.
150
157
 
151
158
  The claims behind this page are stated precisely, with their known limits,
152
159
  in the README's "Claims you can check" — each with the command that proves
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.2
33
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.4
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.2"
39
+ npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.4"
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.2"
45
+ npm install --save-dev "git+ssh://git@github.com/MNSTRY/atelier.git#v0.2.0-alpha.4"
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,28 @@ 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.4
9
+
10
+ This is a presentation release. There are no contract changes and no runtime
11
+ behaviour changes: documents valid against `0.2.0-alpha.0` remain valid, and
12
+ `npm run contract:compat` is clean against the same epoch baseline. The README,
13
+ package metadata, and public documentation now describe the Atelier as a
14
+ repository substrate for people, agents, teams, and tools. Upgrading is a
15
+ dependency bump.
16
+
17
+ ## Upgrading to 0.2.0-alpha.3
18
+
19
+ No contract changes and no runtime behaviour changes: documents valid against
20
+ `0.2.0-alpha.0` remain valid, and `npm run contract:compat` is clean against
21
+ the same epoch baseline. Upgrading is a dependency bump.
22
+
23
+ One thing worth knowing, because it changes what you type. Outside an
24
+ installed workspace, use `npx mnstry-atelier` rather than `npx atelier`: the
25
+ unscoped npm name `atelier` belongs to an unrelated third-party package, so a
26
+ bare `npx atelier` there runs someone else's code. Inside an installed
27
+ workspace both names resolve from `node_modules/.bin`, so npm scripts and
28
+ workspace shells need no change.
29
+
8
30
  ## Upgrading to 0.2.0-alpha.2
9
31
 
10
32
  No contract changes and no runtime behaviour changes: documents valid against
@@ -72,16 +94,16 @@ For registry installs, pin the exact version and record the resolved version
72
94
  in the lockfile:
73
95
 
74
96
  ```bash
75
- npm install --save-dev @mnstry/atelier@0.2.0-alpha.2
76
- npx atelier lock write --project ./atelier.project.json
97
+ npm install --save-dev @mnstry/atelier@0.2.0-alpha.4
98
+ npx mnstry-atelier lock write --project ./atelier.project.json
77
99
  ```
78
100
 
79
101
  For Git installs, pin the release tag rather than a branch, so the lock file
80
102
  records exactly what was reviewed:
81
103
 
82
104
  ```bash
83
- npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.2"
84
- npx atelier lock write --project ./atelier.project.json
105
+ npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.4"
106
+ npx mnstry-atelier lock write --project ./atelier.project.json
85
107
  ```
86
108
 
87
109
  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.2",
3
+ "version": "0.2.0-alpha.4",
4
4
  "private": false,
5
- "description": "Local-first MNSTRY Atelier workspace for agentic authoring, graph projection, and dry-run runtime readiness.",
5
+ "description": "Local toolkit that turns a Git repository into an ontology-governed knowledge graph, enforcement layer, and runtime for people, agents, and tools. No telemetry, service, or 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
  },
@@ -25,14 +25,15 @@ name (`atelier`) and use the port the harness returns. The equivalent manual
25
25
  command is:
26
26
 
27
27
  ```
28
- ./node_modules/.bin/atelier server
28
+ ./node_modules/.bin/atelier dev
29
29
  ```
30
30
 
31
- Use the local binary path. Do **not** run `npx atelier` this package is not
32
- yet published to npm, and the unscoped name `atelier` belongs to an unrelated
33
- third-party package that `npx` would download and execute.
31
+ Use the local binary path. Do **not** run unscoped `npx atelier`: the unscoped
32
+ name belongs to an unrelated third-party package that `npx` would download and
33
+ execute. From outside an installed workspace, install `@mnstry/atelier` first
34
+ and use the branded `npx mnstry-atelier` command.
34
35
 
35
- `atelier server` resolves its port as **argv > `PORT` env > 8137**, so a
36
+ `atelier dev` resolves its port as **argv > `PORT` env > 8137**, so a
36
37
  supervisor can hand it a free port without a config edit.
37
38
 
38
39
  ## Do not fight for the canonical port
@@ -25,14 +25,15 @@ name (`atelier`) and use the port the harness returns. The equivalent manual
25
25
  command is:
26
26
 
27
27
  ```
28
- ./node_modules/.bin/atelier server
28
+ ./node_modules/.bin/atelier dev
29
29
  ```
30
30
 
31
- Use the local binary path. Do **not** run `npx atelier` this package is not
32
- yet published to npm, and the unscoped name `atelier` belongs to an unrelated
33
- third-party package that `npx` would download and execute.
31
+ Use the local binary path. Do **not** run unscoped `npx atelier`: the unscoped
32
+ name belongs to an unrelated third-party package that `npx` would download and
33
+ execute. From outside an installed workspace, install `@mnstry/atelier` first
34
+ and use the branded `npx mnstry-atelier` command.
34
35
 
35
- `atelier server` resolves its port as **argv > `PORT` env > 8137**, so a
36
+ `atelier dev` resolves its port as **argv > `PORT` env > 8137**, so a
36
37
  supervisor can hand it a free port without a config edit.
37
38
 
38
39
  ## Do not fight for the canonical port