@afokapu/atdd-bun 0.1.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 (876) hide show
  1. package/HOOK_AUDIT.md +22 -0
  2. package/PLANNER_PORT.md +55 -0
  3. package/README.md +256 -0
  4. package/bunfig.toml +2 -0
  5. package/conventions/coder.bun/coder.bun.boundaries-http-client.convention.yaml +43 -0
  6. package/conventions/coder.bun/coder.bun.commons-application-no-integration.convention.yaml +40 -0
  7. package/conventions/coder.bun/coder.bun.commons-cross-feature-imports-in.convention.yaml +39 -0
  8. package/conventions/coder.bun/coder.bun.commons-domain-no-framework-import.convention.yaml +40 -0
  9. package/conventions/coder.bun/coder.bun.commons-domain-no-outbound.convention.yaml +41 -0
  10. package/conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml +51 -0
  11. package/conventions/coder.bun/coder.bun.complexity-length.convention.yaml +43 -0
  12. package/conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml +49 -0
  13. package/conventions/coder.bun/coder.bun.composition-consumer.convention.yaml +40 -0
  14. package/conventions/coder.bun/coder.bun.composition-root.convention.yaml +42 -0
  15. package/conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml +49 -0
  16. package/conventions/coder.bun/coder.bun.design-hierarchy-import.convention.yaml +42 -0
  17. package/conventions/coder.bun/coder.bun.dto-mapper.convention.yaml +38 -0
  18. package/conventions/coder.bun/coder.bun.dto-placement.convention.yaml +39 -0
  19. package/conventions/coder.bun/coder.bun.dto-purity.convention.yaml +40 -0
  20. package/conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml +47 -0
  21. package/conventions/coder.bun/coder.bun.error-response-bare-string.convention.yaml +47 -0
  22. package/conventions/coder.bun/coder.bun.error-response-code-format.convention.yaml +46 -0
  23. package/conventions/coder.bun/coder.bun.green-header-order.convention.yaml +61 -0
  24. package/conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml +55 -0
  25. package/conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml +56 -0
  26. package/conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml +63 -0
  27. package/conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml +53 -0
  28. package/conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml +67 -0
  29. package/conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml +57 -0
  30. package/conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml +56 -0
  31. package/conventions/coder.bun/coder.bun.green-urn-side.convention.yaml +54 -0
  32. package/conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml +56 -0
  33. package/conventions/coder.bun/coder.bun.interlocking-bilateral-binding.convention.yaml +132 -0
  34. package/conventions/coder.bun/coder.bun.interlocking-delegates-to-trainrunner.convention.yaml +56 -0
  35. package/conventions/coder.bun/coder.bun.interlocking-does-not-carry-cargo.convention.yaml +53 -0
  36. package/conventions/coder.bun/coder.bun.interlocking-resolution-model-exists.convention.yaml +61 -0
  37. package/conventions/coder.bun/coder.bun.interlocking-runner-exists.convention.yaml +64 -0
  38. package/conventions/coder.bun/coder.bun.journey-runner-boundary.convention.yaml +55 -0
  39. package/conventions/coder.bun/coder.bun.layer-naming.convention.yaml +41 -0
  40. package/conventions/coder.bun/coder.bun.logging-console.convention.yaml +47 -0
  41. package/conventions/coder.bun/coder.bun.logging-structured.convention.yaml +49 -0
  42. package/conventions/coder.bun/coder.bun.quality-comments.convention.yaml +44 -0
  43. package/conventions/coder.bun/coder.bun.quality-mi.convention.yaml +47 -0
  44. package/conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml +104 -0
  45. package/conventions/coder.bun/coder.bun.runtime-server-is-bun-serve.convention.yaml +64 -0
  46. package/conventions/coder.bun/coder.bun.runtime-single-lockfile.convention.yaml +56 -0
  47. package/conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml +91 -0
  48. package/conventions/coder.bun/coder.bun.security-hardcoded-secret.convention.yaml +50 -0
  49. package/conventions/coder.bun/coder.bun.security-missing-auth.convention.yaml +53 -0
  50. package/conventions/coder.bun/coder.bun.security-sql-injection.convention.yaml +54 -0
  51. package/conventions/coder.bun/coder.bun.station-master-interlocking-routing.convention.yaml +62 -0
  52. package/conventions/coder.bun/coder.bun.station-master-journey-routing.convention.yaml +49 -0
  53. package/conventions/coder.bun/coder.bun.wagon-honours-its-contract.convention.yaml +64 -0
  54. package/conventions/coder.htmx/coder.htmx.fragment-escapes-interpolation.convention.yaml +72 -0
  55. package/conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml +59 -0
  56. package/conventions/coder.htmx/coder.htmx.swap-oob-carries-id.convention.yaml +56 -0
  57. package/conventions/coder.htmx/coder.htmx.verb-destructive-confirms.convention.yaml +56 -0
  58. package/conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml +73 -0
  59. package/conventions/coder.htmx/coder.htmx.verb-endpoint-same-origin.convention.yaml +58 -0
  60. package/conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml +59 -0
  61. package/conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml +83 -0
  62. package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +67 -0
  63. package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +82 -0
  64. package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +71 -0
  65. package/conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml +65 -0
  66. package/conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml +87 -0
  67. package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +68 -0
  68. package/conventions/planner.docs/planner.docs.reference-integrity.convention.yaml +74 -0
  69. package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +80 -0
  70. package/conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml +49 -0
  71. package/conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml +50 -0
  72. package/conventions/tester.bun/tester.bun.acceptance-resolves-to-declared.convention.yaml +61 -0
  73. package/conventions/tester.bun/tester.bun.interlocking-production-runner-used.convention.yaml +76 -0
  74. package/conventions/tester.bun/tester.bun.interlocking-route-coverage.convention.yaml +66 -0
  75. package/conventions/tester.bun/tester.bun.interlocking-smoke-coverage-for-station-master.convention.yaml +76 -0
  76. package/conventions/tester.bun/tester.bun.interlocking-trace-binds-declared-route.convention.yaml +74 -0
  77. package/conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml +77 -0
  78. package/conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml +51 -0
  79. package/conventions/tester.bun/tester.bun.red-fails-first.convention.yaml +52 -0
  80. package/conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml +41 -0
  81. package/conventions/tester.bun/tester.bun.security-auth.convention.yaml +46 -0
  82. package/conventions/tester.bun/tester.bun.security-input.convention.yaml +45 -0
  83. package/conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml +45 -0
  84. package/conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml +54 -0
  85. package/conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml +46 -0
  86. package/conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml +51 -0
  87. package/conventions/tester.bun/tester.bun.test-imports-bun-test.convention.yaml +55 -0
  88. package/conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml +50 -0
  89. package/conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml +46 -0
  90. package/conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml +45 -0
  91. package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml +52 -0
  92. package/conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml +48 -0
  93. package/conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml +54 -0
  94. package/conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml +2 -0
  95. package/conventions/traceability/traceability.source.tested-by-present.convention.yaml +2 -0
  96. package/conventions/traceability/traceability.source.tested-by-resolves.convention.yaml +2 -0
  97. package/conventions/traceability/traceability.test.binding-resolves.convention.yaml +2 -0
  98. package/detectors/atdd_traceability_closure/atdd.implementation.yaml +8 -0
  99. package/detectors/atdd_traceability_closure/detect.mjs +84 -0
  100. package/detectors/atdd_traceability_closure/fixtures/clean/plan/orders/E001.yaml +4 -0
  101. package/detectors/atdd_traceability_closure/fixtures/clean/src/order.ts +4 -0
  102. package/detectors/atdd_traceability_closure/fixtures/clean/test/order.test.ts +4 -0
  103. package/detectors/atdd_traceability_closure/fixtures/dirty/plan/orders/E001.yaml +6 -0
  104. package/detectors/atdd_traceability_closure/fixtures/dirty/src/missing-test.ts +2 -0
  105. package/detectors/atdd_traceability_closure/fixtures/dirty/src/unknown-test.ts +4 -0
  106. package/detectors/atdd_traceability_closure/fixtures/dirty/test/bad-binding.test.ts +4 -0
  107. package/detectors/atdd_traceability_closure/fixtures/dirty/test/no-binding.test.ts +3 -0
  108. package/detectors/bun_clean_architecture_detector/atdd.implementation.yaml +42 -0
  109. package/detectors/bun_clean_architecture_detector/checks/_map.json +14 -0
  110. package/detectors/bun_clean_architecture_detector/checks/a_boundaries_http_client.mjs +36 -0
  111. package/detectors/bun_clean_architecture_detector/checks/a_commons_application_no_integration.mjs +37 -0
  112. package/detectors/bun_clean_architecture_detector/checks/a_commons_cross_feature.mjs +41 -0
  113. package/detectors/bun_clean_architecture_detector/checks/a_commons_domain_no_outbound.mjs +40 -0
  114. package/detectors/bun_clean_architecture_detector/checks/a_composition_consumer.mjs +33 -0
  115. package/detectors/bun_clean_architecture_detector/checks/a_composition_root.mjs +35 -0
  116. package/detectors/bun_clean_architecture_detector/checks/a_domain_no_framework.mjs +47 -0
  117. package/detectors/bun_clean_architecture_detector/checks/a_dto_mapper.mjs +31 -0
  118. package/detectors/bun_clean_architecture_detector/checks/a_dto_placement.mjs +30 -0
  119. package/detectors/bun_clean_architecture_detector/checks/a_dto_purity.mjs +59 -0
  120. package/detectors/bun_clean_architecture_detector/checks/a_hierarchy_import.mjs +48 -0
  121. package/detectors/bun_clean_architecture_detector/checks/a_layer_naming.mjs +41 -0
  122. package/detectors/bun_clean_architecture_detector/detect.mjs +46 -0
  123. package/detectors/bun_clean_architecture_detector/fixtures/clean/contracts/order.ts +5 -0
  124. package/detectors/bun_clean_architecture_detector/fixtures/clean/features/orders/application/place.ts +3 -0
  125. package/detectors/bun_clean_architecture_detector/fixtures/clean/features/orders/composition.ts +4 -0
  126. package/detectors/bun_clean_architecture_detector/fixtures/clean/features/orders/domain/total.ts +2 -0
  127. package/detectors/bun_clean_architecture_detector/fixtures/clean/features/orders/integration/order-mapper.ts +3 -0
  128. package/detectors/bun_clean_architecture_detector/fixtures/clean/features/orders/presentation/api.ts +3 -0
  129. package/detectors/bun_clean_architecture_detector/fixtures/dirty/commons/application/flow.ts +2 -0
  130. package/detectors/bun_clean_architecture_detector/fixtures/dirty/commons/domain/billing/rules.ts +1 -0
  131. package/detectors/bun_clean_architecture_detector/fixtures/dirty/commons/domain/orders/rules.ts +5 -0
  132. package/detectors/bun_clean_architecture_detector/fixtures/dirty/commons/integration/http.ts +1 -0
  133. package/detectors/bun_clean_architecture_detector/fixtures/dirty/features/billing/application/pay.ts +2 -0
  134. package/detectors/bun_clean_architecture_detector/fixtures/dirty/features/billing/domain/rules.ts +2 -0
  135. package/detectors/bun_clean_architecture_detector/fixtures/dirty/features/billing/helper.ts +1 -0
  136. package/detectors/bun_clean_architecture_detector/fixtures/dirty/features/billing/integration/client.ts +1 -0
  137. package/detectors/bun_clean_architecture_detector/fixtures/dirty/features/billing/presentation/api.ts +2 -0
  138. package/detectors/bun_fullstack_detector/atdd.implementation.yaml +23 -0
  139. package/detectors/bun_fullstack_detector/checks/_map.json +5 -0
  140. package/detectors/bun_fullstack_detector/checks/bun_runtime_server_is_bun_serve.mjs +39 -0
  141. package/detectors/bun_fullstack_detector/checks/bun_runtime_single_lockfile.mjs +40 -0
  142. package/detectors/bun_fullstack_detector/checks/bun_runtime_typecheck_enforced.mjs +133 -0
  143. package/detectors/bun_fullstack_detector/detect.mjs +46 -0
  144. package/detectors/bun_fullstack_detector/fixtures/clean/bun_runtime_server_is_bun_serve/server.ts +7 -0
  145. package/detectors/bun_fullstack_detector/fixtures/clean/bun_runtime_single_lockfile/bun.lock +1 -0
  146. package/detectors/bun_fullstack_detector/fixtures/clean/bun_runtime_typecheck_enforced/package.json +5 -0
  147. package/detectors/bun_fullstack_detector/fixtures/clean/bun_runtime_typecheck_enforced/server.ts +3 -0
  148. package/detectors/bun_fullstack_detector/fixtures/clean/bun_runtime_typecheck_enforced/tsconfig.json +1 -0
  149. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_server_is_bun_serve/server.ts +5 -0
  150. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_single_lockfile/bun.lock +1 -0
  151. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_single_lockfile/package-lock.json +1 -0
  152. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_typecheck_enforced/package.json +4 -0
  153. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_typecheck_enforced/packages/second/index.ts +8 -0
  154. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_typecheck_enforced/packages/second/package.json +1 -0
  155. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_typecheck_enforced/server.ts +3 -0
  156. package/detectors/bun_fullstack_detector/fixtures/dirty/bun_runtime_typecheck_enforced/tsconfig.json +1 -0
  157. package/detectors/bun_green_traceability_detector/atdd.implementation.yaml +35 -0
  158. package/detectors/bun_green_traceability_detector/checks/_map.json +12 -0
  159. package/detectors/bun_green_traceability_detector/checks/green_header_order.mjs +24 -0
  160. package/detectors/bun_green_traceability_detector/checks/green_header_purpose.mjs +18 -0
  161. package/detectors/bun_green_traceability_detector/checks/green_header_runtime.mjs +25 -0
  162. package/detectors/bun_green_traceability_detector/checks/green_header_tested_by.mjs +15 -0
  163. package/detectors/bun_green_traceability_detector/checks/green_urn_layer.mjs +17 -0
  164. package/detectors/bun_green_traceability_detector/checks/green_urn_marker.mjs +18 -0
  165. package/detectors/bun_green_traceability_detector/checks/green_urn_name_matches.mjs +26 -0
  166. package/detectors/bun_green_traceability_detector/checks/green_urn_pattern.mjs +17 -0
  167. package/detectors/bun_green_traceability_detector/checks/green_urn_side.mjs +20 -0
  168. package/detectors/bun_green_traceability_detector/checks/green_urn_wagon_feature.mjs +20 -0
  169. package/detectors/bun_green_traceability_detector/detect.mjs +46 -0
  170. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_order/OrderPanel.html +7 -0
  171. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_order/OrderRow.ts +7 -0
  172. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_purpose/OrderPanel.html +7 -0
  173. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_purpose/OrderRow.ts +7 -0
  174. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_runtime/OrderPanel.html +7 -0
  175. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_runtime/OrderRow.ts +7 -0
  176. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_tested_by/OrderPanel.html +7 -0
  177. package/detectors/bun_green_traceability_detector/fixtures/clean/green_header_tested_by/OrderRow.ts +7 -0
  178. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_layer/OrderPanel.html +7 -0
  179. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_layer/OrderRow.ts +7 -0
  180. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_marker/OrderPanel.html +7 -0
  181. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_marker/OrderRow.ts +7 -0
  182. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_name_matches/OrderPanel.html +7 -0
  183. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_name_matches/OrderRow.ts +7 -0
  184. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_pattern/OrderPanel.html +7 -0
  185. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_pattern/OrderRow.ts +7 -0
  186. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_side/OrderPanel.html +7 -0
  187. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_side/OrderRow.ts +7 -0
  188. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_wagon_feature/OrderPanel.html +7 -0
  189. package/detectors/bun_green_traceability_detector/fixtures/clean/green_urn_wagon_feature/OrderRow.ts +7 -0
  190. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_header_order/OrderRow.ts +6 -0
  191. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_header_purpose/OrderRow.ts +5 -0
  192. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_header_runtime/OrderRow.ts +6 -0
  193. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_header_tested_by/OrderPanel.html +5 -0
  194. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_layer/OrderRow.ts +6 -0
  195. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_marker/OrderRow.ts +3 -0
  196. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_name_matches/OrderRow.ts +6 -0
  197. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_pattern/OrderRow.ts +6 -0
  198. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_side/OrderRow.ts +6 -0
  199. package/detectors/bun_green_traceability_detector/fixtures/dirty/green_urn_wagon_feature/OrderRow.ts +6 -0
  200. package/detectors/bun_green_traceability_detector/urn_header.mjs +191 -0
  201. package/detectors/bun_interlocking_binding/atdd.implementation.yaml +31 -0
  202. package/detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs +168 -0
  203. package/detectors/bun_interlocking_binding/detect.mjs +608 -0
  204. package/detectors/bun_interlocking_binding/fixtures/clean/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  205. package/detectors/bun_interlocking_binding/fixtures/clean/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  206. package/detectors/bun_interlocking_binding/fixtures/clean/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  207. package/detectors/bun_interlocking_binding/fixtures/clean/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  208. package/detectors/bun_interlocking_binding/fixtures/clean/server.ts +19 -0
  209. package/detectors/bun_interlocking_binding/fixtures/clean/src/trains/interlocking.ts +66 -0
  210. package/detectors/bun_interlocking_binding/fixtures/clean/src/trains/runner.ts +7 -0
  211. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  212. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/plan/_trains/_interlockings/match-resolution.yaml +57 -0
  213. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  214. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  215. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/server.ts +19 -0
  216. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/src/trains/interlocking.ts +28 -0
  217. package/detectors/bun_interlocking_binding/fixtures/clean_flow_style_actions/src/trains/runner.ts +7 -0
  218. package/detectors/bun_interlocking_binding/fixtures/dirty/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  219. package/detectors/bun_interlocking_binding/fixtures/dirty/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  220. package/detectors/bun_interlocking_binding/fixtures/dirty/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  221. package/detectors/bun_interlocking_binding/fixtures/dirty/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  222. package/detectors/bun_interlocking_binding/fixtures/dirty/server.ts +19 -0
  223. package/detectors/bun_interlocking_binding/fixtures/dirty/src/trains/interlocking.ts +28 -0
  224. package/detectors/bun_interlocking_binding/fixtures/dirty/src/trains/runner.ts +7 -0
  225. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  226. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/plan/_trains/_interlockings/match-resolution.yaml +54 -0
  227. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  228. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  229. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/server.ts +19 -0
  230. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/src/trains/interlocking.ts +28 -0
  231. package/detectors/bun_interlocking_binding/fixtures/dirty_parallel_field/src/trains/runner.ts +7 -0
  232. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  233. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  234. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  235. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  236. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/server.ts +19 -0
  237. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/src/trains/interlocking.ts +28 -0
  238. package/detectors/bun_interlocking_binding/fixtures/dirty_station_missing/src/trains/runner.ts +7 -0
  239. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/e2e/interlockings/match-resolution/trace.test.ts +19 -0
  240. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  241. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  242. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  243. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/server.ts +19 -0
  244. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/src/trains/interlocking.ts +28 -0
  245. package/detectors/bun_interlocking_binding/fixtures/dirty_trace_unbound/src/trains/runner.ts +7 -0
  246. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/e2e/interlockings/match-resolution/trace.test.ts +10 -0
  247. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  248. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/plan/_trains/train:match:match-resolution-standard.yaml +4 -0
  249. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/plan/_trains/train:match:match-resolution-timeout.yaml +4 -0
  250. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/server.ts +19 -0
  251. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/src/trains/interlocking.ts +30 -0
  252. package/detectors/bun_interlocking_binding/fixtures/dirty_transcribed_runtime/src/trains/runner.ts +7 -0
  253. package/detectors/bun_interlocking_coverage/_shared/interlocking.mjs +389 -0
  254. package/detectors/bun_interlocking_coverage/atdd.implementation.yaml +27 -0
  255. package/detectors/bun_interlocking_coverage/checks/_map.json +7 -0
  256. package/detectors/bun_interlocking_coverage/checks/interlocking_production_runner.mjs +82 -0
  257. package/detectors/bun_interlocking_coverage/checks/interlocking_route_coverage.mjs +58 -0
  258. package/detectors/bun_interlocking_coverage/checks/interlocking_smoke_coverage.mjs +68 -0
  259. package/detectors/bun_interlocking_coverage/checks/interlocking_trace_binds.mjs +64 -0
  260. package/detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs +110 -0
  261. package/detectors/bun_interlocking_coverage/detect.mjs +46 -0
  262. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  263. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  264. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  265. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  266. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_route_coverage/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  267. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_route_coverage/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  268. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_route_coverage/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  269. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_route_coverage/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  270. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  271. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  272. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  273. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  274. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage_module/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  275. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage_module/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  276. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage_module/e2e/smoke/resolve-match.smoke.test.ts +19 -0
  277. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_smoke_coverage_module/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  278. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_trace_binds/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  279. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_trace_binds/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  280. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_trace_binds/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  281. package/detectors/bun_interlocking_coverage/fixtures/clean/interlocking_trace_binds/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  282. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_production_runner/e2e/interlockings/match-resolution/routes.test.ts +23 -0
  283. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_production_runner/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  284. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_production_runner/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  285. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_production_runner/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  286. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_route_coverage/e2e/interlockings/match-resolution/routes.test.ts +12 -0
  287. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_route_coverage/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  288. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_route_coverage/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  289. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_route_coverage/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  290. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_smoke_coverage/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  291. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_smoke_coverage/e2e/interlockings/match-resolution/trace.test.ts +17 -0
  292. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_smoke_coverage/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  293. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_trace_binds/e2e/interlockings/match-resolution/routes.test.ts +21 -0
  294. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_trace_binds/e2e/interlockings/match-resolution/trace.test.ts +13 -0
  295. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_trace_binds/e2e/smoke/resolve-match.smoke.test.ts +13 -0
  296. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_trace_binds/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  297. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/e2e/interlockings/match-resolution/routes.test.ts +16 -0
  298. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/_interlockings/match-resolution.yaml +51 -0
  299. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/train:match:match-resolution-standard.yaml +8 -0
  300. package/detectors/bun_interlocking_coverage/fixtures/dirty/interlocking_train_sequence/plan/_trains/train:match:match-resolution-timeout.yaml +5 -0
  301. package/detectors/bun_interlocking_infrastructure/_shared/interlocking.mjs +477 -0
  302. package/detectors/bun_interlocking_infrastructure/atdd.implementation.yaml +32 -0
  303. package/detectors/bun_interlocking_infrastructure/checks/_map.json +10 -0
  304. package/detectors/bun_interlocking_infrastructure/checks/interlocking_delegates.mjs +70 -0
  305. package/detectors/bun_interlocking_infrastructure/checks/interlocking_no_cargo.mjs +62 -0
  306. package/detectors/bun_interlocking_infrastructure/checks/interlocking_resolution_model.mjs +64 -0
  307. package/detectors/bun_interlocking_infrastructure/checks/interlocking_runner_exists.mjs +73 -0
  308. package/detectors/bun_interlocking_infrastructure/checks/interlocking_station_routing.mjs +62 -0
  309. package/detectors/bun_interlocking_infrastructure/checks/journey_runner_boundary.mjs +153 -0
  310. package/detectors/bun_interlocking_infrastructure/checks/journey_station_routing.mjs +119 -0
  311. package/detectors/bun_interlocking_infrastructure/checks/wagon_contract_honoured.mjs +149 -0
  312. package/detectors/bun_interlocking_infrastructure/detect.mjs +46 -0
  313. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/server.ts +22 -0
  314. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/src/match/wagon.ts +6 -0
  315. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/src/trains/interlocking.ts +41 -0
  316. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_delegates/src/trains/runner.ts +28 -0
  317. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_no_cargo/server.ts +22 -0
  318. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_no_cargo/src/match/wagon.ts +6 -0
  319. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_no_cargo/src/trains/interlocking.ts +41 -0
  320. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_no_cargo/src/trains/runner.ts +28 -0
  321. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_resolution_model/server.ts +22 -0
  322. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_resolution_model/src/match/wagon.ts +6 -0
  323. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_resolution_model/src/trains/interlocking.ts +41 -0
  324. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_resolution_model/src/trains/runner.ts +28 -0
  325. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_runner_exists/server.ts +22 -0
  326. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_runner_exists/src/match/wagon.ts +6 -0
  327. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_runner_exists/src/trains/interlocking.ts +41 -0
  328. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_runner_exists/src/trains/runner.ts +28 -0
  329. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_station_routing/server.ts +22 -0
  330. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_station_routing/src/match/wagon.ts +6 -0
  331. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_station_routing/src/trains/interlocking.ts +41 -0
  332. package/detectors/bun_interlocking_infrastructure/fixtures/clean/interlocking_station_routing/src/trains/runner.ts +28 -0
  333. package/detectors/bun_interlocking_infrastructure/fixtures/clean/journey_runner_boundary/plan/_journeys/example.yaml +16 -0
  334. package/detectors/bun_interlocking_infrastructure/fixtures/clean/journey_runner_boundary/src/trains/journey.ts +15 -0
  335. package/detectors/bun_interlocking_infrastructure/fixtures/clean/journey_station_routing/plan/_journeys/public.yaml +16 -0
  336. package/detectors/bun_interlocking_infrastructure/fixtures/clean/journey_station_routing/server.ts +13 -0
  337. package/detectors/bun_interlocking_infrastructure/fixtures/clean/journey_station_routing/src/trains/journey.ts +14 -0
  338. package/detectors/bun_interlocking_infrastructure/fixtures/clean/wagon_contract_honoured/plan/orders/_orders.yaml +17 -0
  339. package/detectors/bun_interlocking_infrastructure/fixtures/clean/wagon_contract_honoured/src/orders/wagon.ts +15 -0
  340. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_delegates/server.ts +22 -0
  341. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_delegates/src/match/wagon.ts +6 -0
  342. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_delegates/src/trains/interlocking.ts +49 -0
  343. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_delegates/src/trains/runner.ts +28 -0
  344. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_no_cargo/server.ts +22 -0
  345. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_no_cargo/src/match/wagon.ts +11 -0
  346. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_no_cargo/src/trains/interlocking.ts +42 -0
  347. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_no_cargo/src/trains/runner.ts +28 -0
  348. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_resolution_model/server.ts +22 -0
  349. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_resolution_model/src/match/wagon.ts +6 -0
  350. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_resolution_model/src/trains/interlocking.ts +21 -0
  351. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_resolution_model/src/trains/runner.ts +28 -0
  352. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_runner_exists/server.ts +22 -0
  353. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_runner_exists/src/match/wagon.ts +6 -0
  354. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_runner_exists/src/trains/interlocking.ts +16 -0
  355. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_runner_exists/src/trains/runner.ts +28 -0
  356. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_station_routing/server.ts +19 -0
  357. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_station_routing/src/match/wagon.ts +6 -0
  358. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_station_routing/src/trains/interlocking.ts +41 -0
  359. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/interlocking_station_routing/src/trains/runner.ts +28 -0
  360. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_runner_boundary/plan/_journeys/example.yaml +16 -0
  361. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_runner_boundary/src/trains/journey.ts +14 -0
  362. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_station_routing/plan/_journeys/public.yaml +16 -0
  363. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_station_routing/server.ts +10 -0
  364. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/journey_station_routing/src/trains/journey.ts +14 -0
  365. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/plan/orders/_orders.yaml +17 -0
  366. package/detectors/bun_interlocking_infrastructure/fixtures/dirty/wagon_contract_honoured/src/orders/wagon.ts +13 -0
  367. package/detectors/bun_security_hygiene_detector/atdd.implementation.yaml +33 -0
  368. package/detectors/bun_security_hygiene_detector/checks/_map.json +9 -0
  369. package/detectors/bun_security_hygiene_detector/checks/err_bare_string.mjs +38 -0
  370. package/detectors/bun_security_hygiene_detector/checks/err_code_format.mjs +36 -0
  371. package/detectors/bun_security_hygiene_detector/checks/log_console.mjs +33 -0
  372. package/detectors/bun_security_hygiene_detector/checks/log_structured.mjs +36 -0
  373. package/detectors/bun_security_hygiene_detector/checks/sec_hardcoded_secret.mjs +43 -0
  374. package/detectors/bun_security_hygiene_detector/checks/sec_missing_auth.mjs +63 -0
  375. package/detectors/bun_security_hygiene_detector/checks/sec_sql_injection.mjs +56 -0
  376. package/detectors/bun_security_hygiene_detector/detect.mjs +46 -0
  377. package/detectors/bun_security_hygiene_detector/fixtures/clean/server.ts +24 -0
  378. package/detectors/bun_security_hygiene_detector/fixtures/dirty/db.ts +6 -0
  379. package/detectors/bun_security_hygiene_detector/fixtures/dirty/errors.ts +6 -0
  380. package/detectors/bun_security_hygiene_detector/fixtures/dirty/logging.ts +4 -0
  381. package/detectors/bun_security_hygiene_detector/fixtures/dirty/routes.ts +10 -0
  382. package/detectors/bun_security_hygiene_detector/fixtures/dirty/secrets.ts +3 -0
  383. package/detectors/bun_tester_discipline_detector/atdd.implementation.yaml +46 -0
  384. package/detectors/bun_tester_discipline_detector/checks/_map.json +18 -0
  385. package/detectors/bun_tester_discipline_detector/checks/t_acceptance_binding.mjs +19 -0
  386. package/detectors/bun_tester_discipline_detector/checks/t_acceptance_covers_tag.mjs +25 -0
  387. package/detectors/bun_tester_discipline_detector/checks/t_acceptance_resolves.mjs +106 -0
  388. package/detectors/bun_tester_discipline_detector/checks/t_isolation_no_live_state.mjs +40 -0
  389. package/detectors/bun_tester_discipline_detector/checks/t_red_behavioral.mjs +35 -0
  390. package/detectors/bun_tester_discipline_detector/checks/t_red_fails_first.mjs +30 -0
  391. package/detectors/bun_tester_discipline_detector/checks/t_routing_runtime.mjs +22 -0
  392. package/detectors/bun_tester_discipline_detector/checks/t_security_auth.mjs +26 -0
  393. package/detectors/bun_tester_discipline_detector/checks/t_security_input.mjs +25 -0
  394. package/detectors/bun_tester_discipline_detector/checks/t_smoke_no_substitution.mjs +25 -0
  395. package/detectors/bun_tester_discipline_detector/checks/t_smoke_observable.mjs +28 -0
  396. package/detectors/bun_tester_discipline_detector/checks/t_telemetry_emit.mjs +27 -0
  397. package/detectors/bun_tester_discipline_detector/checks/t_test_imports_bun_test.mjs +31 -0
  398. package/detectors/bun_tester_discipline_detector/checks/t_test_no_self_skip.mjs +34 -0
  399. package/detectors/bun_tester_discipline_detector/checks/t_test_phase_declared.mjs +21 -0
  400. package/detectors/bun_tester_discipline_detector/checks/t_urn_identity.mjs +18 -0
  401. package/detectors/bun_tester_discipline_detector/detect.mjs +46 -0
  402. package/detectors/bun_tester_discipline_detector/fixtures/clean/audit.sec.test.ts +15 -0
  403. package/detectors/bun_tester_discipline_detector/fixtures/clean/checkout.red.test.ts +16 -0
  404. package/detectors/bun_tester_discipline_detector/fixtures/clean/emit.telemetry.test.ts +15 -0
  405. package/detectors/bun_tester_discipline_detector/fixtures/clean/marked.red.test.ts +14 -0
  406. package/detectors/bun_tester_discipline_detector/fixtures/clean/orders.smoke.test.ts +16 -0
  407. package/detectors/bun_tester_discipline_detector/fixtures/clean/payload.input.test.ts +13 -0
  408. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E001.yaml +9 -0
  409. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E002.yaml +9 -0
  410. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E020.yaml +9 -0
  411. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E021.yaml +9 -0
  412. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E022.yaml +9 -0
  413. package/detectors/bun_tester_discipline_detector/fixtures/clean/plan/orders/E023.yaml +9 -0
  414. package/detectors/bun_tester_discipline_detector/fixtures/dirty/badcovers.test.ts +7 -0
  415. package/detectors/bun_tester_discipline_detector/fixtures/dirty/badphase.test.ts +6 -0
  416. package/detectors/bun_tester_discipline_detector/fixtures/dirty/foreign_harness.test.ts +6 -0
  417. package/detectors/bun_tester_discipline_detector/fixtures/dirty/happy.auth.test.ts +9 -0
  418. package/detectors/bun_tester_discipline_detector/fixtures/dirty/happy.input.test.ts +9 -0
  419. package/detectors/bun_tester_discipline_detector/fixtures/dirty/internal.smoke.test.ts +10 -0
  420. package/detectors/bun_tester_discipline_detector/fixtures/dirty/no_header.test.ts +2 -0
  421. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E004.yaml +9 -0
  422. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E005.yaml +9 -0
  423. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E006.yaml +9 -0
  424. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E007.yaml +9 -0
  425. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E008.yaml +9 -0
  426. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E009.yaml +9 -0
  427. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E010.yaml +9 -0
  428. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E024.yaml +9 -0
  429. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E025.yaml +9 -0
  430. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E026.yaml +9 -0
  431. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E027.yaml +9 -0
  432. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E028.yaml +9 -0
  433. package/detectors/bun_tester_discipline_detector/fixtures/dirty/plan/orders/E030.yaml +9 -0
  434. package/detectors/bun_tester_discipline_detector/fixtures/dirty/polluting.test.ts +11 -0
  435. package/detectors/bun_tester_discipline_detector/fixtures/dirty/quiet.telemetry.test.ts +9 -0
  436. package/detectors/bun_tester_discipline_detector/fixtures/dirty/skipped.test.ts +6 -0
  437. package/detectors/bun_tester_discipline_detector/fixtures/dirty/substituted.smoke.test.ts +13 -0
  438. package/detectors/bun_tester_discipline_detector/fixtures/dirty/unbound.test.ts +5 -0
  439. package/detectors/bun_tester_discipline_detector/fixtures/dirty/unmarked.red.test.ts +7 -0
  440. package/detectors/bun_tester_discipline_detector/fixtures/dirty/unresolvable_binding.test.ts +17 -0
  441. package/detectors/bun_tester_discipline_detector/fixtures/dirty/vacuous.red.test.ts +7 -0
  442. package/detectors/bun_tester_discipline_detector/fixtures/dirty/wrongruntime.test.ts +7 -0
  443. package/detectors/bun_tester_discipline_detector/test_header.mjs +160 -0
  444. package/detectors/bun_ts_metrics_detector/atdd.implementation.yaml +34 -0
  445. package/detectors/bun_ts_metrics_detector/checks/_map.json +9 -0
  446. package/detectors/bun_ts_metrics_detector/checks/ts_complexity_cyclomatic.mjs +36 -0
  447. package/detectors/bun_ts_metrics_detector/checks/ts_complexity_length.mjs +36 -0
  448. package/detectors/bun_ts_metrics_detector/checks/ts_complexity_nesting.mjs +36 -0
  449. package/detectors/bun_ts_metrics_detector/checks/ts_dead_code.mjs +58 -0
  450. package/detectors/bun_ts_metrics_detector/checks/ts_duplication.mjs +70 -0
  451. package/detectors/bun_ts_metrics_detector/checks/ts_quality_comments.mjs +30 -0
  452. package/detectors/bun_ts_metrics_detector/checks/ts_quality_mi.mjs +30 -0
  453. package/detectors/bun_ts_metrics_detector/detect.mjs +46 -0
  454. package/detectors/bun_ts_metrics_detector/fixtures/clean/domain/label.ts +6 -0
  455. package/detectors/bun_ts_metrics_detector/fixtures/clean/domain/total.ts +8 -0
  456. package/detectors/bun_ts_metrics_detector/fixtures/clean/index.ts +7 -0
  457. package/detectors/bun_ts_metrics_detector/fixtures/dirty/bare.ts +2 -0
  458. package/detectors/bun_ts_metrics_detector/fixtures/dirty/big.ts +600 -0
  459. package/detectors/bun_ts_metrics_detector/fixtures/dirty/consumer.ts +2 -0
  460. package/detectors/bun_ts_metrics_detector/fixtures/dirty/domain/a.ts +9 -0
  461. package/detectors/bun_ts_metrics_detector/fixtures/dirty/domain/b.ts +9 -0
  462. package/detectors/bun_ts_metrics_detector/fixtures/dirty/gnarly.ts +22 -0
  463. package/detectors/bun_ts_metrics_detector/fixtures/dirty/index.ts +8 -0
  464. package/detectors/bun_ts_metrics_detector/fixtures/dirty/long.ts +64 -0
  465. package/detectors/bun_ts_metrics_detector/fixtures/dirty/orphan.ts +1 -0
  466. package/detectors/bun_ts_metrics_detector/fixtures/dirty/typed.ts +1 -0
  467. package/detectors/bun_ts_metrics_detector/ts_metrics.mjs +310 -0
  468. package/detectors/htmx_hypermedia_detector/atdd.implementation.yaml +28 -0
  469. package/detectors/htmx_hypermedia_detector/checks/_map.json +9 -0
  470. package/detectors/htmx_hypermedia_detector/checks/htmx_fragment_escapes_interpolation.mjs +66 -0
  471. package/detectors/htmx_hypermedia_detector/checks/htmx_swap_no_inline_handler.mjs +40 -0
  472. package/detectors/htmx_hypermedia_detector/checks/htmx_swap_oob_carries_id.mjs +37 -0
  473. package/detectors/htmx_hypermedia_detector/checks/htmx_verb_destructive_confirms.mjs +36 -0
  474. package/detectors/htmx_hypermedia_detector/checks/htmx_verb_endpoint_is_routed.mjs +133 -0
  475. package/detectors/htmx_hypermedia_detector/checks/htmx_verb_endpoint_same_origin.mjs +33 -0
  476. package/detectors/htmx_hypermedia_detector/checks/htmx_verb_mutation_signals_progress.mjs +43 -0
  477. package/detectors/htmx_hypermedia_detector/detect.mjs +46 -0
  478. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_fragment_escapes_interpolation/render.ts +6 -0
  479. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_swap_no_inline_handler/row.html +1 -0
  480. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_swap_oob_carries_id/fragment.html +1 -0
  481. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_verb_destructive_confirms/delete.html +1 -0
  482. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_verb_endpoint_is_routed/server.ts +10 -0
  483. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_verb_endpoint_is_routed/src/OrderRow.ts +7 -0
  484. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_verb_endpoint_same_origin/panel.html +3 -0
  485. package/detectors/htmx_hypermedia_detector/fixtures/clean/htmx_verb_mutation_signals_progress/form.html +4 -0
  486. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_fragment_escapes_interpolation/render.ts +3 -0
  487. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_swap_no_inline_handler/row.html +1 -0
  488. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_swap_oob_carries_id/fragment.html +1 -0
  489. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_verb_destructive_confirms/delete.html +1 -0
  490. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_verb_endpoint_is_routed/server.ts +10 -0
  491. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_verb_endpoint_is_routed/src/OrderRow.ts +9 -0
  492. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_verb_endpoint_same_origin/panel.html +3 -0
  493. package/detectors/htmx_hypermedia_detector/fixtures/dirty/htmx_verb_mutation_signals_progress/form.html +3 -0
  494. package/detectors/htmx_tester_detector/atdd.implementation.yaml +21 -0
  495. package/detectors/htmx_tester_detector/checks/_map.json +5 -0
  496. package/detectors/htmx_tester_detector/checks/t_fragment_asserts_returned_markup.mjs +40 -0
  497. package/detectors/htmx_tester_detector/checks/t_swap_oob_asserts_destination_id.mjs +38 -0
  498. package/detectors/htmx_tester_detector/checks/t_verb_endpoint_coverage.mjs +59 -0
  499. package/detectors/htmx_tester_detector/detect.mjs +46 -0
  500. package/detectors/htmx_tester_detector/fixtures/clean/orders.test.ts +23 -0
  501. package/detectors/htmx_tester_detector/fixtures/clean/panel.html +7 -0
  502. package/detectors/htmx_tester_detector/fixtures/dirty/orders.test.ts +20 -0
  503. package/detectors/htmx_tester_detector/fixtures/dirty/panel.html +7 -0
  504. package/detectors/htmx_tester_detector/fixtures/dirty/statusonly.test.ts +9 -0
  505. package/detectors/htmx_tester_detector/test_header.mjs +4 -0
  506. package/detectors/planner_docs_capability/README.md +34 -0
  507. package/detectors/planner_docs_capability/atdd.implementation.yaml +57 -0
  508. package/detectors/planner_docs_capability/detect.mjs +10 -0
  509. package/detectors/planner_docs_capability/fixtures/clean/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  510. package/detectors/planner_docs_capability/fixtures/clean/docs/architecture/decisions/index.adoc +7 -0
  511. package/detectors/planner_docs_capability/fixtures/clean/docs/architecture/index.adoc +5 -0
  512. package/detectors/planner_docs_capability/fixtures/clean/docs/architecture/shared-control-root.adoc +8 -0
  513. package/detectors/planner_docs_capability/fixtures/clean/docs/architecture/state-store.adoc +5 -0
  514. package/detectors/planner_docs_capability/fixtures/clean/docs/archive/2025-control-root.adoc +5 -0
  515. package/detectors/planner_docs_capability/fixtures/clean/docs/archive/index.adoc +5 -0
  516. package/detectors/planner_docs_capability/fixtures/clean/docs/delivery/index.adoc +5 -0
  517. package/detectors/planner_docs_capability/fixtures/clean/docs/dist/index.md +1 -0
  518. package/detectors/planner_docs_capability/fixtures/clean/docs/index.adoc +5 -0
  519. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/index.adoc +5 -0
  520. package/detectors/planner_docs_capability/fixtures/clean/docs/purpose/worktrees.adoc +5 -0
  521. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  522. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/decisions/index.adoc +7 -0
  523. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/index.adoc +5 -0
  524. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/notes.md +3 -0
  525. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/shared-control-root.adoc +8 -0
  526. package/detectors/planner_docs_capability/fixtures/dirty/docs/architecture/state-store.adoc +5 -0
  527. package/detectors/planner_docs_capability/fixtures/dirty/docs/archive/2025-control-root.adoc +5 -0
  528. package/detectors/planner_docs_capability/fixtures/dirty/docs/archive/index.adoc +5 -0
  529. package/detectors/planner_docs_capability/fixtures/dirty/docs/delivery/index.adoc +5 -0
  530. package/detectors/planner_docs_capability/fixtures/dirty/docs/dist/index.md +1 -0
  531. package/detectors/planner_docs_capability/fixtures/dirty/docs/index.adoc +5 -0
  532. package/detectors/planner_docs_capability/fixtures/dirty/docs/purpose/index.adoc +5 -0
  533. package/detectors/planner_docs_capability/fixtures/dirty/docs/purpose/worktrees.adoc +5 -0
  534. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  535. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/decisions/adr-20260906-002-documentation-system.adoc +8 -0
  536. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/decisions/index.adoc +7 -0
  537. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/index.adoc +5 -0
  538. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/shared-control-root.adoc +8 -0
  539. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/architecture/state-store.adoc +5 -0
  540. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/archive/2025-control-root.adoc +5 -0
  541. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/archive/index.adoc +5 -0
  542. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/delivery/index.adoc +5 -0
  543. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/dist/index.md +1 -0
  544. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/index.adoc +5 -0
  545. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/purpose/index.adoc +5 -0
  546. package/detectors/planner_docs_capability/fixtures/dirty_adr_registry/docs/purpose/worktrees.adoc +5 -0
  547. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  548. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/architecture/decisions/index.adoc +7 -0
  549. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/architecture/index.adoc +5 -0
  550. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/architecture/shared-control-root.adoc +8 -0
  551. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/architecture/state-store.adoc +5 -0
  552. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/archive/2025-control-root.adoc +5 -0
  553. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/archive/index.adoc +5 -0
  554. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/delivery/index.adoc +5 -0
  555. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/delivery/worktrees.adoc +5 -0
  556. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/dist/index.md +1 -0
  557. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/index.adoc +5 -0
  558. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/purpose/index.adoc +5 -0
  559. package/detectors/planner_docs_capability/fixtures/dirty_duplicate_id/docs/purpose/worktrees.adoc +5 -0
  560. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  561. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/architecture/decisions/index.adoc +7 -0
  562. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/architecture/index.adoc +5 -0
  563. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/architecture/shared-control-root.adoc +8 -0
  564. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/architecture/state-store.adoc +5 -0
  565. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/archive/2025-control-root.adoc +5 -0
  566. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/archive/index.adoc +5 -0
  567. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/delivery/index.adoc +5 -0
  568. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/delivery/release.adoc +3 -0
  569. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/dist/index.md +1 -0
  570. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/index.adoc +5 -0
  571. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/purpose/index.adoc +5 -0
  572. package/detectors/planner_docs_capability/fixtures/dirty_identity/docs/purpose/worktrees.adoc +5 -0
  573. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  574. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/decisions/index.adoc +7 -0
  575. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/index.adoc +5 -0
  576. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/notes.md +3 -0
  577. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/shared-control-root.adoc +8 -0
  578. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/architecture/state-store.adoc +5 -0
  579. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/archive/2025-control-root.adoc +5 -0
  580. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/archive/index.adoc +5 -0
  581. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/delivery/index.adoc +5 -0
  582. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/dist/index.md +1 -0
  583. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/index.adoc +5 -0
  584. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/purpose/index.adoc +5 -0
  585. package/detectors/planner_docs_capability/fixtures/dirty_markdown/docs/purpose/worktrees.adoc +5 -0
  586. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  587. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/decisions/index.adoc +7 -0
  588. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/index.adoc +5 -0
  589. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/shared-control-root.adoc +8 -0
  590. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/state-store.adoc +5 -0
  591. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/archive/2025-control-root.adoc +5 -0
  592. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/archive/index.adoc +5 -0
  593. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/delivery/release.adoc +10 -0
  594. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/dist/index.md +1 -0
  595. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/index.adoc +5 -0
  596. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/purpose/index.adoc +5 -0
  597. package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/purpose/worktrees.adoc +5 -0
  598. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc +8 -0
  599. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/decisions/index.adoc +7 -0
  600. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/index.adoc +5 -0
  601. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/shared-control-root.adoc +8 -0
  602. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/state-store.adoc +5 -0
  603. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/archive/2025-control-root.adoc +5 -0
  604. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/archive/index.adoc +5 -0
  605. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/delivery/index.adoc +5 -0
  606. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/dist/index.md +1 -0
  607. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/index.adoc +5 -0
  608. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/purpose/index.adoc +5 -0
  609. package/detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/purpose/worktrees.adoc +5 -0
  610. package/detectors/planner_plan_integrity/atdd.implementation.yaml +18 -0
  611. package/detectors/planner_plan_integrity/detect.mjs +23 -0
  612. package/detectors/planner_plan_integrity/fixtures/clean/README.md +1 -0
  613. package/detectors/planner_plan_integrity/fixtures/dirty/plan/broken.yaml +1 -0
  614. package/detectors/planner_schema_validation/atdd.implementation.yaml +20 -0
  615. package/detectors/planner_schema_validation/detect.mjs +9 -0
  616. package/detectors/planner_schema_validation/fixtures/clean/contracts/_contracts.yaml +6 -0
  617. package/detectors/planner_schema_validation/fixtures/clean/contracts/orders/placed.schema.json +4 -0
  618. package/detectors/planner_schema_validation/fixtures/clean/plan/_themes.yaml +3 -0
  619. package/detectors/planner_schema_validation/fixtures/clean/plan/_trains/orders.yaml +11 -0
  620. package/detectors/planner_schema_validation/fixtures/clean/plan/orders/_orders.yaml +16 -0
  621. package/detectors/planner_schema_validation/fixtures/dirty/contracts/_contracts.yaml +3 -0
  622. package/detectors/planner_schema_validation/fixtures/dirty/plan/_themes.yaml +2 -0
  623. package/detectors/planner_schema_validation/fixtures/dirty/plan/_trains/orders.yaml +11 -0
  624. package/detectors/planner_static_validators/atdd.implementation.yaml +36 -0
  625. package/detectors/planner_static_validators/detect.mjs +9 -0
  626. package/detectors/planner_static_validators/fixtures/clean/contracts/_contracts.yaml +6 -0
  627. package/detectors/planner_static_validators/fixtures/clean/contracts/orders/placed.schema.json +4 -0
  628. package/detectors/planner_static_validators/fixtures/clean/plan/_themes.yaml +3 -0
  629. package/detectors/planner_static_validators/fixtures/clean/plan/orders/E001.yaml +10 -0
  630. package/detectors/planner_static_validators/fixtures/clean/plan/orders/_orders.yaml +19 -0
  631. package/detectors/planner_static_validators/fixtures/clean/plan/orders/features/place-order.yaml +4 -0
  632. package/detectors/planner_static_validators/fixtures/dirty/plan/_journeys/broken.yaml +22 -0
  633. package/detectors/planner_static_validators/fixtures/dirty/plan/_themes.yaml +3 -0
  634. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/_interlockings/journey-a.yaml +4 -0
  635. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/journey-a.yaml +7 -0
  636. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/probe/legacy.yaml +3 -0
  637. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains/probe/orphan.yaml +3 -0
  638. package/detectors/planner_static_validators/fixtures/dirty/plan/_trains.yaml +5 -0
  639. package/detectors/planner_static_validators/fixtures/dirty/plan/also_dup/_also_dup.yaml +15 -0
  640. package/detectors/planner_static_validators/fixtures/dirty/plan/dup/E001.yaml +3 -0
  641. package/detectors/planner_static_validators/fixtures/dirty/plan/dup/_dup.yaml +27 -0
  642. package/detectors/planner_static_validators/fixtures/dirty/plan/dup/features/bad.yaml +2 -0
  643. package/lib/imports.mjs +83 -0
  644. package/lib/scan.mjs +246 -0
  645. package/package.json +35 -0
  646. package/planner-nodes/ENFORCEMENT_SCOPE.yaml +117 -0
  647. package/planner-nodes/nodes/planner.acceptance.abstract-fields-required.convention.yaml +44 -0
  648. package/planner-nodes/nodes/planner.acceptance.authoring-guidelines.convention.yaml +29 -0
  649. package/planner-nodes/nodes/planner.acceptance.boundary-kind-vocabulary.convention.yaml +38 -0
  650. package/planner-nodes/nodes/planner.acceptance.execution-kind.convention.yaml +30 -0
  651. package/planner-nodes/nodes/planner.acceptance.extraction-no-inference.convention.yaml +23 -0
  652. package/planner-nodes/nodes/planner.acceptance.generator-prompts.convention.yaml +34 -0
  653. package/planner-nodes/nodes/planner.acceptance.given-when-then-structure.convention.yaml +53 -0
  654. package/planner-nodes/nodes/planner.acceptance.harness-vocabulary.convention.yaml +99 -0
  655. package/planner-nodes/nodes/planner.acceptance.harness.convention.yaml +36 -0
  656. package/planner-nodes/nodes/planner.acceptance.hermetic-fake-contract.convention.yaml +35 -0
  657. package/planner-nodes/nodes/planner.acceptance.id-pattern.convention.yaml +34 -0
  658. package/planner-nodes/nodes/planner.acceptance.max-per-wmbt.convention.yaml +29 -0
  659. package/planner-nodes/nodes/planner.acceptance.plane-keywords.convention.yaml +87 -0
  660. package/planner-nodes/nodes/planner.acceptance.route-construction.convention.yaml +55 -0
  661. package/planner-nodes/nodes/planner.acceptance.signal-telemetry-naming.convention.yaml +61 -0
  662. package/planner-nodes/nodes/planner.acceptance.urn-generation.convention.yaml +39 -0
  663. package/planner-nodes/nodes/planner.acceptance.well-formed.convention.yaml +57 -0
  664. package/planner-nodes/nodes/planner.appendix.llm-guidelines.convention.yaml +81 -0
  665. package/planner-nodes/nodes/planner.appendix.naming-pattern.convention.yaml +45 -0
  666. package/planner-nodes/nodes/planner.appendix.storage.convention.yaml +44 -0
  667. package/planner-nodes/nodes/planner.appendix.structure.convention.yaml +17 -0
  668. package/planner-nodes/nodes/planner.appendix.types.convention.yaml +123 -0
  669. package/planner-nodes/nodes/planner.artifact-naming.anti-patterns.convention.yaml +31 -0
  670. package/planner-nodes/nodes/planner.artifact-naming.cardinality-from-aspect.convention.yaml +32 -0
  671. package/planner-nodes/nodes/planner.artifact-naming.colon-for-hierarchy.convention.yaml +25 -0
  672. package/planner-nodes/nodes/planner.artifact-naming.contract-file-mapping.convention.yaml +26 -0
  673. package/planner-nodes/nodes/planner.artifact-naming.depth-guidelines.convention.yaml +27 -0
  674. package/planner-nodes/nodes/planner.artifact-naming.dot-for-variant.convention.yaml +25 -0
  675. package/planner-nodes/nodes/planner.artifact-naming.logical-physical-mapping.convention.yaml +36 -0
  676. package/planner-nodes/nodes/planner.artifact-naming.migration-guide.convention.yaml +29 -0
  677. package/planner-nodes/nodes/planner.artifact-naming.naming-pattern.convention.yaml +44 -0
  678. package/planner-nodes/nodes/planner.artifact-naming.path-mirrors-identity.convention.yaml +40 -0
  679. package/planner-nodes/nodes/planner.artifact-naming.planner-artifacts-use-stable.convention.yaml +28 -0
  680. package/planner-nodes/nodes/planner.artifact-naming.pluralization.convention.yaml +27 -0
  681. package/planner-nodes/nodes/planner.artifact-naming.schema-identifier.convention.yaml +31 -0
  682. package/planner-nodes/nodes/planner.artifact-naming.separator-semantics.convention.yaml +42 -0
  683. package/planner-nodes/nodes/planner.artifact-naming.theme-first-identity.convention.yaml +39 -0
  684. package/planner-nodes/nodes/planner.artifact-naming.urn-structure.convention.yaml +26 -0
  685. package/planner-nodes/nodes/planner.artifact-naming.validation-rules.convention.yaml +33 -0
  686. package/planner-nodes/nodes/planner.artifact-naming.verb-object-corpus-drift.convention.yaml +49 -0
  687. package/planner-nodes/nodes/planner.artifact.definition.convention.yaml +30 -0
  688. package/planner-nodes/nodes/planner.component.artifact-derivation.convention.yaml +139 -0
  689. package/planner-nodes/nodes/planner.component.business-focus.convention.yaml +65 -0
  690. package/planner-nodes/nodes/planner.component.count-limit.convention.yaml +64 -0
  691. package/planner-nodes/nodes/planner.component.derivation.convention.yaml +117 -0
  692. package/planner-nodes/nodes/planner.component.io-alignment.convention.yaml +65 -0
  693. package/planner-nodes/nodes/planner.component.layer-assignment.convention.yaml +83 -0
  694. package/planner-nodes/nodes/planner.component.layer-consistency.convention.yaml +91 -0
  695. package/planner-nodes/nodes/planner.component.method-limit.convention.yaml +35 -0
  696. package/planner-nodes/nodes/planner.component.structure.convention.yaml +77 -0
  697. package/planner-nodes/nodes/planner.component.type-catalog.convention.yaml +436 -0
  698. package/planner-nodes/nodes/planner.component.urn.convention.yaml +86 -0
  699. package/planner-nodes/nodes/planner.contract.registry-coherence.convention.yaml +36 -0
  700. package/planner-nodes/nodes/planner.convention.remedy-must-be-followable.convention.yaml +92 -0
  701. package/planner-nodes/nodes/planner.coverage.bidirectional-coverage-between-trains.convention.yaml +33 -0
  702. package/planner-nodes/nodes/planner.coverage.bidirectional-coverage-between-wagons.convention.yaml +33 -0
  703. package/planner-nodes/nodes/planner.coverage.coverage-graph.convention.yaml +31 -0
  704. package/planner-nodes/nodes/planner.coverage.every-wmbt-must-be.convention.yaml +29 -0
  705. package/planner-nodes/nodes/planner.coverage.every-wmbt-must-have.convention.yaml +33 -0
  706. package/planner-nodes/nodes/planner.coverage.exception-handling.convention.yaml +32 -0
  707. package/planner-nodes/nodes/planner.criteria.defaults.convention.yaml +30 -0
  708. package/planner-nodes/nodes/planner.criteria.harness-templates.convention.yaml +159 -0
  709. package/planner-nodes/nodes/planner.criteria.metric-mapping.convention.yaml +136 -0
  710. package/planner-nodes/nodes/planner.criteria.plane-keywords.convention.yaml +53 -0
  711. package/planner-nodes/nodes/planner.criteria.sequence-routing.convention.yaml +26 -0
  712. package/planner-nodes/nodes/planner.criteria.shape.convention.yaml +27 -0
  713. package/planner-nodes/nodes/planner.decomposition.canonical-steps.convention.yaml +14 -0
  714. package/planner-nodes/nodes/planner.decomposition.document-trouble-obligation.convention.yaml +12 -0
  715. package/planner-nodes/nodes/planner.decomposition.domain-vs-technology.convention.yaml +13 -0
  716. package/planner-nodes/nodes/planner.decomposition.jtbd-vs-odi-grammar.convention.yaml +18 -0
  717. package/planner-nodes/nodes/planner.decomposition.keep-pivot-kill.convention.yaml +23 -0
  718. package/planner-nodes/nodes/planner.decomposition.local-scope.convention.yaml +15 -0
  719. package/planner-nodes/nodes/planner.decomposition.natural-language-normalization.convention.yaml +12 -0
  720. package/planner-nodes/nodes/planner.decomposition.train-journey.convention.yaml +13 -0
  721. package/planner-nodes/nodes/planner.decomposition.wagon-rationale.convention.yaml +12 -0
  722. package/planner-nodes/nodes/planner.definition.anchor-required.convention.yaml +34 -0
  723. package/planner-nodes/nodes/planner.feature.artifact-seeded-naming.convention.yaml +30 -0
  724. package/planner-nodes/nodes/planner.feature.definition.convention.yaml +27 -0
  725. package/planner-nodes/nodes/planner.feature.estimation.convention.yaml +29 -0
  726. package/planner-nodes/nodes/planner.feature.feedback-loop-close-the-loop.convention.yaml +33 -0
  727. package/planner-nodes/nodes/planner.feature.feedback-loop-kind.convention.yaml +30 -0
  728. package/planner-nodes/nodes/planner.feature.feedback-loop-suppression.convention.yaml +23 -0
  729. package/planner-nodes/nodes/planner.feature.footprint-scoring.convention.yaml +119 -0
  730. package/planner-nodes/nodes/planner.feature.grouping-strategy.convention.yaml +37 -0
  731. package/planner-nodes/nodes/planner.feature.hard-limits.convention.yaml +29 -0
  732. package/planner-nodes/nodes/planner.feature.name-is-verb-object.convention.yaml +40 -0
  733. package/planner-nodes/nodes/planner.feature.shape.convention.yaml +27 -0
  734. package/planner-nodes/nodes/planner.feature.size-max-rule.convention.yaml +41 -0
  735. package/planner-nodes/nodes/planner.feature.urn-naming.convention.yaml +29 -0
  736. package/planner-nodes/nodes/planner.feature.validation-rules.convention.yaml +28 -0
  737. package/planner-nodes/nodes/planner.feature.verb-selection-by-artifact-type.convention.yaml +264 -0
  738. package/planner-nodes/nodes/planner.feature.wagon-link.convention.yaml +27 -0
  739. package/planner-nodes/nodes/planner.interface.api-mapping.convention.yaml +70 -0
  740. package/planner-nodes/nodes/planner.interface.artifact-transformation.convention.yaml +103 -0
  741. package/planner-nodes/nodes/planner.interface.contract-urn.convention.yaml +119 -0
  742. package/planner-nodes/nodes/planner.interface.naming-patterns.convention.yaml +73 -0
  743. package/planner-nodes/nodes/planner.interface.orphan-detection.convention.yaml +46 -0
  744. package/planner-nodes/nodes/planner.interface.ownership-rules.convention.yaml +54 -0
  745. package/planner-nodes/nodes/planner.interface.structure-rules.convention.yaml +112 -0
  746. package/planner-nodes/nodes/planner.interface.tests-subdirectory.convention.yaml +61 -0
  747. package/planner-nodes/nodes/planner.interlocking.definition.convention.yaml +36 -0
  748. package/planner-nodes/nodes/planner.interlocking.registry-mirrors-document.convention.yaml +38 -0
  749. package/planner-nodes/nodes/planner.issue-body.dependency-entries-must-be-classified.convention.yaml +21 -0
  750. package/planner-nodes/nodes/planner.issue-body.graph-context-required.convention.yaml +21 -0
  751. package/planner-nodes/nodes/planner.journey.continuation-closure.convention.yaml +51 -0
  752. package/planner-nodes/nodes/planner.journey.definition.convention.yaml +39 -0
  753. package/planner-nodes/nodes/planner.plan.confirm-before-author.convention.yaml +28 -0
  754. package/planner-nodes/nodes/planner.plan.confirm-binds-an-issue.convention.yaml +39 -0
  755. package/planner-nodes/nodes/planner.plan.confirm-requires-interlocking-sanity.convention.yaml +30 -0
  756. package/planner-nodes/nodes/planner.plan.granularity-completeness.convention.yaml +38 -0
  757. package/planner-nodes/nodes/planner.plan.session-lifecycle.convention.yaml +23 -0
  758. package/planner-nodes/nodes/planner.plan.spec-is-schema-valid.convention.yaml +61 -0
  759. package/planner-nodes/nodes/planner.relationship.no-orphan-nodes.convention.yaml +32 -0
  760. package/planner-nodes/nodes/planner.smoke.feedback-loop-close-the-loop.convention.yaml +39 -0
  761. package/planner-nodes/nodes/planner.smoke.synthetic-fixture-bypass.convention.yaml +44 -0
  762. package/planner-nodes/nodes/planner.steps.architecture-routing.convention.yaml +109 -0
  763. package/planner-nodes/nodes/planner.steps.jtbd-taxonomy.convention.yaml +227 -0
  764. package/planner-nodes/nodes/planner.steps.linguistic-patterns.convention.yaml +81 -0
  765. package/planner-nodes/nodes/planner.steps.sequence.convention.yaml +17 -0
  766. package/planner-nodes/nodes/planner.subject.invariants.convention.yaml +34 -0
  767. package/planner-nodes/nodes/planner.theme.definition.convention.yaml +23 -0
  768. package/planner-nodes/nodes/planner.theme.must-be-canonical.convention.yaml +38 -0
  769. package/planner-nodes/nodes/planner.theme.theme-zero-mandatory.convention.yaml +39 -0
  770. package/planner-nodes/nodes/planner.theme.urn-namespace-matches.convention.yaml +34 -0
  771. package/planner-nodes/nodes/planner.train.acceptance-commit-failures-covered.convention.yaml +10 -0
  772. package/planner-nodes/nodes/planner.train.acceptances.convention.yaml +85 -0
  773. package/planner-nodes/nodes/planner.train.artifact-flow.convention.yaml +31 -0
  774. package/planner-nodes/nodes/planner.train.categories.convention.yaml +34 -0
  775. package/planner-nodes/nodes/planner.train.definition.convention.yaml +34 -0
  776. package/planner-nodes/nodes/planner.train.dependencies.convention.yaml +28 -0
  777. package/planner-nodes/nodes/planner.train.dispatch-composite-key-exceptional.convention.yaml +17 -0
  778. package/planner-nodes/nodes/planner.train.dispatch-map-is-registry.convention.yaml +17 -0
  779. package/planner-nodes/nodes/planner.train.family-matches-terminal-contract.convention.yaml +17 -0
  780. package/planner-nodes/nodes/planner.train.family.convention.yaml +17 -0
  781. package/planner-nodes/nodes/planner.train.initial-cargo-inputs-declared.convention.yaml +10 -0
  782. package/planner-nodes/nodes/planner.train.interlocking-does-not-carry-cargo.convention.yaml +28 -0
  783. package/planner-nodes/nodes/planner.train.interlocking-entrypoint-shape.convention.yaml +30 -0
  784. package/planner-nodes/nodes/planner.train.interlocking-fragment-acceptance-binding.convention.yaml +30 -0
  785. package/planner-nodes/nodes/planner.train.interlocking-guard-coverage.convention.yaml +29 -0
  786. package/planner-nodes/nodes/planner.train.interlocking-guard-grammar.convention.yaml +31 -0
  787. package/planner-nodes/nodes/planner.train.interlocking-home.convention.yaml +29 -0
  788. package/planner-nodes/nodes/planner.train.interlocking-message-payload-typed.convention.yaml +28 -0
  789. package/planner-nodes/nodes/planner.train.interlocking-payload-contract-body-required.convention.yaml +28 -0
  790. package/planner-nodes/nodes/planner.train.interlocking-payload-contract-registered.convention.yaml +31 -0
  791. package/planner-nodes/nodes/planner.train.interlocking-projection-equivalence.convention.yaml +32 -0
  792. package/planner-nodes/nodes/planner.train.interlocking-route-category-matches-train-id.convention.yaml +32 -0
  793. package/planner-nodes/nodes/planner.train.interlocking-route-resolution-deterministic.convention.yaml +30 -0
  794. package/planner-nodes/nodes/planner.train.interlocking-structural-residual-explicit.convention.yaml +30 -0
  795. package/planner-nodes/nodes/planner.train.interlocking-wmbt-surface-or-residual.convention.yaml +30 -0
  796. package/planner-nodes/nodes/planner.train.linearity.convention.yaml +28 -0
  797. package/planner-nodes/nodes/planner.train.naming.convention.yaml +26 -0
  798. package/planner-nodes/nodes/planner.train.participants.convention.yaml +27 -0
  799. package/planner-nodes/nodes/planner.train.production-implementation.convention.yaml +24 -0
  800. package/planner-nodes/nodes/planner.train.registry-coherence.convention.yaml +69 -0
  801. package/planner-nodes/nodes/planner.train.registry.convention.yaml +39 -0
  802. package/planner-nodes/nodes/planner.train.route-category-assessment.convention.yaml +43 -0
  803. package/planner-nodes/nodes/planner.train.route-space-admission.convention.yaml +41 -0
  804. package/planner-nodes/nodes/planner.train.scope.convention.yaml +38 -0
  805. package/planner-nodes/nodes/planner.train.sequence.convention.yaml +34 -0
  806. package/planner-nodes/nodes/planner.train.terminal-contract.convention.yaml +10 -0
  807. package/planner-nodes/nodes/planner.train.theme-alignment.convention.yaml +25 -0
  808. package/planner-nodes/nodes/planner.train.theme-orchestrator-urn.convention.yaml +27 -0
  809. package/planner-nodes/nodes/planner.train.theme-ranges.convention.yaml +28 -0
  810. package/planner-nodes/nodes/planner.train.validation-rules.convention.yaml +31 -0
  811. package/planner-nodes/nodes/planner.train.variation-strategies.convention.yaml +26 -0
  812. package/planner-nodes/nodes/planner.wagon.artifact-contracts.convention.yaml +29 -0
  813. package/planner-nodes/nodes/planner.wagon.complexity-model.convention.yaml +33 -0
  814. package/planner-nodes/nodes/planner.wagon.coupling-complexity.convention.yaml +32 -0
  815. package/planner-nodes/nodes/planner.wagon.definition.convention.yaml +30 -0
  816. package/planner-nodes/nodes/planner.wagon.features-format.convention.yaml +28 -0
  817. package/planner-nodes/nodes/planner.wagon.features.convention.yaml +27 -0
  818. package/planner-nodes/nodes/planner.wagon.logical-vs-filesystem-naming.convention.yaml +34 -0
  819. package/planner-nodes/nodes/planner.wagon.name-is-verb-object.convention.yaml +39 -0
  820. package/planner-nodes/nodes/planner.wagon.no-consume-cycle.convention.yaml +30 -0
  821. package/planner-nodes/nodes/planner.wagon.produce-consume-artifacts.convention.yaml +46 -0
  822. package/planner-nodes/nodes/planner.wagon.refinement-extraction.convention.yaml +49 -0
  823. package/planner-nodes/nodes/planner.wagon.semantic-coherence.convention.yaml +30 -0
  824. package/planner-nodes/nodes/planner.wagon.separability.convention.yaml +33 -0
  825. package/planner-nodes/nodes/planner.wagon.slug-dirname-conversion.convention.yaml +26 -0
  826. package/planner-nodes/nodes/planner.wagon.telemetry-filesystem.convention.yaml +52 -0
  827. package/planner-nodes/nodes/planner.wagon.urn-naming.convention.yaml +28 -0
  828. package/planner-nodes/nodes/planner.wagon.urn.convention.yaml +29 -0
  829. package/planner-nodes/nodes/planner.wmbt.context-clarifier.convention.yaml +24 -0
  830. package/planner-nodes/nodes/planner.wmbt.definition.convention.yaml +29 -0
  831. package/planner-nodes/nodes/planner.wmbt.dimension-selection.convention.yaml +37 -0
  832. package/planner-nodes/nodes/planner.wmbt.direction-selection.convention.yaml +41 -0
  833. package/planner-nodes/nodes/planner.wmbt.filename-pattern.convention.yaml +27 -0
  834. package/planner-nodes/nodes/planner.wmbt.lens-selection.convention.yaml +44 -0
  835. package/planner-nodes/nodes/planner.wmbt.must-have-smoke-acceptance.convention.yaml +55 -0
  836. package/planner-nodes/nodes/planner.wmbt.object-of-control.convention.yaml +26 -0
  837. package/planner-nodes/nodes/planner.wmbt.shape.convention.yaml +29 -0
  838. package/planner-nodes/nodes/planner.wmbt.splitting-rules.convention.yaml +37 -0
  839. package/planner-nodes/nodes/planner.wmbt.statement-template.convention.yaml +23 -0
  840. package/planner-nodes/nodes/planner.wmbt.step-code-vocabulary.convention.yaml +31 -0
  841. package/planner-nodes/nodes/planner.wmbt.urn-naming.convention.yaml +31 -0
  842. package/planner-schemas/acceptance.schema.json +396 -0
  843. package/planner-schemas/appendix.schema.json +78 -0
  844. package/planner-schemas/author/convention-node.schema.json +134 -0
  845. package/planner-schemas/author/gate.schema.json +36 -0
  846. package/planner-schemas/author/issue.schema.json +72 -0
  847. package/planner-schemas/author/relationship.schema.json +19 -0
  848. package/planner-schemas/author/scope.schema.json +28 -0
  849. package/planner-schemas/binding-lock.schema.json +38 -0
  850. package/planner-schemas/component.schema.json +114 -0
  851. package/planner-schemas/contract-registry.schema.json +47 -0
  852. package/planner-schemas/feature.schema.json +208 -0
  853. package/planner-schemas/journey.schema.json +225 -0
  854. package/planner-schemas/registry-index.schema.json +54 -0
  855. package/planner-schemas/substrate-lock.schema.json +41 -0
  856. package/planner-schemas/substrate.schema.json +38 -0
  857. package/planner-schemas/theme-registry.schema.json +28 -0
  858. package/planner-schemas/train-interlocking-registry.schema.json +49 -0
  859. package/planner-schemas/train-interlocking.schema.json +459 -0
  860. package/planner-schemas/train.schema.json +361 -0
  861. package/planner-schemas/wagon.schema.json +283 -0
  862. package/planner-schemas/wmbt.schema.json +68 -0
  863. package/src/ci.ts +9 -0
  864. package/src/cli.ts +91 -0
  865. package/src/docs-capability.ts +156 -0
  866. package/src/enforce.ts +103 -0
  867. package/src/hooks.ts +48 -0
  868. package/src/index.ts +13 -0
  869. package/src/planner-kernel.ts +112 -0
  870. package/src/planner-schema-validator.ts +101 -0
  871. package/src/planner-validators.ts +288 -0
  872. package/src/register.ts +8 -0
  873. package/src/release.ts +9 -0
  874. package/src/setup.ts +15 -0
  875. package/templates/github/atdd-bun-release.yml +16 -0
  876. package/templates/github/atdd-bun.yml +26 -0
@@ -0,0 +1,31 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-payload-contract-registered
3
+ kind: rule
4
+ status: active
5
+ name: Interlocking payload contract registered
6
+ statement: A payload contract identity referenced by an interlocking message must
7
+ resolve to an authored/registered contract in the contracts registry, not merely
8
+ a file that glob-matches.
9
+ terms:
10
+ - term_id: registered_contract
11
+ text: a payload contract identity must be a member of the authored contracts
12
+ registry (contracts/_contracts.yaml), the single source of truth for
13
+ identity -> path -> theme -> producers -> consumers (#1330 / #1332)
14
+ implementation:
15
+ type: validator
16
+ ref: test_sequence_diagram_sanity::test_payload_contracts_are_registered
17
+ metadata:
18
+ severity: 3
19
+ disposition: strict
20
+ validation:
21
+ family: resolution
22
+ template: artifact_reference_resolution
23
+ variant: planner_train_interlocking_payload_contract_registered
24
+ phase: CONFIRM
25
+ enforcement: confirm-blocking
26
+ subject_kind: interlocking
27
+ failure_evidence:
28
+ - interlocking_id
29
+ - message_id
30
+ - contract
31
+ - registry_path
@@ -0,0 +1,32 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-projection-equivalence
3
+ kind: constraint
4
+ status: active
5
+ name: Interlocking projection equivalence
6
+ statement: A referenced train sequence must equal the interlocking route projection
7
+ by step, intent, from, to, and artifact.
8
+ terms:
9
+ - term_id: projection_equivalence
10
+ text: the referenced train sequence equals the route projection by step, intent,
11
+ from, to, and artifact
12
+ implementation:
13
+ type: validator
14
+ ref: test_sequence_diagram_sanity::test_train_sequence_matches_interlocking_projection
15
+ metadata:
16
+ severity: 4
17
+ disposition: strict
18
+ validation:
19
+ family: coherence
20
+ template: resolved_fact_agreement
21
+ variant: planner_train_interlocking_projection_equivalence
22
+ phase: CONFIRM
23
+ enforcement: confirm-blocking
24
+ subject_kind: interlocking
25
+ failure_evidence:
26
+ - interlocking_id
27
+ - route_id
28
+ - train_id
29
+ - step
30
+ - field
31
+ - expected
32
+ - actual
@@ -0,0 +1,32 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-route-category-matches-train-id
3
+ kind: constraint
4
+ status: active
5
+ name: Interlocking route category matches train id
6
+ statement: Every interlocking route declares nominal/error/alternate/exception and
7
+ that category must equal the `category` field of the target train it selects
8
+ (issue #1421 — category is a validated field, not an identity digit).
9
+ terms:
10
+ - term_id: category_field_agreement
11
+ text: route.category must equal the target train's `category` field (nominal/error/alternate/exception);
12
+ the legacy identity digit is retired and no longer parsed
13
+ implementation:
14
+ type: validator
15
+ ref: test_sequence_diagram_sanity::test_interlocking_route_category_matches_train_id
16
+ metadata:
17
+ severity: 4
18
+ disposition: strict
19
+ validation:
20
+ family: coherence
21
+ template: resolved_fact_agreement
22
+ variant: planner_train_interlocking_route_category_matches_train_id
23
+ phase: CONFIRM
24
+ enforcement: confirm-blocking
25
+ subject_kind: interlocking
26
+ failure_evidence:
27
+ - interlocking_id
28
+ - route_id
29
+ - category
30
+ - train_id
31
+ - train_category
32
+ - train_path
@@ -0,0 +1,30 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-route-resolution-deterministic
3
+ kind: constraint
4
+ status: active
5
+ name: Interlocking route resolution deterministic
6
+ statement: Route resolution strategy is explicit and deterministic; ambiguous matching
7
+ routes fail closed unless unique priority is declared.
8
+ terms:
9
+ - term_id: route_resolution
10
+ text: allowed strategies are fail_on_multiple_match, or first_priority with unique
11
+ integer priorities
12
+ implementation:
13
+ type: validator
14
+ ref: test_sequence_diagram_sanity::test_interlocking_route_resolution_strategy_declared
15
+ metadata:
16
+ severity: 4
17
+ disposition: strict
18
+ validation:
19
+ family: coherence
20
+ template: resolved_fact_agreement
21
+ variant: planner_train_interlocking_route_resolution_deterministic
22
+ phase: CONFIRM
23
+ enforcement: confirm-blocking
24
+ subject_kind: interlocking
25
+ failure_evidence:
26
+ - interlocking_id
27
+ - strategy
28
+ - route_ids
29
+ - priorities
30
+ - reason
@@ -0,0 +1,30 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-structural-residual-explicit
3
+ kind: rule
4
+ status: active
5
+ name: Interlocking structural residual explicit
6
+ statement: Structural residuals must be explicit, narrow, and bound to an acceptance
7
+ and validator.
8
+ terms:
9
+ - term_id: residual_explicit
10
+ text: structural residuals are explicit and narrow and bound to an acceptance and
11
+ a validator
12
+ implementation:
13
+ type: validator
14
+ ref: test_sequence_diagram_sanity::test_structural_residuals_have_acceptance_and_validator
15
+ metadata:
16
+ severity: 3
17
+ disposition: strict
18
+ validation:
19
+ family: presence
20
+ template: conditional_requirement
21
+ variant: planner_train_interlocking_structural_residual_explicit
22
+ phase: CONFIRM
23
+ enforcement: confirm-blocking
24
+ subject_kind: interlocking
25
+ failure_evidence:
26
+ - interlocking_id
27
+ - residual_id
28
+ - acceptance_ref
29
+ - validator_ref
30
+ - reason
@@ -0,0 +1,30 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.interlocking-wmbt-surface-or-residual
3
+ kind: constraint
4
+ status: active
5
+ name: Interlocking WMBT surface or residual
6
+ statement: Every WMBT obligation surfaces as message, self-message, guard, fragment,
7
+ invariant, or explicit structural residual.
8
+ terms:
9
+ - term_id: wmbt_surface
10
+ text: every WMBT obligation surfaces as a message/self-message/guard/fragment/invariant
11
+ or an explicit structural residual
12
+ implementation:
13
+ type: validator
14
+ ref: test_sequence_diagram_sanity::test_every_wmbt_surfaces_or_is_structural_residual
15
+ metadata:
16
+ severity: 4
17
+ disposition: strict
18
+ validation:
19
+ family: coverage
20
+ template: projection_covers_source
21
+ variant: planner_train_interlocking_wmbt_surface_or_residual
22
+ phase: CONFIRM
23
+ enforcement: confirm-blocking
24
+ subject_kind: interlocking
25
+ failure_evidence:
26
+ - interlocking_id
27
+ - wmbt_ref
28
+ - surface_kind
29
+ - residual_id
30
+ - coverage_status
@@ -0,0 +1,28 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.linearity
3
+ kind: constraint
4
+ status: active
5
+ name: Trains are strictly linear
6
+ statement: 'Trains are strictly linear: sequences contain steps only — no loops, routes, or branching;
7
+ new paths MUST become new trains.'
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: urn_naming.linearity_rule
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ normative_text: 'Enforcement: loop and route sequence elements are forbidden; sequential step numbering
15
+ must have no gaps; each step has exactly one from and one to.'
16
+ constraints:
17
+ - loop and route sequence elements are forbidden
18
+ - Sequential step numbering must have no gaps
19
+ - Each step has exactly one from and one to
20
+ parity:
21
+ source_fragments_preserved: true
22
+ examples_preserved: false
23
+ implementation_preserved: false
24
+ fix_hint_preserved: false
25
+ reviewed_at: '2026-06-16'
26
+ terms:
27
+ - term_id: linearity
28
+ text: the no-loops/no-routes/no-branching rule for train sequences.
@@ -0,0 +1,26 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.naming
3
+ kind: rule
4
+ status: active
5
+ name: Train naming
6
+ statement: train_id is the typed identity train:{subject}:{descriptive-name}, with
7
+ kebab-case subject and descriptive name; title is Title Case; files are flat at
8
+ plan/_trains/{train_id}.yaml.
9
+ source:
10
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
11
+ legacy_section: naming
12
+ legacy_sha: 825602729f11a3a4
13
+ extraction_mode: high_fidelity
14
+ parity:
15
+ source_fragments_preserved: true
16
+ examples_preserved: true
17
+ implementation_preserved: false
18
+ fix_hint_preserved: false
19
+ reviewed_at: '2026-06-16'
20
+ terms:
21
+ - term_id: train_naming
22
+ text: train_id, title, and file naming.
23
+ values:
24
+ train_id: 'train:{subject}:{descriptive-name}, kebab-case'
25
+ title: Title Case
26
+ file: plan/_trains/{train_id}.yaml (flat)
@@ -0,0 +1,27 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.participants
3
+ kind: family
4
+ status: active
5
+ name: Train participants
6
+ statement: 'Participants are the actors in a train workflow: wagon:{id}, user:{role}, or system:{source};
7
+ each listed once.'
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: participants
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ parity:
14
+ source_fragments_preserved: true
15
+ examples_preserved: false
16
+ implementation_preserved: false
17
+ fix_hint_preserved: false
18
+ reviewed_at: '2026-06-16'
19
+ terms:
20
+ - term_id: participant_type
21
+ label: Participant types
22
+ text: type -> pattern.
23
+ values:
24
+ wagon: wagon:{wagon-id} (performs processing)
25
+ user: user:{role} (human actor)
26
+ system: system:{source} (external system/data source)
27
+ validation: ^(wagon|user|system):[a-z][a-z0-9-]*$
@@ -0,0 +1,24 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.production-implementation
3
+ kind: principle
4
+ status: active
5
+ name: Trains are production orchestration
6
+ statement: Trains are production orchestration (not test infrastructure), executed by TrainRunner under
7
+ python/trains/.
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: production_implementation
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ operational_guidance: location python/trains/; executor TrainRunner (python/trains/runner.py); implementation
15
+ patterns in atdd/coder/conventions/train.convention.yaml (SESSION-12).
16
+ parity:
17
+ source_fragments_preserved: true
18
+ examples_preserved: false
19
+ implementation_preserved: false
20
+ fix_hint_preserved: false
21
+ reviewed_at: '2026-06-16'
22
+ terms:
23
+ - term_id: train_runner
24
+ text: the production executor of a train.
@@ -0,0 +1,69 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.registry-coherence
3
+ kind: rule
4
+ status: active
5
+ name: The train registry and the documents it indexes both exist
6
+ statement: Every row in plan/_trains.yaml must name a path that is a file on disk, and
7
+ every per-train document under plan/_trains must be named by a registry row. Coherence
8
+ is bidirectional - a row naming an absent document is a dangling pointer consumers
9
+ resolve through, and a document no row names is an orphan.
10
+ terms:
11
+ - term_id: dangling_row
12
+ text: a plan/_trains.yaml entry whose path does not resolve to a file. The residue create_train
13
+ left when it wrote the registry before the document (#1942); every consumer that walks
14
+ the registry resolves through it, and test_route_space_admission dies on it with a bare
15
+ FileNotFoundError rather than reporting it.
16
+ - term_id: orphan_document
17
+ text: a per-train document under plan/_trains that no registry row names. Inert - nothing
18
+ resolves through it - and it is the residue create_train's document-before-registry
19
+ ordering deliberately leaves, so it must be reportable or that choice is unsupported.
20
+ - term_id: registry_sidecar
21
+ text: an underscore-prefixed name under plan/_trains - _aliases.yaml, the _interlockings
22
+ subtree - which is not a per-train document. The _interlockings subtree has its own
23
+ coherence rules (planner.interlocking.registry-mirrors-document,
24
+ planner.train.interlocking-home).
25
+ implementation:
26
+ type: validator
27
+ ref: test_train_registry_coherence::test_every_registry_row_resolves_and_every_document_is_registered
28
+ metadata:
29
+ severity: 3
30
+ # strict from the start: measured at authoring time, the corpus carries 21 registry
31
+ # rows and 21 per-train documents with zero violations in either direction, so there
32
+ # is no debt to ratchet down and no reason to land this advisory.
33
+ disposition: strict
34
+ introduced_in: '1942'
35
+ core_design_refs:
36
+ - afokapu/atdd#1942
37
+ - afokapu/atdd#1915
38
+ validation:
39
+ family: coherence
40
+ template: cross_artifact_existence_agreement
41
+ variant: planner_train_registry_existence
42
+ phase: CONFIRM
43
+ enforcement: confirm-blocking
44
+ subject_kind: train
45
+ failure_evidence:
46
+ - train_id
47
+ - direction
48
+ - registry_value
49
+ - document_value
50
+ notes: |
51
+ Why this is a NEW node rather than a validator hung on planner.train.registry.
52
+
53
+ planner.train.registry already claims, at disposition: strict, that "every registry
54
+ entry MUST have a corresponding spec file" - the dangling direction of this rule. It
55
+ has never been able to enforce it: its implementation.ref names the Y003 sweep's
56
+ convention variant conventions/resolution/test_train_validation, which instantiates
57
+ direct_reference_resolution and checks that a train's participant references resolve
58
+ to existing wagons. It never reads a path. The reverse-coherence binder
59
+ (coach/validators/test_rule_validator_binding.py) exempts convention-variant refs from
60
+ the bind_rule callsite requirement, so the gap drew no complaint.
61
+
62
+ Repointing that node here was the first attempt and is wrong: the Y003 guard
63
+ (validators/conventions/tests/test_y003_sweep_coverage_guards.py, SWEPT_RULE_TO_VARIANT)
64
+ deliberately pins planner.train.registry to a conventions/ variant, so the ref is an
65
+ architectural decision owned by the sweep, not an oversight to undo from here.
66
+
67
+ So the claim is enforced under its own id, and closing the gap on
68
+ planner.train.registry - by giving its swept variant a real path-existence check, or by
69
+ folding that node into this one - stays with the conventions-sweep owners.
@@ -0,0 +1,39 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.registry
3
+ kind: rule
4
+ status: active
5
+ name: Train registry (two-file pattern)
6
+ statement: 'Each train needs two files: a registry entry in plan/_trains.yaml and a full spec at plan/_trains/{train_id}.yaml;
7
+ every registry entry MUST have a corresponding spec file.'
8
+ implementation:
9
+ type: validator
10
+ ref: conventions/resolution/test_train_validation::test_fault_injection_and_legacy_parity
11
+ source:
12
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
13
+ legacy_section: registry
14
+ legacy_sha: 825602729f11a3a4
15
+ extraction_mode: high_fidelity
16
+ content:
17
+ normative_text: Registry is theme-category-grouped (nominal/error/alternate/exception). Validator SPEC-TRAIN-VAL-0003;
18
+ planner phase gate fails if a spec file is missing.
19
+ examples:
20
+ - 'registry: plan/_trains.yaml (train_id, description, path, wagons summary)'
21
+ - 'spec: plan/_trains/{train_id}.yaml (full workflow)'
22
+ metadata:
23
+ severity: 3
24
+ # strict: the planner phase gate fails when a registry entry has no spec file
25
+ # (content.normative_text / SPEC-TRAIN-VAL-0003). Backfilled to complete this
26
+ # single-node authoring so the disposition gate manages it (#1225).
27
+ disposition: strict
28
+ parity:
29
+ source_fragments_preserved: true
30
+ examples_preserved: true
31
+ implementation_preserved: true
32
+ fix_hint_preserved: false
33
+ reviewed_at: '2026-06-16'
34
+ terms:
35
+ - term_id: two_file_pattern
36
+ text: registry entry + spec file per train.
37
+ values:
38
+ registry: plan/_trains.yaml
39
+ spec: plan/_trains/{train_id}.yaml
@@ -0,0 +1,43 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.route-category-assessment
3
+ kind: constraint
4
+ status: active
5
+ name: Route category assessment
6
+ statement: 'Every interlocking must assess each route category: nominal requires one
7
+ or more routes, and alternate/error/exception each require routes or a typed not-applicable
8
+ basis from a closed vocabulary (issue #1554).'
9
+ rationale: A check satisfied by 'at least one non-nominal route' is gamed by adding
10
+ a token alternate while error and exception behaviour go unwritten. Assessing every
11
+ category individually forces the author to state what happens on each, and a typed
12
+ not-applicable keeps the escape from eroding into copy-pasted prose.
13
+ terms:
14
+ - term_id: category_space
15
+ text: the closed set nominal, alternate, error, exception; no category may be silently
16
+ omitted
17
+ - term_id: nominal_requires_routes
18
+ text: nominal is the executed path and can never be typed not-applicable
19
+ - term_id: typed_not_applicable
20
+ text: alternate, error and exception may be discharged by a basis drawn from a closed
21
+ vocabulary, never by free prose
22
+ - term_id: no_contradiction
23
+ text: declaring a not-applicable basis for a category that already carries routes
24
+ is a contradiction, so stale assessments cannot survive
25
+ implementation:
26
+ type: validator
27
+ ref: test_route_space_admission::test_every_category_is_assessed_or_typed_not_applicable
28
+ metadata:
29
+ severity: 4
30
+ disposition: strict
31
+ validation:
32
+ family: presence
33
+ template: conditional_requirement
34
+ variant: planner_train_route_category_assessment
35
+ phase: CONFIRM
36
+ enforcement: confirm-blocking
37
+ subject_kind: interlocking
38
+ failure_evidence:
39
+ - interlocking_id
40
+ - category
41
+ - route_ids
42
+ - not_applicable_basis
43
+ - assessment_status
@@ -0,0 +1,41 @@
1
+ schema_version: 1.0.0
2
+ rule_id: planner.train.route-space-admission
3
+ kind: constraint
4
+ status: active
5
+ name: Route-space admission
6
+ statement: 'Every registered train must be targeted by exactly one registered interlocking
7
+ route, or declare a typed single-route assessment; absence of a route no longer
8
+ implies direct dispatch (issue #1554).'
9
+ rationale: Route-space was modelled as optional metadata, so a train with no route
10
+ analysis was indistinguishable from a train whose analysis concluded single-route.
11
+ Silence read as a positive assertion that analysis happened; this rule makes the
12
+ classification explicit and forces the omission to surface at planning time.
13
+ terms:
14
+ - term_id: route_targeted
15
+ text: the train is selected by exactly one route across every registered interlocking
16
+ - term_id: typed_single_route
17
+ text: the train declares route_space.classification single-route with a basis drawn
18
+ from a closed vocabulary; free prose is never a basis
19
+ - term_id: exactly_one
20
+ text: route-targeted and typed-single-route are mutually exclusive; declaring both
21
+ is a contradiction, declaring neither is an omission
22
+ implementation:
23
+ type: validator
24
+ ref: test_route_space_admission::test_every_train_is_route_targeted_or_typed_single_route
25
+ metadata:
26
+ severity: 4
27
+ disposition: strict
28
+ validation:
29
+ family: coverage
30
+ template: source_has_required_target
31
+ variant: planner_train_route_space_admission
32
+ phase: CONFIRM
33
+ enforcement: confirm-blocking
34
+ subject_kind: train
35
+ failure_evidence:
36
+ - train_id
37
+ - train_path
38
+ - route_ids
39
+ - classification
40
+ - basis
41
+ - admission_status
@@ -0,0 +1,38 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.scope
3
+ kind: rule
4
+ status: active
5
+ name: Train scope and sizing
6
+ statement: 'A train tells ONE coherent journey: 3-7 wagons (sweet spot), 2 minimum, 8-12 review, 13+ decompose;
7
+ if you can''t state the outcome in one sentence without ''and'', split it.'
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: scope
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ normative_text: 'one_journey_test: can you state the outcome in ONE sentence without ''and''?'
15
+ constraints:
16
+ - recommended 3-7 wagons
17
+ - minimum 2
18
+ - warning 8-12 (multiple journeys?)
19
+ - antipattern 13+ (decompose)
20
+ examples:
21
+ - 'good: train:decision:standard (5 wagons, one outcome)'
22
+ - 'bad: train:match:solo-match-complete (16 wagons, multiple journeys)'
23
+ parity:
24
+ source_fragments_preserved: true
25
+ examples_preserved: true
26
+ implementation_preserved: false
27
+ fix_hint_preserved: false
28
+ reviewed_at: '2026-06-16'
29
+ terms:
30
+ - term_id: decomposition_signal
31
+ text: signals a train is multiple journeys.
32
+ values:
33
+ signals:
34
+ - Outcome description contains multiple 'AND' conjunctions
35
+ - Train has both setup AND teardown (match lifecycle)
36
+ - Mix of exploratory (gesture) AND core mechanic flows
37
+ - Multiple independent feedback loops
38
+ - Participants from 3+ different themes
@@ -0,0 +1,34 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.sequence
3
+ kind: family
4
+ status: active
5
+ name: Train sequence elements
6
+ statement: A sequence is ordered workflow steps; each step transfers one artifact (step, intent, from,
7
+ to, artifact). (Loop/route elements are documented but forbidden under the linearity rule.)
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: sequence
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ normative_text: 'step required fields: step, intent, from, to, artifact. loop (name, condition, steps)
15
+ and route (name, branches) are described here but FORBIDDEN by planner.train.linearity.'
16
+ parity:
17
+ source_fragments_preserved: true
18
+ examples_preserved: true
19
+ implementation_preserved: false
20
+ fix_hint_preserved: false
21
+ reviewed_at: '2026-06-16'
22
+ terms:
23
+ - term_id: sequence_element
24
+ label: Sequence elements
25
+ text: element -> required fields.
26
+ values:
27
+ step:
28
+ - step
29
+ - intent
30
+ - from
31
+ - to
32
+ - artifact
33
+ loop: FORBIDDEN by linearity (name, condition, steps)
34
+ route: FORBIDDEN by linearity (name, branches)
@@ -0,0 +1,10 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.terminal-contract
3
+ kind: principle
4
+ status: draft
5
+ name: Train terminal contract
6
+ statement: A train's terminal step declares exactly one primary artifact. That terminal contract is the source of truth for the train's family - if it requires an Acceptance Authority commit and terminates in platform:acceptance:commit-receipt the train is delivery, otherwise it is behavior.
7
+ terms:
8
+ - term_id: terminal_contract
9
+ label: Terminal contract
10
+ text: the declared primary artifact of a train's final step; family (behavior|delivery) is derived from it, never from the train id.
@@ -0,0 +1,25 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.theme-alignment
3
+ kind: rule
4
+ status: active
5
+ name: Train theme alignment
6
+ statement: A train declares its themes explicitly; most wagons should match the primary declared theme; secondary
7
+ themes are allowed when a train spans multiple themes.
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: theme_alignment
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ examples:
15
+ - train:orders:checkout -> themes:[orders] (all wagons orders)
16
+ - train:commerce:fulfilment -> themes:[orders, inventory]
17
+ parity:
18
+ source_fragments_preserved: true
19
+ examples_preserved: true
20
+ implementation_preserved: false
21
+ fix_hint_preserved: false
22
+ reviewed_at: '2026-06-16'
23
+ terms:
24
+ - term_id: theme_alignment
25
+ text: primary theme is the first declared theme; most wagons match it.
@@ -0,0 +1,27 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.theme-orchestrator-urn
3
+ kind: rule
4
+ status: active
5
+ name: Theme orchestrator URN
6
+ statement: Theme orchestrator files (python/trains/orchestrators/{theme}.py) carry train:{theme}:{train_id}
7
+ URN lines, one per implemented train.
8
+ source:
9
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
10
+ legacy_section: urn_naming.theme_orchestrator_urn
11
+ legacy_sha: 825602729f11a3a4
12
+ extraction_mode: high_fidelity
13
+ content:
14
+ examples:
15
+ - train:mechanic:decision-standard -> python/trains/orchestrators/mechanic.py
16
+ - 'multiple # urn: lines for files implementing multiple trains'
17
+ parity:
18
+ source_fragments_preserved: true
19
+ examples_preserved: true
20
+ implementation_preserved: false
21
+ fix_hint_preserved: false
22
+ reviewed_at: '2026-06-16'
23
+ terms:
24
+ - term_id: orchestrator_urn
25
+ text: the theme-prefixed train URN on an orchestrator file.
26
+ values:
27
+ pattern: train:{theme}:{train_id}
@@ -0,0 +1,28 @@
1
+ schema_version: 1.1.0
2
+ rule_id: planner.train.theme-ranges
3
+ kind: family
4
+ status: active
5
+ name: Train theme taxonomy
6
+ statement: Each train declares one or more named themes. Themes classify the journey; they are not encoded in the train identity.
7
+ source:
8
+ legacy_path: src/atdd/planner/conventions/train.convention.yaml
9
+ legacy_section: numbering.theme_ranges + numbering.capacity
10
+ legacy_sha: 825602729f11a3a4
11
+ extraction_mode: high_fidelity
12
+ content:
13
+ normative_text: 'Themes are named metadata. Train identity remains train:{subject}:{slug}.'
14
+ parity:
15
+ source_fragments_preserved: false
16
+ examples_preserved: false
17
+ implementation_preserved: false
18
+ fix_hint_preserved: false
19
+ reviewed_at: '2026-09-22'
20
+ divergence_note: The retired numeric theme-range system is deliberately excluded from the typed-identity convention.
21
+ terms:
22
+ - term_id: theme_taxonomy
23
+ label: Themes
24
+ text: themes are repository-defined plan metadata.
25
+ values:
26
+ source: plan/_themes.yaml
27
+ reserved_zero: commons
28
+ other_values: repository-defined