@afokapu/atdd-bun 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -3
- package/conventions/coder.bun/coder.bun.complexity-cyclomatic.convention.yaml +1 -3
- package/conventions/coder.bun/coder.bun.complexity-length.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.complexity-nesting.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.dead-code-reachability.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.design-token-color.convention.yaml +1 -1
- package/conventions/coder.bun/coder.bun.design-token-hardcoded.convention.yaml +1 -1
- package/conventions/coder.bun/coder.bun.dto-mapper.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.dto-placement.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.dto-purity.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.duplication-intra-layer.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.green-header-order.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-purpose.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-runtime.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-header-tested-by.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-layer.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-marker.convention.yaml +2 -12
- package/conventions/coder.bun/coder.bun.green-urn-name-matches.convention.yaml +3 -12
- package/conventions/coder.bun/coder.bun.green-urn-pattern.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-side.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.green-urn-wagon-feature.convention.yaml +2 -11
- package/conventions/coder.bun/coder.bun.layer-naming.convention.yaml +2 -1
- package/conventions/coder.bun/coder.bun.logging-structured.convention.yaml +2 -4
- package/conventions/coder.bun/coder.bun.quality-comments.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.quality-mi.convention.yaml +1 -2
- package/conventions/coder.bun/coder.bun.responsive-breakpoints-declared.convention.yaml +31 -0
- package/conventions/coder.bun/coder.bun.responsive-no-fixed-width.convention.yaml +30 -0
- package/conventions/coder.bun/coder.bun.responsive-viewport-meta.convention.yaml +31 -0
- package/conventions/coder.bun/coder.bun.runtime-executes-the-declaration.convention.yaml +2 -18
- package/conventions/coder.bun/coder.bun.runtime-typecheck-enforced.convention.yaml +2 -15
- package/conventions/coder.htmx/coder.htmx.swap-no-inline-handler.convention.yaml +3 -3
- package/conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml +2 -2
- package/conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml +3 -2
- package/conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +2 -13
- package/conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.reference-integrity.convention.yaml +2 -12
- package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +2 -12
- package/conventions/tester.bun/tester.bun.acceptance-binding-declared.convention.yaml +2 -6
- package/conventions/tester.bun/tester.bun.acceptance-covers-tag-well-formed.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.interlocking-train-sequence-is-exercised.convention.yaml +2 -14
- package/conventions/tester.bun/tester.bun.red-behavioral-assertion.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.routing-runtime-family.convention.yaml +2 -1
- package/conventions/tester.bun/tester.bun.smoke-no-collaborator-substitution.convention.yaml +2 -7
- package/conventions/tester.bun/tester.bun.smoke-observable-assertion.convention.yaml +2 -7
- package/conventions/tester.bun/tester.bun.telemetry-emit.convention.yaml +2 -1
- package/conventions/tester.bun/tester.bun.test-carries-urn-identity.convention.yaml +2 -6
- package/conventions/tester.bun/tester.bun.test-isolation-no-live-state.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.test-no-self-skip.convention.yaml +1 -5
- package/conventions/tester.bun/tester.bun.test-phase-declared.convention.yaml +2 -6
- package/conventions/tester.htmx/tester.htmx.a11y-harness.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.covered-train-is-routed.convention.yaml +30 -0
- package/conventions/tester.htmx/tester.htmx.e2e-binds-declared-subject.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.e2e-spec-naming.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.exposed-journey-e2e-coverage.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml +2 -6
- package/conventions/tester.htmx/tester.htmx.journey-binding-header.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.journey-layer-assembly.convention.yaml +29 -0
- package/conventions/tester.htmx/tester.htmx.journey-no-acceptance-marker.convention.yaml +29 -0
- package/conventions/tester.htmx/tester.htmx.journey-urn-format.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.presentation-smoke-coverage.convention.yaml +31 -0
- package/conventions/tester.htmx/tester.htmx.responsive-harness.convention.yaml +33 -0
- package/conventions/tester.htmx/tester.htmx.responsive-journey-coverage.convention.yaml +30 -0
- package/conventions/tester.htmx/tester.htmx.swap-oob-asserts-destination-id.convention.yaml +2 -1
- package/conventions/tester.htmx/tester.htmx.train-e2e-coverage.convention.yaml +32 -0
- package/conventions/tester.htmx/tester.htmx.verb-endpoint-coverage.convention.yaml +2 -1
- package/conventions/tester.htmx/tester.htmx.visual-harness.convention.yaml +28 -0
- package/conventions/traceability/traceability.plan.executable-acceptance-has-test.convention.yaml +5 -0
- package/conventions/traceability/traceability.source.tested-by-present.convention.yaml +5 -0
- package/conventions/traceability/traceability.source.tested-by-resolves.convention.yaml +5 -0
- package/conventions/traceability/traceability.test.binding-resolves.convention.yaml +5 -0
- package/detectors/atdd_topology/atdd.implementation.yaml +13 -0
- package/detectors/atdd_topology/detect.mjs +171 -0
- package/detectors/atdd_topology/fixtures/clean/atdd-bun.yaml +2 -0
- package/detectors/atdd_topology/fixtures/clean/e2e/interlockings/checkout/nominal.routes.test.ts +4 -0
- package/detectors/atdd_topology/fixtures/clean/e2e/journeys/checkout.journey.test.ts +4 -0
- package/detectors/atdd_topology/fixtures/clean/implementation/orders/features/place-order/domain/order.ts +4 -0
- package/detectors/atdd_topology/fixtures/clean/plan/_journeys/checkout.yaml +4 -0
- package/detectors/atdd_topology/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +4 -0
- package/detectors/atdd_topology/fixtures/clean/plan/_trains/checkout.yaml +1 -0
- package/detectors/atdd_topology/fixtures/clean/plan/orders/E001.yaml +6 -0
- package/detectors/atdd_topology/fixtures/clean/plan/orders/_orders.yaml +5 -0
- package/detectors/atdd_topology/fixtures/clean/plan/orders/place-order.yaml +3 -0
- package/detectors/atdd_topology/fixtures/clean/tests/wagons/orders/features/place-order/unit/order.test.ts +4 -0
- package/detectors/atdd_topology/fixtures/dirty/plan/_journeys/checkout.yaml +3 -0
- package/detectors/atdd_topology/fixtures/dirty/plan/orders/E001.yaml +4 -0
- package/detectors/atdd_topology/fixtures/dirty/plan/orders/_orders.yaml +4 -0
- package/detectors/atdd_topology/fixtures/dirty/plan/orders/features/place-order.yaml +3 -0
- package/detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/forged.ts +2 -0
- package/detectors/atdd_topology/fixtures/dirty/src/wagons/orders/features/place-order/domain/order.ts +2 -0
- package/detectors/atdd_topology/fixtures/dirty/tests/wagons/orders/features/place-order/unit/order.test.ts +4 -0
- package/detectors/atdd_traceability_closure/detect.mjs +5 -2
- package/detectors/bun_green_traceability_detector/urn_header.mjs +2 -1
- package/detectors/bun_interlocking_binding/checks/interlocking_runtime_executes.mjs +3 -2
- package/detectors/bun_interlocking_binding/detect.mjs +6 -5
- package/detectors/bun_interlocking_coverage/_shared/interlocking.mjs +4 -3
- package/detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs +2 -2
- package/detectors/bun_interlocking_infrastructure/_shared/interlocking.mjs +2 -1
- package/detectors/bun_interlocking_infrastructure/checks/journey_runner_boundary.mjs +3 -2
- package/detectors/bun_interlocking_infrastructure/checks/journey_station_routing.mjs +2 -1
- package/detectors/bun_interlocking_infrastructure/checks/wagon_contract_honoured.mjs +3 -2
- package/detectors/bun_responsive_detector/atdd.implementation.yaml +18 -0
- package/detectors/bun_responsive_detector/checks/_map.json +5 -0
- package/detectors/bun_responsive_detector/checks/_responsive.mjs +20 -0
- package/detectors/bun_responsive_detector/checks/responsive_breakpoints_declared.mjs +21 -0
- package/detectors/bun_responsive_detector/checks/responsive_no_fixed_width.mjs +13 -0
- package/detectors/bun_responsive_detector/checks/responsive_viewport_meta.mjs +20 -0
- package/detectors/bun_responsive_detector/detect.mjs +46 -0
- package/detectors/bun_responsive_detector/fixtures/clean/public/index.html +9 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/app.css +13 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/document.ts +7 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/fragment.html +1 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/head.ts +1 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/layout.tsx +8 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/range.css +3 -0
- package/detectors/bun_responsive_detector/fixtures/clean/src/viewport-expression.tsx +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/fixed-viewport.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/no-meta.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/no-zoom.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/public/scale.html +5 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/app.css +4 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/render.ts +2 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/units.css +3 -0
- package/detectors/bun_responsive_detector/fixtures/dirty/src/wide.tsx +3 -0
- package/detectors/bun_tester_discipline_detector/checks/t_acceptance_resolves.mjs +7 -6
- package/detectors/htmx_e2e_detector/atdd.implementation.yaml +40 -0
- package/detectors/htmx_e2e_detector/checks/_e2e.mjs +98 -0
- package/detectors/htmx_e2e_detector/checks/_map.json +16 -0
- package/detectors/htmx_e2e_detector/checks/a11y_harness.mjs +21 -0
- package/detectors/htmx_e2e_detector/checks/covered_train_is_routed.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/e2e_binds_declared_subject.mjs +11 -0
- package/detectors/htmx_e2e_detector/checks/e2e_spec_naming.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/exposed_journey_e2e_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/journey_binding_header.mjs +13 -0
- package/detectors/htmx_e2e_detector/checks/journey_layer_assembly.mjs +11 -0
- package/detectors/htmx_e2e_detector/checks/journey_no_acceptance_marker.mjs +6 -0
- package/detectors/htmx_e2e_detector/checks/journey_urn_format.mjs +18 -0
- package/detectors/htmx_e2e_detector/checks/presentation_smoke_coverage.mjs +15 -0
- package/detectors/htmx_e2e_detector/checks/responsive_harness.mjs +30 -0
- package/detectors/htmx_e2e_detector/checks/responsive_journey_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/train_e2e_coverage.mjs +7 -0
- package/detectors/htmx_e2e_detector/checks/visual_harness.mjs +7 -0
- package/detectors/htmx_e2e_detector/detect.mjs +46 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-alias.a11y.e2e.ts +12 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy-inline.responsive.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.a11y.e2e.ts +12 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.responsive.e2e.ts +14 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/buy.visual.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/checkout-buy.smoke.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/crlf.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/place-order.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/reject-empty-cart.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/support/fixtures.ts +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/e2e/take-payment.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/buy.yaml +19 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_journeys/settle.yaml +14 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/checkout.yaml +21 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/payment.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/_interlockings/settlement.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/place-order.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/reject-empty-cart.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/settle-ledger.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/plan/_trains/orders/take-payment.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/playwright.config.ts +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/src/wagons/checkout/presentation/cart.tsx +3 -0
- package/detectors/htmx_e2e_detector/fixtures/clean/tests/urn-parser.test.ts +7 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/acceptance.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-id.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/bad-urn.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/both.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.a11y.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.responsive.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/buy.visual.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/covered.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/first-only.responsive.e2e.ts +13 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/ghost.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/misnamed.spec.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-binding.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-layer.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/no-urn.e2e.ts +4 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/tautology.a11y.e2e.ts +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/two-trains.e2e.ts +6 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/unrouted.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-layer.e2e.ts +5 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/e2e/wrong-urn.e2e.ts +10 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/browse.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_journeys/buy.yaml +16 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/_interlockings/checkout.yaml +21 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/covered.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/uncovered.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/plan/_trains/orders/unrouted.yaml +11 -0
- package/detectors/htmx_e2e_detector/fixtures/dirty/src/wagons/billing/presentation/invoice.tsx +3 -0
- package/integrity.json +208 -79
- package/lib/frontend.mjs +17 -0
- package/lib/scan.mjs +6 -2
- package/package.json +5 -1
- package/planner-nodes/ENFORCEMENT_SCOPE.yaml +18 -1
- package/relationships.yaml +4782 -4506
- package/src/enforce.ts +10 -7
- package/src/hooks.ts +2 -1
- package/src/index.ts +2 -0
- package/src/planner-kernel.ts +2 -1
- package/src/planner-schema-validator.ts +12 -10
- package/src/planner-validators.ts +16 -15
- package/src/topology.ts +40 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.covered-train-is-routed
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A train a browser spec covers is selected by an interlocking route
|
|
6
|
+
statement: A declared train that a journey spec binds to MUST be selected by at least one interlocking route. Bun/htmx
|
|
7
|
+
realization of `tester.vite.covered-train-is-routed`, strict.
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: A train a browser spec covers is selected by an interlocking route.
|
|
15
|
+
normative_text: A spec can stay green while exercising a train nothing in the application can reach. Covering
|
|
16
|
+
an unrouted train proves nothing about the product.
|
|
17
|
+
fix_hint: Route the train from an interlocking, or bind the spec to a routed train.
|
|
18
|
+
exceptions:
|
|
19
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
20
|
+
- Undeclared trains are reported by `tester.htmx.e2e-binds-declared-subject`.
|
|
21
|
+
metadata:
|
|
22
|
+
aliases:
|
|
23
|
+
- BUN-E2E-COVERED-TRAIN-IS-ROUTED-001
|
|
24
|
+
severity: 3
|
|
25
|
+
disposition: strict
|
|
26
|
+
introduced_in: 0.5.0
|
|
27
|
+
mirrors: tester.vite.covered-train-is-routed
|
|
28
|
+
implementation:
|
|
29
|
+
type: validator
|
|
30
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.e2e-binds-declared-subject
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A journey spec binds to a train or journey plan/ declares
|
|
6
|
+
statement: When the repository declares a plan, the train or journey a journey spec binds to MUST be declared under
|
|
7
|
+
`plan/`. Bun/htmx realization of `tester.vite.e2e-names-valid-train`, strict.
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: A journey spec binds to a train or journey plan/ declares.
|
|
15
|
+
normative_text: 'A spec bound to an undeclared subject is orphaned: it can pass forever while the plan it claims
|
|
16
|
+
to cover says nothing about it.'
|
|
17
|
+
fix_hint: Bind the spec to the declared id, or declare the train or journey.
|
|
18
|
+
exceptions:
|
|
19
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
20
|
+
- A repository with no plan (no trains, no journeys) is out of scope.
|
|
21
|
+
- A malformed binding is reported by `tester.htmx.journey-binding-header`, not here.
|
|
22
|
+
metadata:
|
|
23
|
+
aliases:
|
|
24
|
+
- BUN-E2E-E2E-BINDS-DECLARED-SUBJECT-001
|
|
25
|
+
severity: 3
|
|
26
|
+
disposition: strict
|
|
27
|
+
introduced_in: 0.5.0
|
|
28
|
+
mirrors: tester.vite.e2e-names-valid-train
|
|
29
|
+
implementation:
|
|
30
|
+
type: validator
|
|
31
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.e2e-spec-naming
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: Playwright specs are named *.e2e.ts
|
|
6
|
+
statement: A file that imports `@playwright/test` and declares tests (`test(...)`, `test.describe(...)`) MUST be
|
|
7
|
+
named `*.e2e.ts` (`.js`, `.mjs`, `.tsx` variants allowed). `bun test` collects every `*.test.*` and `*.spec.*`
|
|
8
|
+
file, so a Playwright spec named that way is executed by the wrong runner and fails, or worse is skipped by a
|
|
9
|
+
filter nobody remembers. New in the Bun/htmx browser tester, strict.
|
|
10
|
+
terms:
|
|
11
|
+
- term_id: browser_spec
|
|
12
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
13
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
14
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
15
|
+
content:
|
|
16
|
+
summary: Playwright specs are named *.e2e.ts.
|
|
17
|
+
normative_text: 'One naming rule keeps the two runners apart: `bun test` runs unit, acceptance and smoke tests,
|
|
18
|
+
Playwright runs browser specs, and neither ever picks up the other''s files.'
|
|
19
|
+
fix_hint: Rename `login.spec.ts` to `login.e2e.ts` and point Playwright's `testMatch` at `**/*.e2e.ts`.
|
|
20
|
+
exceptions:
|
|
21
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
22
|
+
- Files that do not import `@playwright/test` are out of scope.
|
|
23
|
+
- '`playwright.config.*` and fixture modules that only extend `test` declare no tests and are out of scope.'
|
|
24
|
+
metadata:
|
|
25
|
+
aliases:
|
|
26
|
+
- BUN-E2E-E2E-SPEC-NAMING-001
|
|
27
|
+
severity: 3
|
|
28
|
+
disposition: strict
|
|
29
|
+
introduced_in: 0.5.0
|
|
30
|
+
implementation:
|
|
31
|
+
type: validator
|
|
32
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.exposed-journey-e2e-coverage
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: Every exposed journey has an E2E or SMOKE browser spec
|
|
6
|
+
statement: Every journey whose entrypoint is exposed and whose `surfaces` include `frontend` (or declare none) MUST
|
|
7
|
+
have at least one journey spec bound to it by `// Journey:` with an E2E or SMOKE test URN. New in the Bun/htmx
|
|
8
|
+
browser tester, strict.
|
|
9
|
+
terms:
|
|
10
|
+
- term_id: browser_spec
|
|
11
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
12
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
13
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
14
|
+
content:
|
|
15
|
+
summary: Every exposed journey has an E2E or SMOKE browser spec.
|
|
16
|
+
normative_text: An exposed journey is what a user can start. The route-level rules prove each routing decision;
|
|
17
|
+
this proves the journey runs end to end in a browser.
|
|
18
|
+
fix_hint: 'Add `e2e/<journey>.smoke.e2e.ts` bound with `// Journey: <journey id>`.'
|
|
19
|
+
exceptions:
|
|
20
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
21
|
+
- Internal journeys, and exposed journeys whose entrypoint `surfaces` exclude `frontend` (for example `[backend]`),
|
|
22
|
+
have no browser surface and are out of scope.
|
|
23
|
+
metadata:
|
|
24
|
+
aliases:
|
|
25
|
+
- BUN-E2E-EXPOSED-JOURNEY-E2E-COVERAGE-001
|
|
26
|
+
severity: 3
|
|
27
|
+
disposition: strict
|
|
28
|
+
introduced_in: 0.5.0
|
|
29
|
+
implementation:
|
|
30
|
+
type: validator
|
|
31
|
+
ref: htmx_e2e_detector
|
package/conventions/tester.htmx/tester.htmx.fragment-asserts-returned-markup.convention.yaml
CHANGED
|
@@ -40,12 +40,8 @@ metadata:
|
|
|
40
40
|
# contract from the payload into the markup. Stack-native, not inherited.
|
|
41
41
|
- BUN-FRAGMENT-ASSERTS-MARKUP-001
|
|
42
42
|
severity: 3
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
# and wrong for a new stack: a coverage-binding rule that cannot fail is a rule
|
|
46
|
-
# that will not be adopted. Gating dispositions here; a repo adopting on an
|
|
47
|
-
# existing suite records a ratchet baseline instead.
|
|
48
|
-
disposition: suppress-and-clean
|
|
43
|
+
# strict: atdd-bun fails on every finding; it has no advisory mode and no ratchet baseline.
|
|
44
|
+
disposition: strict
|
|
49
45
|
introduced_in: 0.1.0
|
|
50
46
|
implementation:
|
|
51
47
|
type: validator
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.journey-binding-header
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A journey spec binds to exactly one train or journey
|
|
6
|
+
statement: 'A journey spec (a `*.e2e.ts` file, or any test file whose header comments carry a `// Train:`, `// Journey:`
|
|
7
|
+
or `// URN: test:train|journey:` marker) MUST carry exactly one binding header: `// Train: train:<subject>:<slug>`
|
|
8
|
+
or `// Journey: journey:<id>`, each matching the planner''s identity grammar. Bun/htmx realization of `tester.vite.journey-train-header`,
|
|
9
|
+
strict.'
|
|
10
|
+
terms:
|
|
11
|
+
- term_id: browser_spec
|
|
12
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
13
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
14
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
15
|
+
content:
|
|
16
|
+
summary: A journey spec binds to exactly one train or journey.
|
|
17
|
+
normative_text: The binding is how a browser test is traced to the plan it exercises. A spec with no binding,
|
|
18
|
+
two bindings, or an id the planner would reject cannot be traced.
|
|
19
|
+
fix_hint: 'Add `// Train: train:orders:place-order` (or `// Journey: journey:buy`) to the header block.'
|
|
20
|
+
exceptions:
|
|
21
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
22
|
+
- Unit and acceptance tests carrying none of the journey markers are out of scope.
|
|
23
|
+
metadata:
|
|
24
|
+
aliases:
|
|
25
|
+
- BUN-E2E-JOURNEY-BINDING-HEADER-001
|
|
26
|
+
severity: 3
|
|
27
|
+
disposition: strict
|
|
28
|
+
introduced_in: 0.5.0
|
|
29
|
+
mirrors: tester.vite.journey-train-header
|
|
30
|
+
implementation:
|
|
31
|
+
type: validator
|
|
32
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.journey-layer-assembly
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: 'A journey spec declares Layer: assembly'
|
|
6
|
+
statement: 'A journey spec MUST carry `// Layer: assembly`. Bun/htmx realization of `tester.vite.journey-layer-assembly`,
|
|
7
|
+
strict.'
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: 'A journey spec declares Layer: assembly.'
|
|
15
|
+
normative_text: A browser test exercises the assembled application, not a layer of it. A missing or wrong Layer
|
|
16
|
+
routes the result to the wrong layer bucket.
|
|
17
|
+
fix_hint: 'Add `// Layer: assembly` to the header block.'
|
|
18
|
+
exceptions:
|
|
19
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
20
|
+
metadata:
|
|
21
|
+
aliases:
|
|
22
|
+
- BUN-E2E-JOURNEY-LAYER-ASSEMBLY-001
|
|
23
|
+
severity: 3
|
|
24
|
+
disposition: strict
|
|
25
|
+
introduced_in: 0.5.0
|
|
26
|
+
mirrors: tester.vite.journey-layer-assembly
|
|
27
|
+
implementation:
|
|
28
|
+
type: validator
|
|
29
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.journey-no-acceptance-marker
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A journey spec carries no Acceptance or WMBT header
|
|
6
|
+
statement: A journey spec MUST NOT carry `// Acceptance:` or `// WMBT:` header lines. Bun/htmx realization of `tester.vite.journey-no-acceptance-marker`,
|
|
7
|
+
strict.
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: A journey spec carries no Acceptance or WMBT header.
|
|
15
|
+
normative_text: 'Journey and acceptance identities are exclusive: a journey test binds to a train or journey,
|
|
16
|
+
an acceptance test to an Acceptance/WMBT pair. Carrying both makes the test ambiguous about what it proves.'
|
|
17
|
+
fix_hint: Move acceptance assertions to an acceptance test, or drop the Acceptance/WMBT lines.
|
|
18
|
+
exceptions:
|
|
19
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
20
|
+
metadata:
|
|
21
|
+
aliases:
|
|
22
|
+
- BUN-E2E-JOURNEY-NO-ACCEPTANCE-MARKER-001
|
|
23
|
+
severity: 3
|
|
24
|
+
disposition: strict
|
|
25
|
+
introduced_in: 0.5.0
|
|
26
|
+
mirrors: tester.vite.journey-no-acceptance-marker
|
|
27
|
+
implementation:
|
|
28
|
+
type: validator
|
|
29
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.journey-urn-format
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A journey spec carries well-formed test URNs for its own subject
|
|
6
|
+
statement: A journey spec MUST carry at least one test URN `test:{train|journey}:<id>:{E2E|SMOKE|A11Y|VIS|RESP}-NNN-<slug>`,
|
|
7
|
+
and every URN it carries MUST be well-formed and name the subject its binding header declares. Bun/htmx realization
|
|
8
|
+
of `tester.vite.journey-urn-format`, strict.
|
|
9
|
+
terms:
|
|
10
|
+
- term_id: browser_spec
|
|
11
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
12
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
13
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
14
|
+
content:
|
|
15
|
+
summary: A journey spec carries well-formed test URNs for its own subject.
|
|
16
|
+
normative_text: The URN identifies the test instance and its harness. A malformed URN, or one naming another subject,
|
|
17
|
+
silently traces the result to the wrong place.
|
|
18
|
+
fix_hint: Use `test:train:orders:place-order:E2E-001-places-an-order` in the header and the test title.
|
|
19
|
+
exceptions:
|
|
20
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
21
|
+
- A URN is compared with the binding only when the binding itself is valid; a malformed binding is reported by
|
|
22
|
+
`tester.htmx.journey-binding-header` alone.
|
|
23
|
+
metadata:
|
|
24
|
+
aliases:
|
|
25
|
+
- BUN-E2E-JOURNEY-URN-FORMAT-001
|
|
26
|
+
severity: 3
|
|
27
|
+
disposition: strict
|
|
28
|
+
introduced_in: 0.5.0
|
|
29
|
+
mirrors: tester.vite.journey-urn-format
|
|
30
|
+
implementation:
|
|
31
|
+
type: validator
|
|
32
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.presentation-smoke-coverage
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: Every presentation component is covered by a SMOKE browser spec
|
|
6
|
+
statement: Every `.tsx`/`.jsx` component under a `presentation/` path segment MUST be covered by a SMOKE browser
|
|
7
|
+
spec whose path names the component's wagon (the segment before `presentation`). Bun/htmx realization of `tester.vite.presentation-smoke-coverage`,
|
|
8
|
+
strict.
|
|
9
|
+
terms:
|
|
10
|
+
- term_id: browser_spec
|
|
11
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
12
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
13
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
14
|
+
content:
|
|
15
|
+
summary: Every presentation component is covered by a SMOKE browser spec.
|
|
16
|
+
normative_text: Structural tests stay green while a rendered feature is blank; only rendering it in a browser
|
|
17
|
+
proves it appears.
|
|
18
|
+
fix_hint: Add a SMOKE spec whose file name contains the wagon, for example `e2e/checkout-cart.smoke.e2e.ts`.
|
|
19
|
+
exceptions:
|
|
20
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
21
|
+
- Components outside a `presentation/` segment are out of scope.
|
|
22
|
+
metadata:
|
|
23
|
+
aliases:
|
|
24
|
+
- BUN-E2E-PRESENTATION-SMOKE-COVERAGE-001
|
|
25
|
+
severity: 3
|
|
26
|
+
disposition: strict
|
|
27
|
+
introduced_in: 0.5.0
|
|
28
|
+
mirrors: tester.vite.presentation-smoke-coverage
|
|
29
|
+
implementation:
|
|
30
|
+
type: validator
|
|
31
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.responsive-harness
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A RESP spec renders at every declared viewport and asserts no horizontal overflow
|
|
6
|
+
statement: 'A spec identified as responsive (a `RESP` test URN, or a `responsive`/`resp` token in its file name)
|
|
7
|
+
MUST render the page at every viewport width declared in `atdd-bun.yaml` under `frontend.viewports` (default 375,
|
|
8
|
+
768, 1280), through `page.setViewportSize({ width })`, a `viewport: { width }` option, or a list of widths it
|
|
9
|
+
iterates (`for (const w of [...])`, `LIST.forEach`, `LIST.map`); picking one element of a list renders one width.
|
|
10
|
+
It MUST pass `scrollWidth`, directly or through a variable measured from it, to an `expect(...)` so the test fails
|
|
11
|
+
when the page overflows horizontally. New in the Bun/htmx browser tester, strict.'
|
|
12
|
+
terms:
|
|
13
|
+
- term_id: browser_spec
|
|
14
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
15
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
16
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
17
|
+
content:
|
|
18
|
+
summary: A RESP spec renders at every declared viewport and asserts no horizontal overflow.
|
|
19
|
+
normative_text: A screen that works on a desktop can be unusable on a phone. Rendering at each declared width
|
|
20
|
+
and asserting the document never scrolls sideways is the least that proves it fits.
|
|
21
|
+
fix_hint: '`for (const width of [375, 768, 1280]) { await page.setViewportSize({ width, height: 900 }); ... expect(scrollWidth
|
|
22
|
+
- clientWidth).toBeLessThanOrEqual(0); }`'
|
|
23
|
+
exceptions:
|
|
24
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
25
|
+
metadata:
|
|
26
|
+
aliases:
|
|
27
|
+
- BUN-E2E-RESPONSIVE-HARNESS-001
|
|
28
|
+
severity: 3
|
|
29
|
+
disposition: strict
|
|
30
|
+
introduced_in: 0.5.0
|
|
31
|
+
implementation:
|
|
32
|
+
type: validator
|
|
33
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.responsive-journey-coverage
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: Every exposed journey has a RESP browser spec
|
|
6
|
+
statement: Every journey whose entrypoint is exposed and whose `surfaces` include `frontend` (or declare none) MUST
|
|
7
|
+
have a journey spec bound to it by `// Journey:` with a RESP test URN. New in the Bun/htmx browser tester, strict.
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: Every exposed journey has a RESP browser spec.
|
|
15
|
+
normative_text: Every screen a user can reach should be proven to fit from mobile to desktop; exposed journeys
|
|
16
|
+
are exactly those screens, and new ones appear here as soon as the plan declares them.
|
|
17
|
+
fix_hint: 'Add `e2e/<journey>.responsive.e2e.ts` bound with `// Journey: <journey id>`.'
|
|
18
|
+
exceptions:
|
|
19
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
20
|
+
- Internal journeys, and exposed journeys whose entrypoint `surfaces` exclude `frontend`, have no screen to fit
|
|
21
|
+
and are out of scope.
|
|
22
|
+
metadata:
|
|
23
|
+
aliases:
|
|
24
|
+
- BUN-E2E-RESPONSIVE-JOURNEY-COVERAGE-001
|
|
25
|
+
severity: 3
|
|
26
|
+
disposition: strict
|
|
27
|
+
introduced_in: 0.5.0
|
|
28
|
+
implementation:
|
|
29
|
+
type: validator
|
|
30
|
+
ref: htmx_e2e_detector
|
|
@@ -41,7 +41,8 @@ metadata:
|
|
|
41
41
|
# ADDED for this stack: core has no node for out-of-band swap testing.
|
|
42
42
|
- BUN-OOB-TARGET-ASSERTED-001
|
|
43
43
|
severity: 3
|
|
44
|
-
|
|
44
|
+
# strict: atdd-bun fails on every finding; it has no advisory mode and no ratchet baseline.
|
|
45
|
+
disposition: strict
|
|
45
46
|
introduced_in: 0.1.0
|
|
46
47
|
implementation:
|
|
47
48
|
type: validator
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.train-e2e-coverage
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: Every declared train has a browser spec
|
|
6
|
+
statement: Every human-facing train declared under `plan/` (one in which a `user:` participant takes part) MUST
|
|
7
|
+
have at least one journey spec bound to it by `// Train:`. Bun/htmx realization of `tester.vite.train-e2e-coverage`,
|
|
8
|
+
strict.
|
|
9
|
+
terms:
|
|
10
|
+
- term_id: browser_spec
|
|
11
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
12
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
13
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
14
|
+
content:
|
|
15
|
+
summary: Every declared train has a browser spec.
|
|
16
|
+
normative_text: 'A train with no browser spec is a silent gap: the journey it declares can regress with nothing
|
|
17
|
+
turning red.'
|
|
18
|
+
fix_hint: 'Add `e2e/<train-slug>.e2e.ts` bound with `// Train: <train id>`.'
|
|
19
|
+
exceptions:
|
|
20
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
21
|
+
- The rule reports at the train's plan file, where the gap was declared.
|
|
22
|
+
- Trains in which no person takes part (only wagons and systems) have no screen to drive and are out of scope.
|
|
23
|
+
metadata:
|
|
24
|
+
aliases:
|
|
25
|
+
- BUN-E2E-TRAIN-E2E-COVERAGE-001
|
|
26
|
+
severity: 3
|
|
27
|
+
disposition: strict
|
|
28
|
+
introduced_in: 0.5.0
|
|
29
|
+
mirrors: tester.vite.train-e2e-coverage
|
|
30
|
+
implementation:
|
|
31
|
+
type: validator
|
|
32
|
+
ref: htmx_e2e_detector
|
|
@@ -47,7 +47,8 @@ metadata:
|
|
|
47
47
|
# ADDED for this stack: core has no node for hypermedia endpoint coverage.
|
|
48
48
|
- BUN-ENDPOINT-COVERAGE-001
|
|
49
49
|
severity: 2
|
|
50
|
-
|
|
50
|
+
# strict: atdd-bun fails on every finding; it has no advisory mode and no ratchet baseline.
|
|
51
|
+
disposition: strict
|
|
51
52
|
introduced_in: 0.1.0
|
|
52
53
|
implementation:
|
|
53
54
|
type: validator
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
schema_version: 1.1.0
|
|
2
|
+
rule_id: tester.htmx.visual-harness
|
|
3
|
+
kind: rule
|
|
4
|
+
status: active
|
|
5
|
+
name: A VIS spec compares a screenshot
|
|
6
|
+
statement: A spec identified as visual (a `VIS` test URN, or a `visual`/`vis` token in its file name) MUST call
|
|
7
|
+
`toHaveScreenshot()` or `toMatchSnapshot()`. Bun/htmx realization of `tester.vite.visual-harness`, strict.
|
|
8
|
+
terms:
|
|
9
|
+
- term_id: browser_spec
|
|
10
|
+
text: 'a `*.e2e.ts` file run by Playwright, or any test file whose header comments carry a journey marker (`//
|
|
11
|
+
Train:`, `// Journey:`, `// URN: test:train:…`, `// URN: test:journey:…`), so a misnamed one is still judged.
|
|
12
|
+
A unit test that merely mentions a journey URN in a string is not one.'
|
|
13
|
+
content:
|
|
14
|
+
summary: A VIS spec compares a screenshot.
|
|
15
|
+
normative_text: A visual spec that captures nothing performs no visual regression.
|
|
16
|
+
fix_hint: '`await expect(page).toHaveScreenshot("checkout.png");`'
|
|
17
|
+
exceptions:
|
|
18
|
+
- Vendored and generated trees (`node_modules`, `dist`, `build`, `_generated`) are never scanned.
|
|
19
|
+
metadata:
|
|
20
|
+
aliases:
|
|
21
|
+
- BUN-E2E-VISUAL-HARNESS-001
|
|
22
|
+
severity: 3
|
|
23
|
+
disposition: strict
|
|
24
|
+
introduced_in: 0.5.0
|
|
25
|
+
mirrors: tester.vite.visual-harness
|
|
26
|
+
implementation:
|
|
27
|
+
type: validator
|
|
28
|
+
ref: htmx_e2e_detector
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
kind: implementation
|
|
2
|
+
subtype: guard
|
|
3
|
+
implementation_id: atdd_topology
|
|
4
|
+
emits_rule_ids:
|
|
5
|
+
- planner.wagon.features
|
|
6
|
+
- planner.feature.wagon-link
|
|
7
|
+
- atdd-bun.topology.plan-location
|
|
8
|
+
- atdd-bun.topology.source-location
|
|
9
|
+
- atdd-bun.topology.test-location
|
|
10
|
+
- atdd-bun.topology.e2e-location
|
|
11
|
+
- atdd-bun.topology.feature-source-coverage
|
|
12
|
+
- atdd-bun.topology.feature-test-coverage
|
|
13
|
+
entrypoint: detect.mjs
|