@afokapu/atdd-bun 0.10.32 → 0.10.34

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.
@@ -0,0 +1,789 @@
1
+ schema_version: "1.0.0"
2
+ profile: "planner"
3
+ implementations:
4
+ - "atdd_topology"
5
+ - "planner_plan_integrity"
6
+ - "planner_schema_validation"
7
+ - "planner_static_validators"
8
+ conventions:
9
+ - rule_id: "atdd-bun.planner.acceptance-identity"
10
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.acceptance-identity.convention.yaml"
11
+ - rule_id: "atdd-bun.planner.identity-required"
12
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.identity-required.convention.yaml"
13
+ - rule_id: "atdd-bun.planner.identity-unique"
14
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.identity-unique.convention.yaml"
15
+ - rule_id: "atdd-bun.planner.interlocking-participant-resolves"
16
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.interlocking-participant-resolves.convention.yaml"
17
+ - rule_id: "atdd-bun.planner.parse"
18
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.parse.convention.yaml"
19
+ - rule_id: "atdd-bun.planner.reference-resolves"
20
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.reference-resolves.convention.yaml"
21
+ - rule_id: "atdd-bun.planner.schema"
22
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.schema.convention.yaml"
23
+ - rule_id: "atdd-bun.planner.train-wagon-resolves"
24
+ path: "conventions/atdd-bun.planner/atdd-bun.planner.train-wagon-resolves.convention.yaml"
25
+ - rule_id: "atdd-bun.topology.e2e-location"
26
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.e2e-location.convention.yaml"
27
+ - rule_id: "atdd-bun.topology.feature-source-coverage"
28
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.feature-source-coverage.convention.yaml"
29
+ - rule_id: "atdd-bun.topology.feature-test-coverage"
30
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.feature-test-coverage.convention.yaml"
31
+ - rule_id: "atdd-bun.topology.plan-location"
32
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.plan-location.convention.yaml"
33
+ - rule_id: "atdd-bun.topology.source-location"
34
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.source-location.convention.yaml"
35
+ - rule_id: "atdd-bun.topology.test-location"
36
+ path: "conventions/atdd-bun.topology/atdd-bun.topology.test-location.convention.yaml"
37
+ - rule_id: "planner.artifact-naming.theme-first-identity"
38
+ path: "planner-nodes/nodes/planner.artifact-naming.theme-first-identity.convention.yaml"
39
+ - rule_id: "planner.contract.registry-coherence"
40
+ path: "planner-nodes/nodes/planner.contract.registry-coherence.convention.yaml"
41
+ - rule_id: "planner.feature.wagon-link"
42
+ path: "planner-nodes/nodes/planner.feature.wagon-link.convention.yaml"
43
+ - rule_id: "planner.journey.continuation-closure"
44
+ path: "planner-nodes/nodes/planner.journey.continuation-closure.convention.yaml"
45
+ - rule_id: "planner.journey.interlocking-composed"
46
+ path: "planner-nodes/nodes/planner.journey.interlocking-composed.convention.yaml"
47
+ - rule_id: "planner.theme.must-be-canonical"
48
+ path: "planner-nodes/nodes/planner.theme.must-be-canonical.convention.yaml"
49
+ - rule_id: "planner.theme.theme-zero-mandatory"
50
+ path: "planner-nodes/nodes/planner.theme.theme-zero-mandatory.convention.yaml"
51
+ - rule_id: "planner.theme.urn-namespace-matches"
52
+ path: "planner-nodes/nodes/planner.theme.urn-namespace-matches.convention.yaml"
53
+ - rule_id: "planner.train.naming"
54
+ path: "planner-nodes/nodes/planner.train.naming.convention.yaml"
55
+ - rule_id: "planner.train.registry-coherence"
56
+ path: "planner-nodes/nodes/planner.train.registry-coherence.convention.yaml"
57
+ - rule_id: "planner.wagon.features"
58
+ path: "planner-nodes/nodes/planner.wagon.features.convention.yaml"
59
+ - rule_id: "planner.wagon.no-consume-cycle"
60
+ path: "planner-nodes/nodes/planner.wagon.no-consume-cycle.convention.yaml"
61
+ - rule_id: "planner.wagon.produce-consume-artifacts"
62
+ path: "planner-nodes/nodes/planner.wagon.produce-consume-artifacts.convention.yaml"
63
+ - rule_id: "planner.wagon.telemetry-filesystem"
64
+ path: "planner-nodes/nodes/planner.wagon.telemetry-filesystem.convention.yaml"
65
+ - rule_id: "planner.wagon.urn"
66
+ path: "planner-nodes/nodes/planner.wagon.urn.convention.yaml"
67
+ - rule_id: "planner.wagon.urn-naming"
68
+ path: "planner-nodes/nodes/planner.wagon.urn-naming.convention.yaml"
69
+ relationships:
70
+ - confidence: 1
71
+ constraint: "mandatory"
72
+ control: "internal"
73
+ foundation: "finish_to_start"
74
+ origin: "@afokapu/atdd-bun"
75
+ reason: "a test can bind an acceptance only through the acc: identity the WMBT gives it"
76
+ source_ref: "atdd-bun.planner.acceptance-identity"
77
+ strength: "critical"
78
+ target_ref: "traceability.test.binding-resolves"
79
+ type: "enables"
80
+ - confidence: 1
81
+ constraint: "mandatory"
82
+ control: "internal"
83
+ foundation: "finish_to_start"
84
+ origin: "@afokapu/atdd-bun"
85
+ reason: "identities can only be compared once every artifact carries one"
86
+ source_ref: "atdd-bun.planner.identity-required"
87
+ strength: "critical"
88
+ target_ref: "atdd-bun.planner.identity-unique"
89
+ type: "enables"
90
+ - confidence: 1
91
+ constraint: "mandatory"
92
+ control: "internal"
93
+ foundation: "finish_to_start"
94
+ origin: "@afokapu/atdd-bun"
95
+ reason: "a reference resolves to exactly one target only when identities are unique"
96
+ source_ref: "atdd-bun.planner.identity-unique"
97
+ strength: "critical"
98
+ target_ref: "atdd-bun.planner.reference-resolves"
99
+ type: "enables"
100
+ - confidence: 1
101
+ constraint: "mandatory"
102
+ control: "internal"
103
+ foundation: "start_to_start"
104
+ origin: "@afokapu/atdd-bun"
105
+ reason: "interlocking participants are the interlocking-specific case of reference resolution"
106
+ source_ref: "atdd-bun.planner.interlocking-participant-resolves"
107
+ strength: "important"
108
+ target_ref: "atdd-bun.planner.reference-resolves"
109
+ type: "runs_alongside"
110
+ - confidence: 1
111
+ constraint: "mandatory"
112
+ control: "internal"
113
+ foundation: "finish_to_start"
114
+ origin: "@afokapu/atdd-bun"
115
+ reason: "an artifact is read for its identity only once it parses"
116
+ source_ref: "atdd-bun.planner.parse"
117
+ strength: "critical"
118
+ target_ref: "atdd-bun.planner.identity-required"
119
+ type: "enables"
120
+ - confidence: 1
121
+ constraint: "mandatory"
122
+ control: "internal"
123
+ foundation: "finish_to_start"
124
+ origin: "@afokapu/atdd-bun"
125
+ reason: "an artifact is only identified once it parses"
126
+ source_ref: "atdd-bun.planner.parse"
127
+ strength: "critical"
128
+ target_ref: "atdd-bun.planner.identity-unique"
129
+ type: "enables"
130
+ - confidence: 1
131
+ constraint: "mandatory"
132
+ control: "internal"
133
+ foundation: "finish_to_start"
134
+ origin: "@afokapu/atdd-bun"
135
+ reason: "a document is validated against its schema only after it parses"
136
+ source_ref: "atdd-bun.planner.schema"
137
+ strength: "critical"
138
+ target_ref: "atdd-bun.planner.parse"
139
+ type: "requires"
140
+ - confidence: 1
141
+ constraint: "mandatory"
142
+ control: "internal"
143
+ foundation: "start_to_start"
144
+ origin: "@afokapu/atdd-bun"
145
+ reason: "the schema catch-all beside the canonical rules its violations are routed to"
146
+ source_ref: "atdd-bun.planner.schema"
147
+ strength: "important"
148
+ target_ref: "planner.train.naming"
149
+ type: "runs_alongside"
150
+ - confidence: 1
151
+ constraint: "mandatory"
152
+ control: "internal"
153
+ foundation: "start_to_start"
154
+ origin: "@afokapu/atdd-bun"
155
+ reason: "wagon membership of a train is the train-specific case of reference resolution"
156
+ source_ref: "atdd-bun.planner.train-wagon-resolves"
157
+ strength: "important"
158
+ target_ref: "atdd-bun.planner.reference-resolves"
159
+ type: "runs_alongside"
160
+ - confidence: 1
161
+ constraint: "mandatory"
162
+ control: "internal"
163
+ foundation: "finish_to_start"
164
+ origin: "@afokapu/atdd-bun"
165
+ reason: "journey E2E paths are derived from the journeys the plan declares"
166
+ source_ref: "atdd-bun.topology.e2e-location"
167
+ strength: "critical"
168
+ target_ref: "planner.journey.definition"
169
+ type: "requires"
170
+ - confidence: 1
171
+ constraint: "mandatory"
172
+ control: "internal"
173
+ foundation: "start_to_start"
174
+ origin: "@afokapu/atdd-bun"
175
+ reason: "every route has an end-to-end proof: at its canonical path, and exercising the production runner"
176
+ source_ref: "atdd-bun.topology.e2e-location"
177
+ strength: "important"
178
+ target_ref: "tester.bun.interlocking-route-coverage"
179
+ type: "runs_alongside"
180
+ - confidence: 1
181
+ constraint: "mandatory"
182
+ control: "internal"
183
+ foundation: "start_to_start"
184
+ origin: "@afokapu/atdd-bun"
185
+ reason: "on a frontend journey a browser spec is the route's end-to-end proof"
186
+ source_ref: "atdd-bun.topology.e2e-location"
187
+ strength: "important"
188
+ target_ref: "tester.htmx.train-e2e-coverage"
189
+ type: "runs_alongside"
190
+ - confidence: 1
191
+ constraint: "mandatory"
192
+ control: "internal"
193
+ foundation: "finish_to_start"
194
+ origin: "@afokapu/atdd-bun"
195
+ reason: "coverage counts only source placed beneath its feature"
196
+ source_ref: "atdd-bun.topology.feature-source-coverage"
197
+ strength: "critical"
198
+ target_ref: "atdd-bun.topology.source-location"
199
+ type: "requires"
200
+ - confidence: 1
201
+ constraint: "mandatory"
202
+ control: "internal"
203
+ foundation: "start_to_start"
204
+ origin: "@afokapu/atdd-bun"
205
+ reason: "a feature with WMBTs is implemented and tested"
206
+ source_ref: "atdd-bun.topology.feature-test-coverage"
207
+ strength: "important"
208
+ target_ref: "atdd-bun.topology.feature-source-coverage"
209
+ type: "runs_alongside"
210
+ - confidence: 1
211
+ constraint: "mandatory"
212
+ control: "internal"
213
+ foundation: "finish_to_start"
214
+ origin: "@afokapu/atdd-bun"
215
+ reason: "coverage counts only tests placed beneath their feature and bound to its acceptances"
216
+ source_ref: "atdd-bun.topology.feature-test-coverage"
217
+ strength: "critical"
218
+ target_ref: "atdd-bun.topology.test-location"
219
+ type: "requires"
220
+ - confidence: 1
221
+ constraint: "mandatory"
222
+ control: "internal"
223
+ foundation: "start_to_start"
224
+ origin: "@afokapu/atdd-bun"
225
+ reason: "where a feature lives and which wagon owns it: the same ownership, by path and by link"
226
+ source_ref: "atdd-bun.topology.plan-location"
227
+ strength: "important"
228
+ target_ref: "planner.feature.wagon-link"
229
+ type: "runs_alongside"
230
+ - confidence: 1
231
+ constraint: "mandatory"
232
+ control: "internal"
233
+ foundation: "finish_to_start"
234
+ origin: "@afokapu/atdd-bun"
235
+ reason: "features are placed by path once the wagon's feature decomposition is declared"
236
+ source_ref: "atdd-bun.topology.plan-location"
237
+ strength: "critical"
238
+ target_ref: "planner.wagon.features"
239
+ type: "requires"
240
+ - confidence: 1
241
+ constraint: "mandatory"
242
+ control: "internal"
243
+ foundation: "finish_to_start"
244
+ origin: "@afokapu/atdd-bun"
245
+ reason: "source is placed beneath a feature the plan declares at its canonical path"
246
+ source_ref: "atdd-bun.topology.source-location"
247
+ strength: "critical"
248
+ target_ref: "atdd-bun.topology.plan-location"
249
+ type: "requires"
250
+ - confidence: 1
251
+ constraint: "mandatory"
252
+ control: "internal"
253
+ foundation: "start_to_start"
254
+ origin: "@afokapu/atdd-bun"
255
+ reason: "the same component URN, read for its grammar and for where the file must live"
256
+ source_ref: "atdd-bun.topology.source-location"
257
+ strength: "important"
258
+ target_ref: "coder.bun.green-urn-pattern"
259
+ type: "runs_alongside"
260
+ - confidence: 1
261
+ constraint: "mandatory"
262
+ control: "internal"
263
+ foundation: "finish_to_start"
264
+ origin: "@afokapu/atdd-bun"
265
+ reason: "tests are placed beneath a feature the plan declares"
266
+ source_ref: "atdd-bun.topology.test-location"
267
+ strength: "critical"
268
+ target_ref: "atdd-bun.topology.plan-location"
269
+ type: "requires"
270
+ - confidence: 1
271
+ constraint: "mandatory"
272
+ control: "internal"
273
+ foundation: "start_to_start"
274
+ origin: "@afokapu/atdd-bun"
275
+ reason: "the acceptance a test binds, read for presence and for whether a WMBT declares it"
276
+ source_ref: "atdd-bun.topology.test-location"
277
+ strength: "important"
278
+ target_ref: "tester.bun.acceptance-binding-declared"
279
+ type: "runs_alongside"
280
+ - confidence: 1
281
+ constraint: "discretionary"
282
+ control: "external"
283
+ foundation: "start_to_start"
284
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
285
+ reason: "acceptance telemetry signals and wagon telemetry URNs share naming"
286
+ source_ref: "planner.acceptance.signal-telemetry-naming"
287
+ strength: "minor"
288
+ target_ref: "planner.wagon.telemetry-filesystem"
289
+ type: "runs_alongside"
290
+ - confidence: 1
291
+ constraint: "mandatory"
292
+ control: "internal"
293
+ foundation: "finish_to_start"
294
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
295
+ reason: "a contract path can only mirror an identity that is a valid theme-first identity"
296
+ source_ref: "planner.artifact-naming.path-mirrors-identity"
297
+ strength: "important"
298
+ target_ref: "planner.artifact-naming.theme-first-identity"
299
+ type: "requires"
300
+ - confidence: 1
301
+ constraint: "mandatory"
302
+ control: "internal"
303
+ foundation: "start_to_start"
304
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
305
+ reason: "the theme-first identity rule resolves its allowed themes from the same canonical theme map"
306
+ source_ref: "planner.artifact-naming.theme-first-identity"
307
+ strength: "important"
308
+ target_ref: "planner.theme.must-be-canonical"
309
+ type: "requires"
310
+ - confidence: 1
311
+ constraint: "mandatory"
312
+ control: "internal"
313
+ foundation: "finish_to_start"
314
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
315
+ reason: "the {wagon} URN segment must resolve to a real wagon"
316
+ source_ref: "planner.component.urn"
317
+ strength: "critical"
318
+ target_ref: "planner.wagon.urn"
319
+ type: "requires"
320
+ - confidence: 1
321
+ constraint: "mandatory"
322
+ control: "internal"
323
+ foundation: "finish_to_start"
324
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
325
+ reason: "contract coherence is checked over the produce/consume artifact shape it constrains (#1332)"
326
+ source_ref: "planner.contract.registry-coherence"
327
+ strength: "important"
328
+ target_ref: "planner.wagon.produce-consume-artifacts"
329
+ type: "requires"
330
+ - confidence: 1
331
+ constraint: "mandatory"
332
+ control: "external"
333
+ foundation: "finish_to_start"
334
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
335
+ reason: "wagon-feature coverage reads the wagon features manifest"
336
+ source_ref: "planner.coverage.bidirectional-coverage-between-wagons"
337
+ strength: "important"
338
+ target_ref: "planner.wagon.features"
339
+ type: "requires"
340
+ - confidence: 1
341
+ constraint: "mandatory"
342
+ control: "internal"
343
+ foundation: "finish_to_finish"
344
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
345
+ reason: "a feature belongs to exactly one wagon"
346
+ source_ref: "planner.feature.definition"
347
+ strength: "critical"
348
+ target_ref: "planner.feature.wagon-link"
349
+ type: "requires"
350
+ - confidence: 1
351
+ constraint: "mandatory"
352
+ control: "external"
353
+ foundation: "finish_to_start"
354
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
355
+ reason: "a feature URN embeds its parent wagon slug"
356
+ source_ref: "planner.feature.urn-naming"
357
+ strength: "important"
358
+ target_ref: "planner.wagon.urn-naming"
359
+ type: "requires"
360
+ - confidence: 1
361
+ constraint: "mandatory"
362
+ control: "external"
363
+ foundation: "finish_to_start"
364
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
365
+ reason: "a feature is registered in its wagon _features.yaml"
366
+ source_ref: "planner.feature.wagon-link"
367
+ strength: "important"
368
+ target_ref: "planner.wagon.features"
369
+ type: "requires"
370
+ - confidence: 1
371
+ constraint: "mandatory"
372
+ control: "internal"
373
+ foundation: "finish_to_start"
374
+ origin: "@afokapu/atdd-bun"
375
+ reason: "continuation closure validates the journey topology the definition describes"
376
+ source_ref: "planner.journey.continuation-closure"
377
+ strength: "critical"
378
+ target_ref: "planner.journey.definition"
379
+ type: "requires"
380
+ - confidence: 1
381
+ constraint: "mandatory"
382
+ control: "internal"
383
+ foundation: "start_to_start"
384
+ origin: "@afokapu/atdd-bun"
385
+ reason: "two halves of journey closure: continuation closure checks the journeys a plan declares, composition checks that no interlocking is left outside every journey, which closure alone passes vacuously"
386
+ source_ref: "planner.journey.interlocking-composed"
387
+ strength: "critical"
388
+ target_ref: "planner.journey.continuation-closure"
389
+ type: "runs_alongside"
390
+ - confidence: 1
391
+ constraint: "mandatory"
392
+ control: "internal"
393
+ foundation: "finish_to_start"
394
+ origin: "@afokapu/atdd-bun"
395
+ reason: "an interlocking is judged composed against what a journey is: its entrypoint and its continuations"
396
+ source_ref: "planner.journey.interlocking-composed"
397
+ strength: "critical"
398
+ target_ref: "planner.journey.definition"
399
+ type: "requires"
400
+ - confidence: 1
401
+ constraint: "mandatory"
402
+ control: "internal"
403
+ foundation: "finish_to_start"
404
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
405
+ reason: "a spec is validated against the schema of the artifact its kind authors, so the plan layer keeps the by-construction promise the author layer already makes"
406
+ source_ref: "planner.plan.spec-is-schema-valid"
407
+ strength: "critical"
408
+ target_ref: "planner.wagon.urn-naming"
409
+ type: "requires"
410
+ - confidence: 1
411
+ constraint: "mandatory"
412
+ control: "internal"
413
+ foundation: "finish_to_start"
414
+ origin: "@afokapu/atdd-bun"
415
+ reason: "wagon produce[] telemetry entries are the ownership declarations items resolve against"
416
+ source_ref: "planner.telemetry.logical-ownership"
417
+ strength: "important"
418
+ target_ref: "planner.wagon.produce-consume-artifacts"
419
+ type: "requires"
420
+ - confidence: 1
421
+ constraint: "mandatory"
422
+ control: "internal"
423
+ foundation: "finish_to_start"
424
+ origin: "@afokapu/atdd-bun"
425
+ reason: "the tracking-plan tree is the versioned realization of the telemetry URN-to-filesystem mapping"
426
+ source_ref: "planner.telemetry.tracking-plan-schema"
427
+ strength: "important"
428
+ target_ref: "planner.wagon.telemetry-filesystem"
429
+ type: "requires"
430
+ - confidence: 1
431
+ constraint: "discretionary"
432
+ control: "internal"
433
+ foundation: "finish_to_start"
434
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
435
+ reason: "plan/test/code archetype alignment presupposes a canonical theme"
436
+ source_ref: "planner.theme.archetype-alignment"
437
+ strength: "minor"
438
+ target_ref: "planner.theme.must-be-canonical"
439
+ type: "follows"
440
+ - confidence: 1
441
+ constraint: "mandatory"
442
+ control: "internal"
443
+ foundation: "finish_to_start"
444
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
445
+ reason: "the commons/coach import boundary is only checkable once a theme resolves to canonical"
446
+ source_ref: "planner.theme.commons-coach-boundary"
447
+ strength: "important"
448
+ target_ref: "planner.theme.must-be-canonical"
449
+ type: "follows"
450
+ - confidence: 1
451
+ constraint: "mandatory"
452
+ control: "internal"
453
+ foundation: "finish_to_finish"
454
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
455
+ reason: "non-canonical themes are rejected"
456
+ source_ref: "planner.theme.definition"
457
+ strength: "critical"
458
+ target_ref: "planner.theme.must-be-canonical"
459
+ type: "requires"
460
+ - confidence: 1
461
+ constraint: "mandatory"
462
+ control: "internal"
463
+ foundation: "finish_to_finish"
464
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
465
+ reason: "digit 0 commons is the mandatory locked floor"
466
+ source_ref: "planner.theme.definition"
467
+ strength: "critical"
468
+ target_ref: "planner.theme.theme-zero-mandatory"
469
+ type: "requires"
470
+ - confidence: 1
471
+ constraint: "mandatory"
472
+ control: "internal"
473
+ foundation: "finish_to_finish"
474
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
475
+ reason: "the theme token namespaces the artifact URN"
476
+ source_ref: "planner.theme.definition"
477
+ strength: "important"
478
+ target_ref: "planner.theme.urn-namespace-matches"
479
+ type: "requires"
480
+ - confidence: 1
481
+ constraint: "mandatory"
482
+ control: "internal"
483
+ foundation: "finish_to_start"
484
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
485
+ reason: "the canonical set is defined by the taxonomy"
486
+ source_ref: "planner.theme.must-be-canonical"
487
+ strength: "critical"
488
+ target_ref: "planner.theme.canonical-taxonomy"
489
+ type: "requires"
490
+ - confidence: 1
491
+ constraint: "mandatory"
492
+ control: "internal"
493
+ foundation: "finish_to_start"
494
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
495
+ reason: "a canonical theme set must include the non-removable commons@0 floor"
496
+ source_ref: "planner.theme.must-be-canonical"
497
+ strength: "critical"
498
+ target_ref: "planner.theme.theme-zero-mandatory"
499
+ type: "requires"
500
+ - confidence: 1
501
+ constraint: "mandatory"
502
+ control: "internal"
503
+ foundation: "finish_to_start"
504
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
505
+ reason: "digit 0 = commons is fixed by the taxonomy's theme_zero token"
506
+ source_ref: "planner.theme.theme-zero-mandatory"
507
+ strength: "critical"
508
+ target_ref: "planner.theme.canonical-taxonomy"
509
+ type: "requires"
510
+ - confidence: 1
511
+ constraint: "mandatory"
512
+ control: "internal"
513
+ foundation: "finish_to_start"
514
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
515
+ reason: "the theme-prefix must be a canonical theme"
516
+ source_ref: "planner.theme.urn-namespace-matches"
517
+ strength: "important"
518
+ target_ref: "planner.theme.canonical-taxonomy"
519
+ type: "requires"
520
+ - confidence: 1
521
+ constraint: "mandatory"
522
+ control: "internal"
523
+ foundation: "finish_to_start"
524
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
525
+ reason: "matching a produced-URN theme-prefix to the wagon theme presupposes a canonical theme"
526
+ source_ref: "planner.theme.urn-namespace-matches"
527
+ strength: "important"
528
+ target_ref: "planner.theme.must-be-canonical"
529
+ type: "follows"
530
+ - confidence: 1
531
+ constraint: "discretionary"
532
+ control: "external"
533
+ foundation: "finish_to_start"
534
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
535
+ reason: "train data-flow dependencies follow wagon produce/consume artifacts"
536
+ source_ref: "planner.train.dependencies"
537
+ strength: "minor"
538
+ target_ref: "planner.wagon.produce-consume-artifacts"
539
+ type: "requires"
540
+ - confidence: 1
541
+ constraint: "mandatory"
542
+ control: "internal"
543
+ foundation: "finish_to_start"
544
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
545
+ reason: "the row path and the document path it is compared against both derive from the train_id, so a naming disagreement would read as an incoherence"
546
+ source_ref: "planner.train.registry-coherence"
547
+ strength: "important"
548
+ target_ref: "planner.train.naming"
549
+ type: "requires"
550
+ - confidence: 1
551
+ constraint: "mandatory"
552
+ control: "internal"
553
+ foundation: "finish_to_start"
554
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
555
+ reason: "existence coherence is checked over the two-file registry+spec pattern that node defines (#1942)"
556
+ source_ref: "planner.train.registry-coherence"
557
+ strength: "critical"
558
+ target_ref: "planner.train.registry"
559
+ type: "requires"
560
+ - confidence: 1
561
+ constraint: "mandatory"
562
+ control: "internal"
563
+ foundation: "finish_to_start"
564
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
565
+ reason: "registry + spec paths derive from the train_id"
566
+ source_ref: "planner.train.registry"
567
+ strength: "important"
568
+ target_ref: "planner.train.naming"
569
+ type: "requires"
570
+ - confidence: 1
571
+ constraint: "mandatory"
572
+ control: "external"
573
+ foundation: "finish_to_start"
574
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
575
+ reason: "a train's participants are wagons"
576
+ source_ref: "planner.train.scope"
577
+ strength: "important"
578
+ target_ref: "planner.wagon.urn-naming"
579
+ type: "requires"
580
+ - confidence: 1
581
+ constraint: "mandatory"
582
+ control: "internal"
583
+ foundation: "finish_to_start"
584
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
585
+ reason: "a train sequences 3-7 wagons referenced by wagon URN"
586
+ source_ref: "planner.train.scope"
587
+ strength: "important"
588
+ target_ref: "planner.wagon.urn"
589
+ type: "requires"
590
+ - confidence: 1
591
+ constraint: "mandatory"
592
+ control: "external"
593
+ foundation: "finish_to_start"
594
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
595
+ reason: "a train theme-digit must resolve to one of the five canonical themes"
596
+ source_ref: "planner.train.theme-alignment"
597
+ strength: "important"
598
+ target_ref: "planner.theme.must-be-canonical"
599
+ type: "requires"
600
+ - confidence: 1
601
+ constraint: "mandatory"
602
+ control: "internal"
603
+ foundation: "finish_to_start"
604
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
605
+ reason: "the telemetry URN grammar is what the filesystem mapping resolves"
606
+ source_ref: "planner.wagon.artifact-contracts"
607
+ strength: "important"
608
+ target_ref: "planner.wagon.telemetry-filesystem"
609
+ type: "enables"
610
+ - confidence: 1
611
+ constraint: "mandatory"
612
+ control: "internal"
613
+ foundation: "finish_to_finish"
614
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
615
+ reason: "a wagon groups the features that decompose it"
616
+ source_ref: "planner.wagon.definition"
617
+ strength: "minor"
618
+ target_ref: "planner.wagon.features"
619
+ type: "requires"
620
+ - confidence: 1
621
+ constraint: "mandatory"
622
+ control: "internal"
623
+ foundation: "finish_to_finish"
624
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
625
+ reason: "wagons must not form a produce-consume cycle"
626
+ source_ref: "planner.wagon.definition"
627
+ strength: "critical"
628
+ target_ref: "planner.wagon.no-consume-cycle"
629
+ type: "requires"
630
+ - confidence: 1
631
+ constraint: "mandatory"
632
+ control: "internal"
633
+ foundation: "finish_to_finish"
634
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
635
+ reason: "a wagon consumes and produces declared artifacts"
636
+ source_ref: "planner.wagon.definition"
637
+ strength: "important"
638
+ target_ref: "planner.wagon.produce-consume-artifacts"
639
+ type: "requires"
640
+ - confidence: 1
641
+ constraint: "mandatory"
642
+ control: "internal"
643
+ foundation: "start_to_start"
644
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
645
+ reason: "the features-manifest rule uses the urn-array features format"
646
+ source_ref: "planner.wagon.features-format"
647
+ strength: "important"
648
+ target_ref: "planner.wagon.features"
649
+ type: "runs_alongside"
650
+ - confidence: 1
651
+ constraint: "mandatory"
652
+ control: "internal"
653
+ foundation: "finish_to_start"
654
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
655
+ reason: "kebab/snake conversion underpins the wagon URN + plan/<slug>/ layout"
656
+ source_ref: "planner.wagon.logical-vs-filesystem-naming"
657
+ strength: "important"
658
+ target_ref: "planner.wagon.urn"
659
+ type: "enables"
660
+ - confidence: 1
661
+ constraint: "mandatory"
662
+ control: "internal"
663
+ foundation: "finish_to_start"
664
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
665
+ reason: "the strict no-consume-cycle invariant is the exact (acyclicity) case of the complexity model"
666
+ source_ref: "planner.wagon.no-consume-cycle"
667
+ strength: "important"
668
+ target_ref: "planner.wagon.complexity-model"
669
+ type: "requires"
670
+ - confidence: 1
671
+ constraint: "mandatory"
672
+ control: "external"
673
+ foundation: "finish_to_start"
674
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
675
+ reason: "produce/consume artifact names follow the naming pattern"
676
+ source_ref: "planner.wagon.produce-consume-artifacts"
677
+ strength: "important"
678
+ target_ref: "planner.artifact-naming.naming-pattern"
679
+ type: "requires"
680
+ - confidence: 1
681
+ constraint: "mandatory"
682
+ control: "internal"
683
+ foundation: "finish_to_start"
684
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
685
+ reason: "produce/consume entries carry contract + telemetry URNs"
686
+ source_ref: "planner.wagon.produce-consume-artifacts"
687
+ strength: "important"
688
+ target_ref: "planner.wagon.artifact-contracts"
689
+ type: "requires"
690
+ - confidence: 1
691
+ constraint: "discretionary"
692
+ control: "internal"
693
+ foundation: "start_to_start"
694
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
695
+ reason: "produced artifacts' telemetry URNs materialize on the filesystem"
696
+ source_ref: "planner.wagon.produce-consume-artifacts"
697
+ strength: "minor"
698
+ target_ref: "planner.wagon.telemetry-filesystem"
699
+ type: "runs_alongside"
700
+ - confidence: 1
701
+ constraint: "discretionary"
702
+ control: "external"
703
+ foundation: "start_to_start"
704
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
705
+ reason: "a wagon produced-URN theme must match its theme"
706
+ source_ref: "planner.wagon.semantic-coherence"
707
+ strength: "minor"
708
+ target_ref: "planner.theme.urn-namespace-matches"
709
+ type: "runs_alongside"
710
+ - confidence: 1
711
+ constraint: "mandatory"
712
+ control: "internal"
713
+ foundation: "finish_to_start"
714
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
715
+ reason: "coherence checks produce-owned / consume-foreign / external-scope rules"
716
+ source_ref: "planner.wagon.semantic-coherence"
717
+ strength: "important"
718
+ target_ref: "planner.wagon.produce-consume-artifacts"
719
+ type: "requires"
720
+ - confidence: 1
721
+ constraint: "mandatory"
722
+ control: "external"
723
+ foundation: "finish_to_start"
724
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
725
+ reason: "telemetry URNs follow the artifact-naming grammar"
726
+ source_ref: "planner.wagon.telemetry-filesystem"
727
+ strength: "important"
728
+ target_ref: "planner.artifact-naming.naming-pattern"
729
+ type: "requires"
730
+ - confidence: 1
731
+ constraint: "mandatory"
732
+ control: "internal"
733
+ foundation: "finish_to_start"
734
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
735
+ reason: "the telemetry filesystem maps the telemetry URN form"
736
+ source_ref: "planner.wagon.telemetry-filesystem"
737
+ strength: "important"
738
+ target_ref: "planner.wagon.artifact-contracts"
739
+ type: "requires"
740
+ - confidence: 1
741
+ constraint: "discretionary"
742
+ control: "external"
743
+ foundation: "start_to_start"
744
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
745
+ reason: "wagon and artifact names share the kebab grammar"
746
+ source_ref: "planner.wagon.urn-naming"
747
+ strength: "minor"
748
+ target_ref: "planner.artifact-naming.naming-pattern"
749
+ type: "runs_alongside"
750
+ - confidence: 1
751
+ constraint: "discretionary"
752
+ control: "internal"
753
+ foundation: "start_to_start"
754
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
755
+ reason: "the slug derives from the wagon name"
756
+ source_ref: "planner.wagon.urn-naming"
757
+ strength: "minor"
758
+ target_ref: "planner.wagon.slug-dirname-conversion"
759
+ type: "runs_alongside"
760
+ - confidence: 1
761
+ constraint: "discretionary"
762
+ control: "internal"
763
+ foundation: "start_to_start"
764
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
765
+ reason: "a wagon's stable URN is an instance of the stable-naming rule for planner artifacts"
766
+ source_ref: "planner.wagon.urn"
767
+ strength: "minor"
768
+ target_ref: "planner.artifact-naming.planner-artifacts-use-stable"
769
+ type: "runs_alongside"
770
+ - confidence: 1
771
+ constraint: "mandatory"
772
+ control: "internal"
773
+ foundation: "finish_to_start"
774
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
775
+ reason: "the plan/<slug>/ layout follows the logical-vs-filesystem split"
776
+ source_ref: "planner.wagon.urn"
777
+ strength: "important"
778
+ target_ref: "planner.wagon.logical-vs-filesystem-naming"
779
+ type: "requires"
780
+ - confidence: 1
781
+ constraint: "mandatory"
782
+ control: "internal"
783
+ foundation: "finish_to_start"
784
+ origin: "atdd@36ce055a:src/atdd/coach/graph/relationships.yaml"
785
+ reason: "the wagon urn rule presupposes the urn naming grammar"
786
+ source_ref: "planner.wagon.urn"
787
+ strength: "important"
788
+ target_ref: "planner.wagon.urn-naming"
789
+ type: "requires"