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.
- package/README.md +39 -12
- package/catalogues/core-enrichment.yaml +700 -0
- package/dist/adapters/mcp-cli.js +55 -49
- package/dist/apply-command.d.ts +2 -0
- package/dist/apply-command.js +199 -0
- package/dist/{new-command.d.ts → ask-command.d.ts} +1 -1
- package/dist/ask-command.js +729 -0
- package/dist/brief.d.ts +3 -0
- package/dist/brief.js +235 -0
- package/dist/cli-support.d.ts +1 -1
- package/dist/cli-support.js +1 -1
- package/dist/cli.js +22 -590
- package/dist/compiler.js +13 -0
- package/dist/core-contract.d.ts +1 -1
- package/dist/{status-command.d.ts → design-command.d.ts} +1 -1
- package/dist/design-command.js +218 -0
- package/dist/export-command.d.ts +2 -0
- package/dist/export-command.js +228 -0
- package/dist/interrogate-command.d.ts +104 -0
- package/dist/interrogate-command.js +268 -0
- package/dist/next-command.d.ts +5 -8
- package/dist/next-command.js +106 -211
- package/docs/CONSUMING-YARRAMATE.md +28 -21
- package/package.json +13 -11
- package/schema/yarramate-apply-result.schema.json +32 -0
- package/schema/yarramate-ask-result.schema.json +391 -0
- package/schema/yarramate-core-contract.schema.json +5 -11
- package/schema/yarramate-design-step.schema.json +152 -0
- package/schema/yarramate-document.schema.json +76 -9
- package/schema/yarramate-interrogation-report.schema.json +89 -0
- package/schema/yarramate-operations.schema.json +303 -0
- package/schema/yarramate-question-catalogue.schema.json +431 -0
- package/skills/yarramate-architecture/SKILL.md +42 -17
- package/skills/yarramate-architecture/references/native-authoring.md +73 -17
- package/dist/new-command.js +0 -111
- package/dist/status-command.js +0 -174
- package/schema/yarramate-next-result.schema.json +0 -85
- 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
|
|
28
|
+
yarramate ask <workspace.yaml>
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
It reports the check verdict, the reconciliation summary,
|
|
32
|
-
|
|
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.
|
|
64
|
-
|
|
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
|
|
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
|
|
81
|
-
yarramate
|
|
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
|
|
123
|
-
yarramate
|
|
124
|
-
yarramate
|
|
125
|
-
yarramate
|
|
126
|
-
yarramate
|
|
127
|
-
yarramate
|
|
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.
|
|
140
|
-
|
|
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
|
|
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
|
|
294
|
-
|
|
295
|
-
yarramate
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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 \
|