@afokapu/atdd-bun 0.3.2 → 0.5.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/PLANNER_PORT.md +1 -1
- package/README.md +111 -4
- package/conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml +1 -3
- package/conventions/coder.bun/coder.bun.complexity-length.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.design-token-color.convention.yaml +1 -1
- package/conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml +1 -1
- package/conventions/coder.bun/coder.bun.dto-mapper.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.dto-placement.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.dto-purity.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.green-header-order.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml +2 -12
- package/conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml +3 -12
- package/conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-side.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.layer-naming.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.logging-structured.convention.yaml +2 -4
- package/conventions/coder.bun/coder.bun.quality-comments.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.quality-mi.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.responsive-breakpoints-declared.convention.yaml +31 -0
- package/conventions/coder.bun/coder.bun.responsive-no-fixed-width.convention.yaml +30 -0
- package/conventions/coder.bun/coder.bun.responsive-viewport-meta.convention.yaml +31 -0
- package/conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml +2 -18
- package/conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml +2 -15
- package/conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml +3 -3
- package/conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml +2 -2
- package/conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml +3 -2
- package/conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +2 -13
- package/conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.journey-view-current.convention.yaml +53 -0
- package/conventions/planner.docs/planner.docs.reference-integrity.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +2 -12
- package/conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml +2 -6
- package/conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml +2 -14
- package/conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml +2 -1
- package/conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml +2 -7
- package/conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml +2 -7
- package/conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml +2 -1
- package/conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml +2 -6
- package/conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml +2 -6
- package/conventions/tester.htmx/tester.htmx.a11y-harness.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.covered-train-is-routed.convention.yaml +30 -0
- package/conventions/tester.htmx/tester.htmx.e2e-binds-declared-subject.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.e2e-spec-naming.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.exposed-journey-e2e-coverage.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml +2 -6
- package/conventions/tester.htmx/tester.htmx.journey-binding-header.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.journey-layer-assembly.convention.yaml +29 -0
- package/conventions/tester.htmx/tester.htmx.journey-no-acceptance-marker.convention.yaml +29 -0
- package/conventions/tester.htmx/tester.htmx.journey-urn-format.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.presentation-smoke-coverage.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.responsive-harness.convention.yaml +33 -0
- package/conventions/tester.htmx/tester.htmx.responsive-journey-coverage.convention.yaml +30 -0
- package/conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml +2 -1
- package/conventions/tester.htmx/tester.htmx.train-e2e-coverage.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml +2 -1
- package/conventions/tester.htmx/tester.htmx.visual-harness.convention.yaml +28 -0
- package/conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml +5 -0
- package/conventions/traceability/traceability.source.tested-by-present.convention.yaml +5 -0
- package/conventions/traceability/traceability.source.tested-by-resolves.convention.yaml +5 -0
- package/conventions/traceability/traceability.test.binding-resolves.convention.yaml +5 -0
- package/detectors/bun_green_traceability_detector/urn_header.mjs +2 -1
- package/detectors/bun_responsive_detector/atdd.implementation.yaml +18 -0
- package/detectors/bun_responsive_detector/checks/_map.json +5 -0
- package/detectors/bun_responsive_detector/checks/_responsive.mjs +20 -0
- package/detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs +21 -0
- package/detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs +13 -0
- package/detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs +20 -0
- package/detectors/bun_responsive_detector/detect.mjs +46 -0
- package/detectors/bun_responsive_detector/fixtures/clean/public/index.html +9 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/app.css +13 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/document.ts +7 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/fragment.html +1 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/head.ts +1 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx +8 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/range.css +3 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/scale.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/app.css +4 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/render.ts +2 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/units.css +3 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx +3 -0
- package/detectors/htmx_e2e_detector/atdd.implementation.yaml +40 -0
- package/detectors/htmx_e2e_detector/checks/_e2e.mjs +98 -0
- package/detectors/htmx_e2e_detector/checks/_map.json +16 -0
- package/detectors/htmx_e2e_detector/checks/a11y_harness.mjs +21 -0
- package/detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs +11 -0
- package/detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/journey_binding_header.mjs +13 -0
- package/detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs +11 -0
- package/detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/journey_urn_format.mjs +18 -0
- package/detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs +15 -0
- package/detectors/htmx_e2e_detector/checks/responsive_harness.mjs +30 -0
- package/detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/visual_harness.mjs +7 -0
- package/detectors/htmx_e2e_detector/detect.mjs +46 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts +12 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts +12 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts +14 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml +19 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml +14 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +21 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts +7 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts +13 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts +5 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml +21 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx +3 -0
- package/detectors/planner_docs_capability/atdd.implementation.yaml +2 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/index.adoc +170 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/journey-buy.svg +61 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/path-buy-nominal.svg +81 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-archive-order.svg +13 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-place-order.svg +31 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-reject-empty-cart.svg +22 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-retry-payment.svg +22 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-ship-order.svg +35 -0
- package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-take-payment.svg +27 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_journeys/buy.yaml +24 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_themes.yaml +3 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +43 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/fulfilment.yaml +33 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/payment.yaml +43 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/returns.yaml +33 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/archive-order.yaml +11 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/place-order.yaml +21 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +16 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/retry-payment.yaml +16 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/ship-order.yaml +21 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/take-payment.yaml +21 -0
- package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/unrouted-refund.yaml +11 -0
- package/detectors/planner_docs_capability/fixtures/dirty_journey_view/docs/index.adoc +3 -0
- package/detectors/planner_docs_capability/fixtures/dirty_journey_view/plan/_trains/_interlockings/fulfilment.yaml +33 -0
- package/detectors/planner_static_validators/atdd.implementation.yaml +2 -0
- package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/_interlockings/uncomposed.yaml +4 -0
- package/integrity.json +207 -70
- package/lib/frontend.mjs +17 -0
- package/lib/scan.mjs +6 -2
- package/package.json +7 -2
- package/planner-nodes/ENFORCEMENT_SCOPE.yaml +25 -2
- package/planner-nodes/nodes/planner.journey.interlocking-composed.convention.yaml +43 -0
- package/relationships.yaml +4790 -0
- package/src/cli.ts +9 -0
- package/src/docs-capability.ts +10 -1
- package/src/enforce.ts +4 -4
- package/src/index.ts +2 -0
- package/src/journey-docs.ts +355 -0
- package/src/planner-validators.ts +29 -0
|
@@ -0,0 +1,4790 @@
|
|
|
1
|
+
# Relationship graph for every convention this package ships (planner-nodes/ and conventions/).
|
|
2
|
+
# planner.relationship.no-orphan-nodes: every node appears as the source or target of at least one edge.
|
|
3
|
+
# Edges with an `origin` other than @afokapu/atdd-bun are imported unchanged from the upstream graphs
|
|
4
|
+
# (atdd@36ce055a, atdd-extensions@3aa141e) because they touch a shipped convention; the rest are the
|
|
5
|
+
# package's own. Each edge follows planner-schemas/author/relationship.schema.json. Upstream edges whose
|
|
6
|
+
# type the schema does not define (realized-by, scoped-by, gated-by, refines: 32 at the commits above)
|
|
7
|
+
# are not imported; several do not relate two conventions at all.
|
|
8
|
+
schema_version: 1.0.0
|
|
9
|
+
graph_id: "@afokapu/atdd-bun"
|
|
10
|
+
nodes:
|
|
11
|
+
- coder.bun.boundaries-http-client
|
|
12
|
+
- coder.bun.commons-application-no-integration
|
|
13
|
+
- coder.bun.commons-cross-feature-imports-in
|
|
14
|
+
- coder.bun.commons-domain-no-framework-import
|
|
15
|
+
- coder.bun.commons-domain-no-outbound
|
|
16
|
+
- coder.bun.complexity-cyclomatic
|
|
17
|
+
- coder.bun.complexity-length
|
|
18
|
+
- coder.bun.complexity-nesting
|
|
19
|
+
- coder.bun.composition-consumer
|
|
20
|
+
- coder.bun.composition-root
|
|
21
|
+
- coder.bun.dead-code-reachability
|
|
22
|
+
- coder.bun.design-connected
|
|
23
|
+
- coder.bun.design-dependency-flow
|
|
24
|
+
- coder.bun.design-hierarchy-import
|
|
25
|
+
- coder.bun.design-orphan-export
|
|
26
|
+
- coder.bun.design-primitives
|
|
27
|
+
- coder.bun.design-token-color
|
|
28
|
+
- coder.bun.design-token-hardcoded
|
|
29
|
+
- coder.bun.design-tokens-pure
|
|
30
|
+
- coder.bun.design-wagons-import
|
|
31
|
+
- coder.bun.dto-mapper
|
|
32
|
+
- coder.bun.dto-placement
|
|
33
|
+
- coder.bun.dto-purity
|
|
34
|
+
- coder.bun.duplication-intra-layer
|
|
35
|
+
- coder.bun.error-response-bare-string
|
|
36
|
+
- coder.bun.error-response-code-format
|
|
37
|
+
- coder.bun.green-header-order
|
|
38
|
+
- coder.bun.green-header-purpose
|
|
39
|
+
- coder.bun.green-header-runtime
|
|
40
|
+
- coder.bun.green-header-tested-by
|
|
41
|
+
- coder.bun.green-urn-layer
|
|
42
|
+
- coder.bun.green-urn-marker
|
|
43
|
+
- coder.bun.green-urn-name-matches
|
|
44
|
+
- coder.bun.green-urn-pattern
|
|
45
|
+
- coder.bun.green-urn-side
|
|
46
|
+
- coder.bun.green-urn-wagon-feature
|
|
47
|
+
- coder.bun.interlocking-bilateral-binding
|
|
48
|
+
- coder.bun.interlocking-delegates-to-trainrunner
|
|
49
|
+
- coder.bun.interlocking-does-not-carry-cargo
|
|
50
|
+
- coder.bun.interlocking-resolution-model-exists
|
|
51
|
+
- coder.bun.interlocking-runner-exists
|
|
52
|
+
- coder.bun.journey-runner-boundary
|
|
53
|
+
- coder.bun.layer-naming
|
|
54
|
+
- coder.bun.logging-console
|
|
55
|
+
- coder.bun.logging-structured
|
|
56
|
+
- coder.bun.quality-comments
|
|
57
|
+
- coder.bun.quality-mi
|
|
58
|
+
- coder.bun.responsive-breakpoints-declared
|
|
59
|
+
- coder.bun.responsive-no-fixed-width
|
|
60
|
+
- coder.bun.responsive-viewport-meta
|
|
61
|
+
- coder.bun.runtime-executes-the-declaration
|
|
62
|
+
- coder.bun.runtime-server-is-bun-serve
|
|
63
|
+
- coder.bun.runtime-single-lockfile
|
|
64
|
+
- coder.bun.runtime-typecheck-enforced
|
|
65
|
+
- coder.bun.security-hardcoded-secret
|
|
66
|
+
- coder.bun.security-missing-auth
|
|
67
|
+
- coder.bun.security-sql-injection
|
|
68
|
+
- coder.bun.station-master-interlocking-routing
|
|
69
|
+
- coder.bun.station-master-journey-routing
|
|
70
|
+
- coder.bun.wagon-honours-its-contract
|
|
71
|
+
- coder.htmx.fragment-escapes-interpolation
|
|
72
|
+
- coder.htmx.swap-no-inline-handler
|
|
73
|
+
- coder.htmx.swap-oob-carries-id
|
|
74
|
+
- coder.htmx.verb-destructive-confirms
|
|
75
|
+
- coder.htmx.verb-endpoint-is-routed
|
|
76
|
+
- coder.htmx.verb-endpoint-same-origin
|
|
77
|
+
- coder.htmx.verb-mutation-signals-progress
|
|
78
|
+
- planner.acceptance.abstract-fields-required
|
|
79
|
+
- planner.acceptance.authoring-guidelines
|
|
80
|
+
- planner.acceptance.boundary-kind-vocabulary
|
|
81
|
+
- planner.acceptance.execution-kind
|
|
82
|
+
- planner.acceptance.extraction-no-inference
|
|
83
|
+
- planner.acceptance.generator-prompts
|
|
84
|
+
- planner.acceptance.given-when-then-structure
|
|
85
|
+
- planner.acceptance.harness
|
|
86
|
+
- planner.acceptance.harness-vocabulary
|
|
87
|
+
- planner.acceptance.hermetic-fake-contract
|
|
88
|
+
- planner.acceptance.id-pattern
|
|
89
|
+
- planner.acceptance.max-per-wmbt
|
|
90
|
+
- planner.acceptance.plane-keywords
|
|
91
|
+
- planner.acceptance.route-construction
|
|
92
|
+
- planner.acceptance.signal-telemetry-naming
|
|
93
|
+
- planner.acceptance.urn-generation
|
|
94
|
+
- planner.acceptance.well-formed
|
|
95
|
+
- planner.appendix.llm-guidelines
|
|
96
|
+
- planner.appendix.naming-pattern
|
|
97
|
+
- planner.appendix.storage
|
|
98
|
+
- planner.appendix.structure
|
|
99
|
+
- planner.appendix.types
|
|
100
|
+
- planner.artifact-naming.anti-patterns
|
|
101
|
+
- planner.artifact-naming.cardinality-from-aspect
|
|
102
|
+
- planner.artifact-naming.colon-for-hierarchy
|
|
103
|
+
- planner.artifact-naming.contract-file-mapping
|
|
104
|
+
- planner.artifact-naming.depth-guidelines
|
|
105
|
+
- planner.artifact-naming.dot-for-variant
|
|
106
|
+
- planner.artifact-naming.logical-physical-mapping
|
|
107
|
+
- planner.artifact-naming.migration-guide
|
|
108
|
+
- planner.artifact-naming.naming-pattern
|
|
109
|
+
- planner.artifact-naming.path-mirrors-identity
|
|
110
|
+
- planner.artifact-naming.planner-artifacts-use-stable
|
|
111
|
+
- planner.artifact-naming.pluralization
|
|
112
|
+
- planner.artifact-naming.schema-identifier
|
|
113
|
+
- planner.artifact-naming.separator-semantics
|
|
114
|
+
- planner.artifact-naming.theme-first-identity
|
|
115
|
+
- planner.artifact-naming.urn-structure
|
|
116
|
+
- planner.artifact-naming.validation-rules
|
|
117
|
+
- planner.artifact-naming.verb-object-corpus-drift
|
|
118
|
+
- planner.artifact.definition
|
|
119
|
+
- planner.component.artifact-derivation
|
|
120
|
+
- planner.component.business-focus
|
|
121
|
+
- planner.component.count-limit
|
|
122
|
+
- planner.component.derivation
|
|
123
|
+
- planner.component.io-alignment
|
|
124
|
+
- planner.component.layer-assignment
|
|
125
|
+
- planner.component.layer-consistency
|
|
126
|
+
- planner.component.method-limit
|
|
127
|
+
- planner.component.structure
|
|
128
|
+
- planner.component.type-catalog
|
|
129
|
+
- planner.component.urn
|
|
130
|
+
- planner.contract.registry-coherence
|
|
131
|
+
- planner.convention.remedy-must-be-followable
|
|
132
|
+
- planner.coverage.bidirectional-coverage-between-trains
|
|
133
|
+
- planner.coverage.bidirectional-coverage-between-wagons
|
|
134
|
+
- planner.coverage.coverage-graph
|
|
135
|
+
- planner.coverage.every-wmbt-must-be
|
|
136
|
+
- planner.coverage.every-wmbt-must-have
|
|
137
|
+
- planner.coverage.exception-handling
|
|
138
|
+
- planner.criteria.defaults
|
|
139
|
+
- planner.criteria.harness-templates
|
|
140
|
+
- planner.criteria.metric-mapping
|
|
141
|
+
- planner.criteria.plane-keywords
|
|
142
|
+
- planner.criteria.sequence-routing
|
|
143
|
+
- planner.criteria.shape
|
|
144
|
+
- planner.decomposition.canonical-steps
|
|
145
|
+
- planner.decomposition.document-trouble-obligation
|
|
146
|
+
- planner.decomposition.domain-vs-technology
|
|
147
|
+
- planner.decomposition.jtbd-vs-odi-grammar
|
|
148
|
+
- planner.decomposition.keep-pivot-kill
|
|
149
|
+
- planner.decomposition.local-scope
|
|
150
|
+
- planner.decomposition.natural-language-normalization
|
|
151
|
+
- planner.decomposition.train-journey
|
|
152
|
+
- planner.decomposition.wagon-rationale
|
|
153
|
+
- planner.definition.anchor-required
|
|
154
|
+
- planner.docs.adr-registry-derived
|
|
155
|
+
- planner.docs.area-index-required
|
|
156
|
+
- planner.docs.artifact-path-shape
|
|
157
|
+
- planner.docs.asciidoc-only
|
|
158
|
+
- planner.docs.doc-id-unique
|
|
159
|
+
- planner.docs.graph-target-resolves
|
|
160
|
+
- planner.docs.identity-required
|
|
161
|
+
- planner.docs.journey-view-current
|
|
162
|
+
- planner.docs.reference-integrity
|
|
163
|
+
- planner.docs.undeclared-change
|
|
164
|
+
- planner.feature.artifact-seeded-naming
|
|
165
|
+
- planner.feature.definition
|
|
166
|
+
- planner.feature.estimation
|
|
167
|
+
- planner.feature.feedback-loop-close-the-loop
|
|
168
|
+
- planner.feature.feedback-loop-kind
|
|
169
|
+
- planner.feature.feedback-loop-suppression
|
|
170
|
+
- planner.feature.footprint-scoring
|
|
171
|
+
- planner.feature.grouping-strategy
|
|
172
|
+
- planner.feature.hard-limits
|
|
173
|
+
- planner.feature.name-is-verb-object
|
|
174
|
+
- planner.feature.shape
|
|
175
|
+
- planner.feature.size-max-rule
|
|
176
|
+
- planner.feature.urn-naming
|
|
177
|
+
- planner.feature.validation-rules
|
|
178
|
+
- planner.feature.verb-selection-by-artifact-type
|
|
179
|
+
- planner.feature.wagon-link
|
|
180
|
+
- planner.interface.api-mapping
|
|
181
|
+
- planner.interface.artifact-transformation
|
|
182
|
+
- planner.interface.contract-urn
|
|
183
|
+
- planner.interface.naming-patterns
|
|
184
|
+
- planner.interface.orphan-detection
|
|
185
|
+
- planner.interface.ownership-rules
|
|
186
|
+
- planner.interface.structure-rules
|
|
187
|
+
- planner.interface.tests-subdirectory
|
|
188
|
+
- planner.interlocking.definition
|
|
189
|
+
- planner.interlocking.registry-mirrors-document
|
|
190
|
+
- planner.issue-body.dependency-entries-must-be-classified
|
|
191
|
+
- planner.issue-body.graph-context-required
|
|
192
|
+
- planner.journey.continuation-closure
|
|
193
|
+
- planner.journey.definition
|
|
194
|
+
- planner.journey.interlocking-composed
|
|
195
|
+
- planner.plan.confirm-before-author
|
|
196
|
+
- planner.plan.confirm-binds-an-issue
|
|
197
|
+
- planner.plan.confirm-requires-interlocking-sanity
|
|
198
|
+
- planner.plan.granularity-completeness
|
|
199
|
+
- planner.plan.session-lifecycle
|
|
200
|
+
- planner.plan.spec-is-schema-valid
|
|
201
|
+
- planner.relationship.no-orphan-nodes
|
|
202
|
+
- planner.smoke.feedback-loop-close-the-loop
|
|
203
|
+
- planner.smoke.synthetic-fixture-bypass
|
|
204
|
+
- planner.steps.architecture-routing
|
|
205
|
+
- planner.steps.jtbd-taxonomy
|
|
206
|
+
- planner.steps.linguistic-patterns
|
|
207
|
+
- planner.steps.sequence
|
|
208
|
+
- planner.subject.invariants
|
|
209
|
+
- planner.theme.definition
|
|
210
|
+
- planner.theme.must-be-canonical
|
|
211
|
+
- planner.theme.theme-zero-mandatory
|
|
212
|
+
- planner.theme.urn-namespace-matches
|
|
213
|
+
- planner.train.acceptance-commit-failures-covered
|
|
214
|
+
- planner.train.acceptances
|
|
215
|
+
- planner.train.artifact-flow
|
|
216
|
+
- planner.train.categories
|
|
217
|
+
- planner.train.definition
|
|
218
|
+
- planner.train.dependencies
|
|
219
|
+
- planner.train.dispatch-composite-key-exceptional
|
|
220
|
+
- planner.train.dispatch-map-is-registry
|
|
221
|
+
- planner.train.family
|
|
222
|
+
- planner.train.family-matches-terminal-contract
|
|
223
|
+
- planner.train.initial-cargo-inputs-declared
|
|
224
|
+
- planner.train.interlocking-does-not-carry-cargo
|
|
225
|
+
- planner.train.interlocking-entrypoint-shape
|
|
226
|
+
- planner.train.interlocking-fragment-acceptance-binding
|
|
227
|
+
- planner.train.interlocking-guard-coverage
|
|
228
|
+
- planner.train.interlocking-guard-grammar
|
|
229
|
+
- planner.train.interlocking-home
|
|
230
|
+
- planner.train.interlocking-message-payload-typed
|
|
231
|
+
- planner.train.interlocking-payload-contract-body-required
|
|
232
|
+
- planner.train.interlocking-payload-contract-registered
|
|
233
|
+
- planner.train.interlocking-projection-equivalence
|
|
234
|
+
- planner.train.interlocking-route-category-matches-train-id
|
|
235
|
+
- planner.train.interlocking-route-resolution-deterministic
|
|
236
|
+
- planner.train.interlocking-structural-residual-explicit
|
|
237
|
+
- planner.train.interlocking-wmbt-surface-or-residual
|
|
238
|
+
- planner.train.linearity
|
|
239
|
+
- planner.train.naming
|
|
240
|
+
- planner.train.participants
|
|
241
|
+
- planner.train.production-implementation
|
|
242
|
+
- planner.train.registry
|
|
243
|
+
- planner.train.registry-coherence
|
|
244
|
+
- planner.train.route-category-assessment
|
|
245
|
+
- planner.train.route-space-admission
|
|
246
|
+
- planner.train.scope
|
|
247
|
+
- planner.train.sequence
|
|
248
|
+
- planner.train.terminal-contract
|
|
249
|
+
- planner.train.theme-alignment
|
|
250
|
+
- planner.train.theme-orchestrator-urn
|
|
251
|
+
- planner.train.theme-ranges
|
|
252
|
+
- planner.train.validation-rules
|
|
253
|
+
- planner.train.variation-strategies
|
|
254
|
+
- planner.wagon.artifact-contracts
|
|
255
|
+
- planner.wagon.complexity-model
|
|
256
|
+
- planner.wagon.coupling-complexity
|
|
257
|
+
- planner.wagon.definition
|
|
258
|
+
- planner.wagon.features
|
|
259
|
+
- planner.wagon.features-format
|
|
260
|
+
- planner.wagon.logical-vs-filesystem-naming
|
|
261
|
+
- planner.wagon.name-is-verb-object
|
|
262
|
+
- planner.wagon.no-consume-cycle
|
|
263
|
+
- planner.wagon.produce-consume-artifacts
|
|
264
|
+
- planner.wagon.refinement-extraction
|
|
265
|
+
- planner.wagon.semantic-coherence
|
|
266
|
+
- planner.wagon.separability
|
|
267
|
+
- planner.wagon.slug-dirname-conversion
|
|
268
|
+
- planner.wagon.telemetry-filesystem
|
|
269
|
+
- planner.wagon.urn
|
|
270
|
+
- planner.wagon.urn-naming
|
|
271
|
+
- planner.wmbt.context-clarifier
|
|
272
|
+
- planner.wmbt.definition
|
|
273
|
+
- planner.wmbt.dimension-selection
|
|
274
|
+
- planner.wmbt.direction-selection
|
|
275
|
+
- planner.wmbt.filename-pattern
|
|
276
|
+
- planner.wmbt.lens-selection
|
|
277
|
+
- planner.wmbt.must-have-smoke-acceptance
|
|
278
|
+
- planner.wmbt.object-of-control
|
|
279
|
+
- planner.wmbt.shape
|
|
280
|
+
- planner.wmbt.splitting-rules
|
|
281
|
+
- planner.wmbt.statement-template
|
|
282
|
+
- planner.wmbt.step-code-vocabulary
|
|
283
|
+
- planner.wmbt.urn-naming
|
|
284
|
+
- tester.bun.acceptance-binding-declared
|
|
285
|
+
- tester.bun.acceptance-covers-tag-well-formed
|
|
286
|
+
- tester.bun.acceptance-resolves-to-declared
|
|
287
|
+
- tester.bun.interlocking-production-runner-used
|
|
288
|
+
- tester.bun.interlocking-route-coverage
|
|
289
|
+
- tester.bun.interlocking-smoke-coverage-for-station-master
|
|
290
|
+
- tester.bun.interlocking-trace-binds-declared-route
|
|
291
|
+
- tester.bun.interlocking-train-sequence-is-exercised
|
|
292
|
+
- tester.bun.red-behavioral-assertion
|
|
293
|
+
- tester.bun.red-fails-first
|
|
294
|
+
- tester.bun.routing-runtime-family
|
|
295
|
+
- tester.bun.security-auth
|
|
296
|
+
- tester.bun.security-input
|
|
297
|
+
- tester.bun.smoke-no-collaborator-substitution
|
|
298
|
+
- tester.bun.smoke-observable-assertion
|
|
299
|
+
- tester.bun.telemetry-emit
|
|
300
|
+
- tester.bun.test-carries-urn-identity
|
|
301
|
+
- tester.bun.test-imports-bun-test
|
|
302
|
+
- tester.bun.test-isolation-no-live-state
|
|
303
|
+
- tester.bun.test-no-self-skip
|
|
304
|
+
- tester.bun.test-phase-declared
|
|
305
|
+
- tester.htmx.a11y-harness
|
|
306
|
+
- tester.htmx.covered-train-is-routed
|
|
307
|
+
- tester.htmx.e2e-binds-declared-subject
|
|
308
|
+
- tester.htmx.e2e-spec-naming
|
|
309
|
+
- tester.htmx.exposed-journey-e2e-coverage
|
|
310
|
+
- tester.htmx.fragment-asserts-returned-markup
|
|
311
|
+
- tester.htmx.journey-binding-header
|
|
312
|
+
- tester.htmx.journey-layer-assembly
|
|
313
|
+
- tester.htmx.journey-no-acceptance-marker
|
|
314
|
+
- tester.htmx.journey-urn-format
|
|
315
|
+
- tester.htmx.presentation-smoke-coverage
|
|
316
|
+
- tester.htmx.responsive-harness
|
|
317
|
+
- tester.htmx.responsive-journey-coverage
|
|
318
|
+
- tester.htmx.swap-oob-asserts-destination-id
|
|
319
|
+
- tester.htmx.train-e2e-coverage
|
|
320
|
+
- tester.htmx.verb-endpoint-coverage
|
|
321
|
+
- tester.htmx.visual-harness
|
|
322
|
+
- traceability.plan.executable-acceptance-has-test
|
|
323
|
+
- traceability.source.tested-by-present
|
|
324
|
+
- traceability.source.tested-by-resolves
|
|
325
|
+
- traceability.test.binding-resolves
|
|
326
|
+
edges:
|
|
327
|
+
- confidence: 1
|
|
328
|
+
constraint: mandatory
|
|
329
|
+
control: internal
|
|
330
|
+
foundation: finish_to_start
|
|
331
|
+
reason: the acceptance commit is the delivery terminal contract
|
|
332
|
+
source_ref: coder.train.acceptance-commit-idempotent
|
|
333
|
+
strength: important
|
|
334
|
+
target_ref: planner.train.terminal-contract
|
|
335
|
+
type: requires
|
|
336
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
337
|
+
- confidence: 1
|
|
338
|
+
constraint: mandatory
|
|
339
|
+
control: internal
|
|
340
|
+
foundation: finish_to_start
|
|
341
|
+
reason: "the coder train composition root realizes the planner's production-implementation train spec"
|
|
342
|
+
source_ref: coder.train.production-composition-cargo-zero-drift
|
|
343
|
+
strength: important
|
|
344
|
+
target_ref: planner.train.production-implementation
|
|
345
|
+
type: requires
|
|
346
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
347
|
+
- confidence: 1
|
|
348
|
+
constraint: mandatory
|
|
349
|
+
control: internal
|
|
350
|
+
foundation: finish_to_start
|
|
351
|
+
reason: fan-out at the Station Master preserves train linearity
|
|
352
|
+
source_ref: coder.train.station-master-owns-child-train-fanout
|
|
353
|
+
strength: important
|
|
354
|
+
target_ref: planner.train.linearity
|
|
355
|
+
type: requires
|
|
356
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
357
|
+
- confidence: 0.9
|
|
358
|
+
constraint: discretionary
|
|
359
|
+
control: internal
|
|
360
|
+
foundation: finish_to_start
|
|
361
|
+
reason: following the authoring guidelines is what yields a complete acceptance
|
|
362
|
+
source_ref: planner.acceptance.authoring-guidelines
|
|
363
|
+
strength: minor
|
|
364
|
+
target_ref: planner.acceptance.complete
|
|
365
|
+
type: enables
|
|
366
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
367
|
+
- confidence: 0.9
|
|
368
|
+
constraint: discretionary
|
|
369
|
+
control: internal
|
|
370
|
+
foundation: finish_to_start
|
|
371
|
+
reason: following the authoring guidelines is what yields a well-formed acceptance
|
|
372
|
+
source_ref: planner.acceptance.authoring-guidelines
|
|
373
|
+
strength: minor
|
|
374
|
+
target_ref: planner.acceptance.well-formed
|
|
375
|
+
type: enables
|
|
376
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
377
|
+
- confidence: 1
|
|
378
|
+
constraint: mandatory
|
|
379
|
+
control: internal
|
|
380
|
+
foundation: finish_to_start
|
|
381
|
+
reason: completeness includes the required abstract Gherkin fields
|
|
382
|
+
source_ref: planner.acceptance.complete
|
|
383
|
+
strength: important
|
|
384
|
+
target_ref: planner.acceptance.abstract-fields-required
|
|
385
|
+
type: requires
|
|
386
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
387
|
+
- confidence: 1
|
|
388
|
+
constraint: mandatory
|
|
389
|
+
control: internal
|
|
390
|
+
foundation: finish_to_start
|
|
391
|
+
reason: a complete acceptance presupposes the Given/When/Then structure
|
|
392
|
+
source_ref: planner.acceptance.complete
|
|
393
|
+
strength: critical
|
|
394
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
395
|
+
type: requires
|
|
396
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
397
|
+
- confidence: 1
|
|
398
|
+
constraint: mandatory
|
|
399
|
+
control: internal
|
|
400
|
+
foundation: finish_to_start
|
|
401
|
+
reason: a verifiable outcome includes its telemetry signal
|
|
402
|
+
source_ref: planner.acceptance.complete
|
|
403
|
+
strength: important
|
|
404
|
+
target_ref: planner.acceptance.signal-telemetry-naming
|
|
405
|
+
type: requires
|
|
406
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
407
|
+
- confidence: 1
|
|
408
|
+
constraint: mandatory
|
|
409
|
+
control: internal
|
|
410
|
+
foundation: start_to_start
|
|
411
|
+
reason: completeness and harness-type declaration are two required facets of the same acceptance
|
|
412
|
+
source_ref: planner.acceptance.complete
|
|
413
|
+
strength: important
|
|
414
|
+
target_ref: planner.acceptance.harness
|
|
415
|
+
type: runs_alongside
|
|
416
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
417
|
+
- confidence: 1
|
|
418
|
+
constraint: mandatory
|
|
419
|
+
control: internal
|
|
420
|
+
foundation: finish_to_start
|
|
421
|
+
reason: boundary declaration is meaningful once the runtime axis is set
|
|
422
|
+
source_ref: planner.acceptance.execution-kind
|
|
423
|
+
strength: important
|
|
424
|
+
target_ref: planner.acceptance.boundary-kind-vocabulary
|
|
425
|
+
type: enables
|
|
426
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
427
|
+
- confidence: 1
|
|
428
|
+
constraint: mandatory
|
|
429
|
+
control: internal
|
|
430
|
+
foundation: finish_to_start
|
|
431
|
+
reason: direct extraction supplies the context the abstract fields require
|
|
432
|
+
source_ref: planner.acceptance.extraction-no-inference
|
|
433
|
+
strength: important
|
|
434
|
+
target_ref: planner.acceptance.abstract-fields-required
|
|
435
|
+
type: enables
|
|
436
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
437
|
+
- confidence: 0.9
|
|
438
|
+
constraint: discretionary
|
|
439
|
+
control: internal
|
|
440
|
+
foundation: finish_to_start
|
|
441
|
+
reason: extracting (not inferring) the missing context is what makes the acceptance complete and faithful
|
|
442
|
+
source_ref: planner.acceptance.extraction-no-inference
|
|
443
|
+
strength: minor
|
|
444
|
+
target_ref: planner.acceptance.complete
|
|
445
|
+
type: enables
|
|
446
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
447
|
+
- confidence: 0.9
|
|
448
|
+
constraint: discretionary
|
|
449
|
+
control: internal
|
|
450
|
+
foundation: finish_to_start
|
|
451
|
+
reason: extracting (not inferring) the missing context is what makes the acceptance well-formed and faithful
|
|
452
|
+
source_ref: planner.acceptance.extraction-no-inference
|
|
453
|
+
strength: minor
|
|
454
|
+
target_ref: planner.acceptance.well-formed
|
|
455
|
+
type: enables
|
|
456
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
457
|
+
- confidence: 0.9
|
|
458
|
+
constraint: discretionary
|
|
459
|
+
control: internal
|
|
460
|
+
foundation: finish_to_start
|
|
461
|
+
reason: the generator prompts compose the required abstract acceptance fields
|
|
462
|
+
source_ref: planner.acceptance.generator-prompts
|
|
463
|
+
strength: minor
|
|
464
|
+
target_ref: planner.acceptance.abstract-fields-required
|
|
465
|
+
type: enables
|
|
466
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
467
|
+
- confidence: 1
|
|
468
|
+
constraint: mandatory
|
|
469
|
+
control: internal
|
|
470
|
+
foundation: finish_to_start
|
|
471
|
+
reason: "each section's required abstract narrative is part of the structure"
|
|
472
|
+
source_ref: planner.acceptance.given-when-then-structure
|
|
473
|
+
strength: important
|
|
474
|
+
target_ref: planner.acceptance.abstract-fields-required
|
|
475
|
+
type: requires
|
|
476
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
477
|
+
- confidence: 1
|
|
478
|
+
constraint: mandatory
|
|
479
|
+
control: internal
|
|
480
|
+
foundation: finish_to_start
|
|
481
|
+
reason: the when section is harness-specific and draws on the harness vocabulary
|
|
482
|
+
source_ref: planner.acceptance.given-when-then-structure
|
|
483
|
+
strength: important
|
|
484
|
+
target_ref: planner.acceptance.harness-vocabulary
|
|
485
|
+
type: requires
|
|
486
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
487
|
+
- confidence: 1
|
|
488
|
+
constraint: mandatory
|
|
489
|
+
control: internal
|
|
490
|
+
foundation: finish_to_start
|
|
491
|
+
reason: declaring a harness presupposes the harness vocabulary
|
|
492
|
+
source_ref: planner.acceptance.harness
|
|
493
|
+
strength: critical
|
|
494
|
+
target_ref: planner.acceptance.harness-vocabulary
|
|
495
|
+
type: requires
|
|
496
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
497
|
+
- confidence: 1
|
|
498
|
+
constraint: mandatory
|
|
499
|
+
control: internal
|
|
500
|
+
foundation: finish_to_start
|
|
501
|
+
reason: exercised_boundaries draws on the boundary-kind controlled vocabulary
|
|
502
|
+
source_ref: planner.acceptance.hermetic-fake-contract
|
|
503
|
+
strength: critical
|
|
504
|
+
target_ref: planner.acceptance.boundary-kind-vocabulary
|
|
505
|
+
type: requires
|
|
506
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
507
|
+
- confidence: 1
|
|
508
|
+
constraint: conditional
|
|
509
|
+
control: internal
|
|
510
|
+
foundation: finish_to_start
|
|
511
|
+
reason: the hermetic fake-contract is required only when execution_kind is hermetic_integration
|
|
512
|
+
source_ref: planner.acceptance.hermetic-fake-contract
|
|
513
|
+
strength: critical
|
|
514
|
+
target_ref: planner.acceptance.execution-kind
|
|
515
|
+
type: requires
|
|
516
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
517
|
+
- confidence: 1
|
|
518
|
+
constraint: discretionary
|
|
519
|
+
control: internal
|
|
520
|
+
foundation: start_to_start
|
|
521
|
+
reason: the legacy AC id and the acceptance URN are parallel identifiers
|
|
522
|
+
source_ref: planner.acceptance.id-pattern
|
|
523
|
+
strength: minor
|
|
524
|
+
target_ref: planner.acceptance.urn-generation
|
|
525
|
+
type: runs_alongside
|
|
526
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
527
|
+
- confidence: 1
|
|
528
|
+
constraint: mandatory
|
|
529
|
+
control: internal
|
|
530
|
+
foundation: finish_to_start
|
|
531
|
+
reason: the <=5 cap bounds structured acceptances per WMBT
|
|
532
|
+
source_ref: planner.acceptance.max-per-wmbt
|
|
533
|
+
strength: important
|
|
534
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
535
|
+
type: blocks
|
|
536
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
537
|
+
- confidence: 0.9
|
|
538
|
+
constraint: discretionary
|
|
539
|
+
control: internal
|
|
540
|
+
foundation: start_to_start
|
|
541
|
+
reason: the per-WMBT acceptance cap is a sizing constraint applied alongside acceptance completeness
|
|
542
|
+
source_ref: planner.acceptance.max-per-wmbt
|
|
543
|
+
strength: minor
|
|
544
|
+
target_ref: planner.acceptance.complete
|
|
545
|
+
type: runs_alongside
|
|
546
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
547
|
+
- confidence: 0.9
|
|
548
|
+
constraint: discretionary
|
|
549
|
+
control: internal
|
|
550
|
+
foundation: start_to_start
|
|
551
|
+
reason: the per-WMBT acceptance cap is a sizing constraint applied alongside acceptance well-formedness
|
|
552
|
+
source_ref: planner.acceptance.max-per-wmbt
|
|
553
|
+
strength: minor
|
|
554
|
+
target_ref: planner.acceptance.well-formed
|
|
555
|
+
type: runs_alongside
|
|
556
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
557
|
+
- confidence: 1
|
|
558
|
+
constraint: discretionary
|
|
559
|
+
control: internal
|
|
560
|
+
foundation: finish_to_start
|
|
561
|
+
reason: the route describes the layer flow the when/then exercises
|
|
562
|
+
source_ref: planner.acceptance.route-construction
|
|
563
|
+
strength: minor
|
|
564
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
565
|
+
type: follows
|
|
566
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
567
|
+
- confidence: 1
|
|
568
|
+
constraint: discretionary
|
|
569
|
+
control: internal
|
|
570
|
+
foundation: start_to_start
|
|
571
|
+
reason: the route sequence is built alongside the Given/When/Then structure
|
|
572
|
+
source_ref: planner.acceptance.route-construction
|
|
573
|
+
strength: minor
|
|
574
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
575
|
+
type: runs_alongside
|
|
576
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
577
|
+
- confidence: 1
|
|
578
|
+
constraint: mandatory
|
|
579
|
+
control: internal
|
|
580
|
+
foundation: finish_to_start
|
|
581
|
+
reason: telemetry signals are derived from the then/when sections
|
|
582
|
+
source_ref: planner.acceptance.signal-telemetry-naming
|
|
583
|
+
strength: important
|
|
584
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
585
|
+
type: follows
|
|
586
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
587
|
+
- confidence: 1
|
|
588
|
+
constraint: discretionary
|
|
589
|
+
control: external
|
|
590
|
+
foundation: start_to_start
|
|
591
|
+
reason: acceptance telemetry signals and wagon telemetry URNs share naming
|
|
592
|
+
source_ref: planner.acceptance.signal-telemetry-naming
|
|
593
|
+
strength: minor
|
|
594
|
+
target_ref: planner.wagon.telemetry-filesystem
|
|
595
|
+
type: runs_alongside
|
|
596
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
597
|
+
- confidence: 1
|
|
598
|
+
constraint: mandatory
|
|
599
|
+
control: internal
|
|
600
|
+
foundation: finish_to_start
|
|
601
|
+
reason: the acceptance URN embeds the UPPERCASE harness code from the vocabulary
|
|
602
|
+
source_ref: planner.acceptance.urn-generation
|
|
603
|
+
strength: important
|
|
604
|
+
target_ref: planner.acceptance.harness-vocabulary
|
|
605
|
+
type: requires
|
|
606
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
607
|
+
- confidence: 1
|
|
608
|
+
constraint: mandatory
|
|
609
|
+
control: internal
|
|
610
|
+
foundation: finish_to_start
|
|
611
|
+
reason: well-formedness includes the required abstract Gherkin fields
|
|
612
|
+
source_ref: planner.acceptance.well-formed
|
|
613
|
+
strength: important
|
|
614
|
+
target_ref: planner.acceptance.abstract-fields-required
|
|
615
|
+
type: requires
|
|
616
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
617
|
+
- confidence: 1
|
|
618
|
+
constraint: mandatory
|
|
619
|
+
control: internal
|
|
620
|
+
foundation: finish_to_start
|
|
621
|
+
reason: a well-formed acceptance presupposes the Given/When/Then structure
|
|
622
|
+
source_ref: planner.acceptance.well-formed
|
|
623
|
+
strength: critical
|
|
624
|
+
target_ref: planner.acceptance.given-when-then-structure
|
|
625
|
+
type: requires
|
|
626
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
627
|
+
- confidence: 1
|
|
628
|
+
constraint: mandatory
|
|
629
|
+
control: internal
|
|
630
|
+
foundation: finish_to_start
|
|
631
|
+
reason: a verifiable outcome includes its telemetry signal
|
|
632
|
+
source_ref: planner.acceptance.well-formed
|
|
633
|
+
strength: important
|
|
634
|
+
target_ref: planner.acceptance.signal-telemetry-naming
|
|
635
|
+
type: requires
|
|
636
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
637
|
+
- confidence: 1
|
|
638
|
+
constraint: mandatory
|
|
639
|
+
control: internal
|
|
640
|
+
foundation: start_to_start
|
|
641
|
+
reason: well-formedness and harness-type declaration are two required facets of the same acceptance
|
|
642
|
+
source_ref: planner.acceptance.well-formed
|
|
643
|
+
strength: important
|
|
644
|
+
target_ref: planner.acceptance.harness
|
|
645
|
+
type: runs_alongside
|
|
646
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
647
|
+
- confidence: 1
|
|
648
|
+
constraint: mandatory
|
|
649
|
+
control: internal
|
|
650
|
+
foundation: finish_to_start
|
|
651
|
+
reason: the per-type creation workflow is keyed on the six types
|
|
652
|
+
source_ref: planner.appendix.llm-guidelines
|
|
653
|
+
strength: important
|
|
654
|
+
target_ref: planner.appendix.types
|
|
655
|
+
type: requires
|
|
656
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
657
|
+
- confidence: 1
|
|
658
|
+
constraint: mandatory
|
|
659
|
+
control: internal
|
|
660
|
+
foundation: finish_to_start
|
|
661
|
+
reason: "the {type} filename segment must be one of the six appendix types"
|
|
662
|
+
source_ref: planner.appendix.naming-pattern
|
|
663
|
+
strength: important
|
|
664
|
+
target_ref: planner.appendix.types
|
|
665
|
+
type: requires
|
|
666
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
667
|
+
- confidence: 1
|
|
668
|
+
constraint: discretionary
|
|
669
|
+
control: internal
|
|
670
|
+
foundation: finish_to_start
|
|
671
|
+
reason: files in appendices/ are the named artifacts the pattern produces
|
|
672
|
+
source_ref: planner.appendix.storage
|
|
673
|
+
strength: minor
|
|
674
|
+
target_ref: planner.appendix.naming-pattern
|
|
675
|
+
type: follows
|
|
676
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
677
|
+
- confidence: 1
|
|
678
|
+
constraint: mandatory
|
|
679
|
+
control: internal
|
|
680
|
+
foundation: finish_to_start
|
|
681
|
+
reason: "the structure node's naming term decomposes into the naming-pattern node"
|
|
682
|
+
source_ref: planner.appendix.structure
|
|
683
|
+
strength: important
|
|
684
|
+
target_ref: planner.appendix.naming-pattern
|
|
685
|
+
type: enables
|
|
686
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
687
|
+
- confidence: 1
|
|
688
|
+
constraint: mandatory
|
|
689
|
+
control: internal
|
|
690
|
+
foundation: finish_to_start
|
|
691
|
+
reason: "the structure node's storage term decomposes into the storage node"
|
|
692
|
+
source_ref: planner.appendix.structure
|
|
693
|
+
strength: important
|
|
694
|
+
target_ref: planner.appendix.storage
|
|
695
|
+
type: enables
|
|
696
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
697
|
+
- confidence: 1
|
|
698
|
+
constraint: mandatory
|
|
699
|
+
control: internal
|
|
700
|
+
foundation: finish_to_start
|
|
701
|
+
reason: "the structure node's taxonomy term decomposes into the types node"
|
|
702
|
+
source_ref: planner.appendix.structure
|
|
703
|
+
strength: important
|
|
704
|
+
target_ref: planner.appendix.types
|
|
705
|
+
type: enables
|
|
706
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
707
|
+
- confidence: 0.9
|
|
708
|
+
constraint: discretionary
|
|
709
|
+
control: internal
|
|
710
|
+
foundation: start_to_start
|
|
711
|
+
reason: appendix structure and step sequencing are both plan-document structural rules
|
|
712
|
+
source_ref: planner.appendix.structure
|
|
713
|
+
strength: minor
|
|
714
|
+
target_ref: planner.steps.sequence
|
|
715
|
+
type: runs_alongside
|
|
716
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
717
|
+
- confidence: 1
|
|
718
|
+
constraint: mandatory
|
|
719
|
+
control: internal
|
|
720
|
+
foundation: finish_to_start
|
|
721
|
+
reason: anti-patterns enumerate the malformed names the grammar excludes
|
|
722
|
+
source_ref: planner.artifact-naming.anti-patterns
|
|
723
|
+
strength: important
|
|
724
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
725
|
+
type: blocks
|
|
726
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
727
|
+
- confidence: 1
|
|
728
|
+
constraint: discretionary
|
|
729
|
+
control: internal
|
|
730
|
+
foundation: start_to_start
|
|
731
|
+
reason: anti-patterns are the negative companion to the validation rules
|
|
732
|
+
source_ref: planner.artifact-naming.anti-patterns
|
|
733
|
+
strength: minor
|
|
734
|
+
target_ref: planner.artifact-naming.validation-rules
|
|
735
|
+
type: runs_alongside
|
|
736
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
737
|
+
- confidence: 1
|
|
738
|
+
constraint: mandatory
|
|
739
|
+
control: internal
|
|
740
|
+
foundation: finish_to_start
|
|
741
|
+
reason: cardinality is read from the aspect position in the pattern
|
|
742
|
+
source_ref: planner.artifact-naming.cardinality-from-aspect
|
|
743
|
+
strength: important
|
|
744
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
745
|
+
type: requires
|
|
746
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
747
|
+
- confidence: 1
|
|
748
|
+
constraint: mandatory
|
|
749
|
+
control: internal
|
|
750
|
+
foundation: finish_to_start
|
|
751
|
+
reason: colon usage is defined by the separator semantics
|
|
752
|
+
source_ref: planner.artifact-naming.colon-for-hierarchy
|
|
753
|
+
strength: important
|
|
754
|
+
target_ref: planner.artifact-naming.separator-semantics
|
|
755
|
+
type: requires
|
|
756
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
757
|
+
- confidence: 1
|
|
758
|
+
constraint: mandatory
|
|
759
|
+
control: internal
|
|
760
|
+
foundation: finish_to_start
|
|
761
|
+
reason: name-to-path mapping splits the grammar segments
|
|
762
|
+
source_ref: planner.artifact-naming.contract-file-mapping
|
|
763
|
+
strength: important
|
|
764
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
765
|
+
type: requires
|
|
766
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
767
|
+
- confidence: 1
|
|
768
|
+
constraint: mandatory
|
|
769
|
+
control: internal
|
|
770
|
+
foundation: start_to_start
|
|
771
|
+
reason: the contract-file formula is the file half of the logical-physical mapping
|
|
772
|
+
source_ref: planner.artifact-naming.contract-file-mapping
|
|
773
|
+
strength: important
|
|
774
|
+
target_ref: planner.artifact-naming.logical-physical-mapping
|
|
775
|
+
type: runs_alongside
|
|
776
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
777
|
+
- confidence: 1
|
|
778
|
+
constraint: discretionary
|
|
779
|
+
control: internal
|
|
780
|
+
foundation: start_to_start
|
|
781
|
+
reason: depth limits qualify the colon/dot separators
|
|
782
|
+
source_ref: planner.artifact-naming.depth-guidelines
|
|
783
|
+
strength: minor
|
|
784
|
+
target_ref: planner.artifact-naming.separator-semantics
|
|
785
|
+
type: runs_alongside
|
|
786
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
787
|
+
- confidence: 1
|
|
788
|
+
constraint: mandatory
|
|
789
|
+
control: internal
|
|
790
|
+
foundation: finish_to_start
|
|
791
|
+
reason: dot usage is defined by the separator semantics
|
|
792
|
+
source_ref: planner.artifact-naming.dot-for-variant
|
|
793
|
+
strength: important
|
|
794
|
+
target_ref: planner.artifact-naming.separator-semantics
|
|
795
|
+
type: requires
|
|
796
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
797
|
+
- confidence: 1
|
|
798
|
+
constraint: discretionary
|
|
799
|
+
control: internal
|
|
800
|
+
foundation: finish_to_start
|
|
801
|
+
reason: physical-form resolution extends the base path algorithm
|
|
802
|
+
source_ref: planner.artifact-naming.logical-physical-mapping
|
|
803
|
+
strength: minor
|
|
804
|
+
target_ref: planner.artifact-naming.contract-file-mapping
|
|
805
|
+
type: follows
|
|
806
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
807
|
+
- confidence: 1
|
|
808
|
+
constraint: mandatory
|
|
809
|
+
control: internal
|
|
810
|
+
foundation: finish_to_start
|
|
811
|
+
reason: the three physical forms are chosen by aspect cardinality
|
|
812
|
+
source_ref: planner.artifact-naming.logical-physical-mapping
|
|
813
|
+
strength: important
|
|
814
|
+
target_ref: planner.artifact-naming.cardinality-from-aspect
|
|
815
|
+
type: requires
|
|
816
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
817
|
+
- confidence: 1
|
|
818
|
+
constraint: mandatory
|
|
819
|
+
control: internal
|
|
820
|
+
foundation: finish_to_start
|
|
821
|
+
reason: the mapping splits the name produced by the pattern
|
|
822
|
+
source_ref: planner.artifact-naming.logical-physical-mapping
|
|
823
|
+
strength: important
|
|
824
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
825
|
+
type: requires
|
|
826
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
827
|
+
- confidence: 1
|
|
828
|
+
constraint: discretionary
|
|
829
|
+
control: internal
|
|
830
|
+
foundation: finish_to_start
|
|
831
|
+
reason: migration retargets legacy names onto the current pattern
|
|
832
|
+
source_ref: planner.artifact-naming.migration-guide
|
|
833
|
+
strength: minor
|
|
834
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
835
|
+
type: follows
|
|
836
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
837
|
+
- confidence: 1
|
|
838
|
+
constraint: mandatory
|
|
839
|
+
control: internal
|
|
840
|
+
foundation: finish_to_start
|
|
841
|
+
reason: the pattern composes hierarchy (colon) and variant (dot) separators
|
|
842
|
+
source_ref: planner.artifact-naming.naming-pattern
|
|
843
|
+
strength: critical
|
|
844
|
+
target_ref: planner.artifact-naming.separator-semantics
|
|
845
|
+
type: requires
|
|
846
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
847
|
+
- confidence: 1
|
|
848
|
+
constraint: mandatory
|
|
849
|
+
control: internal
|
|
850
|
+
foundation: finish_to_start
|
|
851
|
+
reason: the required theme component is drawn from the theme taxonomy
|
|
852
|
+
source_ref: planner.artifact-naming.naming-pattern
|
|
853
|
+
strength: important
|
|
854
|
+
target_ref: planner.artifact-naming.theme-taxonomy
|
|
855
|
+
type: requires
|
|
856
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
857
|
+
- confidence: 1
|
|
858
|
+
constraint: mandatory
|
|
859
|
+
control: internal
|
|
860
|
+
foundation: finish_to_start
|
|
861
|
+
reason: a contract path can only mirror an identity that is a valid theme-first identity
|
|
862
|
+
source_ref: planner.artifact-naming.path-mirrors-identity
|
|
863
|
+
strength: important
|
|
864
|
+
target_ref: planner.artifact-naming.theme-first-identity
|
|
865
|
+
type: requires
|
|
866
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
867
|
+
- confidence: 1
|
|
868
|
+
constraint: mandatory
|
|
869
|
+
control: internal
|
|
870
|
+
foundation: finish_to_start
|
|
871
|
+
reason: stable URN-based names follow the naming pattern grammar
|
|
872
|
+
source_ref: planner.artifact-naming.planner-artifacts-use-stable
|
|
873
|
+
strength: important
|
|
874
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
875
|
+
type: requires
|
|
876
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
877
|
+
- confidence: 1
|
|
878
|
+
constraint: mandatory
|
|
879
|
+
control: internal
|
|
880
|
+
foundation: finish_to_start
|
|
881
|
+
reason: correct plurals make the plural-aspect signal reliable
|
|
882
|
+
source_ref: planner.artifact-naming.pluralization
|
|
883
|
+
strength: important
|
|
884
|
+
target_ref: planner.artifact-naming.cardinality-from-aspect
|
|
885
|
+
type: enables
|
|
886
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
887
|
+
- confidence: 1
|
|
888
|
+
constraint: discretionary
|
|
889
|
+
control: internal
|
|
890
|
+
foundation: start_to_start
|
|
891
|
+
reason: pluralization of the aspect is how cardinality is expressed
|
|
892
|
+
source_ref: planner.artifact-naming.pluralization
|
|
893
|
+
strength: important
|
|
894
|
+
target_ref: planner.artifact-naming.cardinality-from-aspect
|
|
895
|
+
type: runs_alongside
|
|
896
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
897
|
+
- confidence: 1
|
|
898
|
+
constraint: mandatory
|
|
899
|
+
control: internal
|
|
900
|
+
foundation: finish_to_start
|
|
901
|
+
reason: $id is the bare grammar-conformant name
|
|
902
|
+
source_ref: planner.artifact-naming.schema-identifier
|
|
903
|
+
strength: important
|
|
904
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
905
|
+
type: requires
|
|
906
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
907
|
+
- confidence: 1
|
|
908
|
+
constraint: mandatory
|
|
909
|
+
control: internal
|
|
910
|
+
foundation: start_to_start
|
|
911
|
+
reason: the $id and the URN reference share the artifact identity
|
|
912
|
+
source_ref: planner.artifact-naming.schema-identifier
|
|
913
|
+
strength: important
|
|
914
|
+
target_ref: planner.artifact-naming.urn-structure
|
|
915
|
+
type: runs_alongside
|
|
916
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
917
|
+
- confidence: 1
|
|
918
|
+
constraint: mandatory
|
|
919
|
+
control: internal
|
|
920
|
+
foundation: start_to_start
|
|
921
|
+
reason: the theme-first identity rule resolves its allowed themes from the same canonical theme map
|
|
922
|
+
source_ref: planner.artifact-naming.theme-first-identity
|
|
923
|
+
strength: important
|
|
924
|
+
target_ref: planner.theme.must-be-canonical
|
|
925
|
+
type: requires
|
|
926
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
927
|
+
- confidence: 1
|
|
928
|
+
constraint: mandatory
|
|
929
|
+
control: internal
|
|
930
|
+
foundation: finish_to_start
|
|
931
|
+
reason: the URN exactly mirrors the artifact name
|
|
932
|
+
source_ref: planner.artifact-naming.urn-structure
|
|
933
|
+
strength: important
|
|
934
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
935
|
+
type: requires
|
|
936
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
937
|
+
- confidence: 1
|
|
938
|
+
constraint: mandatory
|
|
939
|
+
control: internal
|
|
940
|
+
foundation: finish_to_start
|
|
941
|
+
reason: validation enforces the naming pattern
|
|
942
|
+
source_ref: planner.artifact-naming.validation-rules
|
|
943
|
+
strength: important
|
|
944
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
945
|
+
type: requires
|
|
946
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
947
|
+
- confidence: 1
|
|
948
|
+
constraint: mandatory
|
|
949
|
+
control: internal
|
|
950
|
+
foundation: start_to_start
|
|
951
|
+
reason: "the corpus drift report judges names against the same leading-verb lexicon the authoring gates use, so the two halves cannot disagree about what a verb is"
|
|
952
|
+
source_ref: planner.artifact-naming.verb-object-corpus-drift
|
|
953
|
+
strength: important
|
|
954
|
+
target_ref: planner.feature.verb-selection-by-artifact-type
|
|
955
|
+
type: requires
|
|
956
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
957
|
+
- confidence: 1
|
|
958
|
+
constraint: mandatory
|
|
959
|
+
control: internal
|
|
960
|
+
foundation: finish_to_finish
|
|
961
|
+
reason: identity mirrors physical contract file
|
|
962
|
+
source_ref: planner.artifact.definition
|
|
963
|
+
strength: important
|
|
964
|
+
target_ref: planner.artifact-naming.contract-file-mapping
|
|
965
|
+
type: requires
|
|
966
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
967
|
+
- confidence: 1
|
|
968
|
+
constraint: mandatory
|
|
969
|
+
control: internal
|
|
970
|
+
foundation: finish_to_finish
|
|
971
|
+
reason: identity follows theme hierarchy aspect variant
|
|
972
|
+
source_ref: planner.artifact.definition
|
|
973
|
+
strength: critical
|
|
974
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
975
|
+
type: requires
|
|
976
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
977
|
+
- confidence: 1
|
|
978
|
+
constraint: mandatory
|
|
979
|
+
control: internal
|
|
980
|
+
foundation: finish_to_finish
|
|
981
|
+
reason: schema-backed artifacts carry a schema identifier
|
|
982
|
+
source_ref: planner.artifact.definition
|
|
983
|
+
strength: important
|
|
984
|
+
target_ref: planner.artifact-naming.schema-identifier
|
|
985
|
+
type: requires
|
|
986
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
987
|
+
- confidence: 1
|
|
988
|
+
constraint: mandatory
|
|
989
|
+
control: internal
|
|
990
|
+
foundation: finish_to_finish
|
|
991
|
+
reason: colon is hierarchy dot is variant
|
|
992
|
+
source_ref: planner.artifact.definition
|
|
993
|
+
strength: important
|
|
994
|
+
target_ref: planner.artifact-naming.separator-semantics
|
|
995
|
+
type: requires
|
|
996
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
997
|
+
- confidence: 1
|
|
998
|
+
constraint: mandatory
|
|
999
|
+
control: internal
|
|
1000
|
+
foundation: finish_to_finish
|
|
1001
|
+
reason: top segment is a canonical theme
|
|
1002
|
+
source_ref: planner.artifact.definition
|
|
1003
|
+
strength: important
|
|
1004
|
+
target_ref: planner.artifact-naming.theme-taxonomy
|
|
1005
|
+
type: requires
|
|
1006
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1007
|
+
- confidence: 1
|
|
1008
|
+
constraint: mandatory
|
|
1009
|
+
control: internal
|
|
1010
|
+
foundation: finish_to_finish
|
|
1011
|
+
reason: an artifact has a structured URN
|
|
1012
|
+
source_ref: planner.artifact.definition
|
|
1013
|
+
strength: critical
|
|
1014
|
+
target_ref: planner.artifact-naming.urn-structure
|
|
1015
|
+
type: requires
|
|
1016
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1017
|
+
- confidence: 1
|
|
1018
|
+
constraint: mandatory
|
|
1019
|
+
control: internal
|
|
1020
|
+
foundation: finish_to_finish
|
|
1021
|
+
reason: names must pass the naming validation rules
|
|
1022
|
+
source_ref: planner.artifact.definition
|
|
1023
|
+
strength: important
|
|
1024
|
+
target_ref: planner.artifact-naming.validation-rules
|
|
1025
|
+
type: requires
|
|
1026
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1027
|
+
- confidence: 1
|
|
1028
|
+
constraint: mandatory
|
|
1029
|
+
control: internal
|
|
1030
|
+
foundation: finish_to_start
|
|
1031
|
+
reason: "component names are derived from artifact resource names, so the artifact naming pattern is the input to component derivation"
|
|
1032
|
+
source_ref: planner.component.artifact-derivation
|
|
1033
|
+
strength: important
|
|
1034
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
1035
|
+
type: requires
|
|
1036
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1037
|
+
- confidence: 1
|
|
1038
|
+
constraint: discretionary
|
|
1039
|
+
control: internal
|
|
1040
|
+
foundation: start_to_start
|
|
1041
|
+
reason: a single business capability and the at-most-5-methods ceiling are two facets of keeping a component small and focused
|
|
1042
|
+
source_ref: planner.component.business-focus
|
|
1043
|
+
strength: minor
|
|
1044
|
+
target_ref: planner.component.method-limit
|
|
1045
|
+
type: runs_alongside
|
|
1046
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1047
|
+
- confidence: 1
|
|
1048
|
+
constraint: discretionary
|
|
1049
|
+
control: internal
|
|
1050
|
+
foundation: finish_to_start
|
|
1051
|
+
reason: exceeding 8 components signals the feature should be split
|
|
1052
|
+
source_ref: planner.component.count-limit
|
|
1053
|
+
strength: minor
|
|
1054
|
+
target_ref: planner.feature.shape
|
|
1055
|
+
type: follows
|
|
1056
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1057
|
+
- confidence: 1
|
|
1058
|
+
constraint: mandatory
|
|
1059
|
+
control: internal
|
|
1060
|
+
foundation: finish_to_start
|
|
1061
|
+
reason: "components are derived from the feature's ioSeeds and WMBTs"
|
|
1062
|
+
source_ref: planner.component.derivation
|
|
1063
|
+
strength: important
|
|
1064
|
+
target_ref: planner.feature.shape
|
|
1065
|
+
type: requires
|
|
1066
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1067
|
+
- confidence: 1
|
|
1068
|
+
constraint: mandatory
|
|
1069
|
+
control: internal
|
|
1070
|
+
foundation: finish_to_start
|
|
1071
|
+
reason: "component events must be a subset of the feature's ioSeeds"
|
|
1072
|
+
source_ref: planner.component.io-alignment
|
|
1073
|
+
strength: important
|
|
1074
|
+
target_ref: planner.feature.shape
|
|
1075
|
+
type: requires
|
|
1076
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1077
|
+
- confidence: 1
|
|
1078
|
+
constraint: mandatory
|
|
1079
|
+
control: internal
|
|
1080
|
+
foundation: finish_to_start
|
|
1081
|
+
reason: exactly-one-layer can only be checked once a layer has been assigned from the artifact type
|
|
1082
|
+
source_ref: planner.component.layer-consistency
|
|
1083
|
+
strength: important
|
|
1084
|
+
target_ref: planner.component.layer-assignment
|
|
1085
|
+
type: requires
|
|
1086
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1087
|
+
- confidence: 1
|
|
1088
|
+
constraint: mandatory
|
|
1089
|
+
control: internal
|
|
1090
|
+
foundation: finish_to_start
|
|
1091
|
+
reason: "a generated component's structure is keyed by its component URN"
|
|
1092
|
+
source_ref: planner.component.structure
|
|
1093
|
+
strength: important
|
|
1094
|
+
target_ref: planner.component.urn
|
|
1095
|
+
type: requires
|
|
1096
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1097
|
+
- confidence: 1
|
|
1098
|
+
constraint: mandatory
|
|
1099
|
+
control: internal
|
|
1100
|
+
foundation: finish_to_start
|
|
1101
|
+
reason: "the {feature} URN segment must resolve to an owning feature"
|
|
1102
|
+
source_ref: planner.component.urn
|
|
1103
|
+
strength: critical
|
|
1104
|
+
target_ref: planner.feature.shape
|
|
1105
|
+
type: requires
|
|
1106
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1107
|
+
- confidence: 1
|
|
1108
|
+
constraint: mandatory
|
|
1109
|
+
control: internal
|
|
1110
|
+
foundation: finish_to_start
|
|
1111
|
+
reason: "the {wagon} URN segment must resolve to a real wagon"
|
|
1112
|
+
source_ref: planner.component.urn
|
|
1113
|
+
strength: critical
|
|
1114
|
+
target_ref: planner.wagon.urn
|
|
1115
|
+
type: requires
|
|
1116
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1117
|
+
- confidence: 1
|
|
1118
|
+
constraint: mandatory
|
|
1119
|
+
control: internal
|
|
1120
|
+
foundation: finish_to_start
|
|
1121
|
+
reason: "contract coherence is checked over the produce/consume artifact shape it constrains (#1332)"
|
|
1122
|
+
source_ref: planner.contract.registry-coherence
|
|
1123
|
+
strength: important
|
|
1124
|
+
target_ref: planner.wagon.produce-consume-artifacts
|
|
1125
|
+
type: requires
|
|
1126
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1127
|
+
- confidence: 1
|
|
1128
|
+
constraint: mandatory
|
|
1129
|
+
control: internal
|
|
1130
|
+
foundation: start_to_start
|
|
1131
|
+
reason: "two halves of convention-node integrity: the orphan rule holds every node reachable from the relationship graph, and this one holds the prose inside those nodes followable — a node can be perfectly connected and still send its reader to a file that is not there"
|
|
1132
|
+
source_ref: planner.convention.remedy-must-be-followable
|
|
1133
|
+
strength: important
|
|
1134
|
+
target_ref: planner.relationship.no-orphan-nodes
|
|
1135
|
+
type: runs_alongside
|
|
1136
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1137
|
+
- confidence: 1
|
|
1138
|
+
constraint: discretionary
|
|
1139
|
+
control: internal
|
|
1140
|
+
foundation: start_to_start
|
|
1141
|
+
reason: the same bidirectional-coverage invariant at the train-wagon and wagon-feature levels
|
|
1142
|
+
source_ref: planner.coverage.bidirectional-coverage-between-trains
|
|
1143
|
+
strength: minor
|
|
1144
|
+
target_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1145
|
+
type: runs_alongside
|
|
1146
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1147
|
+
- confidence: 1
|
|
1148
|
+
constraint: mandatory
|
|
1149
|
+
control: internal
|
|
1150
|
+
foundation: finish_to_start
|
|
1151
|
+
reason: wagon-feature coverage sits one level below train-wagon coverage
|
|
1152
|
+
source_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1153
|
+
strength: important
|
|
1154
|
+
target_ref: planner.coverage.bidirectional-coverage-between-trains
|
|
1155
|
+
type: follows
|
|
1156
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1157
|
+
- confidence: 1
|
|
1158
|
+
constraint: mandatory
|
|
1159
|
+
control: external
|
|
1160
|
+
foundation: finish_to_start
|
|
1161
|
+
reason: wagon-feature coverage presupposes well-formed features
|
|
1162
|
+
source_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1163
|
+
strength: important
|
|
1164
|
+
target_ref: planner.feature.shape
|
|
1165
|
+
type: requires
|
|
1166
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1167
|
+
- confidence: 1
|
|
1168
|
+
constraint: mandatory
|
|
1169
|
+
control: external
|
|
1170
|
+
foundation: finish_to_start
|
|
1171
|
+
reason: wagon-feature coverage reads the wagon features manifest
|
|
1172
|
+
source_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1173
|
+
strength: important
|
|
1174
|
+
target_ref: planner.wagon.features
|
|
1175
|
+
type: requires
|
|
1176
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1177
|
+
- confidence: 1
|
|
1178
|
+
constraint: mandatory
|
|
1179
|
+
control: internal
|
|
1180
|
+
foundation: start_to_start
|
|
1181
|
+
reason: the graph aggregates the train-wagon coverage validator
|
|
1182
|
+
source_ref: planner.coverage.coverage-graph
|
|
1183
|
+
strength: minor
|
|
1184
|
+
target_ref: planner.coverage.bidirectional-coverage-between-trains
|
|
1185
|
+
type: runs_alongside
|
|
1186
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1187
|
+
- confidence: 1
|
|
1188
|
+
constraint: mandatory
|
|
1189
|
+
control: internal
|
|
1190
|
+
foundation: start_to_start
|
|
1191
|
+
reason: the graph aggregates the wagon-feature coverage validators
|
|
1192
|
+
source_ref: planner.coverage.coverage-graph
|
|
1193
|
+
strength: minor
|
|
1194
|
+
target_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1195
|
+
type: runs_alongside
|
|
1196
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1197
|
+
- confidence: 1
|
|
1198
|
+
constraint: mandatory
|
|
1199
|
+
control: internal
|
|
1200
|
+
foundation: start_to_start
|
|
1201
|
+
reason: the graph aggregates the wmbt-feature coverage validator
|
|
1202
|
+
source_ref: planner.coverage.coverage-graph
|
|
1203
|
+
strength: minor
|
|
1204
|
+
target_ref: planner.coverage.every-wmbt-must-be
|
|
1205
|
+
type: runs_alongside
|
|
1206
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1207
|
+
- confidence: 1
|
|
1208
|
+
constraint: mandatory
|
|
1209
|
+
control: internal
|
|
1210
|
+
foundation: start_to_start
|
|
1211
|
+
reason: the graph aggregates the wmbt-acceptance coverage validator
|
|
1212
|
+
source_ref: planner.coverage.coverage-graph
|
|
1213
|
+
strength: minor
|
|
1214
|
+
target_ref: planner.coverage.every-wmbt-must-have
|
|
1215
|
+
type: runs_alongside
|
|
1216
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1217
|
+
- confidence: 1
|
|
1218
|
+
constraint: mandatory
|
|
1219
|
+
control: internal
|
|
1220
|
+
foundation: finish_to_start
|
|
1221
|
+
reason: wmbt-feature coverage sits below wagon-feature coverage
|
|
1222
|
+
source_ref: planner.coverage.every-wmbt-must-be
|
|
1223
|
+
strength: important
|
|
1224
|
+
target_ref: planner.coverage.bidirectional-coverage-between-wagons
|
|
1225
|
+
type: follows
|
|
1226
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1227
|
+
- confidence: 1
|
|
1228
|
+
constraint: mandatory
|
|
1229
|
+
control: internal
|
|
1230
|
+
foundation: finish_to_start
|
|
1231
|
+
reason: the every-WMBT-referenced-by-a-feature check presupposes well-formed features
|
|
1232
|
+
source_ref: planner.coverage.every-wmbt-must-be
|
|
1233
|
+
strength: important
|
|
1234
|
+
target_ref: planner.feature.shape
|
|
1235
|
+
type: requires
|
|
1236
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1237
|
+
- confidence: 1
|
|
1238
|
+
constraint: mandatory
|
|
1239
|
+
control: internal
|
|
1240
|
+
foundation: finish_to_start
|
|
1241
|
+
reason: wmbt-acceptance coverage sits below wmbt-feature coverage
|
|
1242
|
+
source_ref: planner.coverage.every-wmbt-must-have
|
|
1243
|
+
strength: important
|
|
1244
|
+
target_ref: planner.coverage.every-wmbt-must-be
|
|
1245
|
+
type: follows
|
|
1246
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1247
|
+
- confidence: 1
|
|
1248
|
+
constraint: mandatory
|
|
1249
|
+
control: internal
|
|
1250
|
+
foundation: finish_to_start
|
|
1251
|
+
reason: "a WMBT's required acceptance only counts if acceptances are complete (G/W/T + verifiable outcome)"
|
|
1252
|
+
source_ref: planner.coverage.every-wmbt-must-have
|
|
1253
|
+
strength: important
|
|
1254
|
+
target_ref: planner.acceptance.complete
|
|
1255
|
+
type: requires
|
|
1256
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1257
|
+
- confidence: 1
|
|
1258
|
+
constraint: mandatory
|
|
1259
|
+
control: internal
|
|
1260
|
+
foundation: finish_to_start
|
|
1261
|
+
reason: "a WMBT's required acceptance only counts if acceptances are well-formed (G/W/T + verifiable outcome)"
|
|
1262
|
+
source_ref: planner.coverage.every-wmbt-must-have
|
|
1263
|
+
strength: important
|
|
1264
|
+
target_ref: planner.acceptance.well-formed
|
|
1265
|
+
type: requires
|
|
1266
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1267
|
+
- confidence: 1
|
|
1268
|
+
constraint: mandatory
|
|
1269
|
+
control: internal
|
|
1270
|
+
foundation: finish_to_start
|
|
1271
|
+
reason: "the per-WMBT acceptance check presupposes a well-shaped WMBT (id, statement, proving artifacts)"
|
|
1272
|
+
source_ref: planner.coverage.every-wmbt-must-have
|
|
1273
|
+
strength: important
|
|
1274
|
+
target_ref: planner.wmbt.shape
|
|
1275
|
+
type: requires
|
|
1276
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1277
|
+
- confidence: 1
|
|
1278
|
+
constraint: discretionary
|
|
1279
|
+
control: internal
|
|
1280
|
+
foundation: finish_to_start
|
|
1281
|
+
reason: allow-lists and status:draft exempt artifacts from the strict acceptance rule
|
|
1282
|
+
source_ref: planner.coverage.exception-handling
|
|
1283
|
+
strength: important
|
|
1284
|
+
target_ref: planner.coverage.every-wmbt-must-have
|
|
1285
|
+
type: relieves
|
|
1286
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1287
|
+
- confidence: 1
|
|
1288
|
+
constraint: discretionary
|
|
1289
|
+
control: internal
|
|
1290
|
+
foundation: start_to_start
|
|
1291
|
+
reason: "the given defaults seed each harness template's given block"
|
|
1292
|
+
source_ref: planner.criteria.defaults
|
|
1293
|
+
strength: minor
|
|
1294
|
+
target_ref: planner.criteria.harness-templates
|
|
1295
|
+
type: runs_alongside
|
|
1296
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1297
|
+
- confidence: 1
|
|
1298
|
+
constraint: discretionary
|
|
1299
|
+
control: internal
|
|
1300
|
+
foundation: finish_to_start
|
|
1301
|
+
reason: a harness template given specializes the default given
|
|
1302
|
+
source_ref: planner.criteria.harness-templates
|
|
1303
|
+
strength: minor
|
|
1304
|
+
target_ref: planner.criteria.defaults
|
|
1305
|
+
type: follows
|
|
1306
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1307
|
+
- confidence: 1
|
|
1308
|
+
constraint: discretionary
|
|
1309
|
+
control: internal
|
|
1310
|
+
foundation: start_to_start
|
|
1311
|
+
reason: lowercase harness keys align with the authoritative harness-code map
|
|
1312
|
+
source_ref: planner.criteria.harness-templates
|
|
1313
|
+
strength: minor
|
|
1314
|
+
target_ref: planner.acceptance.harness
|
|
1315
|
+
type: runs_alongside
|
|
1316
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1317
|
+
- confidence: 1
|
|
1318
|
+
constraint: mandatory
|
|
1319
|
+
control: external
|
|
1320
|
+
foundation: start_to_start
|
|
1321
|
+
reason: criteria templates and the acceptance harness vocabulary share the harness set
|
|
1322
|
+
source_ref: planner.criteria.harness-templates
|
|
1323
|
+
strength: important
|
|
1324
|
+
target_ref: planner.acceptance.harness-vocabulary
|
|
1325
|
+
type: runs_alongside
|
|
1326
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1327
|
+
- confidence: 1
|
|
1328
|
+
constraint: discretionary
|
|
1329
|
+
control: internal
|
|
1330
|
+
foundation: start_to_start
|
|
1331
|
+
reason: each harness template declares the layers it sequences
|
|
1332
|
+
source_ref: planner.criteria.harness-templates
|
|
1333
|
+
strength: minor
|
|
1334
|
+
target_ref: planner.criteria.sequence-routing
|
|
1335
|
+
type: runs_alongside
|
|
1336
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1337
|
+
- confidence: 1
|
|
1338
|
+
constraint: mandatory
|
|
1339
|
+
control: internal
|
|
1340
|
+
foundation: finish_to_start
|
|
1341
|
+
reason: measurable expected_outcome resolves via the dimension->metric map
|
|
1342
|
+
source_ref: planner.criteria.metric-mapping
|
|
1343
|
+
strength: important
|
|
1344
|
+
target_ref: planner.criteria.shape
|
|
1345
|
+
type: enables
|
|
1346
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1347
|
+
- confidence: 1
|
|
1348
|
+
constraint: mandatory
|
|
1349
|
+
control: external
|
|
1350
|
+
foundation: finish_to_start
|
|
1351
|
+
reason: the metric is selected from the WMBT dimension + direction
|
|
1352
|
+
source_ref: planner.criteria.metric-mapping
|
|
1353
|
+
strength: important
|
|
1354
|
+
target_ref: planner.wmbt.dimension-selection
|
|
1355
|
+
type: requires
|
|
1356
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1357
|
+
- confidence: 1
|
|
1358
|
+
constraint: mandatory
|
|
1359
|
+
control: internal
|
|
1360
|
+
foundation: finish_to_start
|
|
1361
|
+
reason: plane assignment from keywords feeds plane->sequence routing
|
|
1362
|
+
source_ref: planner.criteria.plane-keywords
|
|
1363
|
+
strength: important
|
|
1364
|
+
target_ref: planner.criteria.sequence-routing
|
|
1365
|
+
type: enables
|
|
1366
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1367
|
+
- confidence: 1
|
|
1368
|
+
constraint: discretionary
|
|
1369
|
+
control: external
|
|
1370
|
+
foundation: start_to_start
|
|
1371
|
+
reason: both route acceptances to a plane via keyword cues
|
|
1372
|
+
source_ref: planner.criteria.plane-keywords
|
|
1373
|
+
strength: minor
|
|
1374
|
+
target_ref: planner.acceptance.plane-keywords
|
|
1375
|
+
type: runs_alongside
|
|
1376
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1377
|
+
- confidence: 1
|
|
1378
|
+
constraint: mandatory
|
|
1379
|
+
control: internal
|
|
1380
|
+
foundation: finish_to_start
|
|
1381
|
+
reason: the layer sequence is selected via the plane keywords
|
|
1382
|
+
source_ref: planner.criteria.sequence-routing
|
|
1383
|
+
strength: important
|
|
1384
|
+
target_ref: planner.criteria.plane-keywords
|
|
1385
|
+
type: requires
|
|
1386
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1387
|
+
- confidence: 1
|
|
1388
|
+
constraint: discretionary
|
|
1389
|
+
control: internal
|
|
1390
|
+
foundation: start_to_start
|
|
1391
|
+
reason: the routed sequence lands the harness when at the right layer
|
|
1392
|
+
source_ref: planner.criteria.sequence-routing
|
|
1393
|
+
strength: minor
|
|
1394
|
+
target_ref: planner.criteria.harness-templates
|
|
1395
|
+
type: runs_alongside
|
|
1396
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1397
|
+
- confidence: 1
|
|
1398
|
+
constraint: mandatory
|
|
1399
|
+
control: internal
|
|
1400
|
+
foundation: finish_to_start
|
|
1401
|
+
reason: every criteria entry inherits the default given scaffold
|
|
1402
|
+
source_ref: planner.criteria.shape
|
|
1403
|
+
strength: important
|
|
1404
|
+
target_ref: planner.criteria.defaults
|
|
1405
|
+
type: requires
|
|
1406
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1407
|
+
- confidence: 1
|
|
1408
|
+
constraint: mandatory
|
|
1409
|
+
control: internal
|
|
1410
|
+
foundation: finish_to_start
|
|
1411
|
+
reason: the harness field selects a catalog template
|
|
1412
|
+
source_ref: planner.criteria.shape
|
|
1413
|
+
strength: important
|
|
1414
|
+
target_ref: planner.criteria.harness-templates
|
|
1415
|
+
type: requires
|
|
1416
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1417
|
+
- confidence: 1
|
|
1418
|
+
constraint: discretionary
|
|
1419
|
+
control: external
|
|
1420
|
+
foundation: start_to_start
|
|
1421
|
+
reason: criteria are the structured form of an acceptance
|
|
1422
|
+
source_ref: planner.criteria.shape
|
|
1423
|
+
strength: minor
|
|
1424
|
+
target_ref: planner.acceptance.complete
|
|
1425
|
+
type: runs_alongside
|
|
1426
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1427
|
+
- confidence: 1
|
|
1428
|
+
constraint: discretionary
|
|
1429
|
+
control: external
|
|
1430
|
+
foundation: start_to_start
|
|
1431
|
+
reason: criteria are the structured form of an acceptance
|
|
1432
|
+
source_ref: planner.criteria.shape
|
|
1433
|
+
strength: minor
|
|
1434
|
+
target_ref: planner.acceptance.well-formed
|
|
1435
|
+
type: runs_alongside
|
|
1436
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1437
|
+
- confidence: 1
|
|
1438
|
+
constraint: discretionary
|
|
1439
|
+
control: internal
|
|
1440
|
+
foundation: start_to_start
|
|
1441
|
+
reason: the criteria shape references the chosen harness
|
|
1442
|
+
source_ref: planner.criteria.shape
|
|
1443
|
+
strength: minor
|
|
1444
|
+
target_ref: planner.criteria.harness-templates
|
|
1445
|
+
type: runs_alongside
|
|
1446
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1447
|
+
- confidence: 1
|
|
1448
|
+
reason: the canonical steps are decoded into the journey
|
|
1449
|
+
source_ref: planner.decomposition.canonical-steps
|
|
1450
|
+
target_ref: planner.decomposition.train-journey
|
|
1451
|
+
type: enables
|
|
1452
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1453
|
+
- confidence: 1
|
|
1454
|
+
reason: unresolved document-trouble must block deciding from a partial reading
|
|
1455
|
+
source_ref: planner.decomposition.document-trouble-obligation
|
|
1456
|
+
target_ref: planner.decomposition.keep-pivot-kill
|
|
1457
|
+
type: blocks
|
|
1458
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1459
|
+
- confidence: 1
|
|
1460
|
+
reason: reframe sources to user-facing jobs before writing the job statement
|
|
1461
|
+
source_ref: planner.decomposition.domain-vs-technology
|
|
1462
|
+
target_ref: planner.decomposition.jtbd-vs-odi-grammar
|
|
1463
|
+
type: enables
|
|
1464
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1465
|
+
- confidence: 1
|
|
1466
|
+
reason: "with both grammars in hand, candidates can be decided"
|
|
1467
|
+
source_ref: planner.decomposition.jtbd-vs-odi-grammar
|
|
1468
|
+
target_ref: planner.decomposition.keep-pivot-kill
|
|
1469
|
+
type: enables
|
|
1470
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1471
|
+
- confidence: 1
|
|
1472
|
+
reason: "Ratify names the granularity rungs a decomposition never descended, so the keep/pivot/kill ladder is reported rather than silently left dangling"
|
|
1473
|
+
source_ref: planner.decomposition.keep-pivot-kill
|
|
1474
|
+
target_ref: planner.plan.granularity-completeness
|
|
1475
|
+
type: enables
|
|
1476
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1477
|
+
- confidence: 1
|
|
1478
|
+
reason: keep/pivot/kill is applied across the canonical job steps
|
|
1479
|
+
source_ref: planner.decomposition.keep-pivot-kill
|
|
1480
|
+
target_ref: planner.decomposition.canonical-steps
|
|
1481
|
+
type: requires
|
|
1482
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1483
|
+
- confidence: 1
|
|
1484
|
+
reason: scope the slice per invocation before framing the main job
|
|
1485
|
+
source_ref: planner.decomposition.local-scope
|
|
1486
|
+
target_ref: planner.decomposition.jtbd-vs-odi-grammar
|
|
1487
|
+
type: enables
|
|
1488
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1489
|
+
- confidence: 1
|
|
1490
|
+
reason: operator prose is normalized into a keep/pivot/kill decision
|
|
1491
|
+
source_ref: planner.decomposition.natural-language-normalization
|
|
1492
|
+
target_ref: planner.decomposition.keep-pivot-kill
|
|
1493
|
+
type: enables
|
|
1494
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1495
|
+
- confidence: 1
|
|
1496
|
+
reason: sibling/nominal trains are decoded after wagons and WMBTs are kept
|
|
1497
|
+
source_ref: planner.decomposition.train-journey
|
|
1498
|
+
target_ref: planner.decomposition.keep-pivot-kill
|
|
1499
|
+
type: follows
|
|
1500
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1501
|
+
- confidence: 1
|
|
1502
|
+
reason: "a wagon's rationale is recorded once the wagon is kept"
|
|
1503
|
+
source_ref: planner.decomposition.wagon-rationale
|
|
1504
|
+
target_ref: planner.decomposition.keep-pivot-kill
|
|
1505
|
+
type: follows
|
|
1506
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1507
|
+
- confidence: 1
|
|
1508
|
+
constraint: mandatory
|
|
1509
|
+
control: internal
|
|
1510
|
+
foundation: finish_to_finish
|
|
1511
|
+
reason: the anchor convention requires the artifact definition anchor to exist
|
|
1512
|
+
source_ref: planner.definition.anchor-required
|
|
1513
|
+
strength: critical
|
|
1514
|
+
target_ref: planner.artifact.definition
|
|
1515
|
+
type: requires
|
|
1516
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1517
|
+
- confidence: 1
|
|
1518
|
+
constraint: mandatory
|
|
1519
|
+
control: internal
|
|
1520
|
+
foundation: finish_to_finish
|
|
1521
|
+
reason: the anchor convention requires the feature definition anchor to exist
|
|
1522
|
+
source_ref: planner.definition.anchor-required
|
|
1523
|
+
strength: critical
|
|
1524
|
+
target_ref: planner.feature.definition
|
|
1525
|
+
type: requires
|
|
1526
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1527
|
+
- confidence: 1
|
|
1528
|
+
constraint: mandatory
|
|
1529
|
+
control: internal
|
|
1530
|
+
foundation: finish_to_finish
|
|
1531
|
+
reason: the anchor convention requires the interlocking definition anchor to exist
|
|
1532
|
+
source_ref: planner.definition.anchor-required
|
|
1533
|
+
strength: critical
|
|
1534
|
+
target_ref: planner.interlocking.definition
|
|
1535
|
+
type: requires
|
|
1536
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1537
|
+
- confidence: 1
|
|
1538
|
+
constraint: mandatory
|
|
1539
|
+
control: internal
|
|
1540
|
+
foundation: finish_to_finish
|
|
1541
|
+
reason: the anchor convention requires the theme definition anchor to exist
|
|
1542
|
+
source_ref: planner.definition.anchor-required
|
|
1543
|
+
strength: critical
|
|
1544
|
+
target_ref: planner.theme.definition
|
|
1545
|
+
type: requires
|
|
1546
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1547
|
+
- confidence: 1
|
|
1548
|
+
constraint: mandatory
|
|
1549
|
+
control: internal
|
|
1550
|
+
foundation: finish_to_finish
|
|
1551
|
+
reason: the anchor convention requires the train definition anchor to exist
|
|
1552
|
+
source_ref: planner.definition.anchor-required
|
|
1553
|
+
strength: critical
|
|
1554
|
+
target_ref: planner.train.definition
|
|
1555
|
+
type: requires
|
|
1556
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1557
|
+
- confidence: 1
|
|
1558
|
+
constraint: mandatory
|
|
1559
|
+
control: internal
|
|
1560
|
+
foundation: finish_to_finish
|
|
1561
|
+
reason: the anchor convention requires the wagon definition anchor to exist
|
|
1562
|
+
source_ref: planner.definition.anchor-required
|
|
1563
|
+
strength: critical
|
|
1564
|
+
target_ref: planner.wagon.definition
|
|
1565
|
+
type: requires
|
|
1566
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1567
|
+
- confidence: 1
|
|
1568
|
+
constraint: mandatory
|
|
1569
|
+
control: internal
|
|
1570
|
+
foundation: finish_to_finish
|
|
1571
|
+
reason: the anchor convention requires the wmbt definition anchor to exist
|
|
1572
|
+
source_ref: planner.definition.anchor-required
|
|
1573
|
+
strength: critical
|
|
1574
|
+
target_ref: planner.wmbt.definition
|
|
1575
|
+
type: requires
|
|
1576
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1577
|
+
- confidence: 1
|
|
1578
|
+
constraint: mandatory
|
|
1579
|
+
control: internal
|
|
1580
|
+
foundation: finish_to_start
|
|
1581
|
+
reason: seeds come from wagon produce/consume artifact names
|
|
1582
|
+
source_ref: planner.feature.artifact-seeded-naming
|
|
1583
|
+
strength: important
|
|
1584
|
+
target_ref: planner.artifact-naming.planner-artifacts-use-stable
|
|
1585
|
+
type: requires
|
|
1586
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1587
|
+
- confidence: 1
|
|
1588
|
+
constraint: mandatory
|
|
1589
|
+
control: internal
|
|
1590
|
+
foundation: finish_to_start
|
|
1591
|
+
reason: seeding a name needs the type-specific verb list
|
|
1592
|
+
source_ref: planner.feature.artifact-seeded-naming
|
|
1593
|
+
strength: important
|
|
1594
|
+
target_ref: planner.feature.verb-selection-by-artifact-type
|
|
1595
|
+
type: requires
|
|
1596
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1597
|
+
- confidence: 1
|
|
1598
|
+
constraint: mandatory
|
|
1599
|
+
control: internal
|
|
1600
|
+
foundation: finish_to_finish
|
|
1601
|
+
reason: a feature closes a feedback loop
|
|
1602
|
+
source_ref: planner.feature.definition
|
|
1603
|
+
strength: important
|
|
1604
|
+
target_ref: planner.feature.feedback-loop-close-the-loop
|
|
1605
|
+
type: requires
|
|
1606
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1607
|
+
- confidence: 1
|
|
1608
|
+
constraint: mandatory
|
|
1609
|
+
control: internal
|
|
1610
|
+
foundation: finish_to_finish
|
|
1611
|
+
reason: a feature stays within size hard-limits
|
|
1612
|
+
source_ref: planner.feature.definition
|
|
1613
|
+
strength: important
|
|
1614
|
+
target_ref: planner.feature.hard-limits
|
|
1615
|
+
type: requires
|
|
1616
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1617
|
+
- confidence: 1
|
|
1618
|
+
constraint: mandatory
|
|
1619
|
+
control: internal
|
|
1620
|
+
foundation: finish_to_finish
|
|
1621
|
+
reason: a feature declares urn status acceptance
|
|
1622
|
+
source_ref: planner.feature.definition
|
|
1623
|
+
strength: critical
|
|
1624
|
+
target_ref: planner.feature.shape
|
|
1625
|
+
type: requires
|
|
1626
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1627
|
+
- confidence: 1
|
|
1628
|
+
constraint: mandatory
|
|
1629
|
+
control: internal
|
|
1630
|
+
foundation: finish_to_finish
|
|
1631
|
+
reason: a feature stays within the size-max rule
|
|
1632
|
+
source_ref: planner.feature.definition
|
|
1633
|
+
strength: important
|
|
1634
|
+
target_ref: planner.feature.size-max-rule
|
|
1635
|
+
type: requires
|
|
1636
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1637
|
+
- confidence: 1
|
|
1638
|
+
constraint: mandatory
|
|
1639
|
+
control: internal
|
|
1640
|
+
foundation: finish_to_finish
|
|
1641
|
+
reason: a feature belongs to exactly one wagon
|
|
1642
|
+
source_ref: planner.feature.definition
|
|
1643
|
+
strength: critical
|
|
1644
|
+
target_ref: planner.feature.wagon-link
|
|
1645
|
+
type: requires
|
|
1646
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1647
|
+
- confidence: 1
|
|
1648
|
+
constraint: conditional
|
|
1649
|
+
control: internal
|
|
1650
|
+
foundation: finish_to_start
|
|
1651
|
+
reason: the close-the-loop rule fires only when kind is feedback-loop
|
|
1652
|
+
source_ref: planner.feature.feedback-loop-close-the-loop
|
|
1653
|
+
strength: important
|
|
1654
|
+
target_ref: planner.feature.feedback-loop-kind
|
|
1655
|
+
type: requires
|
|
1656
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1657
|
+
- confidence: 1
|
|
1658
|
+
constraint: mandatory
|
|
1659
|
+
control: internal
|
|
1660
|
+
foundation: finish_to_start
|
|
1661
|
+
reason: close-the-loop lives in a SMOKE acceptance on the feature WMBTs
|
|
1662
|
+
source_ref: planner.feature.feedback-loop-kind
|
|
1663
|
+
strength: important
|
|
1664
|
+
target_ref: planner.wmbt.must-have-smoke-acceptance
|
|
1665
|
+
type: requires
|
|
1666
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1667
|
+
- confidence: 1
|
|
1668
|
+
constraint: discretionary
|
|
1669
|
+
control: internal
|
|
1670
|
+
foundation: finish_to_start
|
|
1671
|
+
reason: the inline marker suppresses the close-the-loop rule for docs-only features
|
|
1672
|
+
source_ref: planner.feature.feedback-loop-suppression
|
|
1673
|
+
strength: minor
|
|
1674
|
+
target_ref: planner.feature.feedback-loop-close-the-loop
|
|
1675
|
+
type: relieves
|
|
1676
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1677
|
+
- confidence: 1
|
|
1678
|
+
constraint: discretionary
|
|
1679
|
+
control: internal
|
|
1680
|
+
foundation: start_to_start
|
|
1681
|
+
reason: the dated inline suppression marker is the sanctioned hatch that relieves the close-the-loop obligation until its UNTIL date
|
|
1682
|
+
source_ref: planner.feature.feedback-loop-suppression
|
|
1683
|
+
strength: important
|
|
1684
|
+
target_ref: planner.smoke.feedback-loop-close-the-loop
|
|
1685
|
+
type: relieves
|
|
1686
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1687
|
+
- confidence: 1
|
|
1688
|
+
constraint: mandatory
|
|
1689
|
+
control: internal
|
|
1690
|
+
foundation: finish_to_start
|
|
1691
|
+
reason: weights are keyed by the component types in the catalog
|
|
1692
|
+
source_ref: planner.feature.footprint-scoring
|
|
1693
|
+
strength: important
|
|
1694
|
+
target_ref: planner.component.type-catalog
|
|
1695
|
+
type: requires
|
|
1696
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1697
|
+
- confidence: 1
|
|
1698
|
+
constraint: discretionary
|
|
1699
|
+
control: internal
|
|
1700
|
+
foundation: start_to_start
|
|
1701
|
+
reason: estimation cues feed footprint scoring
|
|
1702
|
+
source_ref: planner.feature.footprint-scoring
|
|
1703
|
+
strength: minor
|
|
1704
|
+
target_ref: planner.feature.estimation
|
|
1705
|
+
type: runs_alongside
|
|
1706
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1707
|
+
- confidence: 1
|
|
1708
|
+
constraint: discretionary
|
|
1709
|
+
control: internal
|
|
1710
|
+
foundation: finish_to_start
|
|
1711
|
+
reason: grouping operates over enumerated WMBTs
|
|
1712
|
+
source_ref: planner.feature.grouping-strategy
|
|
1713
|
+
strength: minor
|
|
1714
|
+
target_ref: planner.wmbt.shape
|
|
1715
|
+
type: follows
|
|
1716
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1717
|
+
- confidence: 1
|
|
1718
|
+
constraint: discretionary
|
|
1719
|
+
control: internal
|
|
1720
|
+
foundation: start_to_start
|
|
1721
|
+
reason: grouping keeps a feature within its size budget
|
|
1722
|
+
source_ref: planner.feature.grouping-strategy
|
|
1723
|
+
strength: minor
|
|
1724
|
+
target_ref: planner.feature.size-max-rule
|
|
1725
|
+
type: runs_alongside
|
|
1726
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1727
|
+
- confidence: 1
|
|
1728
|
+
constraint: mandatory
|
|
1729
|
+
control: internal
|
|
1730
|
+
foundation: start_to_start
|
|
1731
|
+
reason: the feature name rule draws its leading-verb lexicon from the verb-selection table
|
|
1732
|
+
source_ref: planner.feature.name-is-verb-object
|
|
1733
|
+
strength: important
|
|
1734
|
+
target_ref: planner.feature.verb-selection-by-artifact-type
|
|
1735
|
+
type: requires
|
|
1736
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1737
|
+
- confidence: 1
|
|
1738
|
+
constraint: mandatory
|
|
1739
|
+
control: internal
|
|
1740
|
+
foundation: finish_to_start
|
|
1741
|
+
reason: shape aggregates the feedback-loop kind
|
|
1742
|
+
source_ref: planner.feature.shape
|
|
1743
|
+
strength: important
|
|
1744
|
+
target_ref: planner.feature.feedback-loop-kind
|
|
1745
|
+
type: requires
|
|
1746
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1747
|
+
- confidence: 1
|
|
1748
|
+
constraint: mandatory
|
|
1749
|
+
control: internal
|
|
1750
|
+
foundation: finish_to_start
|
|
1751
|
+
reason: shape aggregates the hard limits
|
|
1752
|
+
source_ref: planner.feature.shape
|
|
1753
|
+
strength: important
|
|
1754
|
+
target_ref: planner.feature.hard-limits
|
|
1755
|
+
type: requires
|
|
1756
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1757
|
+
- confidence: 1
|
|
1758
|
+
constraint: mandatory
|
|
1759
|
+
control: internal
|
|
1760
|
+
foundation: finish_to_start
|
|
1761
|
+
reason: shape aggregates the sizing rule
|
|
1762
|
+
source_ref: planner.feature.shape
|
|
1763
|
+
strength: important
|
|
1764
|
+
target_ref: planner.feature.size-max-rule
|
|
1765
|
+
type: requires
|
|
1766
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1767
|
+
- confidence: 1
|
|
1768
|
+
constraint: mandatory
|
|
1769
|
+
control: internal
|
|
1770
|
+
foundation: finish_to_start
|
|
1771
|
+
reason: a well-shaped feature declares its urn
|
|
1772
|
+
source_ref: planner.feature.shape
|
|
1773
|
+
strength: important
|
|
1774
|
+
target_ref: planner.feature.urn-naming
|
|
1775
|
+
type: requires
|
|
1776
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1777
|
+
- confidence: 1
|
|
1778
|
+
constraint: mandatory
|
|
1779
|
+
control: internal
|
|
1780
|
+
foundation: finish_to_start
|
|
1781
|
+
reason: the footprint size is one input to the max rule
|
|
1782
|
+
source_ref: planner.feature.size-max-rule
|
|
1783
|
+
strength: critical
|
|
1784
|
+
target_ref: planner.feature.footprint-scoring
|
|
1785
|
+
type: requires
|
|
1786
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1787
|
+
- confidence: 1
|
|
1788
|
+
constraint: mandatory
|
|
1789
|
+
control: internal
|
|
1790
|
+
foundation: finish_to_start
|
|
1791
|
+
reason: WMBT groups produce the WMBT-count size input
|
|
1792
|
+
source_ref: planner.feature.size-max-rule
|
|
1793
|
+
strength: important
|
|
1794
|
+
target_ref: planner.feature.grouping-strategy
|
|
1795
|
+
type: requires
|
|
1796
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1797
|
+
- confidence: 1
|
|
1798
|
+
constraint: mandatory
|
|
1799
|
+
control: internal
|
|
1800
|
+
foundation: start_to_start
|
|
1801
|
+
reason: sizing and hard limits both gate feature scope
|
|
1802
|
+
source_ref: planner.feature.size-max-rule
|
|
1803
|
+
strength: important
|
|
1804
|
+
target_ref: planner.feature.hard-limits
|
|
1805
|
+
type: runs_alongside
|
|
1806
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1807
|
+
- confidence: 1
|
|
1808
|
+
constraint: discretionary
|
|
1809
|
+
control: internal
|
|
1810
|
+
foundation: finish_to_start
|
|
1811
|
+
reason: the feature URN segment comes from artifact-seeded naming
|
|
1812
|
+
source_ref: planner.feature.urn-naming
|
|
1813
|
+
strength: minor
|
|
1814
|
+
target_ref: planner.feature.artifact-seeded-naming
|
|
1815
|
+
type: follows
|
|
1816
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1817
|
+
- confidence: 1
|
|
1818
|
+
constraint: mandatory
|
|
1819
|
+
control: external
|
|
1820
|
+
foundation: finish_to_start
|
|
1821
|
+
reason: a feature URN embeds its parent wagon slug
|
|
1822
|
+
source_ref: planner.feature.urn-naming
|
|
1823
|
+
strength: important
|
|
1824
|
+
target_ref: planner.wagon.urn-naming
|
|
1825
|
+
type: requires
|
|
1826
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1827
|
+
- confidence: 1
|
|
1828
|
+
constraint: discretionary
|
|
1829
|
+
control: internal
|
|
1830
|
+
foundation: start_to_start
|
|
1831
|
+
reason: the URN feature segment is the artifact-seeded verb-object name
|
|
1832
|
+
source_ref: planner.feature.urn-naming
|
|
1833
|
+
strength: minor
|
|
1834
|
+
target_ref: planner.feature.artifact-seeded-naming
|
|
1835
|
+
type: runs_alongside
|
|
1836
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1837
|
+
- confidence: 1
|
|
1838
|
+
constraint: mandatory
|
|
1839
|
+
control: internal
|
|
1840
|
+
foundation: finish_to_start
|
|
1841
|
+
reason: validation enforces the hard limits
|
|
1842
|
+
source_ref: planner.feature.validation-rules
|
|
1843
|
+
strength: important
|
|
1844
|
+
target_ref: planner.feature.hard-limits
|
|
1845
|
+
type: requires
|
|
1846
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1847
|
+
- confidence: 1
|
|
1848
|
+
constraint: mandatory
|
|
1849
|
+
control: internal
|
|
1850
|
+
foundation: finish_to_start
|
|
1851
|
+
reason: validation enforces the max size rule
|
|
1852
|
+
source_ref: planner.feature.validation-rules
|
|
1853
|
+
strength: important
|
|
1854
|
+
target_ref: planner.feature.size-max-rule
|
|
1855
|
+
type: requires
|
|
1856
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1857
|
+
- confidence: 1
|
|
1858
|
+
constraint: mandatory
|
|
1859
|
+
control: external
|
|
1860
|
+
foundation: finish_to_start
|
|
1861
|
+
reason: a feature is registered in its wagon _features.yaml
|
|
1862
|
+
source_ref: planner.feature.wagon-link
|
|
1863
|
+
strength: important
|
|
1864
|
+
target_ref: planner.wagon.features
|
|
1865
|
+
type: requires
|
|
1866
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1867
|
+
- confidence: 1
|
|
1868
|
+
constraint: mandatory
|
|
1869
|
+
control: internal
|
|
1870
|
+
foundation: finish_to_start
|
|
1871
|
+
reason: "REST endpoint shapes are built from the interface naming patterns, so the mapping presupposes them"
|
|
1872
|
+
source_ref: planner.interface.api-mapping
|
|
1873
|
+
strength: important
|
|
1874
|
+
target_ref: planner.interface.naming-patterns
|
|
1875
|
+
type: requires
|
|
1876
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1877
|
+
- confidence: 1
|
|
1878
|
+
constraint: mandatory
|
|
1879
|
+
control: internal
|
|
1880
|
+
foundation: finish_to_start
|
|
1881
|
+
reason: verb selection keys off the event/state/data/config naming classification
|
|
1882
|
+
source_ref: planner.interface.artifact-transformation
|
|
1883
|
+
strength: important
|
|
1884
|
+
target_ref: planner.interface.naming-patterns
|
|
1885
|
+
type: requires
|
|
1886
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1887
|
+
- confidence: 1
|
|
1888
|
+
constraint: mandatory
|
|
1889
|
+
control: internal
|
|
1890
|
+
foundation: finish_to_start
|
|
1891
|
+
reason: the contract URN scheme is the interface-side application of the stable-naming grammar
|
|
1892
|
+
source_ref: planner.interface.contract-urn
|
|
1893
|
+
strength: important
|
|
1894
|
+
target_ref: planner.artifact-naming.planner-artifacts-use-stable
|
|
1895
|
+
type: follows
|
|
1896
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1897
|
+
- confidence: 1
|
|
1898
|
+
constraint: mandatory
|
|
1899
|
+
control: internal
|
|
1900
|
+
foundation: finish_to_start
|
|
1901
|
+
reason: orphan detection is defined via bidirectional-linkage resolution of the contract URN
|
|
1902
|
+
source_ref: planner.interface.orphan-detection
|
|
1903
|
+
strength: important
|
|
1904
|
+
target_ref: planner.interface.contract-urn
|
|
1905
|
+
type: requires
|
|
1906
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1907
|
+
- confidence: 1
|
|
1908
|
+
constraint: mandatory
|
|
1909
|
+
control: internal
|
|
1910
|
+
foundation: finish_to_start
|
|
1911
|
+
reason: "the producing wagon generates the artifact contract, which must carry a well-formed contract URN"
|
|
1912
|
+
source_ref: planner.interface.ownership-rules
|
|
1913
|
+
strength: important
|
|
1914
|
+
target_ref: planner.interface.contract-urn
|
|
1915
|
+
type: requires
|
|
1916
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1917
|
+
- confidence: 1
|
|
1918
|
+
constraint: discretionary
|
|
1919
|
+
control: internal
|
|
1920
|
+
foundation: finish_to_start
|
|
1921
|
+
reason: FLAT/FACETED/COLLECTION layouts realise the colon/dot-to-path mapping
|
|
1922
|
+
source_ref: planner.interface.structure-rules
|
|
1923
|
+
strength: minor
|
|
1924
|
+
target_ref: planner.artifact-naming.planner-artifacts-use-stable
|
|
1925
|
+
type: follows
|
|
1926
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1927
|
+
- confidence: 1
|
|
1928
|
+
constraint: discretionary
|
|
1929
|
+
control: internal
|
|
1930
|
+
foundation: finish_to_start
|
|
1931
|
+
reason: the tests/ rule targets the leaf directories produced by the layouts
|
|
1932
|
+
source_ref: planner.interface.tests-subdirectory
|
|
1933
|
+
strength: minor
|
|
1934
|
+
target_ref: planner.interface.structure-rules
|
|
1935
|
+
type: follows
|
|
1936
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1937
|
+
- confidence: 1
|
|
1938
|
+
constraint: mandatory
|
|
1939
|
+
control: internal
|
|
1940
|
+
foundation: finish_to_finish
|
|
1941
|
+
reason: composite dispatch keys are exceptional
|
|
1942
|
+
source_ref: planner.interlocking.definition
|
|
1943
|
+
strength: important
|
|
1944
|
+
target_ref: planner.train.dispatch-composite-key-exceptional
|
|
1945
|
+
type: requires
|
|
1946
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1947
|
+
- confidence: 1
|
|
1948
|
+
constraint: mandatory
|
|
1949
|
+
control: internal
|
|
1950
|
+
foundation: finish_to_finish
|
|
1951
|
+
reason: the dispatch map is a declared routing registry
|
|
1952
|
+
source_ref: planner.interlocking.definition
|
|
1953
|
+
strength: critical
|
|
1954
|
+
target_ref: planner.train.dispatch-map-is-registry
|
|
1955
|
+
type: requires
|
|
1956
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1957
|
+
- confidence: 1
|
|
1958
|
+
constraint: mandatory
|
|
1959
|
+
control: internal
|
|
1960
|
+
foundation: finish_to_start
|
|
1961
|
+
reason: "the registry mirrors entrypoint.surfaces, so the mirror is meaningful only where the entrypoint shape is enforced"
|
|
1962
|
+
source_ref: planner.interlocking.registry-mirrors-document
|
|
1963
|
+
strength: important
|
|
1964
|
+
target_ref: planner.train.interlocking-entrypoint-shape
|
|
1965
|
+
type: requires
|
|
1966
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1967
|
+
- confidence: 1
|
|
1968
|
+
constraint: mandatory
|
|
1969
|
+
control: internal
|
|
1970
|
+
foundation: finish_to_start
|
|
1971
|
+
reason: the registry can only be checked against its documents once both live at the declared interlocking home
|
|
1972
|
+
source_ref: planner.interlocking.registry-mirrors-document
|
|
1973
|
+
strength: important
|
|
1974
|
+
target_ref: planner.train.interlocking-home
|
|
1975
|
+
type: requires
|
|
1976
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1977
|
+
- confidence: 0.9
|
|
1978
|
+
constraint: discretionary
|
|
1979
|
+
control: internal
|
|
1980
|
+
foundation: start_to_start
|
|
1981
|
+
reason: "both are required, populated issue-body section rules enforced together"
|
|
1982
|
+
source_ref: planner.issue-body.graph-context-required
|
|
1983
|
+
strength: minor
|
|
1984
|
+
target_ref: planner.issue-body.dependency-entries-must-be-classified
|
|
1985
|
+
type: runs_alongside
|
|
1986
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1987
|
+
- confidence: 1
|
|
1988
|
+
reason: the Confirm boundary both gates authoring and binds the plan to its tracking issue
|
|
1989
|
+
source_ref: planner.plan.confirm-before-author
|
|
1990
|
+
target_ref: planner.plan.confirm-binds-an-issue
|
|
1991
|
+
type: enables
|
|
1992
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
1993
|
+
- confidence: 1
|
|
1994
|
+
constraint: mandatory
|
|
1995
|
+
control: internal
|
|
1996
|
+
foundation: finish_to_start
|
|
1997
|
+
reason: Confirm gates a train-bearing plan on interlocking sanity
|
|
1998
|
+
source_ref: planner.plan.confirm-requires-interlocking-sanity
|
|
1999
|
+
strength: important
|
|
2000
|
+
target_ref: planner.train.interlocking-home
|
|
2001
|
+
type: requires
|
|
2002
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2003
|
+
- confidence: 1
|
|
2004
|
+
reason: "the session lifecycle's Ratify gate enforces confirm-before-author"
|
|
2005
|
+
source_ref: planner.plan.session-lifecycle
|
|
2006
|
+
target_ref: planner.plan.confirm-before-author
|
|
2007
|
+
type: requires
|
|
2008
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2009
|
+
- confidence: 1
|
|
2010
|
+
constraint: mandatory
|
|
2011
|
+
control: internal
|
|
2012
|
+
foundation: finish_to_start
|
|
2013
|
+
reason: "Compose's exit condition is a convention-shaped decomposition, which is what holding each hand-authored spec to its artifact schema actually checks"
|
|
2014
|
+
source_ref: planner.plan.session-lifecycle
|
|
2015
|
+
strength: critical
|
|
2016
|
+
target_ref: planner.plan.spec-is-schema-valid
|
|
2017
|
+
type: requires
|
|
2018
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2019
|
+
- confidence: 1
|
|
2020
|
+
constraint: mandatory
|
|
2021
|
+
control: internal
|
|
2022
|
+
foundation: finish_to_start
|
|
2023
|
+
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"
|
|
2024
|
+
source_ref: planner.plan.spec-is-schema-valid
|
|
2025
|
+
strength: critical
|
|
2026
|
+
target_ref: planner.wagon.urn-naming
|
|
2027
|
+
type: requires
|
|
2028
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2029
|
+
- confidence: 1
|
|
2030
|
+
reason: the ladder report is advisory and rides on the same Ratify lock the spec schema gate fails closed on
|
|
2031
|
+
source_ref: planner.plan.spec-is-schema-valid
|
|
2032
|
+
target_ref: planner.plan.granularity-completeness
|
|
2033
|
+
type: runs_alongside
|
|
2034
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2035
|
+
- confidence: 0.9
|
|
2036
|
+
constraint: discretionary
|
|
2037
|
+
control: internal
|
|
2038
|
+
foundation: start_to_start
|
|
2039
|
+
reason: no-orphan-node graph completeness is a planning-artifact integrity rule alongside acceptance completeness
|
|
2040
|
+
source_ref: planner.relationship.no-orphan-nodes
|
|
2041
|
+
strength: minor
|
|
2042
|
+
target_ref: planner.acceptance.complete
|
|
2043
|
+
type: runs_alongside
|
|
2044
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2045
|
+
- confidence: 0.9
|
|
2046
|
+
constraint: discretionary
|
|
2047
|
+
control: internal
|
|
2048
|
+
foundation: start_to_start
|
|
2049
|
+
reason: no-orphan-node graph completeness is a planning-artifact integrity rule alongside acceptance well-formedness
|
|
2050
|
+
source_ref: planner.relationship.no-orphan-nodes
|
|
2051
|
+
strength: minor
|
|
2052
|
+
target_ref: planner.acceptance.well-formed
|
|
2053
|
+
type: runs_alongside
|
|
2054
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2055
|
+
- confidence: 1
|
|
2056
|
+
constraint: mandatory
|
|
2057
|
+
control: internal
|
|
2058
|
+
foundation: start_to_start
|
|
2059
|
+
reason: "the SMOKE close-the-loop obligation only applies to a feature that declares kind: feedback-loop, so the kind rule is its precondition"
|
|
2060
|
+
source_ref: planner.smoke.feedback-loop-close-the-loop
|
|
2061
|
+
strength: important
|
|
2062
|
+
target_ref: planner.feature.feedback-loop-kind
|
|
2063
|
+
type: requires
|
|
2064
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2065
|
+
- confidence: 1
|
|
2066
|
+
constraint: mandatory
|
|
2067
|
+
control: internal
|
|
2068
|
+
foundation: start_to_start
|
|
2069
|
+
reason: "both police SMOKE-phase authenticity: one forbids synthetic wiring, the other requires the consumer end be exercised, and together they stop a SMOKE suite that is green without proving anything"
|
|
2070
|
+
source_ref: planner.smoke.synthetic-fixture-bypass
|
|
2071
|
+
strength: important
|
|
2072
|
+
target_ref: planner.smoke.feedback-loop-close-the-loop
|
|
2073
|
+
type: runs_alongside
|
|
2074
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2075
|
+
- confidence: 1
|
|
2076
|
+
constraint: mandatory
|
|
2077
|
+
control: internal
|
|
2078
|
+
foundation: finish_to_start
|
|
2079
|
+
reason: layer/sequence mapping is keyed by the nine step names
|
|
2080
|
+
source_ref: planner.steps.architecture-routing
|
|
2081
|
+
strength: important
|
|
2082
|
+
target_ref: planner.steps.jtbd-taxonomy
|
|
2083
|
+
type: requires
|
|
2084
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2085
|
+
- confidence: 1
|
|
2086
|
+
constraint: discretionary
|
|
2087
|
+
control: internal
|
|
2088
|
+
foundation: start_to_start
|
|
2089
|
+
reason: both decorate the same nine steps from complementary axes
|
|
2090
|
+
source_ref: planner.steps.architecture-routing
|
|
2091
|
+
strength: minor
|
|
2092
|
+
target_ref: planner.steps.linguistic-patterns
|
|
2093
|
+
type: runs_alongside
|
|
2094
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2095
|
+
- confidence: 1
|
|
2096
|
+
constraint: mandatory
|
|
2097
|
+
control: internal
|
|
2098
|
+
foundation: finish_to_start
|
|
2099
|
+
reason: the ordered 9-step taxonomy supplies the ordering the sequence rule asserts
|
|
2100
|
+
source_ref: planner.steps.jtbd-taxonomy
|
|
2101
|
+
strength: important
|
|
2102
|
+
target_ref: planner.steps.sequence
|
|
2103
|
+
type: enables
|
|
2104
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2105
|
+
- confidence: 1
|
|
2106
|
+
constraint: mandatory
|
|
2107
|
+
control: internal
|
|
2108
|
+
foundation: finish_to_start
|
|
2109
|
+
reason: patterns are defined per step name
|
|
2110
|
+
source_ref: planner.steps.linguistic-patterns
|
|
2111
|
+
strength: important
|
|
2112
|
+
target_ref: planner.steps.jtbd-taxonomy
|
|
2113
|
+
type: requires
|
|
2114
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2115
|
+
- confidence: 0.9
|
|
2116
|
+
constraint: discretionary
|
|
2117
|
+
control: internal
|
|
2118
|
+
foundation: start_to_start
|
|
2119
|
+
reason: ordered step pre-conditions/outputs and the train artifact flow both sequence the plan
|
|
2120
|
+
source_ref: planner.steps.sequence
|
|
2121
|
+
strength: minor
|
|
2122
|
+
target_ref: planner.train.artifact-flow
|
|
2123
|
+
type: runs_alongside
|
|
2124
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2125
|
+
- confidence: 1
|
|
2126
|
+
constraint: discretionary
|
|
2127
|
+
control: internal
|
|
2128
|
+
foundation: finish_to_start
|
|
2129
|
+
reason: plan/test/code archetype alignment presupposes a canonical theme
|
|
2130
|
+
source_ref: planner.theme.archetype-alignment
|
|
2131
|
+
strength: minor
|
|
2132
|
+
target_ref: planner.theme.must-be-canonical
|
|
2133
|
+
type: follows
|
|
2134
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2135
|
+
- confidence: 1
|
|
2136
|
+
constraint: mandatory
|
|
2137
|
+
control: internal
|
|
2138
|
+
foundation: finish_to_start
|
|
2139
|
+
reason: the commons/coach import boundary is only checkable once a theme resolves to canonical
|
|
2140
|
+
source_ref: planner.theme.commons-coach-boundary
|
|
2141
|
+
strength: important
|
|
2142
|
+
target_ref: planner.theme.must-be-canonical
|
|
2143
|
+
type: follows
|
|
2144
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2145
|
+
- confidence: 1
|
|
2146
|
+
constraint: mandatory
|
|
2147
|
+
control: internal
|
|
2148
|
+
foundation: finish_to_finish
|
|
2149
|
+
reason: each theme aligns to one archetype
|
|
2150
|
+
source_ref: planner.theme.definition
|
|
2151
|
+
strength: important
|
|
2152
|
+
target_ref: planner.theme.archetype-alignment
|
|
2153
|
+
type: requires
|
|
2154
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2155
|
+
- confidence: 1
|
|
2156
|
+
constraint: mandatory
|
|
2157
|
+
control: internal
|
|
2158
|
+
foundation: finish_to_finish
|
|
2159
|
+
reason: a theme is one of the five canonical digits
|
|
2160
|
+
source_ref: planner.theme.definition
|
|
2161
|
+
strength: critical
|
|
2162
|
+
target_ref: planner.theme.canonical-taxonomy
|
|
2163
|
+
type: requires
|
|
2164
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2165
|
+
- confidence: 1
|
|
2166
|
+
constraint: mandatory
|
|
2167
|
+
control: internal
|
|
2168
|
+
foundation: finish_to_finish
|
|
2169
|
+
reason: commons is consumable without importing coach
|
|
2170
|
+
source_ref: planner.theme.definition
|
|
2171
|
+
strength: important
|
|
2172
|
+
target_ref: planner.theme.commons-coach-boundary
|
|
2173
|
+
type: requires
|
|
2174
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2175
|
+
- confidence: 1
|
|
2176
|
+
constraint: mandatory
|
|
2177
|
+
control: internal
|
|
2178
|
+
foundation: finish_to_finish
|
|
2179
|
+
reason: non-canonical themes are rejected
|
|
2180
|
+
source_ref: planner.theme.definition
|
|
2181
|
+
strength: critical
|
|
2182
|
+
target_ref: planner.theme.must-be-canonical
|
|
2183
|
+
type: requires
|
|
2184
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2185
|
+
- confidence: 1
|
|
2186
|
+
constraint: mandatory
|
|
2187
|
+
control: internal
|
|
2188
|
+
foundation: finish_to_finish
|
|
2189
|
+
reason: digit 0 commons is the mandatory locked floor
|
|
2190
|
+
source_ref: planner.theme.definition
|
|
2191
|
+
strength: critical
|
|
2192
|
+
target_ref: planner.theme.theme-zero-mandatory
|
|
2193
|
+
type: requires
|
|
2194
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2195
|
+
- confidence: 1
|
|
2196
|
+
constraint: mandatory
|
|
2197
|
+
control: internal
|
|
2198
|
+
foundation: finish_to_finish
|
|
2199
|
+
reason: the theme token namespaces the artifact URN
|
|
2200
|
+
source_ref: planner.theme.definition
|
|
2201
|
+
strength: important
|
|
2202
|
+
target_ref: planner.theme.urn-namespace-matches
|
|
2203
|
+
type: requires
|
|
2204
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2205
|
+
- confidence: 1
|
|
2206
|
+
constraint: mandatory
|
|
2207
|
+
control: internal
|
|
2208
|
+
foundation: finish_to_start
|
|
2209
|
+
reason: the canonical set is defined by the taxonomy
|
|
2210
|
+
source_ref: planner.theme.must-be-canonical
|
|
2211
|
+
strength: critical
|
|
2212
|
+
target_ref: planner.theme.canonical-taxonomy
|
|
2213
|
+
type: requires
|
|
2214
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2215
|
+
- confidence: 1
|
|
2216
|
+
constraint: mandatory
|
|
2217
|
+
control: internal
|
|
2218
|
+
foundation: finish_to_start
|
|
2219
|
+
reason: a canonical theme set must include the non-removable commons@0 floor
|
|
2220
|
+
source_ref: planner.theme.must-be-canonical
|
|
2221
|
+
strength: critical
|
|
2222
|
+
target_ref: planner.theme.theme-zero-mandatory
|
|
2223
|
+
type: requires
|
|
2224
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2225
|
+
- confidence: 1
|
|
2226
|
+
constraint: mandatory
|
|
2227
|
+
control: internal
|
|
2228
|
+
foundation: finish_to_start
|
|
2229
|
+
reason: "digit 0 = commons is fixed by the taxonomy's theme_zero token"
|
|
2230
|
+
source_ref: planner.theme.theme-zero-mandatory
|
|
2231
|
+
strength: critical
|
|
2232
|
+
target_ref: planner.theme.canonical-taxonomy
|
|
2233
|
+
type: requires
|
|
2234
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2235
|
+
- confidence: 1
|
|
2236
|
+
constraint: mandatory
|
|
2237
|
+
control: internal
|
|
2238
|
+
foundation: finish_to_start
|
|
2239
|
+
reason: matching a produced-URN theme-prefix to the wagon theme presupposes a canonical theme
|
|
2240
|
+
source_ref: planner.theme.urn-namespace-matches
|
|
2241
|
+
strength: important
|
|
2242
|
+
target_ref: planner.theme.must-be-canonical
|
|
2243
|
+
type: follows
|
|
2244
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2245
|
+
- confidence: 1
|
|
2246
|
+
constraint: mandatory
|
|
2247
|
+
control: internal
|
|
2248
|
+
foundation: finish_to_start
|
|
2249
|
+
reason: the theme-prefix must be a canonical theme
|
|
2250
|
+
source_ref: planner.theme.urn-namespace-matches
|
|
2251
|
+
strength: important
|
|
2252
|
+
target_ref: planner.theme.canonical-taxonomy
|
|
2253
|
+
type: requires
|
|
2254
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2255
|
+
- confidence: 1
|
|
2256
|
+
constraint: mandatory
|
|
2257
|
+
control: internal
|
|
2258
|
+
foundation: start_to_start
|
|
2259
|
+
reason: extends coverage to the Acceptance Authority boundary
|
|
2260
|
+
source_ref: planner.train.acceptance-commit-failures-covered
|
|
2261
|
+
strength: important
|
|
2262
|
+
target_ref: planner.coverage.bidirectional-coverage-between-trains
|
|
2263
|
+
type: runs_alongside
|
|
2264
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2265
|
+
- confidence: 1
|
|
2266
|
+
constraint: discretionary
|
|
2267
|
+
control: internal
|
|
2268
|
+
foundation: start_to_start
|
|
2269
|
+
reason: train acceptances live in the spec file
|
|
2270
|
+
source_ref: planner.train.acceptances
|
|
2271
|
+
strength: minor
|
|
2272
|
+
target_ref: planner.train.registry
|
|
2273
|
+
type: runs_alongside
|
|
2274
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2275
|
+
- confidence: 1
|
|
2276
|
+
constraint: mandatory
|
|
2277
|
+
control: internal
|
|
2278
|
+
foundation: finish_to_finish
|
|
2279
|
+
reason: a train moves artifacts across wagons
|
|
2280
|
+
source_ref: planner.train.definition
|
|
2281
|
+
strength: important
|
|
2282
|
+
target_ref: planner.train.artifact-flow
|
|
2283
|
+
type: requires
|
|
2284
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2285
|
+
- confidence: 1
|
|
2286
|
+
constraint: mandatory
|
|
2287
|
+
control: internal
|
|
2288
|
+
foundation: finish_to_finish
|
|
2289
|
+
reason: family behavior-or-delivery is part of train identity
|
|
2290
|
+
source_ref: planner.train.definition
|
|
2291
|
+
strength: important
|
|
2292
|
+
target_ref: planner.train.family
|
|
2293
|
+
type: requires
|
|
2294
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2295
|
+
- confidence: 1
|
|
2296
|
+
constraint: mandatory
|
|
2297
|
+
control: internal
|
|
2298
|
+
foundation: finish_to_finish
|
|
2299
|
+
reason: family is fixed by the terminal contract
|
|
2300
|
+
source_ref: planner.train.definition
|
|
2301
|
+
strength: critical
|
|
2302
|
+
target_ref: planner.train.family-matches-terminal-contract
|
|
2303
|
+
type: requires
|
|
2304
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2305
|
+
- confidence: 1
|
|
2306
|
+
constraint: mandatory
|
|
2307
|
+
control: internal
|
|
2308
|
+
foundation: finish_to_finish
|
|
2309
|
+
reason: the journey starts from a declared initial input
|
|
2310
|
+
source_ref: planner.train.definition
|
|
2311
|
+
strength: important
|
|
2312
|
+
target_ref: planner.train.initial-cargo-inputs-declared
|
|
2313
|
+
type: requires
|
|
2314
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2315
|
+
- confidence: 1
|
|
2316
|
+
constraint: mandatory
|
|
2317
|
+
control: internal
|
|
2318
|
+
foundation: finish_to_finish
|
|
2319
|
+
reason: a train is strictly linear
|
|
2320
|
+
source_ref: planner.train.definition
|
|
2321
|
+
strength: critical
|
|
2322
|
+
target_ref: planner.train.linearity
|
|
2323
|
+
type: requires
|
|
2324
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2325
|
+
- confidence: 1
|
|
2326
|
+
constraint: mandatory
|
|
2327
|
+
control: internal
|
|
2328
|
+
foundation: finish_to_finish
|
|
2329
|
+
reason: steps move artifacts between declared participants
|
|
2330
|
+
source_ref: planner.train.definition
|
|
2331
|
+
strength: important
|
|
2332
|
+
target_ref: planner.train.participants
|
|
2333
|
+
type: requires
|
|
2334
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2335
|
+
- confidence: 1
|
|
2336
|
+
constraint: mandatory
|
|
2337
|
+
control: internal
|
|
2338
|
+
foundation: finish_to_finish
|
|
2339
|
+
reason: a train tells ONE coherent journey
|
|
2340
|
+
source_ref: planner.train.definition
|
|
2341
|
+
strength: critical
|
|
2342
|
+
target_ref: planner.train.scope
|
|
2343
|
+
type: requires
|
|
2344
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2345
|
+
- confidence: 1
|
|
2346
|
+
constraint: mandatory
|
|
2347
|
+
control: internal
|
|
2348
|
+
foundation: finish_to_finish
|
|
2349
|
+
reason: a train is an ordered step sequence
|
|
2350
|
+
source_ref: planner.train.definition
|
|
2351
|
+
strength: important
|
|
2352
|
+
target_ref: planner.train.sequence
|
|
2353
|
+
type: requires
|
|
2354
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2355
|
+
- confidence: 1
|
|
2356
|
+
constraint: mandatory
|
|
2357
|
+
control: internal
|
|
2358
|
+
foundation: finish_to_finish
|
|
2359
|
+
reason: the journey ends in exactly one terminal contract
|
|
2360
|
+
source_ref: planner.train.definition
|
|
2361
|
+
strength: critical
|
|
2362
|
+
target_ref: planner.train.terminal-contract
|
|
2363
|
+
type: requires
|
|
2364
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2365
|
+
- confidence: 1
|
|
2366
|
+
constraint: discretionary
|
|
2367
|
+
control: external
|
|
2368
|
+
foundation: finish_to_start
|
|
2369
|
+
reason: train data-flow dependencies follow wagon produce/consume artifacts
|
|
2370
|
+
source_ref: planner.train.dependencies
|
|
2371
|
+
strength: minor
|
|
2372
|
+
target_ref: planner.wagon.produce-consume-artifacts
|
|
2373
|
+
type: requires
|
|
2374
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2375
|
+
- confidence: 1
|
|
2376
|
+
constraint: discretionary
|
|
2377
|
+
control: internal
|
|
2378
|
+
foundation: start_to_start
|
|
2379
|
+
reason: dependencies are declared in the spec
|
|
2380
|
+
source_ref: planner.train.dependencies
|
|
2381
|
+
strength: minor
|
|
2382
|
+
target_ref: planner.train.registry
|
|
2383
|
+
type: runs_alongside
|
|
2384
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2385
|
+
- confidence: 1
|
|
2386
|
+
constraint: mandatory
|
|
2387
|
+
control: internal
|
|
2388
|
+
foundation: finish_to_start
|
|
2389
|
+
reason: The composite-key exception is a constraint on entries within the dispatch registry.
|
|
2390
|
+
source_ref: planner.train.dispatch-composite-key-exceptional
|
|
2391
|
+
strength: important
|
|
2392
|
+
target_ref: planner.train.dispatch-map-is-registry
|
|
2393
|
+
type: requires
|
|
2394
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2395
|
+
- confidence: 1
|
|
2396
|
+
constraint: mandatory
|
|
2397
|
+
control: internal
|
|
2398
|
+
foundation: start_to_start
|
|
2399
|
+
reason: Dispatch routes the produced-artifact divergence alongside the normal train artifact flow.
|
|
2400
|
+
source_ref: planner.train.dispatch-map-is-registry
|
|
2401
|
+
strength: important
|
|
2402
|
+
target_ref: planner.train.artifact-flow
|
|
2403
|
+
type: runs_alongside
|
|
2404
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2405
|
+
- confidence: 1
|
|
2406
|
+
constraint: mandatory
|
|
2407
|
+
control: internal
|
|
2408
|
+
foundation: finish_to_start
|
|
2409
|
+
reason: family is derived from the declared terminal contract
|
|
2410
|
+
source_ref: planner.train.family
|
|
2411
|
+
strength: important
|
|
2412
|
+
target_ref: planner.train.terminal-contract
|
|
2413
|
+
type: requires
|
|
2414
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2415
|
+
- confidence: 1
|
|
2416
|
+
constraint: mandatory
|
|
2417
|
+
control: internal
|
|
2418
|
+
foundation: start_to_start
|
|
2419
|
+
reason: family is a train classification axis orthogonal to the variant category
|
|
2420
|
+
source_ref: planner.train.family
|
|
2421
|
+
strength: important
|
|
2422
|
+
target_ref: planner.train.categories
|
|
2423
|
+
type: runs_alongside
|
|
2424
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2425
|
+
- confidence: 1
|
|
2426
|
+
constraint: mandatory
|
|
2427
|
+
control: internal
|
|
2428
|
+
foundation: finish_to_start
|
|
2429
|
+
reason: the consistency rule checks the family against the terminal contract
|
|
2430
|
+
source_ref: planner.train.family-matches-terminal-contract
|
|
2431
|
+
strength: important
|
|
2432
|
+
target_ref: planner.train.terminal-contract
|
|
2433
|
+
type: requires
|
|
2434
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2435
|
+
- confidence: 1
|
|
2436
|
+
constraint: discretionary
|
|
2437
|
+
control: internal
|
|
2438
|
+
foundation: start_to_start
|
|
2439
|
+
reason: declared initial inputs seed Cargo before the wagon sequence
|
|
2440
|
+
source_ref: planner.train.initial-cargo-inputs-declared
|
|
2441
|
+
strength: important
|
|
2442
|
+
target_ref: planner.train.sequence
|
|
2443
|
+
type: enables
|
|
2444
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2445
|
+
- confidence: 1
|
|
2446
|
+
constraint: mandatory
|
|
2447
|
+
control: internal
|
|
2448
|
+
foundation: finish_to_start
|
|
2449
|
+
reason: the no-cargo boundary applies to homed interlockings
|
|
2450
|
+
source_ref: planner.train.interlocking-does-not-carry-cargo
|
|
2451
|
+
strength: important
|
|
2452
|
+
target_ref: planner.train.interlocking-home
|
|
2453
|
+
type: requires
|
|
2454
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2455
|
+
- confidence: 1
|
|
2456
|
+
constraint: mandatory
|
|
2457
|
+
control: internal
|
|
2458
|
+
foundation: finish_to_start
|
|
2459
|
+
reason: entrypoint shape is declared on an interlocking in the canonical home
|
|
2460
|
+
source_ref: planner.train.interlocking-entrypoint-shape
|
|
2461
|
+
strength: important
|
|
2462
|
+
target_ref: planner.train.interlocking-home
|
|
2463
|
+
type: requires
|
|
2464
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2465
|
+
- confidence: 1
|
|
2466
|
+
constraint: mandatory
|
|
2467
|
+
control: internal
|
|
2468
|
+
foundation: finish_to_start
|
|
2469
|
+
reason: fragment and acceptance binding presupposes the homed interlocking
|
|
2470
|
+
source_ref: planner.train.interlocking-fragment-acceptance-binding
|
|
2471
|
+
strength: important
|
|
2472
|
+
target_ref: planner.train.interlocking-home
|
|
2473
|
+
type: requires
|
|
2474
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2475
|
+
- confidence: 1
|
|
2476
|
+
constraint: mandatory
|
|
2477
|
+
control: internal
|
|
2478
|
+
foundation: finish_to_start
|
|
2479
|
+
reason: guard coverage is proven against the route to train projection
|
|
2480
|
+
source_ref: planner.train.interlocking-guard-coverage
|
|
2481
|
+
strength: important
|
|
2482
|
+
target_ref: planner.train.interlocking-projection-equivalence
|
|
2483
|
+
type: requires
|
|
2484
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2485
|
+
- confidence: 1
|
|
2486
|
+
constraint: mandatory
|
|
2487
|
+
control: internal
|
|
2488
|
+
foundation: finish_to_start
|
|
2489
|
+
reason: guard grammar is declared on a homed interlocking
|
|
2490
|
+
source_ref: planner.train.interlocking-guard-grammar
|
|
2491
|
+
strength: important
|
|
2492
|
+
target_ref: planner.train.interlocking-home
|
|
2493
|
+
type: requires
|
|
2494
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2495
|
+
- confidence: 1
|
|
2496
|
+
constraint: mandatory
|
|
2497
|
+
control: internal
|
|
2498
|
+
foundation: finish_to_start
|
|
2499
|
+
reason: message payload typing is declared on a homed interlocking
|
|
2500
|
+
source_ref: planner.train.interlocking-message-payload-typed
|
|
2501
|
+
strength: important
|
|
2502
|
+
target_ref: planner.train.interlocking-home
|
|
2503
|
+
type: requires
|
|
2504
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2505
|
+
- confidence: 1
|
|
2506
|
+
constraint: mandatory
|
|
2507
|
+
control: internal
|
|
2508
|
+
foundation: finish_to_start
|
|
2509
|
+
reason: a typed payload contract must resolve to a schema body
|
|
2510
|
+
source_ref: planner.train.interlocking-payload-contract-body-required
|
|
2511
|
+
strength: important
|
|
2512
|
+
target_ref: planner.train.interlocking-message-payload-typed
|
|
2513
|
+
type: requires
|
|
2514
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2515
|
+
- confidence: 1
|
|
2516
|
+
constraint: mandatory
|
|
2517
|
+
control: internal
|
|
2518
|
+
foundation: finish_to_start
|
|
2519
|
+
reason: "binding an interlocking payload.contract to an authored/registered contract (#1314 item E) ties the route/interlocking model to the contract layer — the declared identity must be a registered contract, resolved via the contract identity->file mapping the contract layer maintains"
|
|
2520
|
+
source_ref: planner.train.interlocking-payload-contract-registered
|
|
2521
|
+
strength: important
|
|
2522
|
+
target_ref: planner.artifact-naming.contract-file-mapping
|
|
2523
|
+
type: requires
|
|
2524
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2525
|
+
- confidence: 1
|
|
2526
|
+
constraint: mandatory
|
|
2527
|
+
control: internal
|
|
2528
|
+
foundation: finish_to_start
|
|
2529
|
+
reason: registry membership of a payload contract presupposes a typed payload
|
|
2530
|
+
source_ref: planner.train.interlocking-payload-contract-registered
|
|
2531
|
+
strength: important
|
|
2532
|
+
target_ref: planner.train.interlocking-message-payload-typed
|
|
2533
|
+
type: requires
|
|
2534
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2535
|
+
- confidence: 1
|
|
2536
|
+
constraint: mandatory
|
|
2537
|
+
control: internal
|
|
2538
|
+
foundation: finish_to_start
|
|
2539
|
+
reason: projection equivalence presupposes the homed interlocking
|
|
2540
|
+
source_ref: planner.train.interlocking-projection-equivalence
|
|
2541
|
+
strength: important
|
|
2542
|
+
target_ref: planner.train.interlocking-home
|
|
2543
|
+
type: requires
|
|
2544
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2545
|
+
- confidence: 1
|
|
2546
|
+
constraint: mandatory
|
|
2547
|
+
control: internal
|
|
2548
|
+
foundation: finish_to_start
|
|
2549
|
+
reason: route category agreement presupposes the homed interlocking
|
|
2550
|
+
source_ref: planner.train.interlocking-route-category-matches-train-id
|
|
2551
|
+
strength: important
|
|
2552
|
+
target_ref: planner.train.interlocking-home
|
|
2553
|
+
type: requires
|
|
2554
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2555
|
+
- confidence: 1
|
|
2556
|
+
constraint: mandatory
|
|
2557
|
+
control: internal
|
|
2558
|
+
foundation: finish_to_start
|
|
2559
|
+
reason: deterministic resolution presupposes the homed interlocking
|
|
2560
|
+
source_ref: planner.train.interlocking-route-resolution-deterministic
|
|
2561
|
+
strength: important
|
|
2562
|
+
target_ref: planner.train.interlocking-home
|
|
2563
|
+
type: requires
|
|
2564
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2565
|
+
- confidence: 1
|
|
2566
|
+
constraint: mandatory
|
|
2567
|
+
control: internal
|
|
2568
|
+
foundation: finish_to_start
|
|
2569
|
+
reason: a structural residual is the explicit escape hatch for WMBT surfacing
|
|
2570
|
+
source_ref: planner.train.interlocking-structural-residual-explicit
|
|
2571
|
+
strength: important
|
|
2572
|
+
target_ref: planner.train.interlocking-wmbt-surface-or-residual
|
|
2573
|
+
type: requires
|
|
2574
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2575
|
+
- confidence: 1
|
|
2576
|
+
constraint: mandatory
|
|
2577
|
+
control: internal
|
|
2578
|
+
foundation: finish_to_start
|
|
2579
|
+
reason: WMBT surfacing presupposes the homed interlocking
|
|
2580
|
+
source_ref: planner.train.interlocking-wmbt-surface-or-residual
|
|
2581
|
+
strength: important
|
|
2582
|
+
target_ref: planner.train.interlocking-home
|
|
2583
|
+
type: requires
|
|
2584
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2585
|
+
- confidence: 1
|
|
2586
|
+
constraint: mandatory
|
|
2587
|
+
control: internal
|
|
2588
|
+
foundation: start_to_start
|
|
2589
|
+
reason: linearity forbids loop/route elements in the sequence
|
|
2590
|
+
source_ref: planner.train.linearity
|
|
2591
|
+
strength: critical
|
|
2592
|
+
target_ref: planner.train.sequence
|
|
2593
|
+
type: runs_alongside
|
|
2594
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2595
|
+
- confidence: 0.9
|
|
2596
|
+
constraint: discretionary
|
|
2597
|
+
control: internal
|
|
2598
|
+
foundation: start_to_start
|
|
2599
|
+
reason: "production train execution carries the train's artifact flow"
|
|
2600
|
+
source_ref: planner.train.production-implementation
|
|
2601
|
+
strength: minor
|
|
2602
|
+
target_ref: planner.train.artifact-flow
|
|
2603
|
+
type: runs_alongside
|
|
2604
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2605
|
+
- confidence: 1
|
|
2606
|
+
constraint: mandatory
|
|
2607
|
+
control: internal
|
|
2608
|
+
foundation: finish_to_start
|
|
2609
|
+
reason: the subject-bucketed train registry can only key a typed train:<subject>:<slug> entry on a subject already registered in plan/_subjects.yaml
|
|
2610
|
+
source_ref: planner.train.registry
|
|
2611
|
+
strength: important
|
|
2612
|
+
target_ref: planner.subject.invariants
|
|
2613
|
+
type: requires
|
|
2614
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2615
|
+
- confidence: 1
|
|
2616
|
+
constraint: mandatory
|
|
2617
|
+
control: internal
|
|
2618
|
+
foundation: finish_to_start
|
|
2619
|
+
reason: registry + spec paths derive from the train_id
|
|
2620
|
+
source_ref: planner.train.registry
|
|
2621
|
+
strength: important
|
|
2622
|
+
target_ref: planner.train.naming
|
|
2623
|
+
type: requires
|
|
2624
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2625
|
+
- confidence: 1
|
|
2626
|
+
constraint: mandatory
|
|
2627
|
+
control: external
|
|
2628
|
+
foundation: start_to_start
|
|
2629
|
+
reason: the train registry is what train-wagon coverage validates against
|
|
2630
|
+
source_ref: planner.train.registry
|
|
2631
|
+
strength: important
|
|
2632
|
+
target_ref: planner.coverage.bidirectional-coverage-between-trains
|
|
2633
|
+
type: runs_alongside
|
|
2634
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2635
|
+
- confidence: 1
|
|
2636
|
+
constraint: mandatory
|
|
2637
|
+
control: internal
|
|
2638
|
+
foundation: finish_to_start
|
|
2639
|
+
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"
|
|
2640
|
+
source_ref: planner.train.registry-coherence
|
|
2641
|
+
strength: important
|
|
2642
|
+
target_ref: planner.train.naming
|
|
2643
|
+
type: requires
|
|
2644
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2645
|
+
- confidence: 1
|
|
2646
|
+
constraint: mandatory
|
|
2647
|
+
control: internal
|
|
2648
|
+
foundation: finish_to_start
|
|
2649
|
+
reason: "existence coherence is checked over the two-file registry+spec pattern that node defines (#1942)"
|
|
2650
|
+
source_ref: planner.train.registry-coherence
|
|
2651
|
+
strength: critical
|
|
2652
|
+
target_ref: planner.train.registry
|
|
2653
|
+
type: requires
|
|
2654
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2655
|
+
- confidence: 1
|
|
2656
|
+
constraint: mandatory
|
|
2657
|
+
control: internal
|
|
2658
|
+
foundation: finish_to_start
|
|
2659
|
+
reason: "assessing the category space presupposes each route's declared category already agrees with its target train"
|
|
2660
|
+
source_ref: planner.train.route-category-assessment
|
|
2661
|
+
strength: important
|
|
2662
|
+
target_ref: planner.train.interlocking-route-category-matches-train-id
|
|
2663
|
+
type: requires
|
|
2664
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2665
|
+
- confidence: 1
|
|
2666
|
+
constraint: mandatory
|
|
2667
|
+
control: internal
|
|
2668
|
+
foundation: start_to_start
|
|
2669
|
+
reason: admission proves every train is classified; category assessment proves the route space that classifies them is itself complete
|
|
2670
|
+
source_ref: planner.train.route-category-assessment
|
|
2671
|
+
strength: important
|
|
2672
|
+
target_ref: planner.train.route-space-admission
|
|
2673
|
+
type: runs_alongside
|
|
2674
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2675
|
+
- confidence: 1
|
|
2676
|
+
constraint: mandatory
|
|
2677
|
+
control: internal
|
|
2678
|
+
foundation: finish_to_start
|
|
2679
|
+
reason: "admission counts routes across the registered interlockings, so it presupposes the homed+registered interlocking set"
|
|
2680
|
+
source_ref: planner.train.route-space-admission
|
|
2681
|
+
strength: important
|
|
2682
|
+
target_ref: planner.train.interlocking-home
|
|
2683
|
+
type: requires
|
|
2684
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2685
|
+
- confidence: 1
|
|
2686
|
+
constraint: mandatory
|
|
2687
|
+
control: internal
|
|
2688
|
+
foundation: finish_to_start
|
|
2689
|
+
reason: a train sequences 3-7 wagons referenced by wagon URN
|
|
2690
|
+
source_ref: planner.train.scope
|
|
2691
|
+
strength: important
|
|
2692
|
+
target_ref: planner.wagon.urn
|
|
2693
|
+
type: requires
|
|
2694
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2695
|
+
- confidence: 1
|
|
2696
|
+
constraint: mandatory
|
|
2697
|
+
control: external
|
|
2698
|
+
foundation: finish_to_start
|
|
2699
|
+
reason: "a train's participants are wagons"
|
|
2700
|
+
source_ref: planner.train.scope
|
|
2701
|
+
strength: important
|
|
2702
|
+
target_ref: planner.wagon.urn-naming
|
|
2703
|
+
type: requires
|
|
2704
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2705
|
+
- confidence: 1
|
|
2706
|
+
constraint: discretionary
|
|
2707
|
+
control: internal
|
|
2708
|
+
foundation: start_to_start
|
|
2709
|
+
reason: the one-journey scope is realized by the sequence
|
|
2710
|
+
source_ref: planner.train.scope
|
|
2711
|
+
strength: minor
|
|
2712
|
+
target_ref: planner.train.sequence
|
|
2713
|
+
type: runs_alongside
|
|
2714
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2715
|
+
- confidence: 1
|
|
2716
|
+
constraint: mandatory
|
|
2717
|
+
control: internal
|
|
2718
|
+
foundation: finish_to_start
|
|
2719
|
+
reason: each step carries a domain:resource artifact
|
|
2720
|
+
source_ref: planner.train.sequence
|
|
2721
|
+
strength: important
|
|
2722
|
+
target_ref: planner.train.artifact-flow
|
|
2723
|
+
type: requires
|
|
2724
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2725
|
+
- confidence: 1
|
|
2726
|
+
constraint: mandatory
|
|
2727
|
+
control: internal
|
|
2728
|
+
foundation: finish_to_start
|
|
2729
|
+
reason: each step transfers an artifact between participants
|
|
2730
|
+
source_ref: planner.train.sequence
|
|
2731
|
+
strength: important
|
|
2732
|
+
target_ref: planner.train.participants
|
|
2733
|
+
type: requires
|
|
2734
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2735
|
+
- confidence: 1
|
|
2736
|
+
constraint: mandatory
|
|
2737
|
+
control: external
|
|
2738
|
+
foundation: finish_to_start
|
|
2739
|
+
reason: a train theme-digit must resolve to one of the five canonical themes
|
|
2740
|
+
source_ref: planner.train.theme-alignment
|
|
2741
|
+
strength: important
|
|
2742
|
+
target_ref: planner.theme.must-be-canonical
|
|
2743
|
+
type: requires
|
|
2744
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2745
|
+
- confidence: 1
|
|
2746
|
+
constraint: mandatory
|
|
2747
|
+
control: internal
|
|
2748
|
+
foundation: finish_to_start
|
|
2749
|
+
reason: the primary theme is read from the first train-id digit
|
|
2750
|
+
source_ref: planner.train.theme-alignment
|
|
2751
|
+
strength: important
|
|
2752
|
+
target_ref: planner.train.theme-ranges
|
|
2753
|
+
type: requires
|
|
2754
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2755
|
+
- confidence: 1
|
|
2756
|
+
constraint: mandatory
|
|
2757
|
+
control: internal
|
|
2758
|
+
foundation: finish_to_start
|
|
2759
|
+
reason: the train URN carried on a theme orchestrator must reference a train registered in the train registry (registry entry + spec file)
|
|
2760
|
+
source_ref: planner.train.theme-orchestrator-urn
|
|
2761
|
+
strength: important
|
|
2762
|
+
target_ref: planner.train.registry
|
|
2763
|
+
type: requires
|
|
2764
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2765
|
+
- confidence: 1
|
|
2766
|
+
constraint: mandatory
|
|
2767
|
+
control: internal
|
|
2768
|
+
foundation: finish_to_start
|
|
2769
|
+
reason: each theme range spans the four categories
|
|
2770
|
+
source_ref: planner.train.theme-ranges
|
|
2771
|
+
strength: minor
|
|
2772
|
+
target_ref: planner.train.categories
|
|
2773
|
+
type: requires
|
|
2774
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2775
|
+
- confidence: 1
|
|
2776
|
+
constraint: mandatory
|
|
2777
|
+
control: internal
|
|
2778
|
+
foundation: finish_to_start
|
|
2779
|
+
reason: validation enforces spec-file existence
|
|
2780
|
+
source_ref: planner.train.validation-rules
|
|
2781
|
+
strength: important
|
|
2782
|
+
target_ref: planner.train.registry
|
|
2783
|
+
type: requires
|
|
2784
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2785
|
+
- confidence: 1
|
|
2786
|
+
constraint: discretionary
|
|
2787
|
+
control: internal
|
|
2788
|
+
foundation: start_to_start
|
|
2789
|
+
reason: "variations populate a theme's category/variation slots"
|
|
2790
|
+
source_ref: planner.train.variation-strategies
|
|
2791
|
+
strength: minor
|
|
2792
|
+
target_ref: planner.train.theme-ranges
|
|
2793
|
+
type: runs_alongside
|
|
2794
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2795
|
+
- confidence: 1
|
|
2796
|
+
constraint: mandatory
|
|
2797
|
+
control: internal
|
|
2798
|
+
foundation: finish_to_start
|
|
2799
|
+
reason: the telemetry URN grammar is what the filesystem mapping resolves
|
|
2800
|
+
source_ref: planner.wagon.artifact-contracts
|
|
2801
|
+
strength: important
|
|
2802
|
+
target_ref: planner.wagon.telemetry-filesystem
|
|
2803
|
+
type: enables
|
|
2804
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2805
|
+
- confidence: 1
|
|
2806
|
+
constraint: mandatory
|
|
2807
|
+
control: external
|
|
2808
|
+
foundation: finish_to_start
|
|
2809
|
+
reason: contract URNs map to files via the artifact-naming mapping
|
|
2810
|
+
source_ref: planner.wagon.artifact-contracts
|
|
2811
|
+
strength: important
|
|
2812
|
+
target_ref: planner.artifact-naming.contract-file-mapping
|
|
2813
|
+
type: requires
|
|
2814
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2815
|
+
- confidence: 1
|
|
2816
|
+
constraint: discretionary
|
|
2817
|
+
control: internal
|
|
2818
|
+
foundation: start_to_start
|
|
2819
|
+
reason: footprint measures intrinsic volume; complexity adds interconnection shape (orthogonal sizing axes)
|
|
2820
|
+
source_ref: planner.wagon.complexity-model
|
|
2821
|
+
strength: minor
|
|
2822
|
+
target_ref: planner.feature.footprint-scoring
|
|
2823
|
+
type: runs_alongside
|
|
2824
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2825
|
+
- confidence: 1
|
|
2826
|
+
constraint: mandatory
|
|
2827
|
+
control: internal
|
|
2828
|
+
foundation: finish_to_start
|
|
2829
|
+
reason: "the advisory coupling-complexity reporter executes the complexity model's fan_in x fan_out metric"
|
|
2830
|
+
source_ref: planner.wagon.coupling-complexity
|
|
2831
|
+
strength: important
|
|
2832
|
+
target_ref: planner.wagon.complexity-model
|
|
2833
|
+
type: requires
|
|
2834
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2835
|
+
- confidence: 1
|
|
2836
|
+
constraint: mandatory
|
|
2837
|
+
control: internal
|
|
2838
|
+
foundation: finish_to_finish
|
|
2839
|
+
reason: artifacts cross declared contract boundaries
|
|
2840
|
+
source_ref: planner.wagon.definition
|
|
2841
|
+
strength: important
|
|
2842
|
+
target_ref: planner.wagon.artifact-contracts
|
|
2843
|
+
type: requires
|
|
2844
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2845
|
+
- confidence: 1
|
|
2846
|
+
constraint: mandatory
|
|
2847
|
+
control: internal
|
|
2848
|
+
foundation: finish_to_finish
|
|
2849
|
+
reason: separability is judged by cross-wagon coupling
|
|
2850
|
+
source_ref: planner.wagon.definition
|
|
2851
|
+
strength: important
|
|
2852
|
+
target_ref: planner.wagon.coupling-complexity
|
|
2853
|
+
type: requires
|
|
2854
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2855
|
+
- confidence: 1
|
|
2856
|
+
constraint: mandatory
|
|
2857
|
+
control: internal
|
|
2858
|
+
foundation: finish_to_finish
|
|
2859
|
+
reason: a wagon groups the features that decompose it
|
|
2860
|
+
source_ref: planner.wagon.definition
|
|
2861
|
+
strength: minor
|
|
2862
|
+
target_ref: planner.wagon.features
|
|
2863
|
+
type: requires
|
|
2864
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2865
|
+
- confidence: 1
|
|
2866
|
+
constraint: mandatory
|
|
2867
|
+
control: internal
|
|
2868
|
+
foundation: finish_to_finish
|
|
2869
|
+
reason: wagons must not form a produce-consume cycle
|
|
2870
|
+
source_ref: planner.wagon.definition
|
|
2871
|
+
strength: critical
|
|
2872
|
+
target_ref: planner.wagon.no-consume-cycle
|
|
2873
|
+
type: requires
|
|
2874
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2875
|
+
- confidence: 1
|
|
2876
|
+
constraint: mandatory
|
|
2877
|
+
control: internal
|
|
2878
|
+
foundation: finish_to_finish
|
|
2879
|
+
reason: a wagon consumes and produces declared artifacts
|
|
2880
|
+
source_ref: planner.wagon.definition
|
|
2881
|
+
strength: important
|
|
2882
|
+
target_ref: planner.wagon.produce-consume-artifacts
|
|
2883
|
+
type: requires
|
|
2884
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2885
|
+
- confidence: 1
|
|
2886
|
+
constraint: mandatory
|
|
2887
|
+
control: internal
|
|
2888
|
+
foundation: finish_to_finish
|
|
2889
|
+
reason: a wagon has one coherent subject action goal
|
|
2890
|
+
source_ref: planner.wagon.definition
|
|
2891
|
+
strength: critical
|
|
2892
|
+
target_ref: planner.wagon.semantic-coherence
|
|
2893
|
+
type: requires
|
|
2894
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2895
|
+
- confidence: 1
|
|
2896
|
+
constraint: mandatory
|
|
2897
|
+
control: internal
|
|
2898
|
+
foundation: finish_to_finish
|
|
2899
|
+
reason: a wagon is a separable unit of work
|
|
2900
|
+
source_ref: planner.wagon.definition
|
|
2901
|
+
strength: critical
|
|
2902
|
+
target_ref: planner.wagon.separability
|
|
2903
|
+
type: requires
|
|
2904
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2905
|
+
- confidence: 1
|
|
2906
|
+
constraint: mandatory
|
|
2907
|
+
control: internal
|
|
2908
|
+
foundation: start_to_start
|
|
2909
|
+
reason: the features-manifest rule uses the urn-array features format
|
|
2910
|
+
source_ref: planner.wagon.features-format
|
|
2911
|
+
strength: important
|
|
2912
|
+
target_ref: planner.wagon.features
|
|
2913
|
+
type: runs_alongside
|
|
2914
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2915
|
+
- confidence: 1
|
|
2916
|
+
constraint: mandatory
|
|
2917
|
+
control: internal
|
|
2918
|
+
foundation: finish_to_start
|
|
2919
|
+
reason: kebab/snake conversion underpins the wagon URN + plan/<slug>/ layout
|
|
2920
|
+
source_ref: planner.wagon.logical-vs-filesystem-naming
|
|
2921
|
+
strength: important
|
|
2922
|
+
target_ref: planner.wagon.urn
|
|
2923
|
+
type: enables
|
|
2924
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2925
|
+
- confidence: 1
|
|
2926
|
+
constraint: mandatory
|
|
2927
|
+
control: internal
|
|
2928
|
+
foundation: start_to_start
|
|
2929
|
+
reason: the conversion functions implement the kebab/snake split
|
|
2930
|
+
source_ref: planner.wagon.logical-vs-filesystem-naming
|
|
2931
|
+
strength: important
|
|
2932
|
+
target_ref: planner.wagon.slug-dirname-conversion
|
|
2933
|
+
type: runs_alongside
|
|
2934
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2935
|
+
- confidence: 1
|
|
2936
|
+
constraint: mandatory
|
|
2937
|
+
control: internal
|
|
2938
|
+
foundation: start_to_start
|
|
2939
|
+
reason: the wagon name rule draws its leading-verb lexicon from the verb-selection table
|
|
2940
|
+
source_ref: planner.wagon.name-is-verb-object
|
|
2941
|
+
strength: important
|
|
2942
|
+
target_ref: planner.feature.verb-selection-by-artifact-type
|
|
2943
|
+
type: requires
|
|
2944
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2945
|
+
- confidence: 1
|
|
2946
|
+
reason: the name rules gate the authoring path while the drift report covers the corpus already on disk; neither sees what the other sees
|
|
2947
|
+
source_ref: planner.wagon.name-is-verb-object
|
|
2948
|
+
target_ref: planner.artifact-naming.verb-object-corpus-drift
|
|
2949
|
+
type: runs_alongside
|
|
2950
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2951
|
+
- confidence: 1
|
|
2952
|
+
constraint: mandatory
|
|
2953
|
+
control: internal
|
|
2954
|
+
foundation: finish_to_start
|
|
2955
|
+
reason: the strict no-consume-cycle invariant is the exact (acyclicity) case of the complexity model
|
|
2956
|
+
source_ref: planner.wagon.no-consume-cycle
|
|
2957
|
+
strength: important
|
|
2958
|
+
target_ref: planner.wagon.complexity-model
|
|
2959
|
+
type: requires
|
|
2960
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2961
|
+
- confidence: 1
|
|
2962
|
+
constraint: mandatory
|
|
2963
|
+
control: external
|
|
2964
|
+
foundation: finish_to_start
|
|
2965
|
+
reason: produce/consume artifact names follow the naming pattern
|
|
2966
|
+
source_ref: planner.wagon.produce-consume-artifacts
|
|
2967
|
+
strength: important
|
|
2968
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
2969
|
+
type: requires
|
|
2970
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2971
|
+
- confidence: 1
|
|
2972
|
+
constraint: mandatory
|
|
2973
|
+
control: internal
|
|
2974
|
+
foundation: finish_to_start
|
|
2975
|
+
reason: produce/consume entries carry contract + telemetry URNs
|
|
2976
|
+
source_ref: planner.wagon.produce-consume-artifacts
|
|
2977
|
+
strength: important
|
|
2978
|
+
target_ref: planner.wagon.artifact-contracts
|
|
2979
|
+
type: requires
|
|
2980
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2981
|
+
- confidence: 1
|
|
2982
|
+
constraint: discretionary
|
|
2983
|
+
control: internal
|
|
2984
|
+
foundation: start_to_start
|
|
2985
|
+
reason: "produced artifacts' telemetry URNs materialize on the filesystem"
|
|
2986
|
+
source_ref: planner.wagon.produce-consume-artifacts
|
|
2987
|
+
strength: minor
|
|
2988
|
+
target_ref: planner.wagon.telemetry-filesystem
|
|
2989
|
+
type: runs_alongside
|
|
2990
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
2991
|
+
- confidence: 1
|
|
2992
|
+
constraint: mandatory
|
|
2993
|
+
control: internal
|
|
2994
|
+
foundation: finish_to_start
|
|
2995
|
+
reason: extraction produces the fields coherence checks validate
|
|
2996
|
+
source_ref: planner.wagon.refinement-extraction
|
|
2997
|
+
strength: important
|
|
2998
|
+
target_ref: planner.wagon.semantic-coherence
|
|
2999
|
+
type: enables
|
|
3000
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3001
|
+
- confidence: 1
|
|
3002
|
+
constraint: mandatory
|
|
3003
|
+
control: external
|
|
3004
|
+
foundation: finish_to_start
|
|
3005
|
+
reason: the wagon theme is selected from the canonical taxonomy
|
|
3006
|
+
source_ref: planner.wagon.refinement-extraction
|
|
3007
|
+
strength: important
|
|
3008
|
+
target_ref: planner.theme.canonical-taxonomy
|
|
3009
|
+
type: requires
|
|
3010
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3011
|
+
- confidence: 1
|
|
3012
|
+
constraint: mandatory
|
|
3013
|
+
control: internal
|
|
3014
|
+
foundation: finish_to_start
|
|
3015
|
+
reason: produce/consume extraction delegates to the artifact URN conventions
|
|
3016
|
+
source_ref: planner.wagon.refinement-extraction
|
|
3017
|
+
strength: important
|
|
3018
|
+
target_ref: planner.wagon.artifact-contracts
|
|
3019
|
+
type: requires
|
|
3020
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3021
|
+
- confidence: 1
|
|
3022
|
+
constraint: mandatory
|
|
3023
|
+
control: internal
|
|
3024
|
+
foundation: finish_to_start
|
|
3025
|
+
reason: coherence validates the extracted refinement fields
|
|
3026
|
+
source_ref: planner.wagon.semantic-coherence
|
|
3027
|
+
strength: important
|
|
3028
|
+
target_ref: planner.wagon.refinement-extraction
|
|
3029
|
+
type: follows
|
|
3030
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3031
|
+
- confidence: 1
|
|
3032
|
+
constraint: mandatory
|
|
3033
|
+
control: internal
|
|
3034
|
+
foundation: finish_to_start
|
|
3035
|
+
reason: coherence checks produce-owned / consume-foreign / external-scope rules
|
|
3036
|
+
source_ref: planner.wagon.semantic-coherence
|
|
3037
|
+
strength: important
|
|
3038
|
+
target_ref: planner.wagon.produce-consume-artifacts
|
|
3039
|
+
type: requires
|
|
3040
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3041
|
+
- confidence: 1
|
|
3042
|
+
constraint: discretionary
|
|
3043
|
+
control: external
|
|
3044
|
+
foundation: start_to_start
|
|
3045
|
+
reason: a wagon produced-URN theme must match its theme
|
|
3046
|
+
source_ref: planner.wagon.semantic-coherence
|
|
3047
|
+
strength: minor
|
|
3048
|
+
target_ref: planner.theme.urn-namespace-matches
|
|
3049
|
+
type: runs_alongside
|
|
3050
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3051
|
+
- confidence: 1
|
|
3052
|
+
constraint: mandatory
|
|
3053
|
+
control: internal
|
|
3054
|
+
foundation: finish_to_start
|
|
3055
|
+
reason: "separability operationalizes the complexity model's cohesion-vs-coupling comparison on the WMBT graph"
|
|
3056
|
+
source_ref: planner.wagon.separability
|
|
3057
|
+
strength: important
|
|
3058
|
+
target_ref: planner.wagon.complexity-model
|
|
3059
|
+
type: requires
|
|
3060
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3061
|
+
- confidence: 1
|
|
3062
|
+
constraint: discretionary
|
|
3063
|
+
control: internal
|
|
3064
|
+
foundation: start_to_start
|
|
3065
|
+
reason: semantic coherence and graph separability are two views of whether a wagon is one job
|
|
3066
|
+
source_ref: planner.wagon.separability
|
|
3067
|
+
strength: minor
|
|
3068
|
+
target_ref: planner.wagon.semantic-coherence
|
|
3069
|
+
type: runs_alongside
|
|
3070
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3071
|
+
- confidence: 1
|
|
3072
|
+
constraint: mandatory
|
|
3073
|
+
control: external
|
|
3074
|
+
foundation: finish_to_start
|
|
3075
|
+
reason: telemetry URNs follow the artifact-naming grammar
|
|
3076
|
+
source_ref: planner.wagon.telemetry-filesystem
|
|
3077
|
+
strength: important
|
|
3078
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
3079
|
+
type: requires
|
|
3080
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3081
|
+
- confidence: 1
|
|
3082
|
+
constraint: mandatory
|
|
3083
|
+
control: internal
|
|
3084
|
+
foundation: finish_to_start
|
|
3085
|
+
reason: the telemetry filesystem maps the telemetry URN form
|
|
3086
|
+
source_ref: planner.wagon.telemetry-filesystem
|
|
3087
|
+
strength: important
|
|
3088
|
+
target_ref: planner.wagon.artifact-contracts
|
|
3089
|
+
type: requires
|
|
3090
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3091
|
+
- confidence: 1
|
|
3092
|
+
constraint: mandatory
|
|
3093
|
+
control: internal
|
|
3094
|
+
foundation: finish_to_start
|
|
3095
|
+
reason: the plan/<slug>/ layout follows the logical-vs-filesystem split
|
|
3096
|
+
source_ref: planner.wagon.urn
|
|
3097
|
+
strength: important
|
|
3098
|
+
target_ref: planner.wagon.logical-vs-filesystem-naming
|
|
3099
|
+
type: requires
|
|
3100
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3101
|
+
- confidence: 1
|
|
3102
|
+
constraint: mandatory
|
|
3103
|
+
control: internal
|
|
3104
|
+
foundation: finish_to_start
|
|
3105
|
+
reason: the wagon urn rule presupposes the urn naming grammar
|
|
3106
|
+
source_ref: planner.wagon.urn
|
|
3107
|
+
strength: important
|
|
3108
|
+
target_ref: planner.wagon.urn-naming
|
|
3109
|
+
type: requires
|
|
3110
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3111
|
+
- confidence: 1
|
|
3112
|
+
constraint: discretionary
|
|
3113
|
+
control: internal
|
|
3114
|
+
foundation: start_to_start
|
|
3115
|
+
reason: "a wagon's stable URN is an instance of the stable-naming rule for planner artifacts"
|
|
3116
|
+
source_ref: planner.wagon.urn
|
|
3117
|
+
strength: minor
|
|
3118
|
+
target_ref: planner.artifact-naming.planner-artifacts-use-stable
|
|
3119
|
+
type: runs_alongside
|
|
3120
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3121
|
+
- confidence: 1
|
|
3122
|
+
constraint: discretionary
|
|
3123
|
+
control: external
|
|
3124
|
+
foundation: start_to_start
|
|
3125
|
+
reason: wagon and artifact names share the kebab grammar
|
|
3126
|
+
source_ref: planner.wagon.urn-naming
|
|
3127
|
+
strength: minor
|
|
3128
|
+
target_ref: planner.artifact-naming.naming-pattern
|
|
3129
|
+
type: runs_alongside
|
|
3130
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3131
|
+
- confidence: 1
|
|
3132
|
+
constraint: discretionary
|
|
3133
|
+
control: internal
|
|
3134
|
+
foundation: start_to_start
|
|
3135
|
+
reason: the slug derives from the wagon name
|
|
3136
|
+
source_ref: planner.wagon.urn-naming
|
|
3137
|
+
strength: minor
|
|
3138
|
+
target_ref: planner.wagon.slug-dirname-conversion
|
|
3139
|
+
type: runs_alongside
|
|
3140
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3141
|
+
- confidence: 1
|
|
3142
|
+
constraint: mandatory
|
|
3143
|
+
control: internal
|
|
3144
|
+
foundation: finish_to_finish
|
|
3145
|
+
reason: a WMBT picks one dimension
|
|
3146
|
+
source_ref: planner.wmbt.definition
|
|
3147
|
+
strength: important
|
|
3148
|
+
target_ref: planner.wmbt.dimension-selection
|
|
3149
|
+
type: requires
|
|
3150
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3151
|
+
- confidence: 1
|
|
3152
|
+
constraint: mandatory
|
|
3153
|
+
control: internal
|
|
3154
|
+
foundation: finish_to_finish
|
|
3155
|
+
reason: a WMBT picks one direction
|
|
3156
|
+
source_ref: planner.wmbt.definition
|
|
3157
|
+
strength: important
|
|
3158
|
+
target_ref: planner.wmbt.direction-selection
|
|
3159
|
+
type: requires
|
|
3160
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3161
|
+
- confidence: 1
|
|
3162
|
+
constraint: mandatory
|
|
3163
|
+
control: internal
|
|
3164
|
+
foundation: finish_to_finish
|
|
3165
|
+
reason: a WMBT picks one lens
|
|
3166
|
+
source_ref: planner.wmbt.definition
|
|
3167
|
+
strength: important
|
|
3168
|
+
target_ref: planner.wmbt.lens-selection
|
|
3169
|
+
type: requires
|
|
3170
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3171
|
+
- confidence: 1
|
|
3172
|
+
constraint: mandatory
|
|
3173
|
+
control: internal
|
|
3174
|
+
foundation: finish_to_finish
|
|
3175
|
+
reason: a WMBT must carry a smoke acceptance
|
|
3176
|
+
source_ref: planner.wmbt.definition
|
|
3177
|
+
strength: critical
|
|
3178
|
+
target_ref: planner.wmbt.must-have-smoke-acceptance
|
|
3179
|
+
type: requires
|
|
3180
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3181
|
+
- confidence: 1
|
|
3182
|
+
constraint: mandatory
|
|
3183
|
+
control: internal
|
|
3184
|
+
foundation: finish_to_finish
|
|
3185
|
+
reason: a WMBT is scoped to one object of control
|
|
3186
|
+
source_ref: planner.wmbt.definition
|
|
3187
|
+
strength: critical
|
|
3188
|
+
target_ref: planner.wmbt.object-of-control
|
|
3189
|
+
type: requires
|
|
3190
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3191
|
+
- confidence: 1
|
|
3192
|
+
constraint: mandatory
|
|
3193
|
+
control: internal
|
|
3194
|
+
foundation: finish_to_finish
|
|
3195
|
+
reason: a WMBT declares id statement proving-artifacts
|
|
3196
|
+
source_ref: planner.wmbt.definition
|
|
3197
|
+
strength: critical
|
|
3198
|
+
target_ref: planner.wmbt.shape
|
|
3199
|
+
type: requires
|
|
3200
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3201
|
+
- confidence: 1
|
|
3202
|
+
constraint: mandatory
|
|
3203
|
+
control: internal
|
|
3204
|
+
foundation: finish_to_finish
|
|
3205
|
+
reason: multi-axis WMBTs must split
|
|
3206
|
+
source_ref: planner.wmbt.definition
|
|
3207
|
+
strength: minor
|
|
3208
|
+
target_ref: planner.wmbt.splitting-rules
|
|
3209
|
+
type: requires
|
|
3210
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3211
|
+
- confidence: 1
|
|
3212
|
+
constraint: mandatory
|
|
3213
|
+
control: internal
|
|
3214
|
+
foundation: finish_to_finish
|
|
3215
|
+
reason: a WMBT follows the statement template
|
|
3216
|
+
source_ref: planner.wmbt.definition
|
|
3217
|
+
strength: important
|
|
3218
|
+
target_ref: planner.wmbt.statement-template
|
|
3219
|
+
type: requires
|
|
3220
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3221
|
+
- confidence: 1
|
|
3222
|
+
constraint: discretionary
|
|
3223
|
+
control: internal
|
|
3224
|
+
foundation: finish_to_start
|
|
3225
|
+
reason: "filename is the URN's step-coded sequence segment"
|
|
3226
|
+
source_ref: planner.wmbt.filename-pattern
|
|
3227
|
+
strength: minor
|
|
3228
|
+
target_ref: planner.wmbt.urn-naming
|
|
3229
|
+
type: follows
|
|
3230
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3231
|
+
- confidence: 1
|
|
3232
|
+
constraint: mandatory
|
|
3233
|
+
control: internal
|
|
3234
|
+
foundation: finish_to_start
|
|
3235
|
+
reason: the WMBT filename is step-coded
|
|
3236
|
+
source_ref: planner.wmbt.filename-pattern
|
|
3237
|
+
strength: important
|
|
3238
|
+
target_ref: planner.wmbt.step-code-vocabulary
|
|
3239
|
+
type: requires
|
|
3240
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3241
|
+
- confidence: 1
|
|
3242
|
+
constraint: mandatory
|
|
3243
|
+
control: internal
|
|
3244
|
+
foundation: start_to_start
|
|
3245
|
+
reason: one dimension and one lens are chosen together per WMBT
|
|
3246
|
+
source_ref: planner.wmbt.lens-selection
|
|
3247
|
+
strength: important
|
|
3248
|
+
target_ref: planner.wmbt.dimension-selection
|
|
3249
|
+
type: runs_alongside
|
|
3250
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3251
|
+
- confidence: 1
|
|
3252
|
+
constraint: mandatory
|
|
3253
|
+
control: internal
|
|
3254
|
+
foundation: finish_to_start
|
|
3255
|
+
reason: the smoke-acceptance rule applies once a WMBT is shaped
|
|
3256
|
+
source_ref: planner.wmbt.must-have-smoke-acceptance
|
|
3257
|
+
strength: important
|
|
3258
|
+
target_ref: planner.wmbt.shape
|
|
3259
|
+
type: follows
|
|
3260
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3261
|
+
- confidence: 1
|
|
3262
|
+
constraint: mandatory
|
|
3263
|
+
control: internal
|
|
3264
|
+
foundation: finish_to_start
|
|
3265
|
+
reason: "a SMOKE acceptance is defined by carrying the SMOKE harness token, so it depends on the harness-type rule"
|
|
3266
|
+
source_ref: planner.wmbt.must-have-smoke-acceptance
|
|
3267
|
+
strength: critical
|
|
3268
|
+
target_ref: "planner.acceptance.harness#harness_type"
|
|
3269
|
+
type: requires
|
|
3270
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3271
|
+
- confidence: 1
|
|
3272
|
+
constraint: mandatory
|
|
3273
|
+
control: external
|
|
3274
|
+
foundation: finish_to_start
|
|
3275
|
+
reason: the SMOKE token is a harness code from the acceptance harness vocabulary
|
|
3276
|
+
source_ref: planner.wmbt.must-have-smoke-acceptance
|
|
3277
|
+
strength: critical
|
|
3278
|
+
target_ref: "planner.acceptance.harness-vocabulary#harness_code"
|
|
3279
|
+
type: requires
|
|
3280
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3281
|
+
- confidence: 1
|
|
3282
|
+
constraint: mandatory
|
|
3283
|
+
control: internal
|
|
3284
|
+
foundation: finish_to_start
|
|
3285
|
+
reason: each WMBT carries one lens_ref from the catalog
|
|
3286
|
+
source_ref: planner.wmbt.shape
|
|
3287
|
+
strength: important
|
|
3288
|
+
target_ref: planner.wmbt.lens-selection
|
|
3289
|
+
type: requires
|
|
3290
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3291
|
+
- confidence: 1
|
|
3292
|
+
constraint: mandatory
|
|
3293
|
+
control: internal
|
|
3294
|
+
foundation: finish_to_start
|
|
3295
|
+
reason: a well-shaped WMBT declares a composed statement
|
|
3296
|
+
source_ref: planner.wmbt.shape
|
|
3297
|
+
strength: important
|
|
3298
|
+
target_ref: planner.wmbt.statement-template
|
|
3299
|
+
type: requires
|
|
3300
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3301
|
+
- confidence: 1
|
|
3302
|
+
constraint: mandatory
|
|
3303
|
+
control: internal
|
|
3304
|
+
foundation: finish_to_start
|
|
3305
|
+
reason: the WMBT id is the step-coded URN
|
|
3306
|
+
source_ref: planner.wmbt.shape
|
|
3307
|
+
strength: important
|
|
3308
|
+
target_ref: planner.wmbt.urn-naming
|
|
3309
|
+
type: requires
|
|
3310
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3311
|
+
- confidence: 1
|
|
3312
|
+
constraint: mandatory
|
|
3313
|
+
control: internal
|
|
3314
|
+
foundation: finish_to_start
|
|
3315
|
+
reason: a statement mixing dimensions must be split
|
|
3316
|
+
source_ref: planner.wmbt.splitting-rules
|
|
3317
|
+
strength: important
|
|
3318
|
+
target_ref: planner.wmbt.dimension-selection
|
|
3319
|
+
type: blocks
|
|
3320
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3321
|
+
- confidence: 1
|
|
3322
|
+
constraint: discretionary
|
|
3323
|
+
control: internal
|
|
3324
|
+
foundation: start_to_start
|
|
3325
|
+
reason: the <=5 acceptance cap aligns across conventions
|
|
3326
|
+
source_ref: planner.wmbt.splitting-rules
|
|
3327
|
+
strength: minor
|
|
3328
|
+
target_ref: planner.acceptance.max-per-wmbt
|
|
3329
|
+
type: runs_alongside
|
|
3330
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3331
|
+
- confidence: 1
|
|
3332
|
+
constraint: discretionary
|
|
3333
|
+
control: internal
|
|
3334
|
+
foundation: start_to_start
|
|
3335
|
+
reason: a WMBT splits when its statement mixes dimensions
|
|
3336
|
+
source_ref: planner.wmbt.splitting-rules
|
|
3337
|
+
strength: minor
|
|
3338
|
+
target_ref: planner.wmbt.dimension-selection
|
|
3339
|
+
type: runs_alongside
|
|
3340
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3341
|
+
- confidence: 1
|
|
3342
|
+
constraint: mandatory
|
|
3343
|
+
control: internal
|
|
3344
|
+
foundation: finish_to_start
|
|
3345
|
+
reason: the statement template appends the context clarifier
|
|
3346
|
+
source_ref: planner.wmbt.statement-template
|
|
3347
|
+
strength: minor
|
|
3348
|
+
target_ref: planner.wmbt.context-clarifier
|
|
3349
|
+
type: requires
|
|
3350
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3351
|
+
- confidence: 1
|
|
3352
|
+
constraint: mandatory
|
|
3353
|
+
control: internal
|
|
3354
|
+
foundation: finish_to_start
|
|
3355
|
+
reason: the statement template consumes the dimension
|
|
3356
|
+
source_ref: planner.wmbt.statement-template
|
|
3357
|
+
strength: important
|
|
3358
|
+
target_ref: planner.wmbt.dimension-selection
|
|
3359
|
+
type: requires
|
|
3360
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3361
|
+
- confidence: 1
|
|
3362
|
+
constraint: mandatory
|
|
3363
|
+
control: internal
|
|
3364
|
+
foundation: finish_to_start
|
|
3365
|
+
reason: the statement template consumes the direction
|
|
3366
|
+
source_ref: planner.wmbt.statement-template
|
|
3367
|
+
strength: important
|
|
3368
|
+
target_ref: planner.wmbt.direction-selection
|
|
3369
|
+
type: requires
|
|
3370
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3371
|
+
- confidence: 1
|
|
3372
|
+
constraint: mandatory
|
|
3373
|
+
control: internal
|
|
3374
|
+
foundation: finish_to_start
|
|
3375
|
+
reason: the statement template consumes the object of control
|
|
3376
|
+
source_ref: planner.wmbt.statement-template
|
|
3377
|
+
strength: important
|
|
3378
|
+
target_ref: planner.wmbt.object-of-control
|
|
3379
|
+
type: requires
|
|
3380
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3381
|
+
- confidence: 1
|
|
3382
|
+
constraint: mandatory
|
|
3383
|
+
control: internal
|
|
3384
|
+
foundation: finish_to_start
|
|
3385
|
+
reason: the WMBT URN embeds a step code
|
|
3386
|
+
source_ref: planner.wmbt.urn-naming
|
|
3387
|
+
strength: important
|
|
3388
|
+
target_ref: planner.wmbt.step-code-vocabulary
|
|
3389
|
+
type: requires
|
|
3390
|
+
origin: atdd@36ce055a:src/atdd/coach/graph/relationships.yaml
|
|
3391
|
+
- source_ref: coder.bun.wagon-honours-its-contract
|
|
3392
|
+
target_ref: coder.bun.interlocking-does-not-carry-cargo
|
|
3393
|
+
type: runs_alongside
|
|
3394
|
+
foundation: start_to_start
|
|
3395
|
+
constraint: discretionary
|
|
3396
|
+
control: internal
|
|
3397
|
+
strength: important
|
|
3398
|
+
confidence: 1
|
|
3399
|
+
reason: "The two halves of the artifact data plane. One keeps Cargo inside TrainRunner execution, the other requires the wagon at the end of that execution to move the artifacts its plan document declares. Neither implies the other, and a stack satisfying only one still lets the declared contract and the carried data disagree."
|
|
3400
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3401
|
+
- source_ref: coder.bun.green-urn-pattern
|
|
3402
|
+
target_ref: coder.bun.green-urn-marker
|
|
3403
|
+
type: requires
|
|
3404
|
+
foundation: finish_to_start
|
|
3405
|
+
constraint: mandatory
|
|
3406
|
+
control: internal
|
|
3407
|
+
strength: critical
|
|
3408
|
+
confidence: 1
|
|
3409
|
+
reason: "The six-segment shape can only be checked once a marker is present; absence is the marker rule's finding."
|
|
3410
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3411
|
+
- source_ref: coder.bun.green-urn-wagon-feature
|
|
3412
|
+
target_ref: coder.bun.green-urn-pattern
|
|
3413
|
+
type: requires
|
|
3414
|
+
foundation: finish_to_start
|
|
3415
|
+
constraint: mandatory
|
|
3416
|
+
control: internal
|
|
3417
|
+
strength: important
|
|
3418
|
+
confidence: 1
|
|
3419
|
+
reason: Segment grammar applies only after the segment count is known good.
|
|
3420
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3421
|
+
- source_ref: coder.bun.green-urn-name-matches
|
|
3422
|
+
target_ref: coder.bun.green-urn-pattern
|
|
3423
|
+
type: requires
|
|
3424
|
+
foundation: finish_to_start
|
|
3425
|
+
constraint: mandatory
|
|
3426
|
+
control: internal
|
|
3427
|
+
strength: important
|
|
3428
|
+
confidence: 1
|
|
3429
|
+
reason: "Reads segment 3, which exists only once the shape validates."
|
|
3430
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3431
|
+
- source_ref: coder.bun.green-urn-side
|
|
3432
|
+
target_ref: coder.bun.green-urn-pattern
|
|
3433
|
+
type: requires
|
|
3434
|
+
foundation: finish_to_start
|
|
3435
|
+
constraint: mandatory
|
|
3436
|
+
control: internal
|
|
3437
|
+
strength: important
|
|
3438
|
+
confidence: 1
|
|
3439
|
+
reason: "Reads segment 4, which exists only once the shape validates."
|
|
3440
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3441
|
+
- source_ref: coder.bun.green-urn-layer
|
|
3442
|
+
target_ref: coder.bun.green-urn-pattern
|
|
3443
|
+
type: requires
|
|
3444
|
+
foundation: finish_to_start
|
|
3445
|
+
constraint: mandatory
|
|
3446
|
+
control: internal
|
|
3447
|
+
strength: important
|
|
3448
|
+
confidence: 1
|
|
3449
|
+
reason: "Reads segment 5, which exists only once the shape validates."
|
|
3450
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3451
|
+
- source_ref: coder.bun.green-header-tested-by
|
|
3452
|
+
target_ref: coder.bun.green-urn-marker
|
|
3453
|
+
type: runs_alongside
|
|
3454
|
+
foundation: start_to_start
|
|
3455
|
+
constraint: mandatory
|
|
3456
|
+
control: internal
|
|
3457
|
+
strength: critical
|
|
3458
|
+
confidence: 1
|
|
3459
|
+
reason: "Two halves of the traceability loop: the URN says what the file IS, Tested-By what PROVES it."
|
|
3460
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3461
|
+
- source_ref: coder.bun.green-header-runtime
|
|
3462
|
+
target_ref: coder.bun.green-header-purpose
|
|
3463
|
+
type: runs_alongside
|
|
3464
|
+
foundation: start_to_start
|
|
3465
|
+
constraint: mandatory
|
|
3466
|
+
control: internal
|
|
3467
|
+
strength: minor
|
|
3468
|
+
confidence: 1
|
|
3469
|
+
reason: Both single-line header fields recovered from one parse of the same comment block.
|
|
3470
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3471
|
+
- source_ref: coder.bun.green-header-order
|
|
3472
|
+
target_ref: coder.bun.green-header-tested-by
|
|
3473
|
+
type: runs_alongside
|
|
3474
|
+
foundation: start_to_start
|
|
3475
|
+
constraint: mandatory
|
|
3476
|
+
control: internal
|
|
3477
|
+
strength: important
|
|
3478
|
+
confidence: 1
|
|
3479
|
+
reason: Order governs the arrangement of the very fields the other header rules require.
|
|
3480
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3481
|
+
- source_ref: coder.bun.green-urn-layer
|
|
3482
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3483
|
+
type: enables
|
|
3484
|
+
foundation: finish_to_start
|
|
3485
|
+
constraint: mandatory
|
|
3486
|
+
control: internal
|
|
3487
|
+
strength: important
|
|
3488
|
+
confidence: 1
|
|
3489
|
+
reason: The layer segment this rule validates is what the layering rules read to judge an import.
|
|
3490
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3491
|
+
- source_ref: coder.bun.complexity-nesting
|
|
3492
|
+
target_ref: coder.bun.complexity-cyclomatic
|
|
3493
|
+
type: runs_alongside
|
|
3494
|
+
foundation: start_to_start
|
|
3495
|
+
constraint: mandatory
|
|
3496
|
+
control: internal
|
|
3497
|
+
strength: important
|
|
3498
|
+
confidence: 1
|
|
3499
|
+
reason: Co-emitted per function from one extraction pass over the same brace-matched body.
|
|
3500
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3501
|
+
- source_ref: coder.bun.complexity-length
|
|
3502
|
+
target_ref: coder.bun.complexity-cyclomatic
|
|
3503
|
+
type: runs_alongside
|
|
3504
|
+
foundation: start_to_start
|
|
3505
|
+
constraint: mandatory
|
|
3506
|
+
control: internal
|
|
3507
|
+
strength: important
|
|
3508
|
+
confidence: 1
|
|
3509
|
+
reason: Co-emitted per function from one extraction pass over the same brace-matched body.
|
|
3510
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3511
|
+
- source_ref: coder.bun.quality-comments
|
|
3512
|
+
target_ref: coder.bun.quality-mi
|
|
3513
|
+
type: runs_alongside
|
|
3514
|
+
foundation: start_to_start
|
|
3515
|
+
constraint: mandatory
|
|
3516
|
+
control: internal
|
|
3517
|
+
strength: important
|
|
3518
|
+
confidence: 1
|
|
3519
|
+
reason: "The comment ratio is literally a term in the maintainability-index formula: one computation, two reported facts."
|
|
3520
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3521
|
+
- source_ref: coder.bun.quality-mi
|
|
3522
|
+
target_ref: coder.bun.complexity-cyclomatic
|
|
3523
|
+
type: runs_alongside
|
|
3524
|
+
foundation: start_to_start
|
|
3525
|
+
constraint: discretionary
|
|
3526
|
+
control: internal
|
|
3527
|
+
strength: minor
|
|
3528
|
+
confidence: 1
|
|
3529
|
+
reason: "MI judges the FILE, complexity its functions; a file can pass every function threshold and still be unmaintainable by size."
|
|
3530
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3531
|
+
- source_ref: coder.bun.duplication-intra-layer
|
|
3532
|
+
target_ref: coder.bun.dead-code-reachability
|
|
3533
|
+
type: runs_alongside
|
|
3534
|
+
foundation: start_to_start
|
|
3535
|
+
constraint: discretionary
|
|
3536
|
+
control: internal
|
|
3537
|
+
strength: minor
|
|
3538
|
+
confidence: 1
|
|
3539
|
+
reason: "Both read structure ACROSS files rather than within one, and both need the whole scan tree at once."
|
|
3540
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3541
|
+
- source_ref: coder.bun.dead-code-reachability
|
|
3542
|
+
target_ref: coder.bun.composition-root
|
|
3543
|
+
type: requires
|
|
3544
|
+
foundation: finish_to_start
|
|
3545
|
+
constraint: mandatory
|
|
3546
|
+
control: internal
|
|
3547
|
+
strength: important
|
|
3548
|
+
confidence: 1
|
|
3549
|
+
reason: Reachability is measured FROM the structural roots that composition-root confines wiring to.
|
|
3550
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3551
|
+
- source_ref: coder.bun.security-sql-injection
|
|
3552
|
+
target_ref: coder.bun.security-missing-auth
|
|
3553
|
+
type: runs_alongside
|
|
3554
|
+
foundation: start_to_start
|
|
3555
|
+
constraint: mandatory
|
|
3556
|
+
control: internal
|
|
3557
|
+
strength: critical
|
|
3558
|
+
confidence: 1
|
|
3559
|
+
reason: "Authorisation decides WHO may act, parameterisation what their input can DO; a boundary needs both."
|
|
3560
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3561
|
+
- source_ref: coder.bun.security-hardcoded-secret
|
|
3562
|
+
target_ref: coder.bun.security-missing-auth
|
|
3563
|
+
type: runs_alongside
|
|
3564
|
+
foundation: start_to_start
|
|
3565
|
+
constraint: mandatory
|
|
3566
|
+
control: internal
|
|
3567
|
+
strength: important
|
|
3568
|
+
confidence: 1
|
|
3569
|
+
reason: A leaked credential defeats the authorisation check the sibling rule requires.
|
|
3570
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3571
|
+
- source_ref: coder.bun.logging-structured
|
|
3572
|
+
target_ref: coder.bun.logging-console
|
|
3573
|
+
type: runs_alongside
|
|
3574
|
+
foundation: start_to_start
|
|
3575
|
+
constraint: mandatory
|
|
3576
|
+
control: internal
|
|
3577
|
+
strength: important
|
|
3578
|
+
confidence: 1
|
|
3579
|
+
reason: "One bans the wrong channel, the other requires context on the right one; either alone leaves logs unusable."
|
|
3580
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3581
|
+
- source_ref: coder.bun.error-response-code-format
|
|
3582
|
+
target_ref: coder.bun.error-response-bare-string
|
|
3583
|
+
type: requires
|
|
3584
|
+
foundation: finish_to_start
|
|
3585
|
+
constraint: mandatory
|
|
3586
|
+
control: internal
|
|
3587
|
+
strength: important
|
|
3588
|
+
confidence: 1
|
|
3589
|
+
reason: A structured payload must exist before its error code can be constrained.
|
|
3590
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3591
|
+
- source_ref: coder.bun.logging-structured
|
|
3592
|
+
target_ref: coder.bun.error-response-bare-string
|
|
3593
|
+
type: runs_alongside
|
|
3594
|
+
foundation: start_to_start
|
|
3595
|
+
constraint: discretionary
|
|
3596
|
+
control: internal
|
|
3597
|
+
strength: minor
|
|
3598
|
+
confidence: 1
|
|
3599
|
+
reason: "Both govern what a failure leaves behind: one for the operator, one for the caller."
|
|
3600
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3601
|
+
- source_ref: coder.bun.commons-domain-no-outbound
|
|
3602
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3603
|
+
type: requires
|
|
3604
|
+
foundation: start_to_start
|
|
3605
|
+
constraint: mandatory
|
|
3606
|
+
control: internal
|
|
3607
|
+
strength: important
|
|
3608
|
+
confidence: 1
|
|
3609
|
+
reason: "A specialization: the general inward-only rule, narrowed to the commons domain tree."
|
|
3610
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3611
|
+
- source_ref: coder.bun.commons-application-no-integration
|
|
3612
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3613
|
+
type: requires
|
|
3614
|
+
foundation: start_to_start
|
|
3615
|
+
constraint: mandatory
|
|
3616
|
+
control: internal
|
|
3617
|
+
strength: important
|
|
3618
|
+
confidence: 1
|
|
3619
|
+
reason: "A specialization: the general inward-only rule, narrowed to the commons application tree."
|
|
3620
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3621
|
+
- source_ref: coder.bun.commons-domain-no-framework-import
|
|
3622
|
+
target_ref: coder.bun.commons-domain-no-outbound
|
|
3623
|
+
type: requires
|
|
3624
|
+
foundation: finish_to_start
|
|
3625
|
+
constraint: mandatory
|
|
3626
|
+
control: internal
|
|
3627
|
+
strength: important
|
|
3628
|
+
confidence: 1
|
|
3629
|
+
reason: "Outbound bans project LAYERS; this additionally bans runtime machinery, so the domain runs with no server started."
|
|
3630
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3631
|
+
- source_ref: coder.bun.commons-cross-feature-imports-in
|
|
3632
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3633
|
+
type: runs_alongside
|
|
3634
|
+
foundation: start_to_start
|
|
3635
|
+
constraint: mandatory
|
|
3636
|
+
control: internal
|
|
3637
|
+
strength: important
|
|
3638
|
+
confidence: 1
|
|
3639
|
+
reason: The hierarchy governs VERTICAL edges between layers; this governs HORIZONTAL ones between sibling features.
|
|
3640
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3641
|
+
- source_ref: coder.bun.composition-consumer
|
|
3642
|
+
target_ref: coder.bun.composition-root
|
|
3643
|
+
type: runs_alongside
|
|
3644
|
+
foundation: start_to_start
|
|
3645
|
+
constraint: mandatory
|
|
3646
|
+
control: internal
|
|
3647
|
+
strength: critical
|
|
3648
|
+
confidence: 1
|
|
3649
|
+
reason: "Two halves of one discipline: where wiring MAY happen, and that consumers must ACCEPT what they are given."
|
|
3650
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3651
|
+
- source_ref: coder.bun.dto-placement
|
|
3652
|
+
target_ref: coder.bun.dto-purity
|
|
3653
|
+
type: runs_alongside
|
|
3654
|
+
foundation: start_to_start
|
|
3655
|
+
constraint: mandatory
|
|
3656
|
+
control: internal
|
|
3657
|
+
strength: important
|
|
3658
|
+
confidence: 1
|
|
3659
|
+
reason: "Purity governs a DTO's shape, placement its home; a pure DTO in the wrong layer still couples the boundary."
|
|
3660
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3661
|
+
- source_ref: coder.bun.dto-mapper
|
|
3662
|
+
target_ref: coder.bun.dto-placement
|
|
3663
|
+
type: runs_alongside
|
|
3664
|
+
foundation: start_to_start
|
|
3665
|
+
constraint: discretionary
|
|
3666
|
+
control: internal
|
|
3667
|
+
strength: minor
|
|
3668
|
+
confidence: 1
|
|
3669
|
+
reason: The mapper translates the type whose home this rule fixes; both keep the boundary in one place.
|
|
3670
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3671
|
+
- source_ref: coder.bun.layer-naming
|
|
3672
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3673
|
+
type: enables
|
|
3674
|
+
foundation: finish_to_start
|
|
3675
|
+
constraint: mandatory
|
|
3676
|
+
control: internal
|
|
3677
|
+
strength: critical
|
|
3678
|
+
confidence: 1
|
|
3679
|
+
reason: The layering rules can only read a layer that the naming rule guarantees is declared.
|
|
3680
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3681
|
+
- source_ref: coder.bun.boundaries-http-client
|
|
3682
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
3683
|
+
type: runs_alongside
|
|
3684
|
+
foundation: start_to_start
|
|
3685
|
+
constraint: discretionary
|
|
3686
|
+
control: internal
|
|
3687
|
+
strength: minor
|
|
3688
|
+
confidence: 1
|
|
3689
|
+
reason: "Confines outbound transport to integration, which is the hierarchy's own home for it."
|
|
3690
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3691
|
+
- source_ref: coder.bun.runtime-single-lockfile
|
|
3692
|
+
target_ref: coder.bun.runtime-server-is-bun-serve
|
|
3693
|
+
type: runs_alongside
|
|
3694
|
+
foundation: start_to_start
|
|
3695
|
+
constraint: mandatory
|
|
3696
|
+
control: internal
|
|
3697
|
+
strength: important
|
|
3698
|
+
confidence: 1
|
|
3699
|
+
reason: "Both hold the stack decision itself: Bun's server, Bun's resolver."
|
|
3700
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3701
|
+
- source_ref: coder.bun.runtime-server-is-bun-serve
|
|
3702
|
+
target_ref: coder.bun.composition-root
|
|
3703
|
+
type: enables
|
|
3704
|
+
foundation: finish_to_start
|
|
3705
|
+
constraint: mandatory
|
|
3706
|
+
control: internal
|
|
3707
|
+
strength: important
|
|
3708
|
+
confidence: 1
|
|
3709
|
+
reason: server.ts is a composition root precisely BECAUSE Bun.serve is the assembly point of a full-stack Bun app.
|
|
3710
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3711
|
+
- source_ref: coder.bun.runtime-server-is-bun-serve
|
|
3712
|
+
target_ref: coder.bun.boundaries-http-client
|
|
3713
|
+
type: runs_alongside
|
|
3714
|
+
foundation: start_to_start
|
|
3715
|
+
constraint: discretionary
|
|
3716
|
+
control: internal
|
|
3717
|
+
strength: minor
|
|
3718
|
+
confidence: 1
|
|
3719
|
+
reason: "One governs the server you run, the other the client you call out with."
|
|
3720
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3721
|
+
- source_ref: coder.bun.green-header-order
|
|
3722
|
+
target_ref: coder.bun.green-header-runtime
|
|
3723
|
+
type: runs_alongside
|
|
3724
|
+
foundation: start_to_start
|
|
3725
|
+
constraint: mandatory
|
|
3726
|
+
control: internal
|
|
3727
|
+
strength: important
|
|
3728
|
+
confidence: 1
|
|
3729
|
+
reason: "The canonical order this rule enforces is URN -> Tested-By -> Runtime -> Purpose; Runtime and Purpose are the second half of the very sequence it governs, so they were never a separate concern."
|
|
3730
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3731
|
+
- source_ref: coder.bun.interlocking-resolution-model-exists
|
|
3732
|
+
target_ref: coder.bun.interlocking-runner-exists
|
|
3733
|
+
type: requires
|
|
3734
|
+
foundation: finish_to_start
|
|
3735
|
+
constraint: mandatory
|
|
3736
|
+
control: internal
|
|
3737
|
+
strength: critical
|
|
3738
|
+
confidence: 1
|
|
3739
|
+
reason: "A structured resolution is what resolveTrain RETURNS, so there is nothing to structure until the route-control layer exists. Runner first, then the shape of its verdict."
|
|
3740
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3741
|
+
- source_ref: coder.bun.interlocking-delegates-to-trainrunner
|
|
3742
|
+
target_ref: coder.bun.interlocking-runner-exists
|
|
3743
|
+
type: requires
|
|
3744
|
+
foundation: finish_to_start
|
|
3745
|
+
constraint: mandatory
|
|
3746
|
+
control: internal
|
|
3747
|
+
strength: critical
|
|
3748
|
+
confidence: 1
|
|
3749
|
+
reason: Delegation is a property OF the runner; a tree with no InterlockingRunner has nothing that could fail to delegate.
|
|
3750
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3751
|
+
- source_ref: coder.bun.interlocking-does-not-carry-cargo
|
|
3752
|
+
target_ref: coder.bun.interlocking-delegates-to-trainrunner
|
|
3753
|
+
type: runs_alongside
|
|
3754
|
+
foundation: start_to_start
|
|
3755
|
+
constraint: mandatory
|
|
3756
|
+
control: internal
|
|
3757
|
+
strength: critical
|
|
3758
|
+
confidence: 1
|
|
3759
|
+
reason: "The two halves of one idea: route control must not become execution. One forbids running the wagons, the other forbids touching the data plane they carry."
|
|
3760
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3761
|
+
- source_ref: coder.bun.station-master-interlocking-routing
|
|
3762
|
+
target_ref: coder.bun.interlocking-runner-exists
|
|
3763
|
+
type: requires
|
|
3764
|
+
foundation: finish_to_start
|
|
3765
|
+
constraint: mandatory
|
|
3766
|
+
control: internal
|
|
3767
|
+
strength: important
|
|
3768
|
+
confidence: 1
|
|
3769
|
+
reason: server.ts can only route THROUGH an InterlockingRunner that exists; the Station Master obligation presupposes the runtime one.
|
|
3770
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3771
|
+
- source_ref: coder.bun.interlocking-bilateral-binding
|
|
3772
|
+
target_ref: coder.bun.station-master-interlocking-routing
|
|
3773
|
+
type: requires
|
|
3774
|
+
foundation: finish_to_start
|
|
3775
|
+
constraint: mandatory
|
|
3776
|
+
control: internal
|
|
3777
|
+
strength: critical
|
|
3778
|
+
confidence: 1
|
|
3779
|
+
reason: "Bilateral binding closes declaration, runtime, station and trace against each other. Two of its five directions are Station Master directions, so the station wiring must hold before closure can be asserted."
|
|
3780
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3781
|
+
- source_ref: coder.bun.interlocking-bilateral-binding
|
|
3782
|
+
target_ref: coder.bun.composition-root
|
|
3783
|
+
type: runs_alongside
|
|
3784
|
+
foundation: start_to_start
|
|
3785
|
+
constraint: discretionary
|
|
3786
|
+
control: internal
|
|
3787
|
+
strength: minor
|
|
3788
|
+
confidence: 1
|
|
3789
|
+
reason: "Both govern server.ts as the composition root: one that collaborators are only instantiated there, the other that the JOURNEY_MAP it holds agrees with the declared route space."
|
|
3790
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3791
|
+
- source_ref: coder.bun.runtime-typecheck-enforced
|
|
3792
|
+
target_ref: coder.bun.interlocking-resolution-model-exists
|
|
3793
|
+
type: runs_alongside
|
|
3794
|
+
foundation: start_to_start
|
|
3795
|
+
constraint: mandatory
|
|
3796
|
+
control: internal
|
|
3797
|
+
strength: important
|
|
3798
|
+
confidence: 1
|
|
3799
|
+
reason: "Complementary halves of one guarantee about the resolution model. The shape rule proves an InterlockingResolution declaring the eight fields EXISTS; only a typechecker proves what resolveTrain actually returns conforms to it, and Bun runs .ts without checking."
|
|
3800
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3801
|
+
- source_ref: coder.bun.runtime-typecheck-enforced
|
|
3802
|
+
target_ref: coder.bun.runtime-single-lockfile
|
|
3803
|
+
type: runs_alongside
|
|
3804
|
+
foundation: start_to_start
|
|
3805
|
+
constraint: discretionary
|
|
3806
|
+
control: internal
|
|
3807
|
+
strength: minor
|
|
3808
|
+
confidence: 1
|
|
3809
|
+
reason: "Both are Bun runtime decisions read from package.json and its neighbours: one that a single resolver owns the dependency graph, the other that the types in it are actually checked."
|
|
3810
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3811
|
+
- source_ref: coder.bun.runtime-executes-the-declaration
|
|
3812
|
+
target_ref: coder.bun.interlocking-bilateral-binding
|
|
3813
|
+
type: requires
|
|
3814
|
+
foundation: finish_to_start
|
|
3815
|
+
constraint: mandatory
|
|
3816
|
+
control: internal
|
|
3817
|
+
strength: critical
|
|
3818
|
+
confidence: 1
|
|
3819
|
+
reason: "Bilateral binding closes a TEXT-level correspondence — literals in the runtime also appear in the plan. This asks the harder question underneath it: whether the runtime ever READS the plan, or merely restates it."
|
|
3820
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.bun/relationships.yaml
|
|
3821
|
+
- source_ref: coder.htmx.verb-endpoint-is-routed
|
|
3822
|
+
target_ref: coder.htmx.verb-mutation-signals-progress
|
|
3823
|
+
type: runs_alongside
|
|
3824
|
+
foundation: start_to_start
|
|
3825
|
+
constraint: discretionary
|
|
3826
|
+
control: internal
|
|
3827
|
+
strength: important
|
|
3828
|
+
confidence: 1
|
|
3829
|
+
reason: Two obligations on the same state-changing affordance. One requires it to tell the operator something is happening; this one requires it to reach a route the Station Master admits. A mutation can satisfy either alone and still be a button that signals progress while posting into nothing.
|
|
3830
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3831
|
+
- source_ref: coder.htmx.verb-destructive-confirms
|
|
3832
|
+
target_ref: coder.htmx.verb-mutation-signals-progress
|
|
3833
|
+
type: runs_alongside
|
|
3834
|
+
foundation: start_to_start
|
|
3835
|
+
constraint: mandatory
|
|
3836
|
+
control: internal
|
|
3837
|
+
strength: important
|
|
3838
|
+
confidence: 1
|
|
3839
|
+
reason: "Both govern a mutating control: one guards INTENT before the request, the other FEEDBACK during it."
|
|
3840
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3841
|
+
- source_ref: coder.htmx.swap-oob-carries-id
|
|
3842
|
+
target_ref: coder.htmx.swap-no-inline-handler
|
|
3843
|
+
type: runs_alongside
|
|
3844
|
+
foundation: start_to_start
|
|
3845
|
+
constraint: discretionary
|
|
3846
|
+
control: internal
|
|
3847
|
+
strength: minor
|
|
3848
|
+
confidence: 1
|
|
3849
|
+
reason: "Both concern what survives a swap: an oob element needs an id to land, an inline handler dies when its node is replaced."
|
|
3850
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3851
|
+
- source_ref: coder.htmx.fragment-escapes-interpolation
|
|
3852
|
+
target_ref: coder.htmx.verb-endpoint-same-origin
|
|
3853
|
+
type: runs_alongside
|
|
3854
|
+
foundation: start_to_start
|
|
3855
|
+
constraint: mandatory
|
|
3856
|
+
control: internal
|
|
3857
|
+
strength: critical
|
|
3858
|
+
confidence: 1
|
|
3859
|
+
reason: "Both govern what reaches the live DOM: one the ORIGIN the markup came from, the other the DATA inside it."
|
|
3860
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3861
|
+
- source_ref: coder.htmx.swap-no-inline-handler
|
|
3862
|
+
target_ref: coder.htmx.verb-destructive-confirms
|
|
3863
|
+
type: runs_alongside
|
|
3864
|
+
foundation: start_to_start
|
|
3865
|
+
constraint: discretionary
|
|
3866
|
+
control: internal
|
|
3867
|
+
strength: minor
|
|
3868
|
+
confidence: 1
|
|
3869
|
+
reason: Both replace imperative JavaScript with a declarative hx- attribute the swap lifecycle can see.
|
|
3870
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3871
|
+
- source_ref: coder.htmx.verb-endpoint-same-origin
|
|
3872
|
+
target_ref: coder.htmx.verb-mutation-signals-progress
|
|
3873
|
+
type: runs_alongside
|
|
3874
|
+
foundation: start_to_start
|
|
3875
|
+
constraint: mandatory
|
|
3876
|
+
control: internal
|
|
3877
|
+
strength: important
|
|
3878
|
+
confidence: 1
|
|
3879
|
+
reason: "Both read the same hx- verb attributes: one judges WHERE the request goes, the other what the user sees while it is in flight."
|
|
3880
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.coder.htmx/relationships.yaml
|
|
3881
|
+
- source_ref: planner.docs.identity-required
|
|
3882
|
+
target_ref: planner.docs.asciidoc-only
|
|
3883
|
+
type: requires
|
|
3884
|
+
foundation: finish_to_start
|
|
3885
|
+
constraint: mandatory
|
|
3886
|
+
control: internal
|
|
3887
|
+
strength: critical
|
|
3888
|
+
confidence: 1
|
|
3889
|
+
reason: "A doc-id lives in an AsciiDoc attribute. A markdown document has nowhere to declare one, so format uniformity is the precondition for identity."
|
|
3890
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3891
|
+
- source_ref: planner.docs.doc-id-unique
|
|
3892
|
+
target_ref: planner.docs.identity-required
|
|
3893
|
+
type: requires
|
|
3894
|
+
foundation: finish_to_start
|
|
3895
|
+
constraint: mandatory
|
|
3896
|
+
control: internal
|
|
3897
|
+
strength: critical
|
|
3898
|
+
confidence: 1
|
|
3899
|
+
reason: Uniqueness compares ids that were actually declared; a document with no doc-id is reported by identity-required and never counted as a collision here.
|
|
3900
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3901
|
+
- source_ref: planner.docs.graph-target-resolves
|
|
3902
|
+
target_ref: planner.docs.doc-id-unique
|
|
3903
|
+
type: requires
|
|
3904
|
+
foundation: finish_to_start
|
|
3905
|
+
constraint: mandatory
|
|
3906
|
+
control: internal
|
|
3907
|
+
strength: critical
|
|
3908
|
+
confidence: 1
|
|
3909
|
+
reason: "Resolution needs exactly one target per id. Under a duplicate, :supersedes: cannot say which document it means, so uniqueness must hold before an edge can be said to resolve."
|
|
3910
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3911
|
+
- source_ref: planner.docs.graph-target-resolves
|
|
3912
|
+
target_ref: planner.docs.identity-required
|
|
3913
|
+
type: requires
|
|
3914
|
+
foundation: finish_to_start
|
|
3915
|
+
constraint: mandatory
|
|
3916
|
+
control: internal
|
|
3917
|
+
strength: critical
|
|
3918
|
+
confidence: 1
|
|
3919
|
+
reason: "The declared-id set is built from :doc-id: attributes BEFORE any edge is resolved. This edge is the no-fabrication discipline expressed as an ordering: without the set first, the resolver would have to invent what it resolves against."
|
|
3920
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3921
|
+
- source_ref: planner.docs.adr-registry-derived
|
|
3922
|
+
target_ref: planner.docs.graph-target-resolves
|
|
3923
|
+
type: requires
|
|
3924
|
+
foundation: finish_to_start
|
|
3925
|
+
constraint: mandatory
|
|
3926
|
+
control: internal
|
|
3927
|
+
strength: important
|
|
3928
|
+
confidence: 1
|
|
3929
|
+
reason: "The registry is a projection of :decides: edges, so it is only as trustworthy as edge resolution. An ADR deciding an undeclared node is reported by the resolver, never listed in the registry."
|
|
3930
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3931
|
+
- source_ref: planner.docs.reference-integrity
|
|
3932
|
+
target_ref: planner.docs.asciidoc-only
|
|
3933
|
+
type: requires
|
|
3934
|
+
foundation: finish_to_start
|
|
3935
|
+
constraint: mandatory
|
|
3936
|
+
control: internal
|
|
3937
|
+
strength: important
|
|
3938
|
+
confidence: 1
|
|
3939
|
+
reason: "asciidoctor renders the authored corpus. A markdown file under docs/ is not an input the renderer can resolve references through, so the format rule bounds what reference-integrity can even see."
|
|
3940
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3941
|
+
- source_ref: planner.docs.undeclared-change
|
|
3942
|
+
target_ref: planner.docs.artifact-path-shape
|
|
3943
|
+
type: runs_alongside
|
|
3944
|
+
foundation: start_to_start
|
|
3945
|
+
constraint: mandatory
|
|
3946
|
+
control: internal
|
|
3947
|
+
strength: critical
|
|
3948
|
+
confidence: 1
|
|
3949
|
+
reason: "The two halves of the declaration check: one asks whether a declared path is SHAPED like documentation, the other whether a documentation change was declared at all. Together they close the loop core opens; neither alone does."
|
|
3950
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3951
|
+
- source_ref: planner.docs.area-index-required
|
|
3952
|
+
target_ref: planner.docs.asciidoc-only
|
|
3953
|
+
type: runs_alongside
|
|
3954
|
+
foundation: start_to_start
|
|
3955
|
+
constraint: discretionary
|
|
3956
|
+
control: internal
|
|
3957
|
+
strength: minor
|
|
3958
|
+
confidence: 1
|
|
3959
|
+
reason: "Both are canonical-tree shape rules read from the same scan of docs/: one governs what an area contains, the other what format its files are in."
|
|
3960
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.planner.docs/relationships.yaml
|
|
3961
|
+
- source_ref: tester.bun.acceptance-resolves-to-declared
|
|
3962
|
+
target_ref: tester.bun.acceptance-binding-declared
|
|
3963
|
+
type: requires
|
|
3964
|
+
foundation: finish_to_start
|
|
3965
|
+
constraint: mandatory
|
|
3966
|
+
control: internal
|
|
3967
|
+
strength: critical
|
|
3968
|
+
confidence: 1
|
|
3969
|
+
reason: "One requires the binding to EXIST, the other requires it to be TRUE. There is nothing to resolve until a header is present, so presence is settled first; together they close the gap where a test named an acceptance that was never declared and every rule stayed silent."
|
|
3970
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
3971
|
+
- source_ref: tester.bun.acceptance-binding-declared
|
|
3972
|
+
target_ref: tester.bun.test-carries-urn-identity
|
|
3973
|
+
type: requires
|
|
3974
|
+
foundation: finish_to_start
|
|
3975
|
+
constraint: mandatory
|
|
3976
|
+
control: internal
|
|
3977
|
+
strength: critical
|
|
3978
|
+
confidence: 1
|
|
3979
|
+
reason: "Identity first, then what it proves; a binding with no URN has nothing to bind."
|
|
3980
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
3981
|
+
- source_ref: tester.bun.test-phase-declared
|
|
3982
|
+
target_ref: tester.bun.test-carries-urn-identity
|
|
3983
|
+
type: requires
|
|
3984
|
+
foundation: finish_to_start
|
|
3985
|
+
constraint: mandatory
|
|
3986
|
+
control: internal
|
|
3987
|
+
strength: critical
|
|
3988
|
+
confidence: 1
|
|
3989
|
+
reason: The phase is read from the same header block and is meaningless without the URN.
|
|
3990
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
3991
|
+
- source_ref: tester.bun.routing-runtime-family
|
|
3992
|
+
target_ref: tester.bun.test-carries-urn-identity
|
|
3993
|
+
type: requires
|
|
3994
|
+
foundation: finish_to_start
|
|
3995
|
+
constraint: mandatory
|
|
3996
|
+
control: internal
|
|
3997
|
+
strength: minor
|
|
3998
|
+
confidence: 1
|
|
3999
|
+
reason: Another optional header field validated from the same parse.
|
|
4000
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4001
|
+
- source_ref: tester.bun.acceptance-covers-tag-well-formed
|
|
4002
|
+
target_ref: tester.bun.acceptance-binding-declared
|
|
4003
|
+
type: runs_alongside
|
|
4004
|
+
foundation: start_to_start
|
|
4005
|
+
constraint: mandatory
|
|
4006
|
+
control: internal
|
|
4007
|
+
strength: important
|
|
4008
|
+
confidence: 1
|
|
4009
|
+
reason: "The two-level binding model: the header binds the FILE, a @covers tag binds one CASE."
|
|
4010
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4011
|
+
- source_ref: tester.bun.red-fails-first
|
|
4012
|
+
target_ref: tester.bun.red-behavioral-assertion
|
|
4013
|
+
type: runs_alongside
|
|
4014
|
+
foundation: start_to_start
|
|
4015
|
+
constraint: mandatory
|
|
4016
|
+
control: internal
|
|
4017
|
+
strength: critical
|
|
4018
|
+
confidence: 1
|
|
4019
|
+
reason: "One requires a guaranteed-fail marker, the other that the assertions are behavioural; a RED test needs both."
|
|
4020
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4021
|
+
- source_ref: tester.bun.red-behavioral-assertion
|
|
4022
|
+
target_ref: tester.bun.test-phase-declared
|
|
4023
|
+
type: requires
|
|
4024
|
+
foundation: finish_to_start
|
|
4025
|
+
constraint: mandatory
|
|
4026
|
+
control: internal
|
|
4027
|
+
strength: important
|
|
4028
|
+
confidence: 1
|
|
4029
|
+
reason: Only evaluable once a phase is declared; an undeclared test is exempt from the whole phase surface.
|
|
4030
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4031
|
+
- source_ref: tester.bun.smoke-no-collaborator-substitution
|
|
4032
|
+
target_ref: tester.bun.smoke-observable-assertion
|
|
4033
|
+
type: runs_alongside
|
|
4034
|
+
foundation: start_to_start
|
|
4035
|
+
constraint: mandatory
|
|
4036
|
+
control: internal
|
|
4037
|
+
strength: critical
|
|
4038
|
+
confidence: 1
|
|
4039
|
+
reason: "Both keep SMOKE honest: real collaborators, and an assertion on what an operator could witness."
|
|
4040
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4041
|
+
- source_ref: tester.bun.security-input
|
|
4042
|
+
target_ref: tester.bun.security-auth
|
|
4043
|
+
type: runs_alongside
|
|
4044
|
+
foundation: start_to_start
|
|
4045
|
+
constraint: mandatory
|
|
4046
|
+
control: internal
|
|
4047
|
+
strength: critical
|
|
4048
|
+
confidence: 1
|
|
4049
|
+
reason: Authorisation and input validation are the two halves of one boundary; a happy-path test of either is a silent green gap.
|
|
4050
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4051
|
+
- source_ref: tester.bun.telemetry-emit
|
|
4052
|
+
target_ref: tester.bun.smoke-observable-assertion
|
|
4053
|
+
type: runs_alongside
|
|
4054
|
+
foundation: start_to_start
|
|
4055
|
+
constraint: discretionary
|
|
4056
|
+
control: internal
|
|
4057
|
+
strength: minor
|
|
4058
|
+
confidence: 1
|
|
4059
|
+
reason: Both demand an assertion on an external EFFECT rather than on a returned value.
|
|
4060
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4061
|
+
- source_ref: tester.bun.test-no-self-skip
|
|
4062
|
+
target_ref: tester.bun.red-fails-first
|
|
4063
|
+
type: runs_alongside
|
|
4064
|
+
foundation: start_to_start
|
|
4065
|
+
constraint: mandatory
|
|
4066
|
+
control: internal
|
|
4067
|
+
strength: important
|
|
4068
|
+
confidence: 1
|
|
4069
|
+
reason: "They share a vocabulary and must not contradict: `.fails`/`.failing` is an accepted RED marker, so it is deliberately not treated as a self-skip."
|
|
4070
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4071
|
+
- source_ref: tester.bun.test-isolation-no-live-state
|
|
4072
|
+
target_ref: tester.bun.smoke-no-collaborator-substitution
|
|
4073
|
+
type: runs_alongside
|
|
4074
|
+
foundation: start_to_start
|
|
4075
|
+
constraint: discretionary
|
|
4076
|
+
control: internal
|
|
4077
|
+
strength: minor
|
|
4078
|
+
confidence: 1
|
|
4079
|
+
reason: Both govern what a test is allowed to touch outside itself.
|
|
4080
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4081
|
+
- source_ref: tester.bun.test-imports-bun-test
|
|
4082
|
+
target_ref: tester.bun.routing-runtime-family
|
|
4083
|
+
type: runs_alongside
|
|
4084
|
+
foundation: start_to_start
|
|
4085
|
+
constraint: mandatory
|
|
4086
|
+
control: internal
|
|
4087
|
+
strength: important
|
|
4088
|
+
confidence: 1
|
|
4089
|
+
reason: "One checks the DECLARED runner, the other the IMPORTED harness; they must agree or the gate credits a runner that never ran the test."
|
|
4090
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4091
|
+
- source_ref: tester.bun.smoke-observable-assertion
|
|
4092
|
+
target_ref: tester.bun.test-phase-declared
|
|
4093
|
+
type: requires
|
|
4094
|
+
foundation: finish_to_start
|
|
4095
|
+
constraint: mandatory
|
|
4096
|
+
control: internal
|
|
4097
|
+
strength: important
|
|
4098
|
+
confidence: 1
|
|
4099
|
+
reason: "Only evaluable once a phase is declared, exactly as red-behavioral-assertion is; an undeclared test escapes the SMOKE surface entirely."
|
|
4100
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4101
|
+
- source_ref: tester.bun.security-auth
|
|
4102
|
+
target_ref: tester.bun.telemetry-emit
|
|
4103
|
+
type: runs_alongside
|
|
4104
|
+
foundation: start_to_start
|
|
4105
|
+
constraint: discretionary
|
|
4106
|
+
control: internal
|
|
4107
|
+
strength: minor
|
|
4108
|
+
confidence: 1
|
|
4109
|
+
reason: "One shape, three kinds: a test whose URN declares its kind must carry the assertion that kind implies, or it is a silent green gap."
|
|
4110
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4111
|
+
- source_ref: tester.bun.interlocking-production-runner-used
|
|
4112
|
+
target_ref: tester.bun.interlocking-route-coverage
|
|
4113
|
+
type: requires
|
|
4114
|
+
foundation: finish_to_start
|
|
4115
|
+
constraint: mandatory
|
|
4116
|
+
control: internal
|
|
4117
|
+
strength: critical
|
|
4118
|
+
confidence: 1
|
|
4119
|
+
reason: "Coverage counts a route as proven only if the covering test drove the real runners. A route covered by a test that mocks the route-control path is a DESCRIPTIVE green, so production-runner-used is what makes route-coverage mean anything."
|
|
4120
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4121
|
+
- source_ref: tester.bun.interlocking-smoke-coverage-for-station-master
|
|
4122
|
+
target_ref: tester.bun.interlocking-route-coverage
|
|
4123
|
+
type: runs_alongside
|
|
4124
|
+
foundation: start_to_start
|
|
4125
|
+
constraint: mandatory
|
|
4126
|
+
control: internal
|
|
4127
|
+
strength: important
|
|
4128
|
+
confidence: 1
|
|
4129
|
+
reason: "Two coverage obligations over the same declaration: one per admissible ROUTE, one per exposed Station Master ACTION. The criticality signal for the second is the core entrypoint.exposed field, never a heuristic."
|
|
4130
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4131
|
+
- source_ref: tester.bun.interlocking-trace-binds-declared-route
|
|
4132
|
+
target_ref: tester.bun.interlocking-route-coverage
|
|
4133
|
+
type: requires
|
|
4134
|
+
foundation: finish_to_start
|
|
4135
|
+
constraint: mandatory
|
|
4136
|
+
control: internal
|
|
4137
|
+
strength: critical
|
|
4138
|
+
confidence: 1
|
|
4139
|
+
reason: "A covering test proves a route ran; only the bound trace proves WHICH route ran. Without the binding fields the run could resolve the wrong route, category or guard and the coverage test would still pass."
|
|
4140
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4141
|
+
- source_ref: tester.bun.interlocking-route-coverage
|
|
4142
|
+
target_ref: tester.bun.acceptance-binding-declared
|
|
4143
|
+
type: runs_alongside
|
|
4144
|
+
foundation: start_to_start
|
|
4145
|
+
constraint: discretionary
|
|
4146
|
+
control: internal
|
|
4147
|
+
strength: minor
|
|
4148
|
+
confidence: 1
|
|
4149
|
+
reason: "Both bind the suite back to a planner declaration: one to the acceptance criterion a test covers, the other to the guarded route it exercises."
|
|
4150
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4151
|
+
- source_ref: tester.bun.interlocking-train-sequence-is-exercised
|
|
4152
|
+
target_ref: tester.bun.interlocking-route-coverage
|
|
4153
|
+
type: requires
|
|
4154
|
+
foundation: finish_to_start
|
|
4155
|
+
constraint: mandatory
|
|
4156
|
+
control: internal
|
|
4157
|
+
strength: critical
|
|
4158
|
+
confidence: 1
|
|
4159
|
+
reason: "Route coverage proves WHICH train a route selects; this proves WHAT it ran. A train whose wagon sequence is wrong is selected correctly and executes the wrong thing, so selection coverage must hold before execution coverage means anything."
|
|
4160
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.bun/relationships.yaml
|
|
4161
|
+
- source_ref: tester.htmx.swap-oob-asserts-destination-id
|
|
4162
|
+
target_ref: tester.htmx.fragment-asserts-returned-markup
|
|
4163
|
+
type: requires
|
|
4164
|
+
foundation: finish_to_start
|
|
4165
|
+
constraint: mandatory
|
|
4166
|
+
control: internal
|
|
4167
|
+
strength: important
|
|
4168
|
+
confidence: 1
|
|
4169
|
+
reason: "Asserting the destination id is a specific case of asserting the fragment at all: a test that never reaches the body cannot reach the id inside it."
|
|
4170
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.htmx/relationships.yaml
|
|
4171
|
+
- source_ref: tester.htmx.verb-endpoint-coverage
|
|
4172
|
+
target_ref: tester.htmx.fragment-asserts-returned-markup
|
|
4173
|
+
type: runs_alongside
|
|
4174
|
+
foundation: start_to_start
|
|
4175
|
+
constraint: mandatory
|
|
4176
|
+
control: internal
|
|
4177
|
+
strength: important
|
|
4178
|
+
confidence: 1
|
|
4179
|
+
reason: "Two halves of one guarantee: coverage says every declared endpoint HAS a test, fragment-asserts-markup says that test looks at what the endpoint actually returns."
|
|
4180
|
+
origin: atdd-extensions@3aa141e:official/atdd.extension.tester.htmx/relationships.yaml
|
|
4181
|
+
- confidence: 1
|
|
4182
|
+
constraint: mandatory
|
|
4183
|
+
control: internal
|
|
4184
|
+
foundation: finish_to_start
|
|
4185
|
+
reason: decoding the nominal and sibling trains supplies what a journey composes across interlockings
|
|
4186
|
+
source_ref: planner.decomposition.train-journey
|
|
4187
|
+
strength: important
|
|
4188
|
+
target_ref: planner.journey.definition
|
|
4189
|
+
type: enables
|
|
4190
|
+
origin: "@afokapu/atdd-bun"
|
|
4191
|
+
- confidence: 1
|
|
4192
|
+
constraint: mandatory
|
|
4193
|
+
control: internal
|
|
4194
|
+
foundation: finish_to_start
|
|
4195
|
+
reason: continuation closure validates the journey topology the definition describes
|
|
4196
|
+
source_ref: planner.journey.continuation-closure
|
|
4197
|
+
strength: critical
|
|
4198
|
+
target_ref: planner.journey.definition
|
|
4199
|
+
type: requires
|
|
4200
|
+
origin: "@afokapu/atdd-bun"
|
|
4201
|
+
- confidence: 1
|
|
4202
|
+
constraint: mandatory
|
|
4203
|
+
control: internal
|
|
4204
|
+
foundation: finish_to_start
|
|
4205
|
+
reason: "an interlocking is judged composed against what a journey is: its entrypoint and its continuations"
|
|
4206
|
+
source_ref: planner.journey.interlocking-composed
|
|
4207
|
+
strength: critical
|
|
4208
|
+
target_ref: planner.journey.definition
|
|
4209
|
+
type: requires
|
|
4210
|
+
origin: "@afokapu/atdd-bun"
|
|
4211
|
+
- confidence: 1
|
|
4212
|
+
constraint: mandatory
|
|
4213
|
+
control: internal
|
|
4214
|
+
foundation: start_to_start
|
|
4215
|
+
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"
|
|
4216
|
+
source_ref: planner.journey.interlocking-composed
|
|
4217
|
+
strength: critical
|
|
4218
|
+
target_ref: planner.journey.continuation-closure
|
|
4219
|
+
type: runs_alongside
|
|
4220
|
+
origin: "@afokapu/atdd-bun"
|
|
4221
|
+
- confidence: 1
|
|
4222
|
+
constraint: mandatory
|
|
4223
|
+
control: internal
|
|
4224
|
+
foundation: finish_to_start
|
|
4225
|
+
reason: JourneyRunner executes the continuation topology the plan declares; without a declared journey there is nothing for it to compose
|
|
4226
|
+
source_ref: coder.bun.journey-runner-boundary
|
|
4227
|
+
strength: critical
|
|
4228
|
+
target_ref: planner.journey.definition
|
|
4229
|
+
type: requires
|
|
4230
|
+
origin: "@afokapu/atdd-bun"
|
|
4231
|
+
- confidence: 1
|
|
4232
|
+
constraint: mandatory
|
|
4233
|
+
control: internal
|
|
4234
|
+
foundation: finish_to_start
|
|
4235
|
+
reason: JourneyRunner is the continuation layer above InterlockingRunner and delegates each routing decision to it
|
|
4236
|
+
source_ref: coder.bun.journey-runner-boundary
|
|
4237
|
+
strength: critical
|
|
4238
|
+
target_ref: coder.bun.interlocking-runner-exists
|
|
4239
|
+
type: requires
|
|
4240
|
+
origin: "@afokapu/atdd-bun"
|
|
4241
|
+
- confidence: 1
|
|
4242
|
+
constraint: mandatory
|
|
4243
|
+
control: internal
|
|
4244
|
+
foundation: finish_to_start
|
|
4245
|
+
reason: "an exposed journey is reached through JourneyRunner, so the runner boundary must hold before routing to it"
|
|
4246
|
+
source_ref: coder.bun.station-master-journey-routing
|
|
4247
|
+
strength: critical
|
|
4248
|
+
target_ref: coder.bun.journey-runner-boundary
|
|
4249
|
+
type: requires
|
|
4250
|
+
origin: "@afokapu/atdd-bun"
|
|
4251
|
+
- confidence: 1
|
|
4252
|
+
constraint: mandatory
|
|
4253
|
+
control: internal
|
|
4254
|
+
foundation: start_to_start
|
|
4255
|
+
reason: "the two Station Master routing obligations: exposed journeys through JOURNEY_MAP, exposed interlockings through their own mapping"
|
|
4256
|
+
source_ref: coder.bun.station-master-journey-routing
|
|
4257
|
+
strength: important
|
|
4258
|
+
target_ref: coder.bun.station-master-interlocking-routing
|
|
4259
|
+
type: runs_alongside
|
|
4260
|
+
origin: "@afokapu/atdd-bun"
|
|
4261
|
+
- confidence: 1
|
|
4262
|
+
constraint: mandatory
|
|
4263
|
+
control: internal
|
|
4264
|
+
foundation: finish_to_start
|
|
4265
|
+
reason: the journey view is rendered from the journey topology the plan declares
|
|
4266
|
+
source_ref: planner.docs.journey-view-current
|
|
4267
|
+
strength: critical
|
|
4268
|
+
target_ref: planner.journey.definition
|
|
4269
|
+
type: requires
|
|
4270
|
+
origin: "@afokapu/atdd-bun"
|
|
4271
|
+
- confidence: 1
|
|
4272
|
+
constraint: mandatory
|
|
4273
|
+
control: internal
|
|
4274
|
+
foundation: finish_to_start
|
|
4275
|
+
reason: the generated page is a document like any other and must carry its doc-id and status
|
|
4276
|
+
source_ref: planner.docs.journey-view-current
|
|
4277
|
+
strength: important
|
|
4278
|
+
target_ref: planner.docs.identity-required
|
|
4279
|
+
type: requires
|
|
4280
|
+
origin: "@afokapu/atdd-bun"
|
|
4281
|
+
- confidence: 1
|
|
4282
|
+
constraint: mandatory
|
|
4283
|
+
control: internal
|
|
4284
|
+
foundation: start_to_start
|
|
4285
|
+
reason: "both keep the rendered documentation truthful: one that references resolve, the other that the drawn journeys are the planned ones"
|
|
4286
|
+
source_ref: planner.docs.journey-view-current
|
|
4287
|
+
strength: important
|
|
4288
|
+
target_ref: planner.docs.reference-integrity
|
|
4289
|
+
type: runs_alongside
|
|
4290
|
+
origin: "@afokapu/atdd-bun"
|
|
4291
|
+
- confidence: 1
|
|
4292
|
+
constraint: mandatory
|
|
4293
|
+
control: internal
|
|
4294
|
+
foundation: finish_to_start
|
|
4295
|
+
reason: a testing witness can only resolve once one is declared
|
|
4296
|
+
source_ref: traceability.source.tested-by-resolves
|
|
4297
|
+
strength: critical
|
|
4298
|
+
target_ref: traceability.source.tested-by-present
|
|
4299
|
+
type: requires
|
|
4300
|
+
origin: "@afokapu/atdd-bun"
|
|
4301
|
+
- confidence: 1
|
|
4302
|
+
constraint: mandatory
|
|
4303
|
+
control: internal
|
|
4304
|
+
foundation: start_to_start
|
|
4305
|
+
reason: "the same Tested-By header, read by the closure check and by the coder header rule"
|
|
4306
|
+
source_ref: traceability.source.tested-by-present
|
|
4307
|
+
strength: important
|
|
4308
|
+
target_ref: coder.bun.green-header-tested-by
|
|
4309
|
+
type: runs_alongside
|
|
4310
|
+
origin: "@afokapu/atdd-bun"
|
|
4311
|
+
- confidence: 1
|
|
4312
|
+
constraint: mandatory
|
|
4313
|
+
control: internal
|
|
4314
|
+
foundation: finish_to_start
|
|
4315
|
+
reason: "a test's binding must be declared before it can be resolved against the plan"
|
|
4316
|
+
source_ref: traceability.test.binding-resolves
|
|
4317
|
+
strength: critical
|
|
4318
|
+
target_ref: tester.bun.acceptance-binding-declared
|
|
4319
|
+
type: requires
|
|
4320
|
+
origin: "@afokapu/atdd-bun"
|
|
4321
|
+
- confidence: 1
|
|
4322
|
+
constraint: mandatory
|
|
4323
|
+
control: internal
|
|
4324
|
+
foundation: start_to_start
|
|
4325
|
+
reason: "the two directions of plan-test closure: every acceptance has a test, and every test names an acceptance that exists"
|
|
4326
|
+
source_ref: traceability.plan.executable-acceptance-has-test
|
|
4327
|
+
strength: critical
|
|
4328
|
+
target_ref: traceability.test.binding-resolves
|
|
4329
|
+
type: runs_alongside
|
|
4330
|
+
origin: "@afokapu/atdd-bun"
|
|
4331
|
+
- confidence: 1
|
|
4332
|
+
constraint: mandatory
|
|
4333
|
+
control: internal
|
|
4334
|
+
foundation: start_to_start
|
|
4335
|
+
reason: source-to-test and test-to-plan links chain into plan to test to implementation closure
|
|
4336
|
+
source_ref: traceability.source.tested-by-resolves
|
|
4337
|
+
strength: important
|
|
4338
|
+
target_ref: traceability.test.binding-resolves
|
|
4339
|
+
type: runs_alongside
|
|
4340
|
+
origin: "@afokapu/atdd-bun"
|
|
4341
|
+
- confidence: 1
|
|
4342
|
+
constraint: mandatory
|
|
4343
|
+
control: internal
|
|
4344
|
+
foundation: finish_to_start
|
|
4345
|
+
reason: "Bun realization of the core obligation coder.design.hierarchy-import, checked over .tsx, .jsx, .html and .css"
|
|
4346
|
+
source_ref: coder.bun.design-dependency-flow
|
|
4347
|
+
strength: important
|
|
4348
|
+
target_ref: coder.design.hierarchy-import
|
|
4349
|
+
type: requires
|
|
4350
|
+
origin: "@afokapu/atdd-bun"
|
|
4351
|
+
- confidence: 1
|
|
4352
|
+
constraint: mandatory
|
|
4353
|
+
control: internal
|
|
4354
|
+
foundation: finish_to_start
|
|
4355
|
+
reason: "Bun realization of the core obligation coder.design.hierarchy-import, checked over .tsx, .jsx, .html and .css"
|
|
4356
|
+
source_ref: coder.bun.design-wagons-import
|
|
4357
|
+
strength: important
|
|
4358
|
+
target_ref: coder.design.hierarchy-import
|
|
4359
|
+
type: requires
|
|
4360
|
+
origin: "@afokapu/atdd-bun"
|
|
4361
|
+
- confidence: 1
|
|
4362
|
+
constraint: mandatory
|
|
4363
|
+
control: internal
|
|
4364
|
+
foundation: finish_to_start
|
|
4365
|
+
reason: "Bun realization of the core obligation coder.design.foundations, checked over .tsx, .jsx, .html and .css"
|
|
4366
|
+
source_ref: coder.bun.design-tokens-pure
|
|
4367
|
+
strength: important
|
|
4368
|
+
target_ref: coder.design.foundations
|
|
4369
|
+
type: requires
|
|
4370
|
+
origin: "@afokapu/atdd-bun"
|
|
4371
|
+
- confidence: 1
|
|
4372
|
+
constraint: mandatory
|
|
4373
|
+
control: internal
|
|
4374
|
+
foundation: finish_to_start
|
|
4375
|
+
reason: "Bun realization of the core obligation coder.design.token-color, checked over .tsx, .jsx, .html and .css"
|
|
4376
|
+
source_ref: coder.bun.design-token-color
|
|
4377
|
+
strength: important
|
|
4378
|
+
target_ref: coder.design.token-color
|
|
4379
|
+
type: requires
|
|
4380
|
+
origin: "@afokapu/atdd-bun"
|
|
4381
|
+
- confidence: 1
|
|
4382
|
+
constraint: mandatory
|
|
4383
|
+
control: internal
|
|
4384
|
+
foundation: finish_to_start
|
|
4385
|
+
reason: "Bun realization of the core obligation coder.design.token-hardcoded, checked over .tsx, .jsx, .html and .css"
|
|
4386
|
+
source_ref: coder.bun.design-token-hardcoded
|
|
4387
|
+
strength: important
|
|
4388
|
+
target_ref: coder.design.token-hardcoded
|
|
4389
|
+
type: requires
|
|
4390
|
+
origin: "@afokapu/atdd-bun"
|
|
4391
|
+
- confidence: 1
|
|
4392
|
+
constraint: mandatory
|
|
4393
|
+
control: internal
|
|
4394
|
+
foundation: finish_to_start
|
|
4395
|
+
reason: "Bun realization of the core obligation coder.design.primitives, checked over .tsx, .jsx, .html and .css"
|
|
4396
|
+
source_ref: coder.bun.design-primitives
|
|
4397
|
+
strength: important
|
|
4398
|
+
target_ref: coder.design.primitives
|
|
4399
|
+
type: requires
|
|
4400
|
+
origin: "@afokapu/atdd-bun"
|
|
4401
|
+
- confidence: 1
|
|
4402
|
+
constraint: mandatory
|
|
4403
|
+
control: internal
|
|
4404
|
+
foundation: finish_to_start
|
|
4405
|
+
reason: "Bun realization of the core obligation coder.design.orphan-ui, checked over .tsx, .jsx, .html and .css"
|
|
4406
|
+
source_ref: coder.bun.design-connected
|
|
4407
|
+
strength: important
|
|
4408
|
+
target_ref: coder.design.orphan-ui
|
|
4409
|
+
type: requires
|
|
4410
|
+
origin: "@afokapu/atdd-bun"
|
|
4411
|
+
- confidence: 1
|
|
4412
|
+
constraint: mandatory
|
|
4413
|
+
control: internal
|
|
4414
|
+
foundation: finish_to_start
|
|
4415
|
+
reason: "Bun realization of the core obligation coder.design.orphan-export, checked over .tsx, .jsx, .html and .css"
|
|
4416
|
+
source_ref: coder.bun.design-orphan-export
|
|
4417
|
+
strength: important
|
|
4418
|
+
target_ref: coder.design.orphan-export
|
|
4419
|
+
type: requires
|
|
4420
|
+
origin: "@afokapu/atdd-bun"
|
|
4421
|
+
- confidence: 1
|
|
4422
|
+
constraint: mandatory
|
|
4423
|
+
control: internal
|
|
4424
|
+
foundation: start_to_start
|
|
4425
|
+
reason: "two halves of coder.design.hierarchy-import: imports flow down the layers, and never out into app code"
|
|
4426
|
+
source_ref: coder.bun.design-dependency-flow
|
|
4427
|
+
strength: critical
|
|
4428
|
+
target_ref: coder.bun.design-wagons-import
|
|
4429
|
+
type: runs_alongside
|
|
4430
|
+
origin: "@afokapu/atdd-bun"
|
|
4431
|
+
- confidence: 1
|
|
4432
|
+
constraint: mandatory
|
|
4433
|
+
control: internal
|
|
4434
|
+
foundation: finish_to_start
|
|
4435
|
+
reason: colors can only be referenced from tokens once the tokens layer holds pure values
|
|
4436
|
+
source_ref: coder.bun.design-token-color
|
|
4437
|
+
strength: important
|
|
4438
|
+
target_ref: coder.bun.design-tokens-pure
|
|
4439
|
+
type: requires
|
|
4440
|
+
origin: "@afokapu/atdd-bun"
|
|
4441
|
+
- confidence: 1
|
|
4442
|
+
constraint: mandatory
|
|
4443
|
+
control: internal
|
|
4444
|
+
foundation: start_to_start
|
|
4445
|
+
reason: "colors, and spacing, radii and durations: together, every visual value outside the tokens layer comes from tokens"
|
|
4446
|
+
source_ref: coder.bun.design-token-color
|
|
4447
|
+
strength: important
|
|
4448
|
+
target_ref: coder.bun.design-token-hardcoded
|
|
4449
|
+
type: runs_alongside
|
|
4450
|
+
origin: "@afokapu/atdd-bun"
|
|
4451
|
+
- confidence: 1
|
|
4452
|
+
constraint: mandatory
|
|
4453
|
+
control: internal
|
|
4454
|
+
foundation: start_to_start
|
|
4455
|
+
reason: "a rendering component must use the design system, and render its controls through primitives"
|
|
4456
|
+
source_ref: coder.bun.design-connected
|
|
4457
|
+
strength: important
|
|
4458
|
+
target_ref: coder.bun.design-primitives
|
|
4459
|
+
type: runs_alongside
|
|
4460
|
+
origin: "@afokapu/atdd-bun"
|
|
4461
|
+
- confidence: 1
|
|
4462
|
+
constraint: mandatory
|
|
4463
|
+
control: internal
|
|
4464
|
+
foundation: start_to_start
|
|
4465
|
+
reason: "code layering and design-system layering: both require dependencies to point in one direction"
|
|
4466
|
+
source_ref: coder.bun.design-dependency-flow
|
|
4467
|
+
strength: important
|
|
4468
|
+
target_ref: coder.bun.design-hierarchy-import
|
|
4469
|
+
type: runs_alongside
|
|
4470
|
+
origin: "@afokapu/atdd-bun"
|
|
4471
|
+
- confidence: 1
|
|
4472
|
+
constraint: mandatory
|
|
4473
|
+
control: internal
|
|
4474
|
+
foundation: finish_to_start
|
|
4475
|
+
reason: "browser specs are recognised by their *.e2e.ts name, which is what brings them under the journey header rules"
|
|
4476
|
+
source_ref: tester.htmx.e2e-spec-naming
|
|
4477
|
+
strength: important
|
|
4478
|
+
target_ref: tester.htmx.journey-binding-header
|
|
4479
|
+
type: enables
|
|
4480
|
+
origin: "@afokapu/atdd-bun"
|
|
4481
|
+
- confidence: 1
|
|
4482
|
+
constraint: mandatory
|
|
4483
|
+
control: internal
|
|
4484
|
+
foundation: finish_to_start
|
|
4485
|
+
reason: a URN can only be checked against the subject once the binding names one
|
|
4486
|
+
source_ref: tester.htmx.journey-urn-format
|
|
4487
|
+
strength: critical
|
|
4488
|
+
target_ref: tester.htmx.journey-binding-header
|
|
4489
|
+
type: requires
|
|
4490
|
+
origin: "@afokapu/atdd-bun"
|
|
4491
|
+
- confidence: 1
|
|
4492
|
+
constraint: mandatory
|
|
4493
|
+
control: internal
|
|
4494
|
+
foundation: start_to_start
|
|
4495
|
+
reason: "the same journey header block: binding and layer are read together"
|
|
4496
|
+
source_ref: tester.htmx.journey-layer-assembly
|
|
4497
|
+
strength: important
|
|
4498
|
+
target_ref: tester.htmx.journey-binding-header
|
|
4499
|
+
type: runs_alongside
|
|
4500
|
+
origin: "@afokapu/atdd-bun"
|
|
4501
|
+
- confidence: 1
|
|
4502
|
+
constraint: mandatory
|
|
4503
|
+
control: internal
|
|
4504
|
+
foundation: start_to_start
|
|
4505
|
+
reason: "the two exclusive test identities: a journey spec binds to a train or journey, an acceptance test to its acceptance"
|
|
4506
|
+
source_ref: tester.htmx.journey-no-acceptance-marker
|
|
4507
|
+
strength: important
|
|
4508
|
+
target_ref: tester.bun.acceptance-binding-declared
|
|
4509
|
+
type: runs_alongside
|
|
4510
|
+
origin: "@afokapu/atdd-bun"
|
|
4511
|
+
- confidence: 1
|
|
4512
|
+
constraint: mandatory
|
|
4513
|
+
control: internal
|
|
4514
|
+
foundation: finish_to_start
|
|
4515
|
+
reason: a binding must be well-formed before it can be resolved against plan/
|
|
4516
|
+
source_ref: tester.htmx.e2e-binds-declared-subject
|
|
4517
|
+
strength: critical
|
|
4518
|
+
target_ref: tester.htmx.journey-binding-header
|
|
4519
|
+
type: requires
|
|
4520
|
+
origin: "@afokapu/atdd-bun"
|
|
4521
|
+
- confidence: 1
|
|
4522
|
+
constraint: mandatory
|
|
4523
|
+
control: internal
|
|
4524
|
+
foundation: finish_to_start
|
|
4525
|
+
reason: only a declared train can be checked for a route that selects it
|
|
4526
|
+
source_ref: tester.htmx.covered-train-is-routed
|
|
4527
|
+
strength: critical
|
|
4528
|
+
target_ref: tester.htmx.e2e-binds-declared-subject
|
|
4529
|
+
type: requires
|
|
4530
|
+
origin: "@afokapu/atdd-bun"
|
|
4531
|
+
- confidence: 1
|
|
4532
|
+
constraint: mandatory
|
|
4533
|
+
control: internal
|
|
4534
|
+
foundation: start_to_start
|
|
4535
|
+
reason: "the two directions between trains and browser specs: every train has a spec, and every covered train is reachable"
|
|
4536
|
+
source_ref: tester.htmx.train-e2e-coverage
|
|
4537
|
+
strength: important
|
|
4538
|
+
target_ref: tester.htmx.covered-train-is-routed
|
|
4539
|
+
type: runs_alongside
|
|
4540
|
+
origin: "@afokapu/atdd-bun"
|
|
4541
|
+
- confidence: 1
|
|
4542
|
+
constraint: mandatory
|
|
4543
|
+
control: internal
|
|
4544
|
+
foundation: start_to_start
|
|
4545
|
+
reason: browser coverage per train beside runner-level coverage per interlocking route
|
|
4546
|
+
source_ref: tester.htmx.train-e2e-coverage
|
|
4547
|
+
strength: important
|
|
4548
|
+
target_ref: tester.bun.interlocking-route-coverage
|
|
4549
|
+
type: runs_alongside
|
|
4550
|
+
origin: "@afokapu/atdd-bun"
|
|
4551
|
+
- confidence: 1
|
|
4552
|
+
constraint: mandatory
|
|
4553
|
+
control: internal
|
|
4554
|
+
foundation: finish_to_start
|
|
4555
|
+
reason: exposed journeys are the ones a journey declares with an exposed entrypoint
|
|
4556
|
+
source_ref: tester.htmx.exposed-journey-e2e-coverage
|
|
4557
|
+
strength: critical
|
|
4558
|
+
target_ref: planner.journey.definition
|
|
4559
|
+
type: requires
|
|
4560
|
+
origin: "@afokapu/atdd-bun"
|
|
4561
|
+
- confidence: 1
|
|
4562
|
+
constraint: mandatory
|
|
4563
|
+
control: internal
|
|
4564
|
+
foundation: start_to_start
|
|
4565
|
+
reason: a journey run end to end in a browser beside each exposed interlocking action smoke-tested through the Station Master
|
|
4566
|
+
source_ref: tester.htmx.exposed-journey-e2e-coverage
|
|
4567
|
+
strength: important
|
|
4568
|
+
target_ref: tester.bun.interlocking-smoke-coverage-for-station-master
|
|
4569
|
+
type: runs_alongside
|
|
4570
|
+
origin: "@afokapu/atdd-bun"
|
|
4571
|
+
- confidence: 1
|
|
4572
|
+
constraint: mandatory
|
|
4573
|
+
control: internal
|
|
4574
|
+
foundation: start_to_start
|
|
4575
|
+
reason: a presentation component is proven rendered by a smoke that asserts on what the user can observe
|
|
4576
|
+
source_ref: tester.htmx.presentation-smoke-coverage
|
|
4577
|
+
strength: important
|
|
4578
|
+
target_ref: tester.bun.smoke-observable-assertion
|
|
4579
|
+
type: runs_alongside
|
|
4580
|
+
origin: "@afokapu/atdd-bun"
|
|
4581
|
+
- confidence: 1
|
|
4582
|
+
constraint: mandatory
|
|
4583
|
+
control: internal
|
|
4584
|
+
foundation: finish_to_start
|
|
4585
|
+
reason: an accessibility spec is identified by its A11Y harness code
|
|
4586
|
+
source_ref: tester.htmx.a11y-harness
|
|
4587
|
+
strength: important
|
|
4588
|
+
target_ref: tester.htmx.journey-urn-format
|
|
4589
|
+
type: requires
|
|
4590
|
+
origin: "@afokapu/atdd-bun"
|
|
4591
|
+
- confidence: 1
|
|
4592
|
+
constraint: mandatory
|
|
4593
|
+
control: internal
|
|
4594
|
+
foundation: finish_to_start
|
|
4595
|
+
reason: a visual spec is identified by its VIS harness code
|
|
4596
|
+
source_ref: tester.htmx.visual-harness
|
|
4597
|
+
strength: important
|
|
4598
|
+
target_ref: tester.htmx.journey-urn-format
|
|
4599
|
+
type: requires
|
|
4600
|
+
origin: "@afokapu/atdd-bun"
|
|
4601
|
+
- confidence: 1
|
|
4602
|
+
constraint: mandatory
|
|
4603
|
+
control: internal
|
|
4604
|
+
foundation: finish_to_start
|
|
4605
|
+
reason: a responsive spec is identified by its RESP harness code
|
|
4606
|
+
source_ref: tester.htmx.responsive-harness
|
|
4607
|
+
strength: important
|
|
4608
|
+
target_ref: tester.htmx.journey-urn-format
|
|
4609
|
+
type: requires
|
|
4610
|
+
origin: "@afokapu/atdd-bun"
|
|
4611
|
+
- confidence: 1
|
|
4612
|
+
constraint: mandatory
|
|
4613
|
+
control: internal
|
|
4614
|
+
foundation: finish_to_start
|
|
4615
|
+
reason: a journey counts as covered only by a RESP spec that meets the responsive harness
|
|
4616
|
+
source_ref: tester.htmx.responsive-journey-coverage
|
|
4617
|
+
strength: critical
|
|
4618
|
+
target_ref: tester.htmx.responsive-harness
|
|
4619
|
+
type: requires
|
|
4620
|
+
origin: "@afokapu/atdd-bun"
|
|
4621
|
+
- confidence: 1
|
|
4622
|
+
constraint: mandatory
|
|
4623
|
+
control: internal
|
|
4624
|
+
foundation: start_to_start
|
|
4625
|
+
reason: "the same exposed journeys, proven to run and proven to fit every viewport"
|
|
4626
|
+
source_ref: tester.htmx.responsive-journey-coverage
|
|
4627
|
+
strength: important
|
|
4628
|
+
target_ref: tester.htmx.exposed-journey-e2e-coverage
|
|
4629
|
+
type: runs_alongside
|
|
4630
|
+
origin: "@afokapu/atdd-bun"
|
|
4631
|
+
- confidence: 1
|
|
4632
|
+
constraint: mandatory
|
|
4633
|
+
control: internal
|
|
4634
|
+
foundation: finish_to_start
|
|
4635
|
+
reason: Bun/htmx realization of the Vite journey header obligation
|
|
4636
|
+
source_ref: tester.htmx.journey-binding-header
|
|
4637
|
+
strength: important
|
|
4638
|
+
target_ref: tester.vite.journey-train-header
|
|
4639
|
+
type: requires
|
|
4640
|
+
origin: "@afokapu/atdd-bun"
|
|
4641
|
+
- confidence: 1
|
|
4642
|
+
constraint: mandatory
|
|
4643
|
+
control: internal
|
|
4644
|
+
foundation: finish_to_start
|
|
4645
|
+
reason: Bun/htmx realization of the Vite journey URN grammar
|
|
4646
|
+
source_ref: tester.htmx.journey-urn-format
|
|
4647
|
+
strength: important
|
|
4648
|
+
target_ref: tester.vite.journey-urn-format
|
|
4649
|
+
type: requires
|
|
4650
|
+
origin: "@afokapu/atdd-bun"
|
|
4651
|
+
- confidence: 1
|
|
4652
|
+
constraint: mandatory
|
|
4653
|
+
control: internal
|
|
4654
|
+
foundation: finish_to_start
|
|
4655
|
+
reason: Bun/htmx realization of the Vite layer rule
|
|
4656
|
+
source_ref: tester.htmx.journey-layer-assembly
|
|
4657
|
+
strength: important
|
|
4658
|
+
target_ref: tester.vite.journey-layer-assembly
|
|
4659
|
+
type: requires
|
|
4660
|
+
origin: "@afokapu/atdd-bun"
|
|
4661
|
+
- confidence: 1
|
|
4662
|
+
constraint: mandatory
|
|
4663
|
+
control: internal
|
|
4664
|
+
foundation: finish_to_start
|
|
4665
|
+
reason: Bun/htmx realization of the Vite exclusive-identity rule
|
|
4666
|
+
source_ref: tester.htmx.journey-no-acceptance-marker
|
|
4667
|
+
strength: important
|
|
4668
|
+
target_ref: tester.vite.journey-no-acceptance-marker
|
|
4669
|
+
type: requires
|
|
4670
|
+
origin: "@afokapu/atdd-bun"
|
|
4671
|
+
- confidence: 1
|
|
4672
|
+
constraint: mandatory
|
|
4673
|
+
control: internal
|
|
4674
|
+
foundation: finish_to_start
|
|
4675
|
+
reason: "Bun/htmx realization of the Vite orphaned-spec rule, extended to journeys"
|
|
4676
|
+
source_ref: tester.htmx.e2e-binds-declared-subject
|
|
4677
|
+
strength: important
|
|
4678
|
+
target_ref: tester.vite.e2e-names-valid-train
|
|
4679
|
+
type: requires
|
|
4680
|
+
origin: "@afokapu/atdd-bun"
|
|
4681
|
+
- confidence: 1
|
|
4682
|
+
constraint: mandatory
|
|
4683
|
+
control: internal
|
|
4684
|
+
foundation: finish_to_start
|
|
4685
|
+
reason: "Bun/htmx realization, judged against interlocking routes in plan/"
|
|
4686
|
+
source_ref: tester.htmx.covered-train-is-routed
|
|
4687
|
+
strength: important
|
|
4688
|
+
target_ref: tester.vite.covered-train-is-routed
|
|
4689
|
+
type: requires
|
|
4690
|
+
origin: "@afokapu/atdd-bun"
|
|
4691
|
+
- confidence: 1
|
|
4692
|
+
constraint: mandatory
|
|
4693
|
+
control: internal
|
|
4694
|
+
foundation: finish_to_start
|
|
4695
|
+
reason: Bun/htmx realization of the Vite train coverage rule
|
|
4696
|
+
source_ref: tester.htmx.train-e2e-coverage
|
|
4697
|
+
strength: important
|
|
4698
|
+
target_ref: tester.vite.train-e2e-coverage
|
|
4699
|
+
type: requires
|
|
4700
|
+
origin: "@afokapu/atdd-bun"
|
|
4701
|
+
- confidence: 1
|
|
4702
|
+
constraint: mandatory
|
|
4703
|
+
control: internal
|
|
4704
|
+
foundation: finish_to_start
|
|
4705
|
+
reason: Bun/htmx realization of the Vite presentation smoke rule
|
|
4706
|
+
source_ref: tester.htmx.presentation-smoke-coverage
|
|
4707
|
+
strength: important
|
|
4708
|
+
target_ref: tester.vite.presentation-smoke-coverage
|
|
4709
|
+
type: requires
|
|
4710
|
+
origin: "@afokapu/atdd-bun"
|
|
4711
|
+
- confidence: 1
|
|
4712
|
+
constraint: mandatory
|
|
4713
|
+
control: internal
|
|
4714
|
+
foundation: finish_to_start
|
|
4715
|
+
reason: Bun/htmx realization of the Vite accessibility harness
|
|
4716
|
+
source_ref: tester.htmx.a11y-harness
|
|
4717
|
+
strength: important
|
|
4718
|
+
target_ref: tester.vite.a11y-harness
|
|
4719
|
+
type: requires
|
|
4720
|
+
origin: "@afokapu/atdd-bun"
|
|
4721
|
+
- confidence: 1
|
|
4722
|
+
constraint: mandatory
|
|
4723
|
+
control: internal
|
|
4724
|
+
foundation: finish_to_start
|
|
4725
|
+
reason: Bun/htmx realization of the Vite visual harness
|
|
4726
|
+
source_ref: tester.htmx.visual-harness
|
|
4727
|
+
strength: important
|
|
4728
|
+
target_ref: tester.vite.visual-harness
|
|
4729
|
+
type: requires
|
|
4730
|
+
origin: "@afokapu/atdd-bun"
|
|
4731
|
+
- confidence: 1
|
|
4732
|
+
constraint: mandatory
|
|
4733
|
+
control: internal
|
|
4734
|
+
foundation: finish_to_start
|
|
4735
|
+
reason: widths only mean device widths once the document declares a device-width viewport
|
|
4736
|
+
source_ref: coder.bun.responsive-viewport-meta
|
|
4737
|
+
strength: critical
|
|
4738
|
+
target_ref: coder.bun.responsive-no-fixed-width
|
|
4739
|
+
type: enables
|
|
4740
|
+
origin: "@afokapu/atdd-bun"
|
|
4741
|
+
- confidence: 1
|
|
4742
|
+
constraint: mandatory
|
|
4743
|
+
control: internal
|
|
4744
|
+
foundation: start_to_start
|
|
4745
|
+
reason: "what a layout may be wide, and where it may switch: together, a layout that adapts at the declared widths"
|
|
4746
|
+
source_ref: coder.bun.responsive-no-fixed-width
|
|
4747
|
+
strength: important
|
|
4748
|
+
target_ref: coder.bun.responsive-breakpoints-declared
|
|
4749
|
+
type: runs_alongside
|
|
4750
|
+
origin: "@afokapu/atdd-bun"
|
|
4751
|
+
- confidence: 1
|
|
4752
|
+
constraint: mandatory
|
|
4753
|
+
control: internal
|
|
4754
|
+
foundation: start_to_start
|
|
4755
|
+
reason: "breakpoints are declared once like tokens, because media queries cannot read custom properties"
|
|
4756
|
+
source_ref: coder.bun.responsive-breakpoints-declared
|
|
4757
|
+
strength: important
|
|
4758
|
+
target_ref: coder.bun.design-token-hardcoded
|
|
4759
|
+
type: runs_alongside
|
|
4760
|
+
origin: "@afokapu/atdd-bun"
|
|
4761
|
+
- confidence: 1
|
|
4762
|
+
constraint: mandatory
|
|
4763
|
+
control: internal
|
|
4764
|
+
foundation: finish_to_start
|
|
4765
|
+
reason: a browser can only prove a page fits a phone once the page declares a device-width viewport
|
|
4766
|
+
source_ref: tester.htmx.responsive-harness
|
|
4767
|
+
strength: critical
|
|
4768
|
+
target_ref: coder.bun.responsive-viewport-meta
|
|
4769
|
+
type: requires
|
|
4770
|
+
origin: "@afokapu/atdd-bun"
|
|
4771
|
+
- confidence: 1
|
|
4772
|
+
constraint: mandatory
|
|
4773
|
+
control: internal
|
|
4774
|
+
foundation: start_to_start
|
|
4775
|
+
reason: the static cause and the rendered proof of horizontal overflow
|
|
4776
|
+
source_ref: tester.htmx.responsive-harness
|
|
4777
|
+
strength: important
|
|
4778
|
+
target_ref: coder.bun.responsive-no-fixed-width
|
|
4779
|
+
type: runs_alongside
|
|
4780
|
+
origin: "@afokapu/atdd-bun"
|
|
4781
|
+
- confidence: 1
|
|
4782
|
+
constraint: mandatory
|
|
4783
|
+
control: internal
|
|
4784
|
+
foundation: start_to_start
|
|
4785
|
+
reason: a viewport that blocks zoom is an accessibility failure as well as a responsive one
|
|
4786
|
+
source_ref: coder.bun.responsive-viewport-meta
|
|
4787
|
+
strength: important
|
|
4788
|
+
target_ref: tester.htmx.a11y-harness
|
|
4789
|
+
type: runs_alongside
|
|
4790
|
+
origin: "@afokapu/atdd-bun"
|