@afokapu/atdd-bun 0.4.0 → 0.6.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 (209) hide show
  1. package/README.md +85 -3
  2. package/conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml +1 -3
  3. package/conventions/coder.bun/coder.bun.complexity-length.convention.yaml +1 -2
  4. package/conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml +1 -2
  5. package/conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml +1 -2
  6. package/conventions/coder.bun/coder.bun.design-token-color.convention.yaml +1 -1
  7. package/conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml +1 -1
  8. package/conventions/coder.bun/coder.bun.dto-mapper.convention.yaml +2 -1
  9. package/conventions/coder.bun/coder.bun.dto-placement.convention.yaml +2 -1
  10. package/conventions/coder.bun/coder.bun.dto-purity.convention.yaml +2 -1
  11. package/conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml +1 -2
  12. package/conventions/coder.bun/coder.bun.green-header-order.convention.yaml +2 -11
  13. package/conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml +2 -11
  14. package/conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml +2 -11
  15. package/conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml +2 -11
  16. package/conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml +2 -11
  17. package/conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml +2 -12
  18. package/conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml +3 -12
  19. package/conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml +2 -11
  20. package/conventions/coder.bun/coder.bun.green-urn-side.convention.yaml +2 -11
  21. package/conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml +2 -11
  22. package/conventions/coder.bun/coder.bun.layer-naming.convention.yaml +2 -1
  23. package/conventions/coder.bun/coder.bun.logging-structured.convention.yaml +2 -4
  24. package/conventions/coder.bun/coder.bun.quality-comments.convention.yaml +1 -2
  25. package/conventions/coder.bun/coder.bun.quality-mi.convention.yaml +1 -2
  26. package/conventions/coder.bun/coder.bun.responsive-breakpoints-declared.convention.yaml +31 -0
  27. package/conventions/coder.bun/coder.bun.responsive-no-fixed-width.convention.yaml +30 -0
  28. package/conventions/coder.bun/coder.bun.responsive-viewport-meta.convention.yaml +31 -0
  29. package/conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml +2 -18
  30. package/conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml +2 -15
  31. package/conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml +3 -3
  32. package/conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml +2 -2
  33. package/conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml +3 -2
  34. package/conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml +2 -12
  35. package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +2 -12
  36. package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +2 -12
  37. package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +2 -13
  38. package/conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml +2 -12
  39. package/conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml +2 -12
  40. package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +2 -12
  41. package/conventions/planner.docs/planner.docs.reference-integrity.convention.yaml +2 -12
  42. package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +2 -12
  43. package/conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml +2 -6
  44. package/conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml +1 -5
  45. package/conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml +2 -14
  46. package/conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml +1 -5
  47. package/conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml +2 -1
  48. package/conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml +2 -7
  49. package/conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml +2 -7
  50. package/conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml +2 -1
  51. package/conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml +2 -6
  52. package/conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml +1 -5
  53. package/conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml +1 -5
  54. package/conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml +2 -6
  55. package/conventions/tester.htmx/tester.htmx.a11y-harness.convention.yaml +32 -0
  56. package/conventions/tester.htmx/tester.htmx.covered-train-is-routed.convention.yaml +30 -0
  57. package/conventions/tester.htmx/tester.htmx.e2e-binds-declared-subject.convention.yaml +31 -0
  58. package/conventions/tester.htmx/tester.htmx.e2e-spec-naming.convention.yaml +32 -0
  59. package/conventions/tester.htmx/tester.htmx.exposed-journey-e2e-coverage.convention.yaml +31 -0
  60. package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml +2 -6
  61. package/conventions/tester.htmx/tester.htmx.journey-binding-header.convention.yaml +32 -0
  62. package/conventions/tester.htmx/tester.htmx.journey-layer-assembly.convention.yaml +29 -0
  63. package/conventions/tester.htmx/tester.htmx.journey-no-acceptance-marker.convention.yaml +29 -0
  64. package/conventions/tester.htmx/tester.htmx.journey-urn-format.convention.yaml +32 -0
  65. package/conventions/tester.htmx/tester.htmx.presentation-smoke-coverage.convention.yaml +31 -0
  66. package/conventions/tester.htmx/tester.htmx.responsive-harness.convention.yaml +33 -0
  67. package/conventions/tester.htmx/tester.htmx.responsive-journey-coverage.convention.yaml +30 -0
  68. package/conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml +2 -1
  69. package/conventions/tester.htmx/tester.htmx.train-e2e-coverage.convention.yaml +32 -0
  70. package/conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml +2 -1
  71. package/conventions/tester.htmx/tester.htmx.visual-harness.convention.yaml +28 -0
  72. package/conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml +5 -0
  73. package/conventions/traceability/traceability.source.tested-by-present.convention.yaml +5 -0
  74. package/conventions/traceability/traceability.source.tested-by-resolves.convention.yaml +5 -0
  75. package/conventions/traceability/traceability.test.binding-resolves.convention.yaml +5 -0
  76. package/detectors/atdd_topology/atdd.implementation.yaml +13 -0
  77. package/detectors/atdd_topology/detect.mjs +171 -0
  78. package/detectors/atdd_topology/fixtures/clean/atdd-bun.yaml +2 -0
  79. package/detectors/atdd_topology/fixtures/clean/e2e/interlockings/checkout/nominal.routes.test.ts +4 -0
  80. package/detectors/atdd_topology/fixtures/clean/e2e/journeys/checkout.journey.test.ts +4 -0
  81. package/detectors/atdd_topology/fixtures/clean/implementation/orders/features/place-order/domain/order.ts +4 -0
  82. package/detectors/atdd_topology/fixtures/clean/plan/_journeys/checkout.yaml +4 -0
  83. package/detectors/atdd_topology/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +4 -0
  84. package/detectors/atdd_topology/fixtures/clean/plan/_trains/checkout.yaml +1 -0
  85. package/detectors/atdd_topology/fixtures/clean/plan/orders/E001.yaml +6 -0
  86. package/detectors/atdd_topology/fixtures/clean/plan/orders/_orders.yaml +5 -0
  87. package/detectors/atdd_topology/fixtures/clean/plan/orders/place-order.yaml +3 -0
  88. package/detectors/atdd_topology/fixtures/clean/tests/wagons/orders/features/place-order/unit/order.test.ts +4 -0
  89. package/detectors/atdd_topology/fixtures/dirty/plan/_journeys/checkout.yaml +3 -0
  90. package/detectors/atdd_topology/fixtures/dirty/plan/orders/E001.yaml +4 -0
  91. package/detectors/atdd_topology/fixtures/dirty/plan/orders/_orders.yaml +4 -0
  92. package/detectors/atdd_topology/fixtures/dirty/plan/orders/features/place-order.yaml +3 -0
  93. package/detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/forged.ts +2 -0
  94. package/detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/order.ts +2 -0
  95. package/detectors/atdd_topology/fixtures/dirty/tests/wagons/orders/features/place-order/unit/order.test.ts +4 -0
  96. package/detectors/atdd_traceability_closure/detect.mjs +5 -2
  97. package/detectors/bun_green_traceability_detector/urn_header.mjs +2 -1
  98. package/detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs +3 -2
  99. package/detectors/bun_interlocking_binding/detect.mjs +6 -5
  100. package/detectors/bun_interlocking_coverage/_shared/interlocking.mjs +4 -3
  101. package/detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs +2 -2
  102. package/detectors/bun_interlocking_infrastructure/_shared/interlocking.mjs +2 -1
  103. package/detectors/bun_interlocking_infrastructure/checks/journey_runner_boundary.mjs +3 -2
  104. package/detectors/bun_interlocking_infrastructure/checks/journey_station_routing.mjs +2 -1
  105. package/detectors/bun_interlocking_infrastructure/checks/wagon_contract_honoured.mjs +3 -2
  106. package/detectors/bun_responsive_detector/atdd.implementation.yaml +18 -0
  107. package/detectors/bun_responsive_detector/checks/_map.json +5 -0
  108. package/detectors/bun_responsive_detector/checks/_responsive.mjs +20 -0
  109. package/detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs +21 -0
  110. package/detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs +13 -0
  111. package/detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs +20 -0
  112. package/detectors/bun_responsive_detector/detect.mjs +46 -0
  113. package/detectors/bun_responsive_detector/fixtures/clean/public/index.html +9 -0
  114. package/detectors/bun_responsive_detector/fixtures/clean/src/app.css +13 -0
  115. package/detectors/bun_responsive_detector/fixtures/clean/src/document.ts +7 -0
  116. package/detectors/bun_responsive_detector/fixtures/clean/src/fragment.html +1 -0
  117. package/detectors/bun_responsive_detector/fixtures/clean/src/head.ts +1 -0
  118. package/detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx +8 -0
  119. package/detectors/bun_responsive_detector/fixtures/clean/src/range.css +3 -0
  120. package/detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx +5 -0
  121. package/detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html +5 -0
  122. package/detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html +5 -0
  123. package/detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html +5 -0
  124. package/detectors/bun_responsive_detector/fixtures/dirty/public/scale.html +5 -0
  125. package/detectors/bun_responsive_detector/fixtures/dirty/src/app.css +4 -0
  126. package/detectors/bun_responsive_detector/fixtures/dirty/src/render.ts +2 -0
  127. package/detectors/bun_responsive_detector/fixtures/dirty/src/units.css +3 -0
  128. package/detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx +3 -0
  129. package/detectors/bun_tester_discipline_detector/checks/t_acceptance_resolves.mjs +7 -6
  130. package/detectors/htmx_e2e_detector/atdd.implementation.yaml +40 -0
  131. package/detectors/htmx_e2e_detector/checks/_e2e.mjs +98 -0
  132. package/detectors/htmx_e2e_detector/checks/_map.json +16 -0
  133. package/detectors/htmx_e2e_detector/checks/a11y_harness.mjs +21 -0
  134. package/detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs +6 -0
  135. package/detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs +11 -0
  136. package/detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs +6 -0
  137. package/detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs +7 -0
  138. package/detectors/htmx_e2e_detector/checks/journey_binding_header.mjs +13 -0
  139. package/detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs +11 -0
  140. package/detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs +6 -0
  141. package/detectors/htmx_e2e_detector/checks/journey_urn_format.mjs +18 -0
  142. package/detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs +15 -0
  143. package/detectors/htmx_e2e_detector/checks/responsive_harness.mjs +30 -0
  144. package/detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs +7 -0
  145. package/detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs +7 -0
  146. package/detectors/htmx_e2e_detector/checks/visual_harness.mjs +7 -0
  147. package/detectors/htmx_e2e_detector/detect.mjs +46 -0
  148. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts +12 -0
  149. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts +11 -0
  150. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts +12 -0
  151. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts +14 -0
  152. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts +10 -0
  153. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts +10 -0
  154. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts +10 -0
  155. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts +10 -0
  156. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts +10 -0
  157. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts +3 -0
  158. package/detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts +10 -0
  159. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml +19 -0
  160. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml +14 -0
  161. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +21 -0
  162. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml +16 -0
  163. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml +16 -0
  164. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml +11 -0
  165. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +11 -0
  166. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml +11 -0
  167. package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml +11 -0
  168. package/detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts +3 -0
  169. package/detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx +3 -0
  170. package/detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts +7 -0
  171. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts +6 -0
  172. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts +10 -0
  173. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts +10 -0
  174. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts +6 -0
  175. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts +10 -0
  176. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts +11 -0
  177. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts +10 -0
  178. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts +10 -0
  179. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts +13 -0
  180. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts +10 -0
  181. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts +10 -0
  182. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts +4 -0
  183. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts +4 -0
  184. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts +4 -0
  185. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts +11 -0
  186. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts +6 -0
  187. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts +10 -0
  188. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts +5 -0
  189. package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts +10 -0
  190. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml +16 -0
  191. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml +16 -0
  192. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml +21 -0
  193. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml +11 -0
  194. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml +11 -0
  195. package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml +11 -0
  196. package/detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx +3 -0
  197. package/integrity.json +208 -79
  198. package/lib/frontend.mjs +17 -0
  199. package/lib/scan.mjs +6 -2
  200. package/package.json +5 -1
  201. package/planner-nodes/ENFORCEMENT_SCOPE.yaml +18 -1
  202. package/relationships.yaml +4782 -4506
  203. package/src/enforce.ts +10 -7
  204. package/src/hooks.ts +2 -1
  205. package/src/index.ts +2 -0
  206. package/src/planner-kernel.ts +2 -1
  207. package/src/planner-schema-validator.ts +12 -10
  208. package/src/planner-validators.ts +16 -15
  209. package/src/topology.ts +40 -0
package/integrity.json CHANGED
@@ -1,61 +1,64 @@
1
1
  {
2
- "version": "0.4.0",
2
+ "version": "0.6.0",
3
3
  "files": {
4
4
  "HOOK_AUDIT.md": "5329d840db37671b1918f688ead26865473b87db73dbc75f7c8b2a8bbe8d6d43",
5
5
  "PLANNER_PORT.md": "fb5935bac8b7ac18994de21e43ace3a5ef8cd55f85b0e3349fca261280054f11",
6
- "README.md": "2586b8a08916cc343f565f9986cffaff7f4a255460ad2f5a1f60538eaced707b",
6
+ "README.md": "622e7768f567099b0e30ac82f2053c165b8023e571966fc327f77f985ae1be0d",
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,52 +66,86 @@
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",
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",
79
82
  "conventions/planner.docs/planner.docs.journey-view-current.convention.yaml": "5892d4213d72342dc568c37f13942139bbdce4c0d5716075de579dc8060fc969",
80
- "conventions/planner.docs/planner.docs.reference-integrity.convention.yaml": "e3eb6e76807165a539d3fe1caa9c6f1cd0867a1cd13f44d986eb9f96cd26eff7",
81
- "conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "b3bfb9a738303567d295d5623d55289586bcca1926f923dcc0238cdb5cce1dae",
82
- "conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml": "aeaf824793b3a66db4d7fa7736f0bfb0d0f3dcb4ebce33d07a254d06d989ff1e",
83
- "conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml": "1a9f9538e6e2732cff74ba2ad37b09f4957e0222ce63c942f4eab2f58fbd93f7",
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",
84
87
  "conventions/tester.bun/tester.bun.acceptance-resolves-to-declared.convention.yaml": "6c5cc0719749dbcdd3eb02877799a40998e77b433b2f17d27ac1dbca44292610",
85
88
  "conventions/tester.bun/tester.bun.interlocking-production-runner-used.convention.yaml": "7cfa67f19ae6b88be40d2facdf2a83440bca3c2a8b3824c75eb25fda8438297c",
86
89
  "conventions/tester.bun/tester.bun.interlocking-route-coverage.convention.yaml": "7c21809613d74cd38368238f82a35853bf74ab34cfacc07354e62f83b8514881",
87
90
  "conventions/tester.bun/tester.bun.interlocking-smoke-coverage-for-station-master.convention.yaml": "ae2e53865fe3f53982d5d1d9fca73dd116ee932e00c4c4f1184235415b1dd794",
88
91
  "conventions/tester.bun/tester.bun.interlocking-trace-binds-declared-route.convention.yaml": "8aea28e250368ed800a97d5e7e2f293c2935b198eb87be1422eef029223d71a4",
89
- "conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml": "fec2acabe0998ab04deaf02bec6df399a7bbd8ebee3cc6bd026f887a94fce1dc",
90
- "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",
91
94
  "conventions/tester.bun/tester.bun.red-fails-first.convention.yaml": "0506c7fae92a85161df8e190e5c01c595d66c376d3ad5f16f1faf38d9503ac7c",
92
- "conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml": "8cbcb083c66089fc02627bae647f502675488679a26cb72fb9e3abdea0ea6b16",
95
+ "conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml": "6deeb37235ebe500c491aea9e06695c08df718a371114b1a6394bd1988fb66b1",
93
96
  "conventions/tester.bun/tester.bun.security-auth.convention.yaml": "eb192aa29ce0f2976a92c20d32fc425b5685b15d9bb384d52101646b08cb9c2e",
94
97
  "conventions/tester.bun/tester.bun.security-input.convention.yaml": "3118299e1e6a71b21be730f26377baab922b1c3d8b175b9b35f10d38d9ebaeb0",
95
- "conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml": "c26d6b99ccd150604284904e7d65b1b42f49af0b134f9badf6d6e64c41df1d9b",
96
- "conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml": "cb76c13d6def2f7e7097b1c91a3ec5df2f3d9de907de447a81815b9d18491a26",
97
- "conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml": "6772426289aa9537c305bb10df62c245e7161f1e057535cf40a67ee93671180d",
98
- "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",
99
102
  "conventions/tester.bun/tester.bun.test-imports-bun-test.convention.yaml": "b447312046391cdac30f76d35624b23dc1a72cb87225d0f2a4610fb3188425dc",
100
- "conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml": "fc7473a7d0143861894d2a16b75585ade7330b184c15359078794d7c359ad0f0",
101
- "conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml": "71c7614e9b36869e1829327734c5492226386cbb6e219014ed448ec99a628d4f",
102
- "conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml": "9c81fd5f079f6a58908166eacfa27934a7d194fd77ea0c32e0be00488625f9b1",
103
- "conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml": "4d9e188e20e71ecc5ab95f51699446eec4b61a7ead25fe4ff913f982be8d4db1",
104
- "conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml": "9bcc91697f2c8f638a1246147f375c279d5753cbf623edd114a9e377b13562a8",
105
- "conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml": "c3cf6fcb0aa2ee42b7972d7d42da99cff36dc7c600adeba9e8b82219799ba44c",
106
- "conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml": "d482aaaf5aaff33d4c0c95a4dce00881d39f83c0f8b6dbb3b8b661c5af1f8a87",
107
- "conventions/traceability/traceability.source.tested-by-present.convention.yaml": "d55159667ab159df537419497a745fd8f3392649681f62852d9d08a23e04226f",
108
- "conventions/traceability/traceability.source.tested-by-resolves.convention.yaml": "f012fd86913633e5d61aba0c9be7f4aca2718e55a2560afdb3a96d06af5715c3",
109
- "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",
127
+ "detectors/atdd_topology/atdd.implementation.yaml": "e5121dfd24c8dff4a3d471c90946e995c1efb3d56433d5739c289e77c7dd13ec",
128
+ "detectors/atdd_topology/detect.mjs": "ab79df467d12423c8c851fae198b97adaef6fc5b66681b2460b8aeb84a210b36",
129
+ "detectors/atdd_topology/fixtures/clean/atdd-bun.yaml": "85049c05fb624037e1e2200a117b07d6c8d089d4e81fd784ade15a860a444f59",
130
+ "detectors/atdd_topology/fixtures/clean/e2e/interlockings/checkout/nominal.routes.test.ts": "be769e192e8165d4d36be743e8df578c1790b900c6b89acc7d2046ba40105135",
131
+ "detectors/atdd_topology/fixtures/clean/e2e/journeys/checkout.journey.test.ts": "330dd13694d4b53b1ee261dd8d37e0610ef0cf4e92bc70ccf3039878bfee90a7",
132
+ "detectors/atdd_topology/fixtures/clean/implementation/orders/features/place-order/domain/order.ts": "b81c0630a2c518749ed6d81741ba4e1503ffdbc64f232747518a17e8e8a46927",
133
+ "detectors/atdd_topology/fixtures/clean/plan/_journeys/checkout.yaml": "c61021d0bf2f7f3bfe306b18c4b34563292de02acce47326db71ac4f8d67bc8d",
134
+ "detectors/atdd_topology/fixtures/clean/plan/_trains/_interlockings/checkout.yaml": "99ee3ef93e3098943878c947a584d93fec1407f0a5bd85c5383129229a98d0bc",
135
+ "detectors/atdd_topology/fixtures/clean/plan/_trains/checkout.yaml": "d022cd946cced5961d16535f93cc875b76e2cad872625e5e040242810f8cfad1",
136
+ "detectors/atdd_topology/fixtures/clean/plan/orders/E001.yaml": "94797b2afa85962a16673a92d15bf4796fd00cf2223c9d4106e06ba28c89599e",
137
+ "detectors/atdd_topology/fixtures/clean/plan/orders/_orders.yaml": "33f0f30b31e3fb1bedf1ba8d2071dc7cea02749b48d18196038c9d2321aaf628",
138
+ "detectors/atdd_topology/fixtures/clean/plan/orders/place-order.yaml": "cccbad80a40da7bbb52c475fe73f5cd6e523994b428dc133aefc37225b04a80c",
139
+ "detectors/atdd_topology/fixtures/clean/tests/wagons/orders/features/place-order/unit/order.test.ts": "01a9a560d3d977346e39b88a88e7112d9f47f02e8dc8d995ba5fb45f77842153",
140
+ "detectors/atdd_topology/fixtures/dirty/plan/_journeys/checkout.yaml": "407eeb607a94b08d3d48da6b28b6c6102ffe2f5d11a58b9557a3f3a4d1dda1bd",
141
+ "detectors/atdd_topology/fixtures/dirty/plan/orders/E001.yaml": "c3e3fc4784a034a4af8fd5babb6cfae39047e58131d204f76ad838a199ba92f9",
142
+ "detectors/atdd_topology/fixtures/dirty/plan/orders/_orders.yaml": "1d533ed773dd1a6317dfd24abf6aeddd13469321bd07ae60743ee9af58b6531a",
143
+ "detectors/atdd_topology/fixtures/dirty/plan/orders/features/place-order.yaml": "cccbad80a40da7bbb52c475fe73f5cd6e523994b428dc133aefc37225b04a80c",
144
+ "detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/forged.ts": "313bff608d93a1a6790932e21d17b4582160df3b4f04642f1cbb04a67fc2131d",
145
+ "detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/order.ts": "6fdaad52671ef25b47d93f9b4e97e12c62eb78f5b4cde727435c3ac135a1c0e5",
146
+ "detectors/atdd_topology/fixtures/dirty/tests/wagons/orders/features/place-order/unit/order.test.ts": "f117e6c8b034700e1f00889bea48cb1528f0003d699cfd3e279cd9164b264a38",
110
147
  "detectors/atdd_traceability_closure/atdd.implementation.yaml": "82e56cc85539476e42fc8d58e718bc998f1eff6c325a0cd240c0284625834d68",
111
- "detectors/atdd_traceability_closure/detect.mjs": "e83fa23070fcbe91ee88aa37b965129575fa0f8472eba169491ec737ab4045ec",
148
+ "detectors/atdd_traceability_closure/detect.mjs": "b8c454d7e136cdcc82524fea407490eefc8c2b8c9448831d94d51253f00a38a9",
112
149
  "detectors/atdd_traceability_closure/fixtures/clean/plan/orders/E001.yaml": "0ddad928dde10c2ab690558259a6975125af540a1f30eca9aa0c615bf0ad69fb",
113
150
  "detectors/atdd_traceability_closure/fixtures/clean/src/order.ts": "efe6db7e3f723c7b6096abdf58dec9c88b27ec8978d434a10135b3e77bfce321",
114
151
  "detectors/atdd_traceability_closure/fixtures/clean/test/order.test.ts": "bee451198d472749616f85c1f1e97c0a06ad28255b9a6a2cc8701bd2e8d56562",
@@ -249,10 +286,10 @@
249
286
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_pattern/OrderRow.ts": "841349cf639b8322558c5e004c38f81cb82180af9a69cc5c3ed9ea35d39249fb",
250
287
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_side/OrderRow.ts": "e08bc0fba889b2008bb528ee86f3bfaf6c6756fefc17780da843bbaf5d00ac06",
251
288
  "detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_wagon_feature/OrderRow.ts": "eed3e99b3a582a41e7179228ca8c33987fdf0ca1c06d78710951057a2355d902",
252
- "detectors/bun_green_traceability_detector/urn_header.mjs": "5b6d745b23019bc587a676bd49f67f8bc8f71afd2263e513af17572804f4b187",
289
+ "detectors/bun_green_traceability_detector/urn_header.mjs": "004b0ed1f71ec476fb57a959d302da4b5869ff91be049865a806bedca40f55b9",
253
290
  "detectors/bun_interlocking_binding/atdd.implementation.yaml": "8df233a7c337d38ab4fc92a309273b91fe713b27507a4b2cfa66ffc7a948d520",
254
- "detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs": "68414ad43c70fae78f703344c98b9d163ddfb078ffa09c268764fc0adb295877",
255
- "detectors/bun_interlocking_binding/detect.mjs": "ca7f35d5ffdc28056c602a178020eba4f7a165d6b65faaecb5e86492320ca724",
291
+ "detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs": "ea4c32914a007962012e9062cc64063fa939ff0a59c07960c34872d058720955",
292
+ "detectors/bun_interlocking_binding/detect.mjs": "42767b7d329b5b2623de37f450c416fe6feb4a7ae737201376e93aa74d493dea",
256
293
  "detectors/bun_interlocking_binding/fixtures/clean/e2e/interlockings/match-resolution/trace.test.ts": "5dadc041ca9825f404340ca428e14bbff5e00824ca6c25464f21cd2ce56044d8",
257
294
  "detectors/bun_interlocking_binding/fixtures/clean/plan/_trains/_interlockings/match-resolution.yaml": "11884309beb9bcceccfeda7917ea73d51a530366db5eb60772b03cf5eeb239cd",
258
295
  "detectors/bun_interlocking_binding/fixtures/clean/plan/_trains/train:match:match-resolution-standard.yaml": "a7067661a723e02e0e844e6b90ad187f620dd328e1b9be45163c04db1919ce77",
@@ -302,14 +339,14 @@
302
339
  "detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/server.ts": "d5bc34c5b1b2b0a511e0c4604ce6f9c77491dca9aee994be720540f3052babc1",
303
340
  "detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/src/trains/interlocking.ts": "9bcfdb4ecff6efd1f658b9fd587342615179924e25468c75daa07c2626d4d8ab",
304
341
  "detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/src/trains/runner.ts": "0e4b885e50f12cc2a8c8f6740bf83e7b2e7137a28e1e143586e9a8550ea5bd45",
305
- "detectors/bun_interlocking_coverage/_shared/interlocking.mjs": "5586a9e2f0f1a253ed2e9555784113e130eaed3db80bffa492cb63a1d7802602",
342
+ "detectors/bun_interlocking_coverage/_shared/interlocking.mjs": "dd484cec27919f342aa5a3ba631cf197acab4f359e7fe0ffd1123f968954fc52",
306
343
  "detectors/bun_interlocking_coverage/atdd.implementation.yaml": "f160517a8138ba3ca05e3d130e6fbfb796e643376f25743fdef4fc210196525b",
307
344
  "detectors/bun_interlocking_coverage/checks/_map.json": "0a218ea319cc6258af7bd721c2154cb9561fe67e80d80ef32d08fc77bc9403c3",
308
345
  "detectors/bun_interlocking_coverage/checks/interlocking_production_runner.mjs": "136eb0955052f2485740adfb888f5ba6f1414dcdb53d505034b8db40420a611a",
309
346
  "detectors/bun_interlocking_coverage/checks/interlocking_route_coverage.mjs": "55716c706818d3f724cdd5f1f16a67b92dacdc4bb4a2d23a037039ddd869acea",
310
347
  "detectors/bun_interlocking_coverage/checks/interlocking_smoke_coverage.mjs": "ea4b0155c4f151a36979d850aa2482901b37eacc0fe01cecc0a736089a3e15ce",
311
348
  "detectors/bun_interlocking_coverage/checks/interlocking_trace_binds.mjs": "61dcb8a8d04e9764aab7920f346bd3684fc98e2c294aa5c58eefec555145a1d0",
312
- "detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs": "f64b331a3dc6f8d5c8519049ba18cc2e4f84e26c1e9471b468aba4e4a39b6c35",
349
+ "detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs": "ab00524af6cce2a95c3a1232f2e6304c761533c2ac3f42d34683b2c0dc5f9c6a",
313
350
  "detectors/bun_interlocking_coverage/detect.mjs": "a124418dc29aaf8fda9cd09427230d25768206b3f563d516774667e8cf75b66e",
314
351
  "detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/routes.test.ts": "ba6ea85b3fbe15e3c49332da3ad2921a0ff3436a6fe3b5a5035fb35fdc874720",
315
352
  "detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/trace.test.ts": "aee4ea93ceb8636846344e915cd7e66f7e8f99ba08596f83266590fa2b9ff58e",
@@ -350,7 +387,7 @@
350
387
  "detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/_interlockings/match-resolution.yaml": "9e0f02cb0889826f2ac2fb88cd8c118c97d4321dcc5fccc0b767a511606841e6",
351
388
  "detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/train:match:match-resolution-standard.yaml": "9ea90f674e5fc565d8893e74ad2e47f273c971ca29284dbce58a366a3e832428",
352
389
  "detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/train:match:match-resolution-timeout.yaml": "aa1b7682f99f3a9a25ec0d3d03f3798ddda8c74eb728e148b38197ddab292493",
353
- "detectors/bun_interlocking_infrastructure/_shared/interlocking.mjs": "02b4ad53d52eece9fa892eff3a048ed0ccd991427f61fd64570659ff97c4739f",
390
+ "detectors/bun_interlocking_infrastructure/_shared/interlocking.mjs": "433977b3b8242c0f061924c53e9f7488cd5cc7368edacbe007c14d749cc805f4",
354
391
  "detectors/bun_interlocking_infrastructure/atdd.implementation.yaml": "fa7a1de97b19dff6515100131a3b6fc2dacf2766cd2bd44bc9dd792f6b01590d",
355
392
  "detectors/bun_interlocking_infrastructure/checks/_map.json": "5f86408f98de8f1562e679e2bd3a2194a8eb297fecf677ca774f19905942ec71",
356
393
  "detectors/bun_interlocking_infrastructure/checks/interlocking_delegates.mjs": "1aa4c87e234643e99ba5a2ff1fab3db8bfc7cbc9618c8e1a014eef2c11cce9c7",
@@ -358,9 +395,9 @@
358
395
  "detectors/bun_interlocking_infrastructure/checks/interlocking_resolution_model.mjs": "e761495b19eed0af09fcb4db34126d0e2398e91f086e04f5ef84d0b5c1c3ec16",
359
396
  "detectors/bun_interlocking_infrastructure/checks/interlocking_runner_exists.mjs": "6b63d3f26a51f2dd27847edd27c4d9c9f15c1f02747dba611cebccfc76f13169",
360
397
  "detectors/bun_interlocking_infrastructure/checks/interlocking_station_routing.mjs": "0221f5a8b49763388affefff670bc2a452e539e7658b08f6230a52f13edd36bd",
361
- "detectors/bun_interlocking_infrastructure/checks/journey_runner_boundary.mjs": "336d56f0dd3c0c7f3769a3f41689003e43de51066dbc25e364915fdf50e859bd",
362
- "detectors/bun_interlocking_infrastructure/checks/journey_station_routing.mjs": "018d28eed330b85b0699435158face40a31e0e94d63ae3c4df05cb87400fa152",
363
- "detectors/bun_interlocking_infrastructure/checks/wagon_contract_honoured.mjs": "88f8cf80e526beaa829860f78d1b1578aaf47e2a3fc680e60a957aa91cc0217d",
398
+ "detectors/bun_interlocking_infrastructure/checks/journey_runner_boundary.mjs": "8c7225f5ee387cbf7ba1e536f91c67c331a86025b4b2b38b961488d949cbdb21",
399
+ "detectors/bun_interlocking_infrastructure/checks/journey_station_routing.mjs": "b297f3f677e0239c5d14cf36218fc39ec23024a0f29620dd02945601aad20516",
400
+ "detectors/bun_interlocking_infrastructure/checks/wagon_contract_honoured.mjs": "728f710827295472dadec182fcdf6c3e8fc44cdedeae53a669754be8435fdd7f",
364
401
  "detectors/bun_interlocking_infrastructure/detect.mjs": "54c02f428596e057f828def0d68360b220b55dbf962b46694a21bc423ce57218",
365
402
  "detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/server.ts": "36913357fdd3c5e375829a0554c605d70f5c05e2e83349f47505741598f6eb15",
366
403
  "detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/src/match/wagon.ts": "ea202fa15fdf9d1391b1ae23343c9d1b09fcf8ef14f1dccfb8114ffaedea97c1",
@@ -416,6 +453,29 @@
416
453
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_station_routing/src/trains/journey.ts": "2729867d88b4e5c955451b8d812392a91ca6da7d5601c64d27a84a3deb879d01",
417
454
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/plan/orders/_orders.yaml": "502aabeeb5a23a538f3a67ae4bb9dbd91ed4e7302f1bed5248186d07d035e47e",
418
455
  "detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/src/orders/wagon.ts": "23807627b7bb3e08355f23fe712c0060313e89588507f720929ff1998a2e2c69",
456
+ "detectors/bun_responsive_detector/atdd.implementation.yaml": "419f71d76c00b9cff615d7a66bcad47a85af083ec5efc5e3b7781e5aab23367a",
457
+ "detectors/bun_responsive_detector/checks/_map.json": "58994820b0155d30687c5f8822c2ebfde0e9f4ed58cce85ee70cc571d58c2c3e",
458
+ "detectors/bun_responsive_detector/checks/_responsive.mjs": "42556e19d3a4e11d3a6d8e133e310bfd55cc9599a539f025dabb6ea3022ef839",
459
+ "detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs": "838fbb3b2b212d1ade6079667c8f31cae6e5a22843617bd044f3b5d0a3917ebb",
460
+ "detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs": "6f607faeadf7cf8adba03faa3febb3dc2e7c8118d7e88367f1bc34ea533c692b",
461
+ "detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs": "496ba6f431586e94ebd9d278d1ea221f95e42a755d040e66247650c46a501cef",
462
+ "detectors/bun_responsive_detector/detect.mjs": "1c031dd64934305d25c0965db4f80dde31cfeeeef18926bea80d12d00043e39c",
463
+ "detectors/bun_responsive_detector/fixtures/clean/public/index.html": "9f3767fa3f022c9f6fccf80a5d53bcfe1ad305be353e55f043284f0e2cc72768",
464
+ "detectors/bun_responsive_detector/fixtures/clean/src/app.css": "281a22cd7284f077d66935bc2fd38b23aaefd9519d6a2b7c750884a1ec13a722",
465
+ "detectors/bun_responsive_detector/fixtures/clean/src/document.ts": "ffb04c4c21ed4f5bce23c22a6e745f0b63ea8602a7d769d361d687edad6d164a",
466
+ "detectors/bun_responsive_detector/fixtures/clean/src/fragment.html": "7f8d6ae61a87535fb0d858a2ca46efc8c90a8547a6c01179d2cf43ff5bfcce1d",
467
+ "detectors/bun_responsive_detector/fixtures/clean/src/head.ts": "eadd34e1ddf5861b6645bf6ed092e2b72c25df8b6f701d8ccbb3a25103c759b6",
468
+ "detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx": "75f9e062f09284e6ad620b1a7ac91d1e66efb51a64e5333dc3d524b96c52662c",
469
+ "detectors/bun_responsive_detector/fixtures/clean/src/range.css": "2df73656bd0ed5720501ef2f0b571f75a34a8599cce7cc711d29386b19cd6846",
470
+ "detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx": "d36093f20d254c92774293fe1125b6e5c5ea4e4a73b2f241c633e0efea3fc1da",
471
+ "detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html": "f652967634b553dbb873c8e947238206f45e87f586b0bcd8d6bc1799671ad9df",
472
+ "detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html": "84b3182ffbb54619f0229f04c46116400134858353af595cc72b9e4693630b5e",
473
+ "detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html": "60ff4418e96bd9f04ba800ce699d15ec759b4bfd5ba580802d253103a9bdc3b8",
474
+ "detectors/bun_responsive_detector/fixtures/dirty/public/scale.html": "0bab61fc445cbed9b63e2393f40aa1be9de384cbc36a05869815ac4db9b96647",
475
+ "detectors/bun_responsive_detector/fixtures/dirty/src/app.css": "f39551418ce3088a36d3b5cd44903b90ef63dda0ff58093d875619829359b325",
476
+ "detectors/bun_responsive_detector/fixtures/dirty/src/render.ts": "1ff7726fa908f39534f868206c977689017988051a581679333c750f049c09bf",
477
+ "detectors/bun_responsive_detector/fixtures/dirty/src/units.css": "94e1f8f5bea47aa167c4d555a4122587662daac0f30f07f3dddbc904baf1a6f4",
478
+ "detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx": "f3be9b96047e32bd1f64ee99b04975773df8a88d40668d408a68d3139c03d976",
419
479
  "detectors/bun_security_hygiene_detector/atdd.implementation.yaml": "0b9376949a874964f36323b108812309b62213dfcc408c86a0c9c465b04bdf5d",
420
480
  "detectors/bun_security_hygiene_detector/checks/_map.json": "30e514be033bd70dc1a6a758af1e27c7cef59c3356a4656956d8c0cb22b9bb03",
421
481
  "detectors/bun_security_hygiene_detector/checks/err_bare_string.mjs": "b4139cd34a80e036877fa5701daaacde253c2b3e7e8789fd990d610712e1d3be",
@@ -436,7 +496,7 @@
436
496
  "detectors/bun_tester_discipline_detector/checks/_map.json": "d28273b975c4fbcda64026178b918dc9a84315d6312f29ae5221a0a9cb4c0b44",
437
497
  "detectors/bun_tester_discipline_detector/checks/t_acceptance_binding.mjs": "17861380275433ff79e191803456417454e2efa23801d9ac72bf6f8206337522",
438
498
  "detectors/bun_tester_discipline_detector/checks/t_acceptance_covers_tag.mjs": "2116c9936cb5863df643b968dece23c29e145ede30cf7c7862e5c17ac7beb6dd",
439
- "detectors/bun_tester_discipline_detector/checks/t_acceptance_resolves.mjs": "4fb51a28fd2e546cbe551dbe997ad29d8d2eb07451491d0220bb8e559514e96b",
499
+ "detectors/bun_tester_discipline_detector/checks/t_acceptance_resolves.mjs": "fe7047cc069be0d8ad85ebb701916a30eca667483d34bc75d4b95baf3b26c168",
440
500
  "detectors/bun_tester_discipline_detector/checks/t_isolation_no_live_state.mjs": "de2c396b83bc2e5317f6b8eee31c98103e7360d1cd25e7c1c53db6ff7627203f",
441
501
  "detectors/bun_tester_discipline_detector/checks/t_red_behavioral.mjs": "ac0b77bbf10a08d991272fbce41db2a34187c8f5faf1e04c5b1a858ecfbcc4ef",
442
502
  "detectors/bun_tester_discipline_detector/checks/t_red_fails_first.mjs": "06cb66f5ccf7d59e1d21f6d3a9db29ca7f3182c096b17ddb50b85b319b97208b",
@@ -517,6 +577,73 @@
517
577
  "detectors/bun_ts_metrics_detector/fixtures/dirty/orphan.ts": "0f7acd0dffe90902a0a43cc45771b8a473d079efc9693112b3b85645c191c23d",
518
578
  "detectors/bun_ts_metrics_detector/fixtures/dirty/typed.ts": "7c27ee1a674af7d5b2cce3a65bfec2111602d84a75817fd60f737c7d63fc9c83",
519
579
  "detectors/bun_ts_metrics_detector/ts_metrics.mjs": "6fe397d634e05a0c9605dcefcec53a5736eab4bcc5c45adec55fb8a3de9b3c6d",
580
+ "detectors/htmx_e2e_detector/atdd.implementation.yaml": "454bb123039d57c992d27d9274e20fa3452ac41a237eb55471be62a4bcfebf06",
581
+ "detectors/htmx_e2e_detector/checks/_e2e.mjs": "4e3605500ac232603083790c3984de5c828028c60eef366b26aba18d38fce30b",
582
+ "detectors/htmx_e2e_detector/checks/_map.json": "94dec08ff4764cd6a3dba139f12a7c984292e95a9354b0cdaa0ce9d4180e2c89",
583
+ "detectors/htmx_e2e_detector/checks/a11y_harness.mjs": "d66e2a6da3c3820db72fdaddcd53efb9c0e39d03bc559a59b800923d5c944700",
584
+ "detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs": "c7a8db0e932ba96489477fb5a8589cd9eba868db6fbaaa8012802a4da78fa0f8",
585
+ "detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs": "326335779dcc07db3aec119a0d3d0b3b9cbd43958e146b96773208202c778956",
586
+ "detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs": "a1b42a81849e59495d6cb3ad8329dacb6d01a00c0253584ad239e1abce34e25b",
587
+ "detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs": "5effe3709991012911d7010ccf8a5bcd0ca332e955e55951409b62f41ad98205",
588
+ "detectors/htmx_e2e_detector/checks/journey_binding_header.mjs": "9a845cfeb34ffee19997ebb5ec544f9b8b759307a31296dbec54479857e7a290",
589
+ "detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs": "ef5463f29c16044cf2bf81090b605ed9dfd4f580b27570c29dd53e71ce463c20",
590
+ "detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs": "134f3070924213ac9a2b29a0964b97aa79cf6e1eb2c980cad940253bd6226471",
591
+ "detectors/htmx_e2e_detector/checks/journey_urn_format.mjs": "649c6f6aefb2f6227dfd99994ce758b8f2d8b8c00a0cbbcd1575930eb4fd7cd5",
592
+ "detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs": "9a70dffd051be6ec1b14e7762d9cd1f66d691af6a69827cd515b29d5cad5835c",
593
+ "detectors/htmx_e2e_detector/checks/responsive_harness.mjs": "49d85d10840cf432abbdb0e5ba9b343c958bccffcd16accadacc9f4302b8f2fe",
594
+ "detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs": "dfa789719457cae7bfc16517f340d0e08d2a851219b70058f697eb0398019579",
595
+ "detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs": "6b99a8687357a9ccd7d45ed6913d5120ade36ebac7d2aedebd7d1d603b82b40a",
596
+ "detectors/htmx_e2e_detector/checks/visual_harness.mjs": "c59d8aeb3f9dd1ee841ce14000445a46a7d52007e29b5b6fca276e9394721f9f",
597
+ "detectors/htmx_e2e_detector/detect.mjs": "827e86de06633013d9697bb47792861541e70e357d0268776b95dcc2ec13ec7c",
598
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts": "40fdffb183946f5bcb753ad3368b5236f4a851df16f637f6ad3cfa09bf180559",
599
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts": "53fade584bb8fd1332149e0226e90191462af000ff8e8b7fe7fbcbe511d37bc7",
600
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts": "4d5700c1d969d62bf3bd6e65887b202c79144ac23d1d1312fe06c546c70ea8c4",
601
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts": "d5efe8ed49f7d1f6f954334ce3ec8382a1e236ea26244689a26fd6daa9976e87",
602
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts": "34e32d2205bba160b18bdcc4e8adb5ff640ab82f4f2f8e8bbe70cec7e157ce16",
603
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts": "7a561c4b3eeaad7896b18d33736ff9a691fd50446d2ab391558ac34d473c4de4",
604
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts": "34483cc64752f7064470c606c1d9e695af63db3744e65b4312decd22bf05e6b7",
605
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts": "6a708ed29572f5012a3821ca5bcf570d84b2fd4e73272a0fe738f72f4340344e",
606
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts": "614ddc0442e905b87bb9b136558e5f8ec764a518b8f4bf747e8da8bc2fef8652",
607
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts": "9c9e8aebc0941cdea66c275f790b5c958ab71be3b827ff7459bef096861f8d3d",
608
+ "detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts": "ff7e1fd5dca45016f38900fb7516ad9499b45ca0d4f69cace576653656a81b85",
609
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml": "a8db72c9c73ccdca32be345815c883f6f2e739798eec2167753e089aad8a23e5",
610
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml": "9298c8ea8cfaf538c25a13132a9ec967501e859574142854136967b865d26789",
611
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml": "812d1b773707113c3e7054115e7068396e96667a919618afd7b18dce0f902f47",
612
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml": "f47b5d0ca7ee6dc0fe3fac67576b2c4744ac08fac405bc004c93498783862371",
613
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml": "4c1d483680ef97b1e69c7dfa4e021233666c4d8cf9a7ab2f24f6e413cbf483ab",
614
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml": "062f32b2ccc82dae9bfa7da409c0b2834f7d8824981fcb6234e747f83180ebfb",
615
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml": "fbac6fae7c23e3adcbfc0a01060acea387018307c5838b13e2f3942f85ab0be5",
616
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml": "e493c7d1e41fe2686820b56b2786b2a01de464c09024c6b903b41353ab7af734",
617
+ "detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml": "86de368938fb084585246bbd7e7d92d744028aa200ffef95e394414e4dc6b45b",
618
+ "detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts": "f7f4d763ec3f970338913501974ec6aecfc0a1d890fd0434cd581bbcf0c3fa2a",
619
+ "detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx": "c7cec07665fafe43e30c0b236fba97698ecb204a77780d4fd6d0a4c67f493f54",
620
+ "detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts": "af8762a1888a28ce31a9a2101edf8e3c27aa242d741c05939cdc015440f043f6",
621
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts": "386e77323efc9c1ac8b29547e9f72c6bb69376550b83e42a445746963b14050d",
622
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts": "3543132ab42eef9237fe3da3f85d65c954791cc4482c9d3d62da754f3eb822ec",
623
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts": "54ee0b4418b196fd0b750375103f916c617139482f6eb7f24039287533d03846",
624
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts": "848aa84f2fe89f76650ae507c09fe38a85a4aeb4202e4c21f33e4d10c275edb7",
625
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts": "81e21e69e0d63c61200eccb95c8c48ed3a4a15b8b0edb31d767d055128ba5b5f",
626
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts": "55d38d821fb98ca2709f66e73138eead3da4004e87b914c5a9f41ad613fd2eb9",
627
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts": "de2b359911bc04ac7122ebf5fb283b75f96f61210d6adfa901277b89c946eccb",
628
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts": "1dd84286da6f06a6f9483b64c27927e98cde9f9aa928524aaaf15af62869cdbe",
629
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts": "9b213feba4894f30f8663baecf5a73d8612a3ef98869bfd1b35e1d5ed5c28965",
630
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts": "46906bd0a0bdd8c9789d3042cf75eb98da730e9713a4b61b28eb51ab14ac3a66",
631
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts": "338b4738a1cbecc89935b89cb8fceaf9bf1a8d825d496ec9b115e3b8c620759d",
632
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts": "60367dcf44fb6230eaded140272817dad63f711918ccc5a6b837963e934119cf",
633
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts": "686bb98ac3ac2ab347038674b7e621e7454fdd4337efd9d5344646e342b79a74",
634
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts": "b5f0ae66bf9d73935a43a5236e105c48a65a61dc4a7ce84c71c7f110bc24743a",
635
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts": "68c0dda24fed9883a1e063cf1997db5571a7af45338420e94dc14fe835f511ed",
636
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts": "df4dd18365d971860f339c8aa54e6147dec90d87cf38bf0a9e1e3e0e6bba0337",
637
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts": "0ce429366e9022fd5d9ba77ddfb89a60a0cacf6b8b47b925cf28a1cb4a5bea32",
638
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts": "1254659b02a3af2326b39fc8d2e197561d6b8ecae77b00fcb1a246caaeb752ef",
639
+ "detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts": "4bd929118ee31e30fdc76def82ffec9004051207771d9008d44cfe6c50229d8e",
640
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml": "5bfa3614385d98c335d99b242f65e45a742235b9fb857e15265be4ed1701a042",
641
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml": "6e9d02142e16f4978c5f5779f96c3830db1f6c8e995ad876f27942f2d7135520",
642
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml": "4decc91cf4296014a85b24815bd6a2df0bafaa5a23986f005b41513f955d106c",
643
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml": "ad5e4c251c2129693eed441bdf1c4fbb1dca257dc6e3a8f9443cb5a86dff4442",
644
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml": "4ec95dd091cea0d93dd08905135a6cb3dd68e757f8406e37b79fc95e49c3f97f",
645
+ "detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml": "56e249aea646e94b4a7faea4fde702153a3ab63d921eaeab37e33b1bf86dbf15",
646
+ "detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx": "d90aab8fac104905e5b47e70bc61fb968403cc363651bf00cbdd31de644975f6",
520
647
  "detectors/htmx_hypermedia_detector/atdd.implementation.yaml": "c63f30be2f52ed9e65620fda35c06e1873a315f15b3d24fd151e2dd34f52655a",
521
648
  "detectors/htmx_hypermedia_detector/checks/_map.json": "a0c0172b0a7f92c0a971120b6fd586fcc017a363bf557480a5a24c1c7062affe",
522
649
  "detectors/htmx_hypermedia_detector/checks/htmx_fragment_escapes_interpolation.mjs": "b5d428facd9e3364ce4597b4cbfedeecef823231ea90a26675250cd01a1158f8",
@@ -717,9 +844,10 @@
717
844
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/E001.yaml": "ba27e24435a55c9cf27c3603377666a0856f5394cf5ab1ce1c9af11b3a6d895d",
718
845
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/_dup.yaml": "7dba1f53c3c45d9d3daff2637e38196984c0810d511c4e4db5162daa6599276b",
719
846
  "detectors/planner_static_validators/fixtures/dirty/plan/dup/features/bad.yaml": "2a78ee5d50e119e2b1ab400ac5606a6625c0ebab60391f51a7bc294d8649d3ec",
847
+ "lib/frontend.mjs": "d6d9b29c3d7f2d162cda03bb34b20a3224a82887b6be3db7cab375510913c9a3",
720
848
  "lib/imports.mjs": "3db4979269488fa26f6e7aefded6ece9c646be6587a10e249821a5a208109962",
721
- "lib/scan.mjs": "8e090f131baca95cda6ad4ca4ff6e836fda9c9673547ad1d5b971ec0e7d89abf",
722
- "planner-nodes/ENFORCEMENT_SCOPE.yaml": "1a77eea0ec17bc937ce538ab5d3eb31a87c420752d4657e57969048dd4fb60a2",
849
+ "lib/scan.mjs": "f232a6178f9b6d3d63ba4056709664b1700d4292c49bad1dec18e9560a7c0461",
850
+ "planner-nodes/ENFORCEMENT_SCOPE.yaml": "b9429fb63a31799589461df342bf5fc0bfce5d1739e6ed54fff6b21db04bf775",
723
851
  "planner-nodes/nodes/planner.acceptance.abstract-fields-required.convention.yaml": "bd565693f0ae861f0561ad2f7a91a8c55f9a209c3acd59c5750cfcffd96a85d8",
724
852
  "planner-nodes/nodes/planner.acceptance.authoring-guidelines.convention.yaml": "16348dceed5868041b832bde766e9c8d4a950d4032f1f3066b357644081a3b17",
725
853
  "planner-nodes/nodes/planner.acceptance.boundary-kind-vocabulary.convention.yaml": "c5645225399568c2d4fe632442f9c597b2c59e4f4239880df7db2cbdc0353c9c",
@@ -937,22 +1065,23 @@
937
1065
  "planner-schemas/train.schema.json": "d6fbac9067c1bffeb84eb79a71228441055af6e6e7ba141dd4e0bcb079345ec0",
938
1066
  "planner-schemas/wagon.schema.json": "57b98f1ade998d745538eb3d72fb3014a50042006870f90bce47028eea336eb4",
939
1067
  "planner-schemas/wmbt.schema.json": "7a3a5693bfcf01340667c2be4a3c48e74f34b1af7e8dc13372c0de06b7f4fe12",
940
- "relationships.yaml": "6e1888d37b56cc6a092137c0e0949bddf3a47560945ad09b20d30580dfb318e8",
1068
+ "relationships.yaml": "157fd93f9cb9d900944aff7f7f0d3f6e96b2c5b9c5359c4dc9bae75d721ae238",
941
1069
  "src/agent.ts": "38a14f0f2ccce357efb1b2927e59bf55c20ff0050374367f15da36db20c46e77",
942
1070
  "src/ci.ts": "899125ec76d14f7d0126a5db2249913e373e3a325cbc98d7f053e1351bdf47af",
943
1071
  "src/cli.ts": "bb2047cee60f48bfe3eaee4c1b3dcd3538a0e1edc170cf58e87686117bea07a7",
944
1072
  "src/docs-capability.ts": "65ef91658664b41b78184b395e57e5d28bda16128caa9e314f26e63568abc6cd",
945
- "src/enforce.ts": "b7c7eae54c6aa2ba58ecf9dfa7c751c64328263b7241ac6c1a68210e2b7df313",
946
- "src/hooks.ts": "88f78d9aa7b8182a3d7080cb94dab2a17a934c7437b5dd861dd428694908e72c",
947
- "src/index.ts": "67ea1a791b3a625882d3ff6b981092f3764b694e660194736ecf53dac0890563",
1073
+ "src/enforce.ts": "43ef276e1c4465ec32e5a431d9a5b1825c6168180e695280fd6d208fd583bac9",
1074
+ "src/hooks.ts": "54d70d7d6923f1e39b259e3b9f377c43609aecdc64ff4d1232da595950d7b1aa",
1075
+ "src/index.ts": "2743b7969526d0aaf21179048e9896141e97d89c45c4a503b795f41fed57f6cc",
948
1076
  "src/integrity.ts": "48d7adce486ece1885a95aac6867d286bb972d7a97bdbc32222fd6d75c2e2b49",
949
1077
  "src/journey-docs.ts": "994d229376244c84212cff951032823068a76565dd2fd427b9d44e341bd14853",
950
- "src/planner-kernel.ts": "b201fe5a76e5298a3a3fcd11adbf0f47bfd8a565246c84d23db5d4d7bf0a3356",
951
- "src/planner-schema-validator.ts": "881ee4eb39db13471684854f9d1a667a5ef4451b104af2f6574ff0c237922217",
952
- "src/planner-validators.ts": "882c12c7ce4f8bf98eda71cd33c23ac8c224c28703e10ebef63288c1017757d5",
1078
+ "src/planner-kernel.ts": "87ffbabc60d7868df52e6e060fcb36b41e90c9d6a47fa9a99f16aa263d61a528",
1079
+ "src/planner-schema-validator.ts": "ce529c0936171075e93c7539b3655fe895a98dd2973ebda5775958e6ebc316d9",
1080
+ "src/planner-validators.ts": "99adeb65f579af923c11f21a8f55cfb9993b007fd8df59c5f764696b55379cfc",
953
1081
  "src/register.ts": "6a2f1c6b8df0dc9c8f45df8ec9fac2be29044e048b08c8ffe423410e94dadedd",
954
1082
  "src/release.ts": "7b0fe444ee81f476f53b9c21b6c347ef588ee616c60211419cf984132be768ba",
955
1083
  "src/setup.ts": "0a6f1a9aeff31dcf17f6bd036168b909c1841c11bbbb452105d8debf64a6bc78",
1084
+ "src/topology.ts": "ff86fc7923793c727196e6f8459db4f071fcaa6844268c2e3b232bb18801c43d",
956
1085
  "templates/agents/AGENTS.block.md": "bfd8769bc42b8c4c91a70777e056624e37acb1037c7fd1497fcb59f007567336",
957
1086
  "templates/agents/atdd-bun.integrity.test.ts": "dec6f6e5f65a08d9512fc703b367c163f8c9da1f6aa7fd466835c1ec30348a41",
958
1087
  "templates/agents/atdd/SKILL.md": "b621abe22851a75b30fc0e6c339a2c0a3ed6bbf78b8c17000a4ce301e05df96d",
@@ -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.4.0",
3
+ "version": "0.6.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/afokapu/atdd-bun.git"
@@ -37,5 +37,9 @@
37
37
  "dependencies": {
38
38
  "ajv": "^8.17.1",
39
39
  "ajv-formats": "^3.0.1"
40
+ },
41
+ "devDependencies": {
42
+ "@axe-core/playwright": "^4.13.0",
43
+ "@playwright/test": "^1.63.0"
40
44
  }
41
45
  }