@mnstry/atelier 0.2.0-alpha.2 → 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 +35 -0
- package/README.md +193 -186
- package/docs/blocks/audience-visibility.md +9 -0
- package/docs/blocks/claims.md +45 -0
- package/docs/blocks/conformance-admission.md +15 -0
- package/docs/blocks/will-not-do.md +9 -0
- package/docs/continuity.md +3 -4
- package/docs/design.md +19 -12
- package/docs/install.md +19 -14
- package/docs/upgrade.md +17 -4
- package/package.json +17 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
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
|
+
|
|
3
38
|
## 0.2.0-alpha.2
|
|
4
39
|
|
|
5
40
|
Documentation and release-lane release. No contract changes and no runtime
|
package/README.md
CHANGED
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
# MNSTRY Atelier
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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.
|
|
20
|
+
|
|
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
|
+
```
|
|
26
|
+
|
|
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.
|
|
26
34
|
|
|
27
35
|
## What authoring looks like
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
Here is a complete, working source document — fictional, like every
|
|
38
|
+
fixture in this package:
|
|
31
39
|
|
|
32
40
|
```markdown
|
|
33
41
|
---
|
|
@@ -49,93 +57,35 @@ The practice itself, in your words, in your file, in your repository.
|
|
|
49
57
|
|
|
50
58
|
That header is the entire enrollment. The graph builder reads front matter
|
|
51
59
|
like this, and `.kg.json` sidecars for files that are not Markdown — JSON,
|
|
52
|
-
YAML, CSV, media, anything — without ever parsing the foreign format.
|
|
53
|
-
|
|
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:
|
|
54
63
|
|
|
55
64
|
```bash
|
|
56
|
-
atelier graph --project ./atelier.project.json # build the knowledge graph
|
|
57
|
-
atelier project --project ./atelier.project.json # generate the local review
|
|
58
|
-
atelier readiness --project ./atelier.project.json # check against published protocols
|
|
59
|
-
atelier dry-run ./atelier-export.json
|
|
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
|
|
60
69
|
```
|
|
61
70
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
|
120
|
-
|
|
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
|
-
```
|
|
131
|
-
|
|
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.
|
|
135
|
-
|
|
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:
|
|
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:
|
|
139
89
|
|
|
140
90
|
```js
|
|
141
91
|
import { validateAtelierExportDryRun } from '@mnstry/atelier'
|
|
@@ -145,26 +95,12 @@ console.log(report.accepted, report.importable, report.errors)
|
|
|
145
95
|
```
|
|
146
96
|
|
|
147
97
|
Real projects start from the `private-domain`, `shared-project`, or
|
|
148
|
-
`distribution` templates instead of the sample fixture
|
|
149
|
-
|
|
150
|
-
## Status
|
|
151
|
-
|
|
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.
|
|
98
|
+
`distribution` templates instead of the sample fixture —
|
|
99
|
+
[`docs/install.md`](docs/install.md) is the full install guide.
|
|
165
100
|
|
|
166
101
|
## Claims you can check
|
|
167
102
|
|
|
103
|
+
<!-- atelier:block:claims:start -->
|
|
168
104
|
This package makes three promises. None of them asks for your trust — each
|
|
169
105
|
one names the command that proves it.
|
|
170
106
|
|
|
@@ -210,27 +146,110 @@ atelier dry-run ./atelier-export.json
|
|
|
210
146
|
`docs/continuity.md` records the distribution commitments behind these
|
|
211
147
|
claims, including the perpetual Apache-2.0 grant on every tagged release you
|
|
212
148
|
receive.
|
|
149
|
+
<!-- atelier:block:claims:end -->
|
|
213
150
|
|
|
214
|
-
## What
|
|
151
|
+
## What it will not do
|
|
215
152
|
|
|
153
|
+
<!-- atelier:block:will-not-do:start -->
|
|
216
154
|
- It does not write to a MNSTRY runtime database.
|
|
217
155
|
- It does not import, provision, publish, or send anything.
|
|
218
|
-
-
|
|
156
|
+
- Except for the documented `gh` actor-resolution fallback, it initiates no
|
|
157
|
+
external network requests.
|
|
219
158
|
- It does not execute model-assisted analysis or any model provider.
|
|
220
159
|
- It does not include client project content.
|
|
221
160
|
|
|
222
161
|
These limits are the design. An authoring tool for private material earns
|
|
223
162
|
trust by what it refuses to be able to do.
|
|
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.
|
|
224
213
|
|
|
225
|
-
|
|
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.
|
|
226
244
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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.
|
|
234
253
|
|
|
235
254
|
## Build your own tool on it
|
|
236
255
|
|
|
@@ -245,52 +264,34 @@ code yours. Start by copying the worked example:
|
|
|
245
264
|
- `examples/loomworks-studio` — a complete fictional distribution: branded
|
|
246
265
|
bin, extension pack, themed workspace template. It lives in this
|
|
247
266
|
repository and deliberately never ships in the npm tarball.
|
|
248
|
-
- `docs/distributions.md` — the contract a
|
|
267
|
+
- [`docs/distributions.md`](docs/distributions.md) — the contract a
|
|
268
|
+
distribution must honor.
|
|
249
269
|
- `TRADEMARKS.md` — naming rules; Apache-2.0 grants code rights, not brand
|
|
250
|
-
rights. Every distribution carries "powered by MNSTRY Atelier"
|
|
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
|
|
270
|
+
rights. Every distribution carries "powered by MNSTRY Atelier"
|
|
271
|
+
attribution, checked by `atelier distribution check`.
|
|
274
272
|
|
|
275
|
-
|
|
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`:
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
npm install
|
|
282
|
-
npm test # 510 tests: 509 pass, 1 fail — the denylist check, by design
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
To acknowledge the missing file and run the rest, which turns that failure
|
|
286
|
-
into a recorded skip:
|
|
273
|
+
## Status
|
|
287
274
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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.
|
|
291
288
|
|
|
292
289
|
## Command reference
|
|
293
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
|
+
|
|
294
295
|
```bash
|
|
295
296
|
atelier dry-run ./atelier-export.json
|
|
296
297
|
atelier contract check
|
|
@@ -322,20 +323,26 @@ atelier dev --project ./atelier.project.json
|
|
|
322
323
|
authored repos, preserves unrelated user hooks through composed hook files,
|
|
323
324
|
runs only registered migrations, refreshes generated projections, and leaves
|
|
324
325
|
a Git commit for review. It will not weaken boundary policy, introduce
|
|
325
|
-
telemetry, enable non-
|
|
326
|
-
runtime state.
|
|
327
|
-
|
|
328
|
-
## Sample fixtures
|
|
326
|
+
telemetry, enable non-loopback egress, run model-assisted analysis, or
|
|
327
|
+
write, import, or apply runtime state.
|
|
329
328
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
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)).
|
|
333
334
|
|
|
334
335
|
## License and contributing
|
|
335
336
|
|
|
336
337
|
Apache-2.0. See `LICENSE`, `NOTICE` (attribution obligations that survive
|
|
337
338
|
forks), `TRADEMARKS.md` (naming), and `docs/continuity.md` (distribution
|
|
338
|
-
continuity commitments).
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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.
|
package/docs/continuity.md
CHANGED
|
@@ -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
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
39
|
-
configuration, boundary policy, sidecars, locks,
|
|
40
|
-
attestation — and fail-closed validators enforce
|
|
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
|
|
107
|
-
|
|
108
|
-
|
|
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.
|
|
131
|
-
no CLA — nobody, including MNSTRY, holds rights over
|
|
132
|
-
that
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
project work in shared project
|
|
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
|
-
|
|
20
|
-
`
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
44
|
-
|
|
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
|
|
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
|
|
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
|
|
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,19 @@ 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
|
+
|
|
8
21
|
## Upgrading to 0.2.0-alpha.2
|
|
9
22
|
|
|
10
23
|
No contract changes and no runtime behaviour changes: documents valid against
|
|
@@ -72,16 +85,16 @@ For registry installs, pin the exact version and record the resolved version
|
|
|
72
85
|
in the lockfile:
|
|
73
86
|
|
|
74
87
|
```bash
|
|
75
|
-
npm install --save-dev @mnstry/atelier@0.2.0-alpha.
|
|
76
|
-
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
|
|
77
90
|
```
|
|
78
91
|
|
|
79
92
|
For Git installs, pin the release tag rather than a branch, so the lock file
|
|
80
93
|
records exactly what was reviewed:
|
|
81
94
|
|
|
82
95
|
```bash
|
|
83
|
-
npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.
|
|
84
|
-
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
|
|
85
98
|
```
|
|
86
99
|
|
|
87
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.
|
|
3
|
+
"version": "0.2.0-alpha.3",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "Local
|
|
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.
|
|
82
|
+
"homepage": "https://docs.mnstry.ai/public-product/developers/atelier",
|
|
69
83
|
"bugs": {
|
|
70
84
|
"url": "https://github.com/MNSTRY/atelier/issues"
|
|
71
85
|
},
|