yarramate 0.6.0 → 0.7.0

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.
Files changed (38) hide show
  1. package/README.md +39 -12
  2. package/catalogues/core-enrichment.yaml +700 -0
  3. package/dist/adapters/mcp-cli.js +55 -49
  4. package/dist/apply-command.d.ts +2 -0
  5. package/dist/apply-command.js +199 -0
  6. package/dist/{new-command.d.ts → ask-command.d.ts} +1 -1
  7. package/dist/ask-command.js +729 -0
  8. package/dist/brief.d.ts +3 -0
  9. package/dist/brief.js +235 -0
  10. package/dist/cli-support.d.ts +1 -1
  11. package/dist/cli-support.js +1 -1
  12. package/dist/cli.js +22 -590
  13. package/dist/compiler.js +13 -0
  14. package/dist/core-contract.d.ts +1 -1
  15. package/dist/{status-command.d.ts → design-command.d.ts} +1 -1
  16. package/dist/design-command.js +218 -0
  17. package/dist/export-command.d.ts +2 -0
  18. package/dist/export-command.js +228 -0
  19. package/dist/interrogate-command.d.ts +104 -0
  20. package/dist/interrogate-command.js +268 -0
  21. package/dist/next-command.d.ts +5 -8
  22. package/dist/next-command.js +106 -211
  23. package/docs/CONSUMING-YARRAMATE.md +28 -21
  24. package/package.json +13 -11
  25. package/schema/yarramate-apply-result.schema.json +32 -0
  26. package/schema/yarramate-ask-result.schema.json +391 -0
  27. package/schema/yarramate-core-contract.schema.json +5 -11
  28. package/schema/yarramate-design-step.schema.json +152 -0
  29. package/schema/yarramate-document.schema.json +76 -9
  30. package/schema/yarramate-interrogation-report.schema.json +89 -0
  31. package/schema/yarramate-operations.schema.json +303 -0
  32. package/schema/yarramate-question-catalogue.schema.json +431 -0
  33. package/skills/yarramate-architecture/SKILL.md +42 -17
  34. package/skills/yarramate-architecture/references/native-authoring.md +73 -17
  35. package/dist/new-command.js +0 -111
  36. package/dist/status-command.js +0 -174
  37. package/schema/yarramate-next-result.schema.json +0 -85
  38. package/schema/yarramate-status-result.schema.json +0 -278
@@ -0,0 +1,431 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yarramate.org/schema/question-catalogue/v1",
4
+ "title": "YarraMate question catalogue",
5
+ "description": "A versioned, opinionated catalogue of enrichment questions. Each question binds a deterministic trigger evaluated against a compiled graph-v2 workspace: the question is open wherever its trigger matches and closed when it no longer matches. Interview state is recomputed, never stored.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "format",
10
+ "id",
11
+ "version",
12
+ "profile",
13
+ "waves",
14
+ "questions"
15
+ ],
16
+ "properties": {
17
+ "format": {
18
+ "const": "yarramate/question-catalogue/v1"
19
+ },
20
+ "id": {
21
+ "$ref": "#/$defs/id"
22
+ },
23
+ "version": {
24
+ "type": "string",
25
+ "pattern": "^[0-9]+\\.[0-9]+$"
26
+ },
27
+ "profile": {
28
+ "description": "Profile identity whose vocabulary the triggers are expressed against.",
29
+ "$ref": "#/$defs/profileIdentity"
30
+ },
31
+ "presentation": {
32
+ "type": "object",
33
+ "additionalProperties": false,
34
+ "required": [
35
+ "title"
36
+ ],
37
+ "properties": {
38
+ "title": {
39
+ "$ref": "#/$defs/nonEmptyText"
40
+ },
41
+ "description": {
42
+ "$ref": "#/$defs/nonEmptyText"
43
+ }
44
+ }
45
+ },
46
+ "waves": {
47
+ "description": "Ordered interview phases. Array order is interview order. The wave taxonomy is catalogue opinion, not engine semantics.",
48
+ "type": "array",
49
+ "minItems": 1,
50
+ "items": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": [
54
+ "id",
55
+ "name"
56
+ ],
57
+ "properties": {
58
+ "id": {
59
+ "$ref": "#/$defs/id"
60
+ },
61
+ "name": {
62
+ "$ref": "#/$defs/nonEmptyText"
63
+ },
64
+ "description": {
65
+ "$ref": "#/$defs/nonEmptyText"
66
+ }
67
+ }
68
+ }
69
+ },
70
+ "questions": {
71
+ "type": "array",
72
+ "minItems": 1,
73
+ "items": {
74
+ "$ref": "#/$defs/question"
75
+ }
76
+ }
77
+ },
78
+ "$defs": {
79
+ "id": {
80
+ "type": "string",
81
+ "pattern": "^[a-z][a-z0-9-]*$"
82
+ },
83
+ "nonEmptyText": {
84
+ "type": "string",
85
+ "minLength": 1
86
+ },
87
+ "profileIdentity": {
88
+ "type": "string",
89
+ "pattern": "^[a-z][a-z0-9/-]*@[0-9][0-9A-Za-z.-]*$"
90
+ },
91
+ "catalogueIdentity": {
92
+ "type": "string",
93
+ "pattern": "^[a-z][a-z0-9/-]*@[0-9][0-9A-Za-z.-]*$"
94
+ },
95
+ "qualifiedKind": {
96
+ "type": "string",
97
+ "pattern": "^[a-z][a-z0-9/-]*@[0-9][0-9A-Za-z.-]*#[A-Za-z][A-Za-z0-9-]*$"
98
+ },
99
+ "claimPredicate": {
100
+ "type": "string",
101
+ "pattern": "^[a-z][a-z0-9/@.#-]*$"
102
+ },
103
+ "subjectSelector": {
104
+ "description": "Which subjects a subject-scope question applies to. Field vocabulary mirrors the projection query selector (ADR 0017).",
105
+ "type": "object",
106
+ "additionalProperties": false,
107
+ "required": [
108
+ "kinds"
109
+ ],
110
+ "properties": {
111
+ "kinds": {
112
+ "type": "array",
113
+ "minItems": 1,
114
+ "uniqueItems": true,
115
+ "items": {
116
+ "$ref": "#/$defs/qualifiedKind"
117
+ }
118
+ },
119
+ "kindMatching": {
120
+ "enum": [
121
+ "exact",
122
+ "descendants"
123
+ ],
124
+ "default": "descendants"
125
+ },
126
+ "statuses": {
127
+ "type": "array",
128
+ "minItems": 1,
129
+ "uniqueItems": true,
130
+ "items": {
131
+ "enum": [
132
+ "planned",
133
+ "current",
134
+ "retired"
135
+ ]
136
+ }
137
+ },
138
+ "documents": {
139
+ "type": "array",
140
+ "minItems": 1,
141
+ "uniqueItems": true,
142
+ "items": {
143
+ "$ref": "#/$defs/id"
144
+ }
145
+ }
146
+ }
147
+ },
148
+ "condition": {
149
+ "description": "One deterministic trigger condition. All conditions in a trigger must hold (AND) for the question to be open.",
150
+ "oneOf": [
151
+ {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "required": [
155
+ "condition",
156
+ "predicate"
157
+ ],
158
+ "properties": {
159
+ "condition": {
160
+ "const": "missing-claim"
161
+ },
162
+ "predicate": {
163
+ "$ref": "#/$defs/claimPredicate"
164
+ }
165
+ }
166
+ },
167
+ {
168
+ "type": "object",
169
+ "additionalProperties": false,
170
+ "required": [
171
+ "condition",
172
+ "kinds",
173
+ "direction"
174
+ ],
175
+ "properties": {
176
+ "condition": {
177
+ "const": "missing-relationship"
178
+ },
179
+ "kinds": {
180
+ "type": "array",
181
+ "minItems": 1,
182
+ "uniqueItems": true,
183
+ "items": {
184
+ "$ref": "#/$defs/qualifiedKind"
185
+ }
186
+ },
187
+ "direction": {
188
+ "enum": [
189
+ "incoming",
190
+ "outgoing",
191
+ "any"
192
+ ]
193
+ },
194
+ "kindMatching": {
195
+ "enum": [
196
+ "exact",
197
+ "descendants"
198
+ ]
199
+ }
200
+ }
201
+ },
202
+ {
203
+ "type": "object",
204
+ "additionalProperties": false,
205
+ "required": [
206
+ "condition"
207
+ ],
208
+ "properties": {
209
+ "condition": {
210
+ "const": "isolated"
211
+ }
212
+ }
213
+ },
214
+ {
215
+ "type": "object",
216
+ "additionalProperties": false,
217
+ "required": [
218
+ "condition",
219
+ "kinds"
220
+ ],
221
+ "properties": {
222
+ "condition": {
223
+ "const": "no-subject-of-kind"
224
+ },
225
+ "kinds": {
226
+ "type": "array",
227
+ "minItems": 1,
228
+ "uniqueItems": true,
229
+ "items": {
230
+ "$ref": "#/$defs/qualifiedKind"
231
+ }
232
+ },
233
+ "kindMatching": {
234
+ "enum": [
235
+ "exact",
236
+ "descendants"
237
+ ],
238
+ "default": "descendants"
239
+ }
240
+ }
241
+ },
242
+ {
243
+ "type": "object",
244
+ "additionalProperties": false,
245
+ "required": [
246
+ "condition"
247
+ ],
248
+ "properties": {
249
+ "condition": {
250
+ "const": "no-state-defined"
251
+ }
252
+ }
253
+ },
254
+ {
255
+ "type": "object",
256
+ "additionalProperties": false,
257
+ "required": [
258
+ "condition",
259
+ "kinds",
260
+ "direction",
261
+ "counterpartKinds"
262
+ ],
263
+ "properties": {
264
+ "condition": {
265
+ "const": "missing-linkage"
266
+ },
267
+ "kinds": {
268
+ "type": "array",
269
+ "minItems": 1,
270
+ "uniqueItems": true,
271
+ "items": {
272
+ "$ref": "#/$defs/qualifiedKind"
273
+ }
274
+ },
275
+ "direction": {
276
+ "enum": [
277
+ "outgoing",
278
+ "incoming"
279
+ ]
280
+ },
281
+ "counterpartKinds": {
282
+ "type": "array",
283
+ "minItems": 1,
284
+ "uniqueItems": true,
285
+ "items": {
286
+ "$ref": "#/$defs/qualifiedKind"
287
+ }
288
+ },
289
+ "kindMatching": {
290
+ "enum": [
291
+ "exact",
292
+ "descendants"
293
+ ]
294
+ }
295
+ }
296
+ },
297
+ {
298
+ "type": "object",
299
+ "additionalProperties": false,
300
+ "required": [
301
+ "condition",
302
+ "predicate",
303
+ "direction"
304
+ ],
305
+ "properties": {
306
+ "condition": {
307
+ "const": "missing-reference"
308
+ },
309
+ "predicate": {
310
+ "$ref": "#/$defs/claimPredicate"
311
+ },
312
+ "direction": {
313
+ "enum": [
314
+ "outgoing",
315
+ "incoming"
316
+ ]
317
+ }
318
+ }
319
+ },
320
+ {
321
+ "type": "object",
322
+ "additionalProperties": false,
323
+ "required": [
324
+ "condition",
325
+ "topic"
326
+ ],
327
+ "properties": {
328
+ "condition": {
329
+ "const": "missing-attestation"
330
+ },
331
+ "topic": {
332
+ "type": "string",
333
+ "pattern": "^[a-z][a-z0-9-]*$"
334
+ }
335
+ }
336
+ }
337
+ ]
338
+ },
339
+ "question": {
340
+ "type": "object",
341
+ "additionalProperties": false,
342
+ "required": [
343
+ "id",
344
+ "wave",
345
+ "scope",
346
+ "trigger",
347
+ "question",
348
+ "materiality",
349
+ "authority"
350
+ ],
351
+ "properties": {
352
+ "id": {
353
+ "$ref": "#/$defs/id"
354
+ },
355
+ "wave": {
356
+ "description": "Wave id declared in this catalogue (or an extended one).",
357
+ "$ref": "#/$defs/id"
358
+ },
359
+ "scope": {
360
+ "description": "subject: evaluated once per matching subject. workspace: evaluated once per workspace.",
361
+ "enum": [
362
+ "subject",
363
+ "workspace"
364
+ ]
365
+ },
366
+ "subjects": {
367
+ "$ref": "#/$defs/subjectSelector"
368
+ },
369
+ "trigger": {
370
+ "type": "array",
371
+ "minItems": 1,
372
+ "items": {
373
+ "$ref": "#/$defs/condition"
374
+ }
375
+ },
376
+ "question": {
377
+ "description": "Human-facing phrasing. Subject-scope questions may interpolate {subject.id} and {subject.name}.",
378
+ "$ref": "#/$defs/nonEmptyText"
379
+ },
380
+ "materiality": {
381
+ "description": "Which architectural decision the answer changes. A question that cannot state this does not belong in the catalogue.",
382
+ "$ref": "#/$defs/nonEmptyText"
383
+ },
384
+ "authority": {
385
+ "description": "Who may answer. evidence: an agent may propose the answer from repository evidence (still lands as a reviewable diff). human: a genuine design decision that must be escalated. either: evidence may propose, human confirms.",
386
+ "enum": [
387
+ "evidence",
388
+ "human",
389
+ "either"
390
+ ]
391
+ },
392
+ "resolution": {
393
+ "description": "Guidance for how an accepted answer should land as native authoring (which claim, relationship, or state to add).",
394
+ "$ref": "#/$defs/nonEmptyText"
395
+ }
396
+ },
397
+ "allOf": [
398
+ {
399
+ "if": {
400
+ "properties": {
401
+ "scope": {
402
+ "const": "subject"
403
+ }
404
+ }
405
+ },
406
+ "then": {
407
+ "required": [
408
+ "subjects"
409
+ ]
410
+ }
411
+ },
412
+ {
413
+ "if": {
414
+ "properties": {
415
+ "scope": {
416
+ "const": "workspace"
417
+ }
418
+ }
419
+ },
420
+ "then": {
421
+ "not": {
422
+ "required": [
423
+ "subjects"
424
+ ]
425
+ }
426
+ }
427
+ }
428
+ ]
429
+ }
430
+ }
431
+ }
@@ -25,11 +25,15 @@ automatically.
25
25
  When a workspace already exists, orient first with one call before choosing:
26
26
 
27
27
  ```sh
28
- yarramate status <workspace.yaml> --json
28
+ yarramate ask <workspace.yaml>
29
29
  ```
30
30
 
31
- It reports the check verdict, the reconciliation summary, and a titled
32
- inventory of documents, states, projections, evidence, and contracts.
31
+ It reports the check verdict, the reconciliation summary, the open
32
+ design questions, and the backlog — planned subjects in dependency
33
+ order. `ask <workspace.yaml> --subjects` lists every concept;
34
+ `ask <workspace.yaml> --kinds` lists the declarable vocabulary;
35
+ `ask <workspace.yaml> "<free text>"` returns the model slice matching
36
+ your words.
33
37
 
34
38
  - Existing implementation is the starting point: follow **Discover an
35
39
  existing project**.
@@ -60,8 +64,10 @@ document, projection, evidence, or architecture-state syntax is needed.
60
64
  - principal information and dependencies;
61
65
  - significant actors, constraints, and ownership only when supported;
62
66
  - current state by default; do not infer target intent from code.
63
- 5. Prefer `yarramate add` and `yarramate connect` for simple additions. Edit
64
- YAML directly when states or several related declarations make that clearer.
67
+ 5. Land additions as one atomic `yarramate apply` batch
68
+ (`yarramate/operations/v1`): any invalid operation rejects the whole
69
+ batch, so the model never holds a partial edit. Edit YAML directly
70
+ when states or several related declarations make that clearer.
65
71
  6. Add an evidence overlay only for existing subjects or stable claim IDs.
66
72
  Evidence supports or challenges the proposal; it is not a second model.
67
73
  7. Add the focused projections needed to answer the
@@ -74,11 +80,10 @@ document, projection, evidence, or architecture-state syntax is needed.
74
80
 
75
81
  ```sh
76
82
  yarramate check .yarramate/workspace.yaml --json
77
- yarramate compile .yarramate/workspace.yaml
78
- yarramate evidence .yarramate/evidence/<evidence>.yaml .yarramate/workspace.yaml
83
+ yarramate export graph .yarramate/workspace.yaml
79
84
  yarramate reconcile .yarramate/workspace.yaml
80
- yarramate context .yarramate/projections/<projection>.yaml .yarramate/workspace.yaml
81
- yarramate view .yarramate/projections/<projection>.yaml .yarramate/workspace.yaml
85
+ yarramate ask .yarramate/workspace.yaml .yarramate/projections/<projection>.yaml
86
+ yarramate export markdown .yarramate/projections/<projection>.yaml .yarramate/workspace.yaml
82
87
  yarramate-likec4 check .yarramate/likec4-project.yaml --json .yarramate/workspace.yaml
83
88
  yarramate-likec4 map --sync .yarramate/integrations/likec4/subject-mapping.yaml .yarramate/workspace.yaml
84
89
  yarramate-likec4 export-project .yarramate/likec4-project.yaml .yarramate-out/likec4 .yarramate/workspace.yaml
@@ -109,6 +114,22 @@ yarramate-likec4 export-project .yarramate/likec4-project.yaml .yarramate-out/li
109
114
  presence matters; do not misuse lifecycle status as a decision verdict.
110
115
  4. Add the principal services, components, information, responsibilities, and
111
116
  dependencies required to begin implementation. Partial detail is valid.
117
+ After structuring what is stated, run the interview loop for what is not:
118
+
119
+ ```sh
120
+ yarramate design .yarramate/workspace.yaml
121
+ ```
122
+
123
+ Each invocation serves exactly the top open question with its subject
124
+ slice, materiality, and progress — the catalogue is internal; never pass
125
+ or read catalogue files. Answer one question at a time: questions the
126
+ model or evidence can answer, answer from your authority; questions
127
+ marked `human`, relay verbatim with their materiality. Land each answer
128
+ as one atomic batch (`yarramate apply <operations.yaml>
129
+ .yarramate/workspace.yaml`), then re-run `design` — the next question is
130
+ recomputed from the model, so the loop is resumable across sessions and
131
+ agents with no handover. Use `--subject <id>` to focus the interview on
132
+ one element. The interview is complete when `design` says so.
112
133
  5. Create:
113
134
  - an alternatives projection for the decision;
114
135
  - a bounded target projection for implementation agents.
@@ -119,12 +140,13 @@ yarramate-likec4 export-project .yarramate/likec4-project.yaml .yarramate-out/li
119
140
 
120
141
  ```sh
121
142
  yarramate check .yarramate/workspace.yaml --json
122
- yarramate compile .yarramate/workspace.yaml
123
- yarramate context .yarramate/projections/<alternatives>.yaml .yarramate/workspace.yaml
124
- yarramate context .yarramate/projections/<target>.yaml .yarramate/workspace.yaml
125
- yarramate view .yarramate/projections/<target>.yaml .yarramate/workspace.yaml
126
- yarramate view .yarramate/projections/<flow>.yaml .yarramate/workspace.yaml
127
- yarramate compare <document-id>#<baseline-state> <document-id>#<target-state> .yarramate/workspace.yaml
143
+ yarramate export graph .yarramate/workspace.yaml
144
+ yarramate ask .yarramate/workspace.yaml .yarramate/projections/<alternatives>.yaml
145
+ yarramate ask .yarramate/workspace.yaml .yarramate/projections/<target>.yaml
146
+ yarramate export markdown .yarramate/projections/<target>.yaml .yarramate/workspace.yaml
147
+ yarramate export markdown .yarramate/projections/<flow>.yaml .yarramate/workspace.yaml
148
+ yarramate export briefs .yarramate/projections/<target>.yaml .yarramate/workspace.yaml --out <handoff-dir>
149
+ yarramate ask .yarramate/workspace.yaml --compare <document-id>#<baseline-state> <document-id>#<target-state>
128
150
  yarramate-likec4 check .yarramate/likec4-project.yaml --json .yarramate/workspace.yaml
129
151
  yarramate-likec4 map --sync .yarramate/integrations/likec4/subject-mapping.yaml .yarramate/workspace.yaml
130
152
  yarramate-likec4 export-project .yarramate/likec4-project.yaml .yarramate-out/likec4 .yarramate/workspace.yaml
@@ -136,8 +158,11 @@ yarramate-likec4 export-project .yarramate/likec4-project.yaml .yarramate-out/li
136
158
  discovery. State which omissions are intentional; do not convert partial
137
159
  coverage into a validation failure.
138
160
  8. Present alternatives, selected intent, unresolved decisions, and bounded
139
- implementation context. Do not generate code until the requested design
140
- decision is reviewable.
161
+ implementation context. Hand implementation work the brief rendering of
162
+ its target slice (`yarramate ask <workspace.yaml> <projection.yaml>`,
163
+ or the `export briefs` bundle for several implementers) — deterministic
164
+ prose composed from the checked model — rather than raw YAML. Do not
165
+ generate code until the requested design decision is reviewable.
141
166
 
142
167
  ## Maintain an existing model
143
168
 
@@ -120,18 +120,57 @@ When aspect policy blocks the kind you want—`triggering` between two
120
120
  components is the common case—keep the edge legal with `kind: flow` and carry
121
121
  the invocation semantics on the edge's `name` and `description`:
122
122
 
123
+ ```yaml
124
+ format: yarramate/operations/v1
125
+ operations:
126
+ - op: add-relationship
127
+ document: .yarramate/architecture/main.yaml
128
+ relationship:
129
+ id: cli-invokes-engine
130
+ kind: flow
131
+ from: cli
132
+ to: engine
133
+ name: invokes
134
+ description: The CLI invokes the engine once per check run
135
+ ```
136
+
123
137
  ```sh
124
- yarramate connect .yarramate/architecture/main.yaml \
125
- --id cli-invokes-engine --kind flow \
126
- --from cli --to engine \
127
- --name "invokes" \
128
- --description "The CLI invokes the engine once per check run"
138
+ yarramate apply operations.yaml .yarramate/workspace.yaml
129
139
  ```
130
140
 
131
141
  Both fields compile to claims, so evidence can later confirm or contradict
132
142
  the recorded invocation semantics; the degradation loses no reviewable
133
143
  information.
134
144
 
145
+ ## Batched writes
146
+
147
+ Prefer `yarramate apply` when an answer or enrichment touches several
148
+ subjects: one atomic validated batch instead of repeated single calls.
149
+
150
+ ```yaml
151
+ format: yarramate/operations/v1
152
+ operations:
153
+ - op: add-concept
154
+ document: architecture/main.yaml
155
+ concept: {id: audit-log, kind: applicationService, name: Audit log, status: planned}
156
+ - op: add-relationship
157
+ document: architecture/main.yaml
158
+ relationship: {id: api-serves-audit, kind: serving, from: audit-log, to: user}
159
+ - op: update-concept
160
+ document: architecture/main.yaml
161
+ concept:
162
+ id: user
163
+ description: The person whose actions are audited.
164
+ ```
165
+
166
+ ```sh
167
+ yarramate apply operations.yaml workspace.yaml
168
+ ```
169
+
170
+ The whole candidate workspace must compile or nothing is written.
171
+ Update operations enrich only — scalars replace, lists append; removals
172
+ stay Git edits.
173
+
135
174
  ## Ownership and constraints
136
175
 
137
176
  ```yaml
@@ -147,6 +186,25 @@ information.
147
186
  Ownership is one accountable reference, not approval workflow. Constraints are
148
187
  identified references, not a policy engine or free-form metadata bag.
149
188
 
189
+ ## Attestations
190
+
191
+ ```yaml
192
+ - id: shared-context
193
+ kind: goal
194
+ name: Shared architecture context
195
+ attestations:
196
+ - topic: adequacy
197
+ by: reviewer-name
198
+ on: "2026-08-01"
199
+ ```
200
+
201
+ An attestation records that an authority accepted the subject as adequate
202
+ for a topic (the interrogation catalogue asks for `adequacy` on motivation
203
+ subjects and `design-review` on planned elements). The judgment stays
204
+ outside the engine — only the claim's existence is checked. Revoke by
205
+ deleting the entry; both signing and revoking are reviewed at the Git
206
+ boundary (ADR 0056).
207
+
150
208
  ## Rationale and citations
151
209
 
152
210
  Use `description` on either a concept or relationship for decided narrative
@@ -290,20 +348,18 @@ or overwrite the output manually.
290
348
 
291
349
  ```sh
292
350
  yarramate init .
293
- yarramate add .yarramate/architecture/main.yaml \
294
- --id delivery-api --kind applicationComponent --name "Delivery API"
295
- yarramate connect .yarramate/architecture/main.yaml \
296
- --id api-realizes-service --kind realization \
297
- --from delivery-api --to delivery-service \
298
- --description "The API implements the agreed delivery boundary" \
299
- --reference decision-source=delivery-service
351
+ yarramate design .yarramate/workspace.yaml
352
+ yarramate apply operations.yaml .yarramate/workspace.yaml
353
+ yarramate ask .yarramate/workspace.yaml
354
+ yarramate ask .yarramate/workspace.yaml <projection.yaml>
355
+ yarramate ask .yarramate/workspace.yaml <document-id>#<local-id>
356
+ yarramate ask .yarramate/workspace.yaml --next
357
+ yarramate ask .yarramate/workspace.yaml --open
358
+ yarramate ask .yarramate/workspace.yaml --compare <from-state> <to-state>
300
359
  yarramate check .yarramate/workspace.yaml --json
301
- yarramate compile .yarramate/workspace.yaml
302
- yarramate context <projection.yaml> .yarramate/workspace.yaml
303
- yarramate view <projection.yaml> .yarramate/workspace.yaml
304
- yarramate compare <from-state> <to-state> .yarramate/workspace.yaml
305
- yarramate evidence <evidence.yaml> .yarramate/workspace.yaml
306
360
  yarramate reconcile .yarramate/workspace.yaml
361
+ yarramate export graph .yarramate/workspace.yaml
362
+ yarramate export markdown <projection.yaml> .yarramate/workspace.yaml
307
363
  yarramate-likec4 check \
308
364
  .yarramate/likec4-project.yaml \
309
365
  --json \