From df9cf1eee8bcf4c8e65697b767ba85f343a73262 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Mon, 18 May 2026 19:41:37 -0400 Subject: [PATCH] CI: route trinket FTs to test-FTs-room stage alongside game_room_* MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User ask: ensure trinket FTs (test_trinket_carte_blanche.py, test_trinket_coin_on_a_string.py, test_trinket_backstage_pass.py) run in the room-stage CI bucket so they exercise the same room-template surface as test_game_room_* — relevant when a sprint touches the table hex SCSS / chair geometry / gatekeeper flow, since trinket FTs create rooms + walk thru the gate. Previously they fell into test-FTs-non-room by elimination (the non-room glob was `grep -v 'test_game_room_'`) ; main.yaml updates: non-room step's grep is now `-vE 'test_(game_room|trinket)_'` to exclude both clusters; room step's ls now globs BOTH `test_game_room_*.py` AND `test_trinket_*.py` ; companion memory tweak in feedback_ft_naming_prefix.md documents the new convention so future trinket FTs end up in the right bucket without re-asking ; pipeline behavior unchanged otherwise — both steps still depend_on test-two-browser-FTs only, parallel re-enable still blocked by the shared-sqlite issue from 2026-05-12 (cf. memo note) Code architected by Disco DeDisco Git commit message Co-Authored-By: Claude Sonnet 4.6 --- .woodpecker/main.yaml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.woodpecker/main.yaml b/.woodpecker/main.yaml index f66bab3..3878936 100644 --- a/.woodpecker/main.yaml +++ b/.woodpecker/main.yaml @@ -107,10 +107,11 @@ steps: commands: - pip install -r requirements.dev.txt - cd ./src - # Every FT file EXCEPT test_game_room_* — that cluster runs in - # test-FTs-room. Channels + two-browser tags already covered upstream. - # `ls | grep -v | sed` enumerates module dotted-paths from filenames. - - python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_*.py | grep -v 'test_game_room_' | sed 's|/|.|g;s|\.py||') + # Every FT file EXCEPT test_game_room_* and test_trinket_* — both + # clusters run in test-FTs-room. Channels + two-browser tags already + # covered upstream. `ls | grep -v | sed` enumerates module dotted-paths + # from filenames. + - python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_*.py | grep -vE 'test_(game_room|trinket)_' | sed 's|/|.|g;s|\.py||') when: - event: push path: @@ -137,11 +138,14 @@ steps: commands: - pip install -r requirements.dev.txt - cd ./src - # Heavy Selenium room flows — 9 files (deck_contrib, gatekeeper, - # invite, select_role/sea/sig/sky, tray, tray_tooltip) isolated - # into their own sub-step. Runs in parallel w. test-FTs-non-room + # Heavy Selenium room flows — test_game_room_* (deck_contrib, + # gatekeeper, invite, select_role/sea/sig/sky, tray, tray_tooltip) + # AND test_trinket_* (carte_blanche, coin_on_a_string, backstage_pass) + # since trinket FTs create rooms + load the room template (where the + # table hex SCSS + chair geometry live), so they exercise the same + # surface as test_game_room_*. Runs in parallel w. test-FTs-non-room # (distinct DATABASE_URL paths under /tmp; see split-rationale). - - python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_game_room_*.py | sed 's|/|.|g;s|\.py||') + - python manage.py test --exclude-tag=channels --exclude-tag=two-browser $(ls functional_tests/test_game_room_*.py functional_tests/test_trinket_*.py | sed 's|/|.|g;s|\.py||') when: - event: push path: