post composer: restore validation-error reveal broken by the .composer-row wrap; CI FT cleanup — TDD
All checks were successful
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline was successful

The OK-button composer redesign wrapped the line input in .composer-row, so the .form-control.is-invalid input is no longer a general SIBLING of its .invalid-feedback — the `&.is-invalid ~ .invalid-feedback` reveal (\_base.scss) silently stopped matching, so post-line validation errors rendered in the DOM but stayed display:none (invisible to users). Reveal via `.composer-row:has(.form-control.is-invalid) ~ .invalid-feedback`. Greens test_cannot_add_duplicate_lines + test_error_messages_are_cleared_on_input (both were catching this real regression, not flaky).

Harden WalletShopFreeDeckTest: the .tt-micro is briefly detached mid-HTMX-swap, so get_attribute('innerHTML') returns None and a bare assertIn raises TypeError — which wait_for does NOT retry. Coalesce to '' so it polls until the swap settles (explains the local-pass / CI-fail).

Delete test_core_styling.test_layout_and_styling: a Percival-era assertion that the post input is horizontally CENTRED in its section. The responsive .composer-row (input + OK btn) + the orientation-aware right-margin clamp intentionally removed that invariant (the input now lands in different spots per viewport). Zero behavioural coverage lost — the composer is covered by LineValidationTest + PostComposerOkButtonTest.

Skip GameViewsCarouselTest (red planning contract for the unbuilt Game-views carousel — see project-room-game-views-carousel).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-06-02 02:54:31 -04:00
parent 39a42a33a3
commit 62743aabd0
4 changed files with 19 additions and 38 deletions

View File

@@ -184,6 +184,16 @@ body {
margin-top: 0.25rem;
}
// The post composer wraps its input + OK btn in `.composer-row`, so the
// `.form-control.is-invalid` input is no longer a general SIBLING of its
// `.invalid-feedback` (they live in different parents) — the
// `&.is-invalid ~ .invalid-feedback` reveal above silently stops
// matching, so the error renders in the DOM but stays display:none and
// the user never sees post-line validation. Reveal via :has() on the row.
.composer-row:has(.form-control.is-invalid) ~ .invalid-feedback {
display: block;
}
.alert {
padding: 0.75rem 1rem;
margin: 0.75rem;