@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.
Files changed (208) hide show
  1. package/PLANNER_PORT.md +1 -1
  2. package/README.md +111 -4
  3. package/conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml +1 -3
  4. package/conventions/coder.bun/coder.bun.complexity-length.convention.yaml +1 -2
  5. package/conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml +1 -2
  6. package/conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml +1 -2
  7. package/conventions/coder.bun/coder.bun.design-token-color.convention.yaml +1 -1
  8. package/conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml +1 -1
  9. package/conventions/coder.bun/coder.bun.dto-mapper.convention.yaml +2 -1
  10. package/conventions/coder.bun/coder.bun.dto-placement.convention.yaml +2 -1
  11. package/conventions/coder.bun/coder.bun.dto-purity.convention.yaml +2 -1
  12. package/conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml +1 -2
  13. package/conventions/coder.bun/coder.bun.green-header-order.convention.yaml +2 -11
  14. package/conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml +2 -11
  15. package/conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml +2 -11
  16. package/conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml +2 -11
  17. package/conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml +2 -11
  18. package/conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml +2 -12
  19. package/conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml +3 -12
  20. package/conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml +2 -11
  21. package/conventions/coder.bun/coder.bun.green-urn-side.convention.yaml +2 -11
  22. package/conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml +2 -11
  23. package/conventions/coder.bun/coder.bun.layer-naming.convention.yaml +2 -1
  24. package/conventions/coder.bun/coder.bun.logging-structured.convention.yaml +2 -4
  25. package/conventions/coder.bun/coder.bun.quality-comments.convention.yaml +1 -2
  26. package/conventions/coder.bun/coder.bun.quality-mi.convention.yaml +1 -2
  27. package/conventions/coder.bun/coder.bun.responsive-breakpoints-declared.convention.yaml +31 -0
  28. package/conventions/coder.bun/coder.bun.responsive-no-fixed-width.convention.yaml +30 -0
  29. package/conventions/coder.bun/coder.bun.responsive-viewport-meta.convention.yaml +31 -0
  30. package/conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml +2 -18
  31. package/conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml +2 -15
  32. package/conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml +3 -3
  33. package/conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml +2 -2
  34. package/conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml +3 -2
  35. package/conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml +2 -12
  36. package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +2 -12
  37. package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +2 -12
  38. package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +2 -13
  39. package/conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml +2 -12
  40. package/conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml +2 -12
  41. package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +2 -12
  42. package/conventions/planner.docs/planner.docs.journey-view-current.convention.yaml +53 -0
  43. package/conventions/planner.docs/planner.docs.reference-integrity.convention.yaml +2 -12
  44. package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +2 -12
  45. package/conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml +2 -6
  46. package/conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml +1 -5
  47. package/conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml +2 -14
  48. package/conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml +1 -5
  49. package/conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml +2 -1
  50. package/conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml +2 -7
  51. package/conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml +2 -7
  52. package/conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml +2 -1
  53. package/conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml +2 -6
  54. package/conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml +1 -5
  55. package/conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml +1 -5
  56. package/conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml +2 -6
  57. package/conventions/tester.htmx/tester.htmx.a11y-harness.convention.yaml +32 -0
  58. package/conventions/tester.htmx/tester.htmx.covered-train-is-routed.convention.yaml +30 -0
  59. package/conventions/tester.htmx/tester.htmx.e2e-binds-declared-subject.convention.yaml +31 -0
  60. package/conventions/tester.htmx/tester.htmx.e2e-spec-naming.convention.yaml +32 -0
  61. package/conventions/tester.htmx/tester.htmx.exposed-journey-e2e-coverage.convention.yaml +31 -0
  62. package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml +2 -6
  63. package/conventions/tester.htmx/tester.htmx.journey-binding-header.convention.yaml +32 -0
  64. package/conventions/tester.htmx/tester.htmx.journey-layer-assembly.convention.yaml +29 -0
  65. package/conventions/tester.htmx/tester.htmx.journey-no-acceptance-marker.convention.yaml +29 -0
  66. package/conventions/tester.htmx/tester.htmx.journey-urn-format.convention.yaml +32 -0
  67. package/conventions/tester.htmx/tester.htmx.presentation-smoke-coverage.convention.yaml +31 -0
  68. package/conventions/tester.htmx/tester.htmx.responsive-harness.convention.yaml +33 -0
  69. package/conventions/tester.htmx/tester.htmx.responsive-journey-coverage.convention.yaml +30 -0
  70. package/conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml +2 -1
  71. package/conventions/tester.htmx/tester.htmx.train-e2e-coverage.convention.yaml +32 -0
  72. package/conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml +2 -1
  73. package/conventions/tester.htmx/tester.htmx.visual-harness.convention.yaml +28 -0
  74. package/conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml +5 -0
  75. package/conventions/traceability/traceability.source.tested-by-present.convention.yaml +5 -0
  76. package/conventions/traceability/traceability.source.tested-by-resolves.convention.yaml +5 -0
  77. package/conventions/traceability/traceability.test.binding-resolves.convention.yaml +5 -0
  78. package/detectors/bun_green_traceability_detector/urn_header.mjs +2 -1
  79. package/detectors/bun_responsive_detector/atdd.implementation.yaml +18 -0
  80. package/detectors/bun_responsive_detector/checks/_map.json +5 -0
  81. package/detectors/bun_responsive_detector/checks/_responsive.mjs +20 -0
  82. package/detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs +21 -0
  83. package/detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs +13 -0
  84. package/detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs +20 -0
  85. package/detectors/bun_responsive_detector/detect.mjs +46 -0
  86. package/detectors/bun_responsive_detector/fixtures/clean/public/index.html +9 -0
  87. package/detectors/bun_responsive_detector/fixtures/clean/src/app.css +13 -0
  88. package/detectors/bun_responsive_detector/fixtures/clean/src/document.ts +7 -0
  89. package/detectors/bun_responsive_detector/fixtures/clean/src/fragment.html +1 -0
  90. package/detectors/bun_responsive_detector/fixtures/clean/src/head.ts +1 -0
  91. package/detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx +8 -0
  92. package/detectors/bun_responsive_detector/fixtures/clean/src/range.css +3 -0
  93. package/detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx +5 -0
  94. package/detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html +5 -0
  95. package/detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html +5 -0
  96. package/detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html +5 -0
  97. package/detectors/bun_responsive_detector/fixtures/dirty/public/scale.html +5 -0
  98. package/detectors/bun_responsive_detector/fixtures/dirty/src/app.css +4 -0
  99. package/detectors/bun_responsive_detector/fixtures/dirty/src/render.ts +2 -0
  100. package/detectors/bun_responsive_detector/fixtures/dirty/src/units.css +3 -0
  101. package/detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx +3 -0
  102. package/detectors/htmx_e2e_detector/atdd.implementation.yaml +40 -0
  103. package/detectors/htmx_e2e_detector/checks/_e2e.mjs +98 -0
  104. package/detectors/htmx_e2e_detector/checks/_map.json +16 -0
  105. package/detectors/htmx_e2e_detector/checks/a11y_harness.mjs +21 -0
  106. package/detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs +6 -0
  107. package/detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs +11 -0
  108. package/detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs +6 -0
  109. package/detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs +7 -0
  110. package/detectors/htmx_e2e_detector/checks/journey_binding_header.mjs +13 -0
  111. package/detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs +11 -0
  112. package/detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs +6 -0
  113. package/detectors/htmx_e2e_detector/checks/journey_urn_format.mjs +18 -0
  114. package/detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs +15 -0
  115. package/detectors/htmx_e2e_detector/checks/responsive_harness.mjs +30 -0
  116. package/detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs +7 -0
  117. package/detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs +7 -0
  118. package/detectors/htmx_e2e_detector/checks/visual_harness.mjs +7 -0
  119. package/detectors/htmx_e2e_detector/detect.mjs +46 -0
  120. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts +12 -0
  121. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts +11 -0
  122. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts +12 -0
  123. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts +14 -0
  124. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts +10 -0
  125. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts +10 -0
  126. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts +10 -0
  127. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts +10 -0
  128. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts +10 -0
  129. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts +3 -0
  130. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts +10 -0
  131. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml +19 -0
  132. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml +14 -0
  133. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +21 -0
  134. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml +16 -0
  135. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml +16 -0
  136. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml +11 -0
  137. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +11 -0
  138. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml +11 -0
  139. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml +11 -0
  140. package/detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts +3 -0
  141. package/detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx +3 -0
  142. package/detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts +7 -0
  143. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts +6 -0
  144. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts +10 -0
  145. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts +10 -0
  146. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts +6 -0
  147. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts +10 -0
  148. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts +11 -0
  149. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts +10 -0
  150. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts +10 -0
  151. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts +13 -0
  152. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts +10 -0
  153. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts +10 -0
  154. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts +4 -0
  155. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts +4 -0
  156. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts +4 -0
  157. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts +11 -0
  158. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts +6 -0
  159. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts +10 -0
  160. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts +5 -0
  161. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts +10 -0
  162. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml +16 -0
  163. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml +16 -0
  164. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml +21 -0
  165. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml +11 -0
  166. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml +11 -0
  167. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml +11 -0
  168. package/detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx +3 -0
  169. package/detectors/planner_docs_capability/atdd.implementation.yaml +2 -0
  170. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/index.adoc +170 -0
  171. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/journey-buy.svg +61 -0
  172. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/path-buy-nominal.svg +81 -0
  173. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-archive-order.svg +13 -0
  174. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-place-order.svg +31 -0
  175. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-reject-empty-cart.svg +22 -0
  176. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-retry-payment.svg +22 -0
  177. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-ship-order.svg +35 -0
  178. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-take-payment.svg +27 -0
  179. package/detectors/planner_docs_capability/fixtures/clean/plan/_journeys/buy.yaml +24 -0
  180. package/detectors/planner_docs_capability/fixtures/clean/plan/_themes.yaml +3 -0
  181. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +43 -0
  182. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/fulfilment.yaml +33 -0
  183. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/payment.yaml +43 -0
  184. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/returns.yaml +33 -0
  185. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/archive-order.yaml +11 -0
  186. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/place-order.yaml +21 -0
  187. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +16 -0
  188. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/retry-payment.yaml +16 -0
  189. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/ship-order.yaml +21 -0
  190. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/take-payment.yaml +21 -0
  191. package/detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/unrouted-refund.yaml +11 -0
  192. package/detectors/planner_docs_capability/fixtures/dirty_journey_view/docs/index.adoc +3 -0
  193. package/detectors/planner_docs_capability/fixtures/dirty_journey_view/plan/_trains/_interlockings/fulfilment.yaml +33 -0
  194. package/detectors/planner_static_validators/atdd.implementation.yaml +2 -0
  195. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/_interlockings/uncomposed.yaml +4 -0
  196. package/integrity.json +207 -70
  197. package/lib/frontend.mjs +17 -0
  198. package/lib/scan.mjs +6 -2
  199. package/package.json +7 -2
  200. package/planner-nodes/ENFORCEMENT_SCOPE.yaml +25 -2
  201. package/planner-nodes/nodes/planner.journey.interlocking-composed.convention.yaml +43 -0
  202. package/relationships.yaml +4790 -0
  203. package/src/cli.ts +9 -0
  204. package/src/docs-capability.ts +10 -1
  205. package/src/enforce.ts +4 -4
  206. package/src/index.ts +2 -0
  207. package/src/journey-docs.ts +355 -0
  208. package/src/planner-validators.ts +29 -0
package/integrity.json CHANGED
@@ -1,61 +1,64 @@
1
1
  {
2
- "version": "0.3.2",
2
+ "version": "0.5.0",
3
3
  "files": {
4
4
  "HOOK_AUDIT.md": "5329d840db37671b1918f688ead26865473b87db73dbc75f7c8b2a8bbe8d6d43",
5
- "PLANNER_PORT.md": "54ba452eb39cb5afb7c225363fddfd1bf9272ca1c12e7cbf6815a1dd464ff2b3",
6
- "README.md": "506272551a4ad748537a2ade2a66219429eebba6e38fcd74c88e602bd94e0dbd",
5
+ "PLANNER_PORT.md": "fb5935bac8b7ac18994de21e43ace3a5ef8cd55f85b0e3349fca261280054f11",
6
+ "README.md": "1b2ad5a7a1cc0a5e8f135dd819d077a44b94b549c5d2bbe5f45360221c232863",
7
7
  "bunfig.toml": "b9fc65eca9014c5179380259d70e76385a6a80788fa9a2df5fb3eaa5554fd2fe",
8
8
  "conventions/coder.bun/coder.bun.boundaries-http-client.convention.yaml": "b846bb6ced2c4c967466520d52b00ff1ca802dafcdbb2ec2adbd0ce19e752a28",
9
9
  "conventions/coder.bun/coder.bun.commons-application-no-integration.convention.yaml": "f63e7f6442bcdf5cf79f58a091547a1a990d0ee7c006b797fd5187d6f8bf8712",
10
10
  "conventions/coder.bun/coder.bun.commons-cross-feature-imports-in.convention.yaml": "2d66bd3c04186fcef67a89c2b6d81a697f8f43f978ff27284a3b8a3848097182",
11
11
  "conventions/coder.bun/coder.bun.commons-domain-no-framework-import.convention.yaml": "238545a401e472cf65cba7f16d94cde8279f13d38fcb401bc00751af284de7e7",
12
12
  "conventions/coder.bun/coder.bun.commons-domain-no-outbound.convention.yaml": "34507efbb62ade3b58556b56d7323093349a264a5f09034a5131dea7506fd786",
13
- "conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml": "07ae09f8c1bb7ccdd25fb81282ee43f67735bc48b942e23ff0fec70472f4d637",
14
- "conventions/coder.bun/coder.bun.complexity-length.convention.yaml": "8848e49a6d283a33e4bbd6739b9a9de4eab2fe511050465da5c475515e295c75",
15
- "conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml": "7be78f9098ee5ebdd4d520f859a65122889f826bbfa6984b138e392163452cb1",
13
+ "conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml": "e41abbf4f89ab4165f0bc6ea157b24addceebdb190e71a9b4e94c956c8f2956c",
14
+ "conventions/coder.bun/coder.bun.complexity-length.convention.yaml": "dbc5345f38099f007cb445d059a4dcca0d7f4ee6edd0514385ca3535f1dad454",
15
+ "conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml": "7d5a37ee0d5ccb9e97c0ba042f5c2e858e06f2361b6a47e687ec5af372c887b8",
16
16
  "conventions/coder.bun/coder.bun.composition-consumer.convention.yaml": "5bd69cdf8cb6a73e692c73cad30dceb533f624b38a6a120fc4f8e660a2cf25e0",
17
17
  "conventions/coder.bun/coder.bun.composition-root.convention.yaml": "74e30a8fa55b304ba2922fec59ecd8626d7a3c61411bb46bc5249188607f0de5",
18
- "conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml": "d253fbbaf43d7de9c126da7887fe5aa1213a262ebf8d53411a8fae233b770bdd",
18
+ "conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml": "1e5e1c635e9fe87990c15c924d3079a019c3f848b09d05bcc0ab40a9a6bcdc1f",
19
19
  "conventions/coder.bun/coder.bun.design-connected.convention.yaml": "21d9b1f11cb92f161acd163fe94d79022a0b35e269ea0db1c9bccbcfa4241b69",
20
20
  "conventions/coder.bun/coder.bun.design-dependency-flow.convention.yaml": "e96b6850ce8d5811947a9d4b62855477a112c053524a1d97a4f7ba35efb17e07",
21
21
  "conventions/coder.bun/coder.bun.design-hierarchy-import.convention.yaml": "067de2a858dba47ec11fab3ebbae052ea15d1481d9cb702a5eacc996c74c5922",
22
22
  "conventions/coder.bun/coder.bun.design-orphan-export.convention.yaml": "5d434c6368b9af640ff5c5e0c7d3be7ba69ab12ca6ac4acc6db3b046aabceeb8",
23
23
  "conventions/coder.bun/coder.bun.design-primitives.convention.yaml": "f76c9913a6bb9ddda10fb614c65391614f9625ded1451fe5a6652a2c703aa69b",
24
- "conventions/coder.bun/coder.bun.design-token-color.convention.yaml": "ee31b63c6da0f97f4b59f8edd10afb07f6fbe453185bf017f08b8b1b069f7907",
25
- "conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml": "8047a98ee9d67c392762b71afc2f949ef42f9934d0b2a82c5e12b87ef2024a65",
24
+ "conventions/coder.bun/coder.bun.design-token-color.convention.yaml": "ae95c7b966a265748d4ad1b81b6eba2cc0c34e26df492c1c6873fa79c7a0c23e",
25
+ "conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml": "7bc2c433ee165efe689d3378c9d7b5ef52ecbf39431802ee0873f2fe22fe0165",
26
26
  "conventions/coder.bun/coder.bun.design-tokens-pure.convention.yaml": "43033359426260a55d3c4708c7461e69dba168a20b26abf43b697de98bb9f621",
27
27
  "conventions/coder.bun/coder.bun.design-wagons-import.convention.yaml": "0d5d48b1a60fb231efb46b46fb143a546707350a5e1e4dac2fc897da7bd4b5bb",
28
- "conventions/coder.bun/coder.bun.dto-mapper.convention.yaml": "2f9a8ad04ab7def20f354c98627ce49b25ead5749becd4c9021339a497a693f9",
29
- "conventions/coder.bun/coder.bun.dto-placement.convention.yaml": "5c3d06b5b241c18fd5571a6dbc2b33a94a890aab3de1b24d5a22a1acd8f39bf8",
30
- "conventions/coder.bun/coder.bun.dto-purity.convention.yaml": "1c3f0e03ed2f94c8f344d3f4a0f641e4c47f062706134a593ec00ad7711968f4",
31
- "conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml": "e53e8058ace84f6e7429130b9718c4315f50bbb5053211637f05030a15f607ce",
28
+ "conventions/coder.bun/coder.bun.dto-mapper.convention.yaml": "e6890bcb421e9c10e71788e92ba1a2f1f96eed222fd0f3259f81b175b28ec190",
29
+ "conventions/coder.bun/coder.bun.dto-placement.convention.yaml": "488576b8eba889b008e928357e62c323784da640bdcb986a06152ac4e4424568",
30
+ "conventions/coder.bun/coder.bun.dto-purity.convention.yaml": "2c87391f323b10e8545095c8b278547a5a4f3854ac02ddec1849f4a6c83676fc",
31
+ "conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml": "76ce7ca55bbab2ce2b199e73436330cdf42a0d7ac410afaa13097031a02b2206",
32
32
  "conventions/coder.bun/coder.bun.error-response-bare-string.convention.yaml": "c2c0f859f6dd12702edf225c4148849e72b6c25e6d7cd28edd5d644ba277a23c",
33
33
  "conventions/coder.bun/coder.bun.error-response-code-format.convention.yaml": "3048fed00b92c2559f7c52f73cfcce07b583eb47b12d04f0851e237ae3646567",
34
- "conventions/coder.bun/coder.bun.green-header-order.convention.yaml": "37a4c4f3d1e13a0820a788cdf5b1f9fa426e341bff684362778776fd7d2adcae",
35
- "conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml": "0ea515ed7bdf9add46709283cecd6c2b8b2fb88359ea2bb42001266c67a66285",
36
- "conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml": "e5bc23b5d478922352a20acb88d842c1522068ff6a7ebef684f013d615821ee9",
37
- "conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml": "3dc80cc2ac953c81510864c09066db74203b6d174ae85d6995e47cc49469afee",
38
- "conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml": "3b151cfc1ac30cf2526c82f0f9c935ca3acf5599b95e18f515b31558ed4b1a94",
39
- "conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml": "bcc835d230c3d85c5b15063cd49e8d50577136191168bc57af78caf9b264627d",
40
- "conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml": "a663631d28b38995b8206e4e957067fa21fc9a3398c6034971bf6671c5a3023e",
41
- "conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml": "29fb721939fc2fc946ce7bdc8f685d49edb5f72558d886ebc6c95b25a1d8e628",
42
- "conventions/coder.bun/coder.bun.green-urn-side.convention.yaml": "7422abf2d927ed0be943409b13eee69457c54ebf25476bb17dec2ff4c635954a",
43
- "conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml": "6788fb0d3f8a27c4cd59d55d65df323cb1f6770700878e59bf79ca107b9b8af3",
34
+ "conventions/coder.bun/coder.bun.green-header-order.convention.yaml": "8b00d89605cbd618c052805fb1129a7a65743c72a7627f7cd08f0685ddefa8aa",
35
+ "conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml": "520eefd556bbb3585ca1fdeef25b455b9312f386cd24e5f53055886669f4a6bd",
36
+ "conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml": "bd5ece51ab0c87d39f1e98a8f29e442d30e563b6682815534497a7f99c47e41e",
37
+ "conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml": "8e93b8060253c4376ba9c3dc9326b950d7d72289fed2cd269bb9ed741eb19d06",
38
+ "conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml": "d50fa33bb92abd2de84d51cd03bcc60722a12898db34a72e59b0b9fe6c78a8cb",
39
+ "conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml": "8e44469621ca3a345c714c2636239eb4a6c654675518ca10e1ae9a7551de55c1",
40
+ "conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml": "3562b5bf8b92b3a5f50080ffa4f88b3d6bb4130b485697154bba71f19cdeeda0",
41
+ "conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml": "6d291a793662c4711a9c6806734c1015abc6ab96870fb9e230731a23c3c88604",
42
+ "conventions/coder.bun/coder.bun.green-urn-side.convention.yaml": "71f6c304f502a412dd3d07cd30e2adf34bb44d5e8f74d611ae2be1ecbbef0884",
43
+ "conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml": "7fa566c544dc161ee9b20d54aeb22bedcf84f0f6a2e63c7aa1cfc14d00672378",
44
44
  "conventions/coder.bun/coder.bun.interlocking-bilateral-binding.convention.yaml": "6d36fcd234f9c0121443cd0123c500139155f1297663a0c31c44afcaa7ab7053",
45
45
  "conventions/coder.bun/coder.bun.interlocking-delegates-to-trainrunner.convention.yaml": "43983a9d626d8c2285e09220383d1d9435713fb45526e0e629bb92d6792269e9",
46
46
  "conventions/coder.bun/coder.bun.interlocking-does-not-carry-cargo.convention.yaml": "c8f906c4aa6709aab7dc91e719331fd1865c229708acd9838373712a777138b1",
47
47
  "conventions/coder.bun/coder.bun.interlocking-resolution-model-exists.convention.yaml": "dccd0fa99686811d2befc32861f995635b3e194004865710d5b9064a3feea8a8",
48
48
  "conventions/coder.bun/coder.bun.interlocking-runner-exists.convention.yaml": "f7fadc580d2896f7d8341f555e4447480809329f3901209d30c2e54181032f15",
49
49
  "conventions/coder.bun/coder.bun.journey-runner-boundary.convention.yaml": "e62d541d8932c0fba6a85d7a0fa8155eba53b41e2e35f8b52c720f840c2263a6",
50
- "conventions/coder.bun/coder.bun.layer-naming.convention.yaml": "759fe103eec386a6239a50ba821a201973ef73fcb6ec9516bce165e86fb3df5e",
50
+ "conventions/coder.bun/coder.bun.layer-naming.convention.yaml": "009c21f6adbbc1e08d9781d7466b06e3d7fb7d935bf45b1df07fe37639a60a82",
51
51
  "conventions/coder.bun/coder.bun.logging-console.convention.yaml": "b0e5765b8efba245cdd133f8321ba2364acbfae26a302f09e25cc905d652ae28",
52
- "conventions/coder.bun/coder.bun.logging-structured.convention.yaml": "c23e55cc6a2757c14aecdeef4430dd00805a6e8657ef0ae200efde3c42a269e5",
53
- "conventions/coder.bun/coder.bun.quality-comments.convention.yaml": "2a49b898bc5f1c88f27445ef82ac45cd1ddb37bf961c53a5c55edcdba32ee6bc",
54
- "conventions/coder.bun/coder.bun.quality-mi.convention.yaml": "dee05fe1346447fb74fa528b78cc605a3fdc84fae07d8ead455d938e4e6487d6",
55
- "conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml": "02ecdcdfd36063d6900f224a114de10b622dc89f5006a79f21f862aa5a3233a8",
52
+ "conventions/coder.bun/coder.bun.logging-structured.convention.yaml": "a7c8bd90762bf1516d2af63d4fe731720bec9f58431009f69af1bfebc0398759",
53
+ "conventions/coder.bun/coder.bun.quality-comments.convention.yaml": "fcd42efd152c4815cd3fd7811b091321e4a0d5e13f9c251cfd82b248f27c9fd8",
54
+ "conventions/coder.bun/coder.bun.quality-mi.convention.yaml": "13dd95a87d67cb9b765b41cebcc3d33b117725edc28798a7d258cd6a66363621",
55
+ "conventions/coder.bun/coder.bun.responsive-breakpoints-declared.convention.yaml": "4632b2cfb03cae65ac415dd205f4ff0b8f2242f9546dc4cafd11a9a8391bad35",
56
+ "conventions/coder.bun/coder.bun.responsive-no-fixed-width.convention.yaml": "09bb70ccb5350bd46007ba1cf7da55447bdb87b8b31677dacba2bddba5ea63ab",
57
+ "conventions/coder.bun/coder.bun.responsive-viewport-meta.convention.yaml": "705b1ed788a9c5b6d6a555d96662269e09c4ba5b30a7000d37ddf91393a65a88",
58
+ "conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml": "ed1643e92878a746298a20bfbc301c1f469d123d71ca272de1384d2f7cc03ba1",
56
59
  "conventions/coder.bun/coder.bun.runtime-server-is-bun-serve.convention.yaml": "ded3ff738a38e7f72e28df98ddc94bab9674732de7b5a62c5695f356b01ac9f0",
57
60
  "conventions/coder.bun/coder.bun.runtime-single-lockfile.convention.yaml": "eb3ff05c06fb37e05c8931742e589d6fe060728642140a79db3f9fc556fa6f94",
58
- "conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml": "34fa04b76f0c03ca2c84248ae86e6551d515bffe2d3596e2f4594aaef612f82b",
61
+ "conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml": "375bce699e7ed25c8d4024bc3af3ad7ce007bb6260b096c212a063e2a7841744",
59
62
  "conventions/coder.bun/coder.bun.security-hardcoded-secret.convention.yaml": "1a57d91aa91c52cc1efdf4168a2f3f147e7f25e979c47161d9757e1839ebbddd",
60
63
  "conventions/coder.bun/coder.bun.security-missing-auth.convention.yaml": "2b937475e7a1f3f2718be6a3f0d94fa261ca65e72bbf8e3f2ca39ba143b90544",
61
64
  "conventions/coder.bun/coder.bun.security-sql-injection.convention.yaml": "b4cbc3a446bbbf874762fd13c873305eaf7417c45a6206133163509b97267faa",
@@ -63,49 +66,64 @@
63
66
  "conventions/coder.bun/coder.bun.station-master-journey-routing.convention.yaml": "5f0c26b860c85ae5a22f3d63dd0a243b7cdda39812dc291591ecc5fe75a894a7",
64
67
  "conventions/coder.bun/coder.bun.wagon-honours-its-contract.convention.yaml": "712e8c8f3f3b1c0d7bb61c4b54a19823ff1c125a109b64db9cb48addd620581a",
65
68
  "conventions/coder.htmx/coder.htmx.fragment-escapes-interpolation.convention.yaml": "3f1fbb316074d0b79f5a209cd1a9afbf1b8f5235bb5a13f646b2fe8d89a1a893",
66
- "conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml": "ccf8bccfaaa158a254448e55904c58fb13b5090b82f6c31afd25f996556069d4",
69
+ "conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml": "17510aff81e41085dfa22f3d56d1d6a1d3c9d5ba5de887b66015525e491c51b7",
67
70
  "conventions/coder.htmx/coder.htmx.swap-oob-carries-id.convention.yaml": "ccf5c6ef2535d7291d635a7372d182fcaf5b84ad5deb09ffc2c8de2a8a048943",
68
71
  "conventions/coder.htmx/coder.htmx.verb-destructive-confirms.convention.yaml": "530c23a80a9b7d4cf4477c2506cb37b6939c36e4d7f92008a796d1dbcffbfc81",
69
- "conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml": "c0858645de8c0af54f42e68912f1976af2c16e06ba0c9795ea9eedfe34ca2bdb",
72
+ "conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml": "d6aa58d35df4b7ebbcf675ca79f0177d64e56f095802b9a3eaae3e4befb5c270",
70
73
  "conventions/coder.htmx/coder.htmx.verb-endpoint-same-origin.convention.yaml": "2128d26153e2d1f19c65a1e1665d4f82c78395daedb336d6ef1256e82b74aedb",
71
- "conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml": "8f5dfda542ba1026b965034c98fc52740cf9f3e6acfeeb9e16249b42c111bcbd",
72
- "conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml": "afcf9e52fd9ffff0cadeb4635eb28e74fadb9fbbe821da07597304c345f08129",
73
- "conventions/planner.docs/planner.docs.area-index-required.convention.yaml": "361eca854c85a1b8e46e26918493b8dd9b37c30199667a6fc3ba438d1b8ae253",
74
- "conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml": "45b95a599dd727cbe6189c34e160cf894d18f2c17f8dfce59523555b226fde93",
75
- "conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml": "0e492fae7bb92d0ae0e3a419a427ed8037518fa136eb8fbc56692cdda5439d3a",
76
- "conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml": "eedfd745ff591591b2d50eabc65452f2a66759980c70a20690e208bd91f87c22",
77
- "conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml": "c7922b5c23a2e794a53a3ebebc5eeea9b54d8a0fe4bd2c418ac5a1758defaedc",
78
- "conventions/planner.docs/planner.docs.identity-required.convention.yaml": "d3826a9bc43187749627a97d679356e96b444163de6a3c6a3452b220f267d86e",
79
- "conventions/planner.docs/planner.docs.reference-integrity.convention.yaml": "e3eb6e76807165a539d3fe1caa9c6f1cd0867a1cd13f44d986eb9f96cd26eff7",
80
- "conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "b3bfb9a738303567d295d5623d55289586bcca1926f923dcc0238cdb5cce1dae",
81
- "conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml": "aeaf824793b3a66db4d7fa7736f0bfb0d0f3dcb4ebce33d07a254d06d989ff1e",
82
- "conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml": "1a9f9538e6e2732cff74ba2ad37b09f4957e0222ce63c942f4eab2f58fbd93f7",
74
+ "conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml": "ae85c5ea01a09a3c41b939988088a8e5da91848d2710a1f0a1e0c86308638ac9",
75
+ "conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml": "0ea4232beba90280c664f93d097cafa44c67c2919c1468d4823fdc9e686aa5d2",
76
+ "conventions/planner.docs/planner.docs.area-index-required.convention.yaml": "fd931e9f225bfbb5e78436d0d8a2a89cc0f5114493579962c72dd971301becce",
77
+ "conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml": "a9f6178d29abe9385342a46a2c57470a3631aaf5e26f01e3660b7088b042418e",
78
+ "conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml": "6e7b5b16efd794bee677d0827adc71c2f66df8bcba0264dd74a25c67c19f3a3b",
79
+ "conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml": "558bc7d7001645f5443fcf19a5da67df17220b335d99811d103529bf22555311",
80
+ "conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml": "657225233b92125b2667e2d72d65dc0ebc7cfc92b2c9e023d3d42449281683ea",
81
+ "conventions/planner.docs/planner.docs.identity-required.convention.yaml": "86427664a497d7fefc8f77178cf64db66cb7ce328c1a3d2b94a0109ee7401e86",
82
+ "conventions/planner.docs/planner.docs.journey-view-current.convention.yaml": "5892d4213d72342dc568c37f13942139bbdce4c0d5716075de579dc8060fc969",
83
+ "conventions/planner.docs/planner.docs.reference-integrity.convention.yaml": "34310088114ac7cc58bc74443a76366e3e644121aaa3ff39b6602a0d15e03293",
84
+ "conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "102a0706b00e074a74dbe38a6a389075929aa12bc38dcfb155d7a5d52afe6abc",
85
+ "conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml": "46b9db88cdb978bc75b85b17d19a627233263da5b4fc6456a21fa870646ae1d0",
86
+ "conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml": "8dd55d2dc36d255ab553fba8cf6f5cd7de1ba286e687d290458d3b5681fbb40f",
83
87
  "conventions/tester.bun/tester.bun.acceptance-resolves-to-declared.convention.yaml": "6c5cc0719749dbcdd3eb02877799a40998e77b433b2f17d27ac1dbca44292610",
84
88
  "conventions/tester.bun/tester.bun.interlocking-production-runner-used.convention.yaml": "7cfa67f19ae6b88be40d2facdf2a83440bca3c2a8b3824c75eb25fda8438297c",
85
89
  "conventions/tester.bun/tester.bun.interlocking-route-coverage.convention.yaml": "7c21809613d74cd38368238f82a35853bf74ab34cfacc07354e62f83b8514881",
86
90
  "conventions/tester.bun/tester.bun.interlocking-smoke-coverage-for-station-master.convention.yaml": "ae2e53865fe3f53982d5d1d9fca73dd116ee932e00c4c4f1184235415b1dd794",
87
91
  "conventions/tester.bun/tester.bun.interlocking-trace-binds-declared-route.convention.yaml": "8aea28e250368ed800a97d5e7e2f293c2935b198eb87be1422eef029223d71a4",
88
- "conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml": "fec2acabe0998ab04deaf02bec6df399a7bbd8ebee3cc6bd026f887a94fce1dc",
89
- "conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml": "d183a91846b5d3c5e28f7ab4fdc277858815dc24a5fa2f8a274d89322c30a7a4",
92
+ "conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml": "3172abf9256efd8f831ed5f8f11872e17cf847114769bba0c42270507254e241",
93
+ "conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml": "5ce6b2460d8796b0b921600aa54129e192de4c4dd8229c8e574ae1cf55388b60",
90
94
  "conventions/tester.bun/tester.bun.red-fails-first.convention.yaml": "0506c7fae92a85161df8e190e5c01c595d66c376d3ad5f16f1faf38d9503ac7c",
91
- "conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml": "8cbcb083c66089fc02627bae647f502675488679a26cb72fb9e3abdea0ea6b16",
95
+ "conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml": "6deeb37235ebe500c491aea9e06695c08df718a371114b1a6394bd1988fb66b1",
92
96
  "conventions/tester.bun/tester.bun.security-auth.convention.yaml": "eb192aa29ce0f2976a92c20d32fc425b5685b15d9bb384d52101646b08cb9c2e",
93
97
  "conventions/tester.bun/tester.bun.security-input.convention.yaml": "3118299e1e6a71b21be730f26377baab922b1c3d8b175b9b35f10d38d9ebaeb0",
94
- "conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml": "c26d6b99ccd150604284904e7d65b1b42f49af0b134f9badf6d6e64c41df1d9b",
95
- "conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml": "cb76c13d6def2f7e7097b1c91a3ec5df2f3d9de907de447a81815b9d18491a26",
96
- "conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml": "6772426289aa9537c305bb10df62c245e7161f1e057535cf40a67ee93671180d",
97
- "conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml": "d4d9844164b2b0f7f2f01e7524a61f8f02f87e44854bac05aa0ba8affa63afde",
98
+ "conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml": "76187d91e6298ae9b89a39c2ebf9cb6f769e1d3ce08d7a9ea21727aadc6a019a",
99
+ "conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml": "1d35f17221b7de3f9ad6bb3c1ced486bec401e1d024e2476147f4f9e52f05674",
100
+ "conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml": "440ba54de6c23e25786d363d80a9c337f29aa2eaf59bc8b5c24d391cc1c3d3b7",
101
+ "conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml": "4c5846bae7f9671eabf808f43ee3f134a67214113f0e15e9a60705dbdcbe8d10",
98
102
  "conventions/tester.bun/tester.bun.test-imports-bun-test.convention.yaml": "b447312046391cdac30f76d35624b23dc1a72cb87225d0f2a4610fb3188425dc",
99
- "conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml": "fc7473a7d0143861894d2a16b75585ade7330b184c15359078794d7c359ad0f0",
100
- "conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml": "71c7614e9b36869e1829327734c5492226386cbb6e219014ed448ec99a628d4f",
101
- "conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml": "9c81fd5f079f6a58908166eacfa27934a7d194fd77ea0c32e0be00488625f9b1",
102
- "conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml": "4d9e188e20e71ecc5ab95f51699446eec4b61a7ead25fe4ff913f982be8d4db1",
103
- "conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml": "9bcc91697f2c8f638a1246147f375c279d5753cbf623edd114a9e377b13562a8",
104
- "conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml": "c3cf6fcb0aa2ee42b7972d7d42da99cff36dc7c600adeba9e8b82219799ba44c",
105
- "conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml": "d482aaaf5aaff33d4c0c95a4dce00881d39f83c0f8b6dbb3b8b661c5af1f8a87",
106
- "conventions/traceability/traceability.source.tested-by-present.convention.yaml": "d55159667ab159df537419497a745fd8f3392649681f62852d9d08a23e04226f",
107
- "conventions/traceability/traceability.source.tested-by-resolves.convention.yaml": "f012fd86913633e5d61aba0c9be7f4aca2718e55a2560afdb3a96d06af5715c3",
108
- "conventions/traceability/traceability.test.binding-resolves.convention.yaml": "9f9e5b7f748435cdacdf31e994b114eb02c6eb341d431826880643396a7bee20",
103
+ "conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml": "3488af16431ea461e9128d15dbb0ad86324f4446bf36d5a662fab73687e8860e",
104
+ "conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml": "23fca575611f9c0740bcf64849a3c1600ef4cc1cc64df3c106d328b67283d8a3",
105
+ "conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml": "cd22101bfcbc2eeca3da1aa2907ba6c944674c31cfaac5305f2149c6c429cf87",
106
+ "conventions/tester.htmx/tester.htmx.a11y-harness.convention.yaml": "e74328600b89761a8740ace465e3a5d5e38f967dcbeda7fe7023af53dd0089d4",
107
+ "conventions/tester.htmx/tester.htmx.covered-train-is-routed.convention.yaml": "e70d05055733644addd63db11c6cb39cf38a34adc4cc39f7c7ee9964eb2391a4",
108
+ "conventions/tester.htmx/tester.htmx.e2e-binds-declared-subject.convention.yaml": "48bb5a45380d80161c09e872a769020b3ea10a05a4c34a71a1a585f89a434583",
109
+ "conventions/tester.htmx/tester.htmx.e2e-spec-naming.convention.yaml": "4bd46400706bbe9b453784ca2811ef04ffb25871a762791e653da3d9a0fa07f2",
110
+ "conventions/tester.htmx/tester.htmx.exposed-journey-e2e-coverage.convention.yaml": "eca949b38da805c9654d483fce4e06fe19292bd72b5b286af982f13c5782e1d4",
111
+ "conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml": "b8de8e893b582d8ec4b7c24acfa16da0eccd14e6e58e92baf9e9c10c9749ea0c",
112
+ "conventions/tester.htmx/tester.htmx.journey-binding-header.convention.yaml": "7a9f8655cccdd12ab7e2d49af128c9f9572ad441823ca6e32cbae26b26b2d714",
113
+ "conventions/tester.htmx/tester.htmx.journey-layer-assembly.convention.yaml": "86948c4b1e928eef07329afeec73660ea51878e3baa58350f61a8f81c20e9fc3",
114
+ "conventions/tester.htmx/tester.htmx.journey-no-acceptance-marker.convention.yaml": "548588cb2722fb906034af7cc98bcce91000afb1cfd20875a96f143f71e43a18",
115
+ "conventions/tester.htmx/tester.htmx.journey-urn-format.convention.yaml": "6771d984ddb6fe564a6803e971e934242d0a53bd8711826e66d4d0c3283f8aed",
116
+ "conventions/tester.htmx/tester.htmx.presentation-smoke-coverage.convention.yaml": "b18565f55f9f92f7b292bae8231c2343e72f910dc9e228b307db318eb62488cc",
117
+ "conventions/tester.htmx/tester.htmx.responsive-harness.convention.yaml": "cec312935ab592c2c7a5c6a94623a02df771a9e2ca2035b721ef1006c4800fdf",
118
+ "conventions/tester.htmx/tester.htmx.responsive-journey-coverage.convention.yaml": "2004d0a8975178475d792702e164f335b07407f36e83a09ceadef3fe49037111",
119
+ "conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml": "65d8ffa62732ec0578d4999234b89f692e9c5e234ecd30e620bee7c44f053caa",
120
+ "conventions/tester.htmx/tester.htmx.train-e2e-coverage.convention.yaml": "99096eaab1b6891eb66306d904624c7c28ab9bd2c0f7f9f68a515e3be45961f5",
121
+ "conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml": "41b6ff2a519040a5eb9834bcdee88ad1d470a69430bc9a39be667dc321dcd14c",
122
+ "conventions/tester.htmx/tester.htmx.visual-harness.convention.yaml": "a2419b784202fc807558d0182e26d3d8c777aa9ec4ef4c252467a979dd903d50",
123
+ "conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml": "52eca528c9dbdb82f3c1a13e4e1a3d5d21a9dd511b66e6f8c4135298412427f5",
124
+ "conventions/traceability/traceability.source.tested-by-present.convention.yaml": "27a2340a9dae9eee67a3fbdcea0d2f8f35f222f22dbce7f84b2a0c6ab6321018",
125
+ "conventions/traceability/traceability.source.tested-by-resolves.convention.yaml": "ad4516670934dc82f1ebf9dc057110313059110302f88b4747dde89dd060870b",
126
+ "conventions/traceability/traceability.test.binding-resolves.convention.yaml": "03c118f498b1e824d457d25c060c8f9689ccbcca49c58d8bcd158e3cd3144ee9",
109
127
  "detectors/atdd_traceability_closure/atdd.implementation.yaml": "82e56cc85539476e42fc8d58e718bc998f1eff6c325a0cd240c0284625834d68",
110
128
  "detectors/atdd_traceability_closure/detect.mjs": "e83fa23070fcbe91ee88aa37b965129575fa0f8472eba169491ec737ab4045ec",
111
129
  "detectors/atdd_traceability_closure/fixtures/clean/plan/orders/E001.yaml": "0ddad928dde10c2ab690558259a6975125af540a1f30eca9aa0c615bf0ad69fb",
@@ -248,7 +266,7 @@
248
266
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_pattern/OrderRow.ts": "841349cf639b8322558c5e004c38f81cb82180af9a69cc5c3ed9ea35d39249fb",
249
267
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_side/OrderRow.ts": "e08bc0fba889b2008bb528ee86f3bfaf6c6756fefc17780da843bbaf5d00ac06",
250
268
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_wagon_feature/OrderRow.ts": "eed3e99b3a582a41e7179228ca8c33987fdf0ca1c06d78710951057a2355d902",
251
- "detectors/bun_green_traceability_detector/urn_header.mjs": "5b6d745b23019bc587a676bd49f67f8bc8f71afd2263e513af17572804f4b187",
269
+ "detectors/bun_green_traceability_detector/urn_header.mjs": "004b0ed1f71ec476fb57a959d302da4b5869ff91be049865a806bedca40f55b9",
252
270
  "detectors/bun_interlocking_binding/atdd.implementation.yaml": "8df233a7c337d38ab4fc92a309273b91fe713b27507a4b2cfa66ffc7a948d520",
253
271
  "detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs": "68414ad43c70fae78f703344c98b9d163ddfb078ffa09c268764fc0adb295877",
254
272
  "detectors/bun_interlocking_binding/detect.mjs": "ca7f35d5ffdc28056c602a178020eba4f7a165d6b65faaecb5e86492320ca724",
@@ -415,6 +433,29 @@
415
433
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_station_routing/src/trains/journey.ts": "2729867d88b4e5c955451b8d812392a91ca6da7d5601c64d27a84a3deb879d01",
416
434
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/plan/orders/_orders.yaml": "502aabeeb5a23a538f3a67ae4bb9dbd91ed4e7302f1bed5248186d07d035e47e",
417
435
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/src/orders/wagon.ts": "23807627b7bb3e08355f23fe712c0060313e89588507f720929ff1998a2e2c69",
436
+ "detectors/bun_responsive_detector/atdd.implementation.yaml": "419f71d76c00b9cff615d7a66bcad47a85af083ec5efc5e3b7781e5aab23367a",
437
+ "detectors/bun_responsive_detector/checks/_map.json": "58994820b0155d30687c5f8822c2ebfde0e9f4ed58cce85ee70cc571d58c2c3e",
438
+ "detectors/bun_responsive_detector/checks/_responsive.mjs": "42556e19d3a4e11d3a6d8e133e310bfd55cc9599a539f025dabb6ea3022ef839",
439
+ "detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs": "838fbb3b2b212d1ade6079667c8f31cae6e5a22843617bd044f3b5d0a3917ebb",
440
+ "detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs": "6f607faeadf7cf8adba03faa3febb3dc2e7c8118d7e88367f1bc34ea533c692b",
441
+ "detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs": "496ba6f431586e94ebd9d278d1ea221f95e42a755d040e66247650c46a501cef",
442
+ "detectors/bun_responsive_detector/detect.mjs": "1c031dd64934305d25c0965db4f80dde31cfeeeef18926bea80d12d00043e39c",
443
+ "detectors/bun_responsive_detector/fixtures/clean/public/index.html": "9f3767fa3f022c9f6fccf80a5d53bcfe1ad305be353e55f043284f0e2cc72768",
444
+ "detectors/bun_responsive_detector/fixtures/clean/src/app.css": "281a22cd7284f077d66935bc2fd38b23aaefd9519d6a2b7c750884a1ec13a722",
445
+ "detectors/bun_responsive_detector/fixtures/clean/src/document.ts": "ffb04c4c21ed4f5bce23c22a6e745f0b63ea8602a7d769d361d687edad6d164a",
446
+ "detectors/bun_responsive_detector/fixtures/clean/src/fragment.html": "7f8d6ae61a87535fb0d858a2ca46efc8c90a8547a6c01179d2cf43ff5bfcce1d",
447
+ "detectors/bun_responsive_detector/fixtures/clean/src/head.ts": "eadd34e1ddf5861b6645bf6ed092e2b72c25df8b6f701d8ccbb3a25103c759b6",
448
+ "detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx": "75f9e062f09284e6ad620b1a7ac91d1e66efb51a64e5333dc3d524b96c52662c",
449
+ "detectors/bun_responsive_detector/fixtures/clean/src/range.css": "2df73656bd0ed5720501ef2f0b571f75a34a8599cce7cc711d29386b19cd6846",
450
+ "detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx": "d36093f20d254c92774293fe1125b6e5c5ea4e4a73b2f241c633e0efea3fc1da",
451
+ "detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html": "f652967634b553dbb873c8e947238206f45e87f586b0bcd8d6bc1799671ad9df",
452
+ "detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html": "84b3182ffbb54619f0229f04c46116400134858353af595cc72b9e4693630b5e",
453
+ "detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html": "60ff4418e96bd9f04ba800ce699d15ec759b4bfd5ba580802d253103a9bdc3b8",
454
+ "detectors/bun_responsive_detector/fixtures/dirty/public/scale.html": "0bab61fc445cbed9b63e2393f40aa1be9de384cbc36a05869815ac4db9b96647",
455
+ "detectors/bun_responsive_detector/fixtures/dirty/src/app.css": "f39551418ce3088a36d3b5cd44903b90ef63dda0ff58093d875619829359b325",
456
+ "detectors/bun_responsive_detector/fixtures/dirty/src/render.ts": "1ff7726fa908f39534f868206c977689017988051a581679333c750f049c09bf",
457
+ "detectors/bun_responsive_detector/fixtures/dirty/src/units.css": "94e1f8f5bea47aa167c4d555a4122587662daac0f30f07f3dddbc904baf1a6f4",
458
+ "detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx": "f3be9b96047e32bd1f64ee99b04975773df8a88d40668d408a68d3139c03d976",
418
459
  "detectors/bun_security_hygiene_detector/atdd.implementation.yaml": "0b9376949a874964f36323b108812309b62213dfcc408c86a0c9c465b04bdf5d",
419
460
  "detectors/bun_security_hygiene_detector/checks/_map.json": "30e514be033bd70dc1a6a758af1e27c7cef59c3356a4656956d8c0cb22b9bb03",
420
461
  "detectors/bun_security_hygiene_detector/checks/err_bare_string.mjs": "b4139cd34a80e036877fa5701daaacde253c2b3e7e8789fd990d610712e1d3be",
@@ -516,6 +557,73 @@
516
557
  "detectors/bun_ts_metrics_detector/fixtures/dirty/orphan.ts": "0f7acd0dffe90902a0a43cc45771b8a473d079efc9693112b3b85645c191c23d",
517
558
  "detectors/bun_ts_metrics_detector/fixtures/dirty/typed.ts": "7c27ee1a674af7d5b2cce3a65bfec2111602d84a75817fd60f737c7d63fc9c83",
518
559
  "detectors/bun_ts_metrics_detector/ts_metrics.mjs": "6fe397d634e05a0c9605dcefcec53a5736eab4bcc5c45adec55fb8a3de9b3c6d",
560
+ "detectors/htmx_e2e_detector/atdd.implementation.yaml": "454bb123039d57c992d27d9274e20fa3452ac41a237eb55471be62a4bcfebf06",
561
+ "detectors/htmx_e2e_detector/checks/_e2e.mjs": "4e3605500ac232603083790c3984de5c828028c60eef366b26aba18d38fce30b",
562
+ "detectors/htmx_e2e_detector/checks/_map.json": "94dec08ff4764cd6a3dba139f12a7c984292e95a9354b0cdaa0ce9d4180e2c89",
563
+ "detectors/htmx_e2e_detector/checks/a11y_harness.mjs": "d66e2a6da3c3820db72fdaddcd53efb9c0e39d03bc559a59b800923d5c944700",
564
+ "detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs": "c7a8db0e932ba96489477fb5a8589cd9eba868db6fbaaa8012802a4da78fa0f8",
565
+ "detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs": "326335779dcc07db3aec119a0d3d0b3b9cbd43958e146b96773208202c778956",
566
+ "detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs": "a1b42a81849e59495d6cb3ad8329dacb6d01a00c0253584ad239e1abce34e25b",
567
+ "detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs": "5effe3709991012911d7010ccf8a5bcd0ca332e955e55951409b62f41ad98205",
568
+ "detectors/htmx_e2e_detector/checks/journey_binding_header.mjs": "9a845cfeb34ffee19997ebb5ec544f9b8b759307a31296dbec54479857e7a290",
569
+ "detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs": "ef5463f29c16044cf2bf81090b605ed9dfd4f580b27570c29dd53e71ce463c20",
570
+ "detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs": "134f3070924213ac9a2b29a0964b97aa79cf6e1eb2c980cad940253bd6226471",
571
+ "detectors/htmx_e2e_detector/checks/journey_urn_format.mjs": "649c6f6aefb2f6227dfd99994ce758b8f2d8b8c00a0cbbcd1575930eb4fd7cd5",
572
+ "detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs": "9a70dffd051be6ec1b14e7762d9cd1f66d691af6a69827cd515b29d5cad5835c",
573
+ "detectors/htmx_e2e_detector/checks/responsive_harness.mjs": "49d85d10840cf432abbdb0e5ba9b343c958bccffcd16accadacc9f4302b8f2fe",
574
+ "detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs": "dfa789719457cae7bfc16517f340d0e08d2a851219b70058f697eb0398019579",
575
+ "detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs": "6b99a8687357a9ccd7d45ed6913d5120ade36ebac7d2aedebd7d1d603b82b40a",
576
+ "detectors/htmx_e2e_detector/checks/visual_harness.mjs": "c59d8aeb3f9dd1ee841ce14000445a46a7d52007e29b5b6fca276e9394721f9f",
577
+ "detectors/htmx_e2e_detector/detect.mjs": "827e86de06633013d9697bb47792861541e70e357d0268776b95dcc2ec13ec7c",
578
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts": "40fdffb183946f5bcb753ad3368b5236f4a851df16f637f6ad3cfa09bf180559",
579
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts": "53fade584bb8fd1332149e0226e90191462af000ff8e8b7fe7fbcbe511d37bc7",
580
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts": "4d5700c1d969d62bf3bd6e65887b202c79144ac23d1d1312fe06c546c70ea8c4",
581
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts": "d5efe8ed49f7d1f6f954334ce3ec8382a1e236ea26244689a26fd6daa9976e87",
582
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts": "34e32d2205bba160b18bdcc4e8adb5ff640ab82f4f2f8e8bbe70cec7e157ce16",
583
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts": "7a561c4b3eeaad7896b18d33736ff9a691fd50446d2ab391558ac34d473c4de4",
584
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts": "34483cc64752f7064470c606c1d9e695af63db3744e65b4312decd22bf05e6b7",
585
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts": "6a708ed29572f5012a3821ca5bcf570d84b2fd4e73272a0fe738f72f4340344e",
586
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts": "614ddc0442e905b87bb9b136558e5f8ec764a518b8f4bf747e8da8bc2fef8652",
587
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts": "9c9e8aebc0941cdea66c275f790b5c958ab71be3b827ff7459bef096861f8d3d",
588
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts": "ff7e1fd5dca45016f38900fb7516ad9499b45ca0d4f69cace576653656a81b85",
589
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml": "a8db72c9c73ccdca32be345815c883f6f2e739798eec2167753e089aad8a23e5",
590
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml": "9298c8ea8cfaf538c25a13132a9ec967501e859574142854136967b865d26789",
591
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml": "812d1b773707113c3e7054115e7068396e96667a919618afd7b18dce0f902f47",
592
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml": "f47b5d0ca7ee6dc0fe3fac67576b2c4744ac08fac405bc004c93498783862371",
593
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml": "4c1d483680ef97b1e69c7dfa4e021233666c4d8cf9a7ab2f24f6e413cbf483ab",
594
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml": "062f32b2ccc82dae9bfa7da409c0b2834f7d8824981fcb6234e747f83180ebfb",
595
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml": "fbac6fae7c23e3adcbfc0a01060acea387018307c5838b13e2f3942f85ab0be5",
596
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml": "e493c7d1e41fe2686820b56b2786b2a01de464c09024c6b903b41353ab7af734",
597
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml": "86de368938fb084585246bbd7e7d92d744028aa200ffef95e394414e4dc6b45b",
598
+ "detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts": "f7f4d763ec3f970338913501974ec6aecfc0a1d890fd0434cd581bbcf0c3fa2a",
599
+ "detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx": "c7cec07665fafe43e30c0b236fba97698ecb204a77780d4fd6d0a4c67f493f54",
600
+ "detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts": "af8762a1888a28ce31a9a2101edf8e3c27aa242d741c05939cdc015440f043f6",
601
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts": "386e77323efc9c1ac8b29547e9f72c6bb69376550b83e42a445746963b14050d",
602
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts": "3543132ab42eef9237fe3da3f85d65c954791cc4482c9d3d62da754f3eb822ec",
603
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts": "54ee0b4418b196fd0b750375103f916c617139482f6eb7f24039287533d03846",
604
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts": "848aa84f2fe89f76650ae507c09fe38a85a4aeb4202e4c21f33e4d10c275edb7",
605
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts": "81e21e69e0d63c61200eccb95c8c48ed3a4a15b8b0edb31d767d055128ba5b5f",
606
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts": "55d38d821fb98ca2709f66e73138eead3da4004e87b914c5a9f41ad613fd2eb9",
607
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts": "de2b359911bc04ac7122ebf5fb283b75f96f61210d6adfa901277b89c946eccb",
608
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts": "1dd84286da6f06a6f9483b64c27927e98cde9f9aa928524aaaf15af62869cdbe",
609
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts": "9b213feba4894f30f8663baecf5a73d8612a3ef98869bfd1b35e1d5ed5c28965",
610
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts": "46906bd0a0bdd8c9789d3042cf75eb98da730e9713a4b61b28eb51ab14ac3a66",
611
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts": "338b4738a1cbecc89935b89cb8fceaf9bf1a8d825d496ec9b115e3b8c620759d",
612
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts": "60367dcf44fb6230eaded140272817dad63f711918ccc5a6b837963e934119cf",
613
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts": "686bb98ac3ac2ab347038674b7e621e7454fdd4337efd9d5344646e342b79a74",
614
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts": "b5f0ae66bf9d73935a43a5236e105c48a65a61dc4a7ce84c71c7f110bc24743a",
615
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts": "68c0dda24fed9883a1e063cf1997db5571a7af45338420e94dc14fe835f511ed",
616
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts": "df4dd18365d971860f339c8aa54e6147dec90d87cf38bf0a9e1e3e0e6bba0337",
617
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts": "0ce429366e9022fd5d9ba77ddfb89a60a0cacf6b8b47b925cf28a1cb4a5bea32",
618
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts": "1254659b02a3af2326b39fc8d2e197561d6b8ecae77b00fcb1a246caaeb752ef",
619
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts": "4bd929118ee31e30fdc76def82ffec9004051207771d9008d44cfe6c50229d8e",
620
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml": "5bfa3614385d98c335d99b242f65e45a742235b9fb857e15265be4ed1701a042",
621
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml": "6e9d02142e16f4978c5f5779f96c3830db1f6c8e995ad876f27942f2d7135520",
622
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml": "4decc91cf4296014a85b24815bd6a2df0bafaa5a23986f005b41513f955d106c",
623
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml": "ad5e4c251c2129693eed441bdf1c4fbb1dca257dc6e3a8f9443cb5a86dff4442",
624
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml": "4ec95dd091cea0d93dd08905135a6cb3dd68e757f8406e37b79fc95e49c3f97f",
625
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml": "56e249aea646e94b4a7faea4fde702153a3ab63d921eaeab37e33b1bf86dbf15",
626
+ "detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx": "d90aab8fac104905e5b47e70bc61fb968403cc363651bf00cbdd31de644975f6",
519
627
  "detectors/htmx_hypermedia_detector/atdd.implementation.yaml": "c63f30be2f52ed9e65620fda35c06e1873a315f15b3d24fd151e2dd34f52655a",
520
628
  "detectors/htmx_hypermedia_detector/checks/_map.json": "a0c0172b0a7f92c0a971120b6fd586fcc017a363bf557480a5a24c1c7062affe",
521
629
  "detectors/htmx_hypermedia_detector/checks/htmx_fragment_escapes_interpolation.mjs": "b5d428facd9e3364ce4597b4cbfedeecef823231ea90a26675250cd01a1158f8",
@@ -555,7 +663,7 @@
555
663
  "detectors/htmx_tester_detector/fixtures/dirty/statusonly.test.ts": "a2daf2874bf68c6221374ac05619642a42d56b5d1f76e30fa3d2a1826adaf51b",
556
664
  "detectors/htmx_tester_detector/test_header.mjs": "a22221fe9ef6d10297ec777c5d0c6e7b84010ccf41e90db30c036206790ea198",
557
665
  "detectors/planner_docs_capability/README.md": "1e1f8ee258242c05293447fcde124543447ba375306e8a7e5f665881b038bcd1",
558
- "detectors/planner_docs_capability/atdd.implementation.yaml": "d080cd4c80cf327c530d5ba724023c22c76f874831ab0b94af6589f5a3984588",
666
+ "detectors/planner_docs_capability/atdd.implementation.yaml": "7e88a43ee43f5131d25debcc8f02f7381c3b356b6d8ea14357a89ead8e83342e",
559
667
  "detectors/planner_docs_capability/detect.mjs": "d10773fa5b2d8f65ce351804694171a6eb75e05eb4c80fa1edce4a5d56b72c5d",
560
668
  "detectors/planner_docs_capability/fixtures/clean/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc": "6d30e5545e7b051c80605c3dbee50286f71e344ab2e71a987db945941de42523",
561
669
  "detectors/planner_docs_capability/fixtures/clean/docs/architecture/decisions/index.adoc": "4a6cb87e249d587c85bb6389ff5fecae7a96194af8677b588eed0c791099123b",
@@ -568,7 +676,29 @@
568
676
  "detectors/planner_docs_capability/fixtures/clean/docs/dist/index.md": "eac4d8fe653f45c959731cc08218d898e5123d685a1017191c4cffb626777f13",
569
677
  "detectors/planner_docs_capability/fixtures/clean/docs/index.adoc": "8aabcd7a4ecfc6ef565a604c1172364f761bef7d3fc4f2c96c07dce4e0ebe19b",
570
678
  "detectors/planner_docs_capability/fixtures/clean/docs/purpose/index.adoc": "e10193ea48f3c77b67ca8ed7221c53f23ce699e63f651cc340cea9ef6b44cffb",
679
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/index.adoc": "9fcb12b48c936fe3f09fbacd7580d436c4919624aa0765cf7edfdc0ce1c77a9c",
680
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/journey-buy.svg": "ee965093b5691093548b0b5f33a329fc294140a14a032561fb010b27e2f849d6",
681
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/path-buy-nominal.svg": "f745c3d2713399f34326a6f75bce548d77d28c8453953611cd10db0c23e0b6a9",
682
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-archive-order.svg": "149034cbed4598361aaf1a19dbc7964b728faf7fa1adc8419bbcf6aa7ff188d4",
683
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-place-order.svg": "6bc482fa2c0d811b707ff5d166f0bb308eeac2a8b022d89e203d19b286843d59",
684
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-reject-empty-cart.svg": "3129aaf3ea62f3643d095a3d4f653c849e8ee4473e655edd6d949e47df9c300b",
685
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-retry-payment.svg": "6c936c4e0e7ede6bb2e7bb447b7782f7ed9db87c921293f43a3954bfae6d693e",
686
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-ship-order.svg": "bf0b1e3a7cd40f66b9bc9ad91ae6302472f4bbdfb46c36cce84008ef493d6ce4",
687
+ "detectors/planner_docs_capability/fixtures/clean/docs/purpose/journeys/svg/train-orders-take-payment.svg": "8b6f705055c4b24e9e3070447073923f46cd968bc6fd2e1eca239f21d2499d3a",
571
688
  "detectors/planner_docs_capability/fixtures/clean/docs/purpose/worktrees.adoc": "de957bd8aec411c930fa9785d793c3345c82f5d7cb7f28f40f73f1c53a436440",
689
+ "detectors/planner_docs_capability/fixtures/clean/plan/_journeys/buy.yaml": "37a4e56cd44f1a7e33b7d3794ab2f178d5a6290574d5ead13ebd524356b5166c",
690
+ "detectors/planner_docs_capability/fixtures/clean/plan/_themes.yaml": "a8a4848d0df8c21eaad5563800e368330a0857593b9113db6a9608b08a7aa932",
691
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/checkout.yaml": "ceb4414f8603b2357a4492d99132252e6024ff98d60b353c297b1ad421c9393e",
692
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/fulfilment.yaml": "cbcb39a663952b583ba8b54bfd713a3faf68f86c9964d4bd45b60305d4416754",
693
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/payment.yaml": "011fc6b445db43b71c06593ba15266dcb714ce557fa33391a736efb762816c8a",
694
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/_interlockings/returns.yaml": "649fba5d83818342eecb7aa3cfb28494f631fc6239260359b7da665a4ccc0010",
695
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/archive-order.yaml": "951239c3492d668f46c9582032308b95fe5bd44b59f187c5f33f431e9f15e649",
696
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/place-order.yaml": "5563e0cd12856673c516c097597251c2d4e106f0de6727d3dad8aac45ec9bde6",
697
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml": "915d319db67d786c3c88a0d53d406e67cfdae343ae2e0529d5519c6649f33ace",
698
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/retry-payment.yaml": "2499a2706f9c8401f301997c86c6ce1b021050d78c050ce487b8d43ae555f855",
699
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/ship-order.yaml": "9f96d421caa225d2c62985b5a56e36dc5819369b222f6a7207c06e54e6f9866d",
700
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/take-payment.yaml": "4f3ef2cbb81e460032e48e11a9afb408c2aa8ab5c387c3c9a75a031136294ec2",
701
+ "detectors/planner_docs_capability/fixtures/clean/plan/_trains/orders/unrouted-refund.yaml": "e4f3094fe78e94cb2f40f4351a65e2bd12f56cc09fdf32af76b80a12c2530049",
572
702
  "detectors/planner_docs_capability/fixtures/dirty/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc": "6d30e5545e7b051c80605c3dbee50286f71e344ab2e71a987db945941de42523",
573
703
  "detectors/planner_docs_capability/fixtures/dirty/docs/architecture/decisions/index.adoc": "4a6cb87e249d587c85bb6389ff5fecae7a96194af8677b588eed0c791099123b",
574
704
  "detectors/planner_docs_capability/fixtures/dirty/docs/architecture/index.adoc": "d411bfc5e54c3a252c7f9549a2c62dd539e64f961f58b73b07c76b86708dc798",
@@ -621,6 +751,8 @@
621
751
  "detectors/planner_docs_capability/fixtures/dirty_identity/docs/index.adoc": "8aabcd7a4ecfc6ef565a604c1172364f761bef7d3fc4f2c96c07dce4e0ebe19b",
622
752
  "detectors/planner_docs_capability/fixtures/dirty_identity/docs/purpose/index.adoc": "e10193ea48f3c77b67ca8ed7221c53f23ce699e63f651cc340cea9ef6b44cffb",
623
753
  "detectors/planner_docs_capability/fixtures/dirty_identity/docs/purpose/worktrees.adoc": "de957bd8aec411c930fa9785d793c3345c82f5d7cb7f28f40f73f1c53a436440",
754
+ "detectors/planner_docs_capability/fixtures/dirty_journey_view/docs/index.adoc": "67b2010dc8b87ff55e500873dfb8ffad39e923c730adab0c92cb512b6d703edf",
755
+ "detectors/planner_docs_capability/fixtures/dirty_journey_view/plan/_trains/_interlockings/fulfilment.yaml": "cbcb39a663952b583ba8b54bfd713a3faf68f86c9964d4bd45b60305d4416754",
624
756
  "detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc": "6d30e5545e7b051c80605c3dbee50286f71e344ab2e71a987db945941de42523",
625
757
  "detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/decisions/index.adoc": "4a6cb87e249d587c85bb6389ff5fecae7a96194af8677b588eed0c791099123b",
626
758
  "detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/index.adoc": "d411bfc5e54c3a252c7f9549a2c62dd539e64f961f58b73b07c76b86708dc798",
@@ -672,7 +804,7 @@
672
804
  "detectors/planner_schema_validation/fixtures/dirty/contracts/_contracts.yaml": "6460d5b8c73bb5f91ae356b29935c0a377cfef2d79ad6180e8cbb8a31fe2e882",
673
805
  "detectors/planner_schema_validation/fixtures/dirty/plan/_themes.yaml": "c3e8fb1939d83fdde56405ddfee68e266a16c4a7ed8439b6f7906d47372df473",
674
806
  "detectors/planner_schema_validation/fixtures/dirty/plan/_trains/orders.yaml": "ae2fdb750fd5a78c0baddd54fada48522671ae2a9a6538c50ab41ca32a90f682",
675
- "detectors/planner_static_validators/atdd.implementation.yaml": "32a2069b412adc76c256090f74ee36d31e4aac15e93a388c601203f75fa5e68b",
807
+ "detectors/planner_static_validators/atdd.implementation.yaml": "030d9999473bd488590a608b6f60f97f2b2c484a183574581edaa262a2e24a10",
676
808
  "detectors/planner_static_validators/detect.mjs": "efbff2e8cd3f1b7d8e3240f132e90f09cc081b9352511f3ade67ec6fe06d124b",
677
809
  "detectors/planner_static_validators/fixtures/clean/contracts/_contracts.yaml": "967f4f0aac0be000cb6107dc735ca21b73a3a21870e9ada1396df445584cad41",
678
810
  "detectors/planner_static_validators/fixtures/clean/contracts/orders/placed.schema.json": "0b6380fb315749dc14f178b7320acfc2a6f025ee6acd118d7a99c3d190890816",
@@ -684,6 +816,7 @@
684
816
  "detectors/planner_static_validators/fixtures/dirty/plan/_themes.yaml": "0bbebb0019c7b9e161916d1690eaf334712cf889d91339204f90aab1cf57f434",
685
817
  "detectors/planner_static_validators/fixtures/dirty/plan/_trains.yaml": "13227735d3ac236794bf0b3c908bae1f017cffb6c172c384b402a3740c4519db",
686
818
  "detectors/planner_static_validators/fixtures/dirty/plan/_trains/_interlockings/journey-a.yaml": "be82f5e215a68661b2bdccb472c388afaa0a28a28e4bd9131617a2c600eb1254",
819
+ "detectors/planner_static_validators/fixtures/dirty/plan/_trains/_interlockings/uncomposed.yaml": "087f2f510a7eb51acb0ac69079f6e2406adab0119339e14ed0ff0e798d2b1354",
687
820
  "detectors/planner_static_validators/fixtures/dirty/plan/_trains/journey-a.yaml": "9d2d941030f0cce37ed6c5064c1511047e14bf1b22f68aba5c1c9dc96fe8adf0",
688
821
  "detectors/planner_static_validators/fixtures/dirty/plan/_trains/probe/legacy.yaml": "a75bbc5075dd705b3dc4900dc7d724b877ad12a97062ac5598365b1ce4f06657",
689
822
  "detectors/planner_static_validators/fixtures/dirty/plan/_trains/probe/orphan.yaml": "2f11ecabc73d4fe4a18cd732376f653291d6ba8aacd4678e191949a2583c3e96",
@@ -691,9 +824,10 @@
691
824
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/E001.yaml": "ba27e24435a55c9cf27c3603377666a0856f5394cf5ab1ce1c9af11b3a6d895d",
692
825
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/_dup.yaml": "7dba1f53c3c45d9d3daff2637e38196984c0810d511c4e4db5162daa6599276b",
693
826
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/features/bad.yaml": "2a78ee5d50e119e2b1ab400ac5606a6625c0ebab60391f51a7bc294d8649d3ec",
827
+ "lib/frontend.mjs": "d6d9b29c3d7f2d162cda03bb34b20a3224a82887b6be3db7cab375510913c9a3",
694
828
  "lib/imports.mjs": "3db4979269488fa26f6e7aefded6ece9c646be6587a10e249821a5a208109962",
695
- "lib/scan.mjs": "8e090f131baca95cda6ad4ca4ff6e836fda9c9673547ad1d5b971ec0e7d89abf",
696
- "planner-nodes/ENFORCEMENT_SCOPE.yaml": "8b7748438343220ac37a422471faf60888e811fe1ec5192adad14e6e0d2543e0",
829
+ "lib/scan.mjs": "f232a6178f9b6d3d63ba4056709664b1700d4292c49bad1dec18e9560a7c0461",
830
+ "planner-nodes/ENFORCEMENT_SCOPE.yaml": "b9429fb63a31799589461df342bf5fc0bfce5d1739e6ed54fff6b21db04bf775",
697
831
  "planner-nodes/nodes/planner.acceptance.abstract-fields-required.convention.yaml": "bd565693f0ae861f0561ad2f7a91a8c55f9a209c3acd59c5750cfcffd96a85d8",
698
832
  "planner-nodes/nodes/planner.acceptance.authoring-guidelines.convention.yaml": "16348dceed5868041b832bde766e9c8d4a950d4032f1f3066b357644081a3b17",
699
833
  "planner-nodes/nodes/planner.acceptance.boundary-kind-vocabulary.convention.yaml": "c5645225399568c2d4fe632442f9c597b2c59e4f4239880df7db2cbdc0353c9c",
@@ -800,6 +934,7 @@
800
934
  "planner-nodes/nodes/planner.issue-body.graph-context-required.convention.yaml": "6292ab37efda9fbdd1e028283bed7c594baa4e070266795180a3bcded2760621",
801
935
  "planner-nodes/nodes/planner.journey.continuation-closure.convention.yaml": "56c447b05cfe98804ea53bdde68ad940138093a4341620872e9b5c61be08869c",
802
936
  "planner-nodes/nodes/planner.journey.definition.convention.yaml": "a163bb9d5140d17a0dac996d84a8efc9f833592407dbebaec94db25006e88e28",
937
+ "planner-nodes/nodes/planner.journey.interlocking-composed.convention.yaml": "91d3f1a9061a1fccaeeb52a07f1459f93f665d310dc453fecbd5db23c603a7ec",
803
938
  "planner-nodes/nodes/planner.plan.confirm-before-author.convention.yaml": "23116f68ce81ff78ab57d362cf7195c4bf637781d74df4aece4d61eafbf0a49b",
804
939
  "planner-nodes/nodes/planner.plan.confirm-binds-an-issue.convention.yaml": "27de0e84fb7181a6768c65c30865fecdf94a3beddc3a47a4d6de226aaf014767",
805
940
  "planner-nodes/nodes/planner.plan.confirm-requires-interlocking-sanity.convention.yaml": "7ae7d9c6c70d0f4d3e50ae81f1d9f18ee1f70f348bee33147ee99d2d3d4a4de4",
@@ -910,17 +1045,19 @@
910
1045
  "planner-schemas/train.schema.json": "d6fbac9067c1bffeb84eb79a71228441055af6e6e7ba141dd4e0bcb079345ec0",
911
1046
  "planner-schemas/wagon.schema.json": "57b98f1ade998d745538eb3d72fb3014a50042006870f90bce47028eea336eb4",
912
1047
  "planner-schemas/wmbt.schema.json": "7a3a5693bfcf01340667c2be4a3c48e74f34b1af7e8dc13372c0de06b7f4fe12",
1048
+ "relationships.yaml": "157fd93f9cb9d900944aff7f7f0d3f6e96b2c5b9c5359c4dc9bae75d721ae238",
913
1049
  "src/agent.ts": "38a14f0f2ccce357efb1b2927e59bf55c20ff0050374367f15da36db20c46e77",
914
1050
  "src/ci.ts": "899125ec76d14f7d0126a5db2249913e373e3a325cbc98d7f053e1351bdf47af",
915
- "src/cli.ts": "326ecd3b29ee08078df39982214909322cc96ca7d7e4739523152d0baf4bb535",
916
- "src/docs-capability.ts": "5e24ac316e7543782ccc8d8ec6e23f01161295aeb4e874a9c5ff0a8181f79475",
917
- "src/enforce.ts": "b7c7eae54c6aa2ba58ecf9dfa7c751c64328263b7241ac6c1a68210e2b7df313",
1051
+ "src/cli.ts": "bb2047cee60f48bfe3eaee4c1b3dcd3538a0e1edc170cf58e87686117bea07a7",
1052
+ "src/docs-capability.ts": "65ef91658664b41b78184b395e57e5d28bda16128caa9e314f26e63568abc6cd",
1053
+ "src/enforce.ts": "828aa0ba0422e565fb99908d70ed1769f606dcfacee63900c9602e57471172c3",
918
1054
  "src/hooks.ts": "88f78d9aa7b8182a3d7080cb94dab2a17a934c7437b5dd861dd428694908e72c",
919
- "src/index.ts": "5b93f3df3cce6366c7f3975969f8dc69b3fe43bc2898257f8781f789f83687e7",
1055
+ "src/index.ts": "67ea1a791b3a625882d3ff6b981092f3764b694e660194736ecf53dac0890563",
920
1056
  "src/integrity.ts": "48d7adce486ece1885a95aac6867d286bb972d7a97bdbc32222fd6d75c2e2b49",
1057
+ "src/journey-docs.ts": "994d229376244c84212cff951032823068a76565dd2fd427b9d44e341bd14853",
921
1058
  "src/planner-kernel.ts": "b201fe5a76e5298a3a3fcd11adbf0f47bfd8a565246c84d23db5d4d7bf0a3356",
922
1059
  "src/planner-schema-validator.ts": "881ee4eb39db13471684854f9d1a667a5ef4451b104af2f6574ff0c237922217",
923
- "src/planner-validators.ts": "e584486617c5f7d799c2d9d1be8356157ea0a80c72de2fa714f5689cee001d9e",
1060
+ "src/planner-validators.ts": "882c12c7ce4f8bf98eda71cd33c23ac8c224c28703e10ebef63288c1017757d5",
924
1061
  "src/register.ts": "6a2f1c6b8df0dc9c8f45df8ec9fac2be29044e048b08c8ffe423410e94dadedd",
925
1062
  "src/release.ts": "7b0fe444ee81f476f53b9c21b6c347ef588ee616c60211419cf984132be768ba",
926
1063
  "src/setup.ts": "0a6f1a9aeff31dcf17f6bd036168b909c1841c11bbbb452105d8debf64a6bc78",
@@ -0,0 +1,17 @@
1
+ // Frontend settings shared by the responsive and browser-test detectors, read from atdd-bun.yaml:
2
+ //
3
+ // frontend:
4
+ // viewports: [375, 768, 1280] # widths every RESP spec renders at; the smallest bounds fixed widths
5
+ // breakpoints: [480, 768, 1024, 1280] # the only widths an @media query may use
6
+ import { readFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+
9
+ export const DEFAULT_VIEWPORTS = [375, 768, 1280];
10
+ export const DEFAULT_BREAKPOINTS = [480, 768, 1024, 1280];
11
+
12
+ export function frontendConfig(root) {
13
+ let data = {};
14
+ try { data = Bun.YAML.parse(readFileSync(join(root, "atdd-bun.yaml"), "utf8")) ?? {}; } catch {}
15
+ const numbers = (value, fallback) => (Array.isArray(value) && value.length && value.every((v) => Number.isInteger(v) && v > 0) ? [...value].sort((a, b) => a - b) : fallback);
16
+ return { viewports: numbers(data?.frontend?.viewports, DEFAULT_VIEWPORTS), breakpoints: numbers(data?.frontend?.breakpoints, DEFAULT_BREAKPOINTS) };
17
+ }
package/lib/scan.mjs CHANGED
@@ -25,6 +25,10 @@ export const DEFAULT_EXCLUDES = ["node_modules", "dist", "build", ".next", ".git
25
25
  export const SOURCE_EXT = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".mts"]);
26
26
  export const TEMPLATE_EXT = new Set([".html", ".htm"]);
27
27
  export const TEST_RE = /\.(test|spec)\.[cm]?[jt]sx?$/;
28
+ // Playwright browser specs. They are tests, so a scan of implementation source never includes them,
29
+ // but they are not `bun test` files, so TEST_RE (which bun-test rules use to pick their files) excludes them.
30
+ export const E2E_RE = /\.e2e\.[cm]?[jt]sx?$/;
31
+ const isTestFile = (path) => TEST_RE.test(path) || E2E_RE.test(path);
28
32
 
29
33
  export function parseJsonEnv(name, fallback) {
30
34
  const raw = process.env[name];
@@ -53,7 +57,7 @@ export function* walk(root, excludes, exts, includeTests = false) {
53
57
  return;
54
58
  }
55
59
  if (st.isFile()) {
56
- if (exts.has(extname(root)) && (includeTests || !TEST_RE.test(root))) yield root;
60
+ if (exts.has(extname(root)) && (includeTests || !isTestFile(root))) yield root;
57
61
  return;
58
62
  }
59
63
  let names;
@@ -73,7 +77,7 @@ export function* walk(root, excludes, exts, includeTests = false) {
73
77
  }
74
78
  if (cst.isDirectory()) {
75
79
  yield* walk(full, excludes, exts, includeTests);
76
- } else if (exts.has(extname(full)) && (includeTests || !TEST_RE.test(full))) {
80
+ } else if (exts.has(extname(full)) && (includeTests || !isTestFile(full))) {
77
81
  yield full;
78
82
  }
79
83
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@afokapu/atdd-bun",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/afokapu/atdd-bun.git"
@@ -24,7 +24,8 @@
24
24
  "PLANNER_PORT.md",
25
25
  "HOOK_AUDIT.md",
26
26
  "templates",
27
- "integrity.json"
27
+ "integrity.json",
28
+ "relationships.yaml"
28
29
  ],
29
30
  "scripts": {
30
31
  "test": "bun test",
@@ -36,5 +37,9 @@
36
37
  "dependencies": {
37
38
  "ajv": "^8.17.1",
38
39
  "ajv-formats": "^3.0.1"
40
+ },
41
+ "devDependencies": {
42
+ "@axe-core/playwright": "^4.13.0",
43
+ "@playwright/test": "^1.63.0"
39
44
  }
40
45
  }