{ "persistence": "PENDING IMPORT — NOT PERSISTED", "reason": "Q-SCOPE-01: unresolved product membership due bridge list serialization failure", "workspace": "\u003Crepo\u003E", "product": "UNVERIFIED", "layer": "layer-1", "commit": "435be05abac5310172cfb9a9290c9d7ea0d1cbde", "baseReadbackAtUtc": "2026-10-27T22:32:58.883313+00:00", "recordCreates": [], "recordUpdates": [ { "id": "TEST-ROOMJOINING-001", "notes": "Original acceptance criterion: AC-01; canonical MCP ID: TEST-ROOMJOINING-001. Original criterion AC-01; cases AC-01-T01, AC-01-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-001. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ROOMJOINING-001\n# TEST-ROOMJOINING-001 \u2014 AC-01: Room joining\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a valid room code and 2-25 players on separate devices, when each joins, then every joined player appears in the same room with their selected icon.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ROOMJOINING-001\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ROOMACCESS-001#AC-01\u0060; \u0060FR-LOBBYLIFECYCLE-003#AC-01\u0060; \u0060TR-REALTIME-SYNC-002#TR-02-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice has a waiting room; Bob has an independent browser profile and no room membership. |\n| Test data | Generated active room code, Alice owl icon, Bob fox icon; repeat for capacities 2, 8 and 25. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Bob enter the generated room code and choose player join. | Bob enters Alice\u0027s room with the fox icon. |\n| 2 | Observe Alice\u0027s room without manually refreshing. | The same room roster includes Alice and Bob, each once, with their selected icons. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-01: Room joining\n Scenario: TEST-ROOMJOINING-001 documented design obligation\n Given Alice has a waiting room; Bob has an independent browser profile and no room membership.\n And the test data is Generated active room code, Alice owl icon, Bob fox icon; repeat for capacities 2, 8 and 25.\n When As Bob enter the generated room code and choose player join.\n Then Bob enters Alice\u0027s room with the fox icon.\n When Observe Alice\u0027s room without manually refreshing.\n Then The same room roster includes Alice and Bob, each once, with their selected icons.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nRun separate-device browser contexts; extend the fixture to all counts 2..25 under TEST-MULTIPLAYERINTEGRATION-134. This case alone does not establish every count or a live latency bound.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ROOMJOINING-001" }, { "id": "TEST-PLAYERLIMIT-002", "notes": "Original acceptance criterion: AC-02; canonical MCP ID: TEST-PLAYERLIMIT-002. Original criterion AC-02; cases AC-02-T01, AC-02-T02, AC-02-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-002. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-PLAYERLIMIT-002\n# TEST-PLAYERLIMIT-002 \u2014 AC-02: Player limit\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a room has reached its configured player capacity from 2 through 25, when another player attempts to join, then the game rejects the additional player without changing existing room state. This is true for any configured capacity, including 2, 8, and 25.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PLAYERLIMIT-002\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17 |\n| Covered FR/TR and criteria | \u0060FR-ROOMACCESS-001#AC-02\u0060; \u0060FR-LOBBYLIFECYCLE-003#AC-02\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | A waiting room already contains exactly its configured player count. |\n| Test data | Capacity examples 2, 8, 25; independent extra profile Eve. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Eve attempt a player join. | Player admission is rejected; existing roster and configured capacity are unchanged. |\n| 2 | Reopen the room as an existing player. | There is no Eve player row and the roster still contains exactly the configured count. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-02: Player limit\n Scenario: TEST-PLAYERLIMIT-002 documented design obligation\n Given A waiting room already contains exactly its configured player count.\n And the test data is Capacity examples 2, 8, 25; independent extra profile Eve.\n When As Eve attempt a player join.\n Then Player admission is rejected; existing roster and configured capacity are unchanged.\n When Reopen the room as an existing player.\n Then There is no Eve player row and the roster still contains exactly the configured count.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nInvited observer entry is tested separately; rejection must not be confused with read-only observer admission.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PLAYERLIMIT-002" }, { "id": "TEST-PROFILEICON-003", "notes": "Original acceptance criterion: AC-03; canonical MCP ID: TEST-PROFILEICON-003. Original criterion AC-03; cases AC-03-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-003. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-PROFILEICON-003\n# TEST-PROFILEICON-003 \u2014 AC-03: Profile icon\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player selects an icon, when that player enters the lobby and plays a round, then the same icon appears in the lobby, live scorecard, and standings.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PROFILEICON-003\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_identity_profile.svg](../../../word_association_identity_profile.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13; [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-PLAYERPROFILE-002#AC-03\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice can edit her profile and join a room with Bob. |\n| Test data | Select fox icon for Alice; one complete eight-round match fixture. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Select the fox icon and join the room. | Alice\u0027s lobby row shows the fox icon. |\n| 2 | Play a round and inspect the live scorecard, round summary and final standings. | All four views identify Alice with the same fox icon. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-03: Profile icon\n Scenario: TEST-PROFILEICON-003 documented design obligation\n Given Alice can edit her profile and join a room with Bob.\n And the test data is Select fox icon for Alice; one complete eight-round match fixture.\n When Select the fox icon and join the room.\n Then Alice\u0027s lobby row shows the fox icon.\n When Play a round and inspect the live scorecard, round summary and final standings.\n Then All four views identify Alice with the same fox icon.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PROFILEICON-003" }, { "id": "TEST-FIRSTCATEGORY-004", "notes": "Original acceptance criterion: AC-04; canonical MCP ID: TEST-FIRSTCATEGORY-004. Original criterion AC-04; cases AC-04-T01, AC-04-T02, AC-04-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-004. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-FIRSTCATEGORY-004\n# TEST-FIRSTCATEGORY-004 \u2014 AC-04: First category\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a new game with 2-25 players, when the game indexes the start roster from 1 through N and draws a random integer from 1 through N inclusive, then the player with that index becomes anchor; when that player chooses a category, the first round uses the chosen category and its background.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-FIRSTCATEGORY-004\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ANCHORSELECTION-007#AC-04\u0060; \u0060TR-ANCHOR-RANDOMNESS-013#TR-13-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | The start roster is Alice, Bob, Cara; all are ready; fixture controls which roster index the service selects. |\n| Test data | Controlled selected-index examples 1, 2, 3; opening category Opposites. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Let the countdown finish and inspect the announced anchor on all clients. | The player at the selected roster index is identified as anchor consistently. |\n| 2 | As a non-anchor attempt category selection, then select Opposites as the anchor. | Only the anchor\u0027s choice starts the first round; every client shows Opposites and its background. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-04: First category\n Scenario: TEST-FIRSTCATEGORY-004 documented design obligation\n Given The start roster is Alice, Bob, Cara; all are ready; fixture controls which roster index the service selects.\n And the test data is Controlled selected-index examples 1, 2, 3; opening category Opposites.\n When Let the countdown finish and inspect the announced anchor on all clients.\n Then The player at the selected roster index is identified as anchor consistently.\n When As a non-anchor attempt category selection, then select Opposites as the anchor.\n Then Only the anchor\u0027s choice starts the first round; every client shows Opposites and its background.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nRepeat each selected index, including other-player branch; UI verifies consequences, not statistical uniformity. Stable-index distribution proof remains separate technical coverage.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-FIRSTCATEGORY-004" }, { "id": "TEST-CATEGORYART-005", "notes": "Original acceptance criterion: AC-05; canonical MCP ID: TEST-CATEGORYART-005. Original criterion AC-05; cases AC-05-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-005. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CATEGORYART-005\n# TEST-CATEGORYART-005 \u2014 AC-05: Category art\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given two word pairs in the same category, when each is played, then both rounds use that category\u2019s predefined background. A pair in another category uses that category\u2019s background.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CATEGORYART-005\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-CATEGORYART-006#AC-05\u0060; \u0060TR-ART-RENDER-007#TR-07-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Controlled catalog provides two Opposites pairs and one Colors pair with approved backgrounds. |\n| Test data | Hot/Cold and Up/Down in Opposites; Red/Green in Colors. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Play Hot/Cold and then Up/Down. | Both rounds use the same Opposites background. |\n| 2 | Play the Colors pair and simulate a missing background asset in a separate fixture. | Colors uses its own background; missing art does not obscure prompt, hints, input or scorecard. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-05: Category art\n Scenario: TEST-CATEGORYART-005 documented design obligation\n Given Controlled catalog provides two Opposites pairs and one Colors pair with approved backgrounds.\n And the test data is Hot/Cold and Up/Down in Opposites; Red/Green in Colors.\n When Play Hot/Cold and then Up/Down.\n Then Both rounds use the same Opposites background.\n When Play the Colors pair and simulate a missing background asset in a separate fixture.\n Then Colors uses its own background; missing art does not obscure prompt, hints, input or scorecard.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CATEGORYART-005" }, { "id": "TEST-NOHINTSOLVE-006", "notes": "Original acceptance criterion: AC-06; canonical MCP ID: TEST-NOHINTSOLVE-006. Original criterion AC-06; cases AC-06-T01, AC-06-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-006. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-NOHINTSOLVE-006\n# TEST-NOHINTSOLVE-006 \u2014 AC-06: No-hint solve\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player submits the correct answer during the no-hint stage, when the game accepts it, then the player earns 5 points and their round score locks.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-NOHINTSOLVE-006\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-SCORING-009#AC-06\u0060; \u0060FR-SCORELOCK-010#AC-06\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice is unsolved in the no-hint stage; Bob keeps the round open. |\n| Test data | Prompt Hot, target Cold, initial Alice round points 0. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Alice enter Cold and submit before any hint. | Alice receives exactly 5 round points and her score is locked. |\n| 2 | Attempt another answer during that round. | Alice has no further answer opportunity and her round points remain 5. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-06: No-hint solve\n Scenario: TEST-NOHINTSOLVE-006 documented design obligation\n Given Alice is unsolved in the no-hint stage; Bob keeps the round open.\n And the test data is Prompt Hot, target Cold, initial Alice round points 0.\n When As Alice enter Cold and submit before any hint.\n Then Alice receives exactly 5 round points and her score is locked.\n When Attempt another answer during that round.\n Then Alice has no further answer opportunity and her round points remain 5.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-NOHINTSOLVE-006" }, { "id": "TEST-HINTSCORING-007", "notes": "Original acceptance criterion: AC-07; canonical MCP ID: TEST-HINTSCORING-007. Original criterion AC-07; cases AC-07-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-007. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-HINTSCORING-007\n# TEST-HINTSCORING-007 \u2014 AC-07: Hint scoring\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player solves after Hint 1, Hint 2, or Hint 3, when the game accepts the answer, then the player earns 3, 2, or 1 point respectively.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-HINTSCORING-007\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-SCORING-009#AC-07\u0060; \u0060FR-ANSWERSTAGES-008#AC-07\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice remains unsolved until the specified hint stage in independent round fixtures. |\n| Test data | Examples: Hint 1 \u2192 3 points; Hint 2 \u2192 2; Hint 3 \u2192 1; target Cold. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Advance the fixture to the selected visible hint stage and submit Cold as Alice. | Alice receives exactly the example\u0027s points: 3, 2 or 1. |\n| 2 | Observe Alice through later stage transitions. | Her points stay locked and later hints are not offered to her. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-07: Hint scoring\n Scenario: TEST-HINTSCORING-007 documented design obligation\n Given Alice remains unsolved until the specified hint stage in independent round fixtures.\n And the test data is Examples: Hint 1 \u2192 3 points; Hint 2 \u2192 2; Hint 3 \u2192 1; target Cold.\n When Advance the fixture to the selected visible hint stage and submit Cold as Alice.\n Then Alice receives exactly the example\u0027s points: 3, 2 or 1.\n When Observe Alice through later stage transitions.\n Then Her points stay locked and later hints are not offered to her.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nExecute one independent scenario per hint-stage/points pair; use condition-based stage synchronization.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-HINTSCORING-007" }, { "id": "TEST-UNSOLVEDRESULT-008", "notes": "Original acceptance criterion: AC-08; canonical MCP ID: TEST-UNSOLVEDRESULT-008. Original criterion AC-08; cases AC-08-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-008. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-UNSOLVEDRESULT-008\n# TEST-UNSOLVEDRESULT-008 \u2014 AC-08: Unsolved result\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player remains unsolved after Hint 3, when the round ends, then the player earns 0 points and the game reveals the correct answer.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-UNSOLVEDRESULT-008\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-ANSWERREVEAL-012#AC-08\u0060; \u0060FR-SCORING-009#AC-08\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice remains unsolved at Hint 3 and Bob has already solved. |\n| Test data | Target Cold; Alice either submits wrong or gives no answer through the final deadline. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Submit an incorrect final-stage answer, or await the authoritative final deadline without answering. | The round ends and reveals Cold. |\n| 2 | Inspect Alice\u0027s round summary. | Alice receives 0 points for the round. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-08: Unsolved result\n Scenario: TEST-UNSOLVEDRESULT-008 documented design obligation\n Given Alice remains unsolved at Hint 3 and Bob has already solved.\n And the test data is Target Cold; Alice either submits wrong or gives no answer through the final deadline.\n When Submit an incorrect final-stage answer, or await the authoritative final deadline without answering.\n Then The round ends and reveals Cold.\n When Inspect Alice\u0027s round summary.\n Then Alice receives 0 points for the round.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-UNSOLVEDRESULT-008" }, { "id": "TEST-HINTPROGRESSION-009", "notes": "Original acceptance criterion: AC-09; canonical MCP ID: TEST-HINTPROGRESSION-009. Original criterion AC-09; cases AC-09-T01, AC-09-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-009. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-HINTPROGRESSION-009\n# TEST-HINTPROGRESSION-009 \u2014 AC-09: Hint progression\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given multiple unsolved players, when all unsolved players submit for the current stage, then the game confirms stage results and shows the next hint only to players still unsolved.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-HINTPROGRESSION-009\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ANSWERSTAGES-008#AC-09\u0060; \u0060TR-ANSWER-CONFIDENTIALITY-005#TR-05-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice, Bob and Cara start unsolved; Alice then solves while Bob and Cara do not. |\n| Test data | Target Cold; Bob wrong answer Warm; Cara unanswered until stage closure. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Submit Warm as Bob while Cara has not submitted. | The current stage remains open until all unsolved players submit or its 20-second deadline. |\n| 2 | Submit an incorrect answer as Cara, then observe all three clients. | Bob and Cara receive the next ordered hint; solved Alice receives no later hint or answer control. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-09: Hint progression\n Scenario: TEST-HINTPROGRESSION-009 documented design obligation\n Given Alice, Bob and Cara start unsolved; Alice then solves while Bob and Cara do not.\n And the test data is Target Cold; Bob wrong answer Warm; Cara unanswered until stage closure.\n When Submit Warm as Bob while Cara has not submitted.\n Then The current stage remains open until all unsolved players submit or its 20-second deadline.\n When Submit an incorrect answer as Cara, then observe all three clients.\n Then Bob and Cara receive the next ordered hint; solved Alice receives no later hint or answer control.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nRepeat through Hints 1..3, plus a no-response branch where the server deadline closes the stage.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-HINTPROGRESSION-009" }, { "id": "TEST-LIVESCORECARD-010", "notes": "Original acceptance criterion: AC-10; canonical MCP ID: TEST-LIVESCORECARD-010. Original criterion AC-10; cases AC-10-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-010. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-LIVESCORECARD-010\n# TEST-LIVESCORECARD-010 \u2014 AC-10: Live scorecard\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player solves, when the game accepts the answer, then the active scorecard shows that player\u2019s icon, points earned, and elapsed time from round start.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-LIVESCORECARD-010\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-LIVESCORECARD-011#AC-10\u0060; \u0060FR-SCORELOCK-010#AC-10\u0060; \u0060TR-CLOCK-CONSISTENCY-008#TR-08-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice and Bob see the same active round and Alice is unsolved. |\n| Test data | Alice fox icon; controlled authoritative round start 12:00:00 and accepted correct solve 12:00:04. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Submit the target as Alice and observe Bob without manual refresh. | Bob\u0027s live scorecard shows Alice, fox icon, 5 round points and 4 seconds elapsed. |\n| 2 | Change a client clock in an independent fixture. | Displayed authoritative solve duration and points remain based on server acceptance time. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-10: Live scorecard\n Scenario: TEST-LIVESCORECARD-010 documented design obligation\n Given Alice and Bob see the same active round and Alice is unsolved.\n And the test data is Alice fox icon; controlled authoritative round start 12:00:00 and accepted correct solve 12:00:04.\n When Submit the target as Alice and observe Bob without manual refresh.\n Then Bob\u0027s live scorecard shows Alice, fox icon, 5 round points and 4 seconds elapsed.\n When Change a client clock in an independent fixture.\n Then Displayed authoritative solve duration and points remain based on server acceptance time.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-LIVESCORECARD-010" }, { "id": "TEST-CATEGORYCHOICE-011", "notes": "Original acceptance criterion: AC-11; canonical MCP ID: TEST-CATEGORYCHOICE-011. Original criterion AC-11; cases AC-11-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-011. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CATEGORYCHOICE-011\n# TEST-CATEGORYCHOICE-011 \u2014 AC-11: Category choice\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given at least one player solves a round, when the round ends, then the earliest accepted correct solver can select the next category.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CATEGORYCHOICE-011\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-ANCHORSELECTION-007#AC-11\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice and Bob solve one round; accepted order is Bob first, then Alice. |\n| Test data | Authoritative accepted solve times Bob 4 seconds, Alice 5 seconds. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | End the round and attempt next-category choice as Alice, then as Bob. | Only first accepted solver Bob can select the next category. |\n| 2 | Choose Colors as Bob. | All room clients progress to the Colors round and background. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-11: Category choice\n Scenario: TEST-CATEGORYCHOICE-011 documented design obligation\n Given Alice and Bob solve one round; accepted order is Bob first, then Alice.\n And the test data is Authoritative accepted solve times Bob 4 seconds, Alice 5 seconds.\n When End the round and attempt next-category choice as Alice, then as Bob.\n Then Only first accepted solver Bob can select the next category.\n When Choose Colors as Bob.\n Then All room clients progress to the Colors round and background.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nAn effectively simultaneous acceptance needs deterministic server ordering evidence; visual arrival order is not an oracle. The no-solver fallback is listed as a separate uncovered decision obligation.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CATEGORYCHOICE-011" }, { "id": "TEST-ROUNDSUMMARY-012", "notes": "Original acceptance criterion: AC-12; canonical MCP ID: TEST-ROUNDSUMMARY-012. Original criterion AC-12; cases AC-12-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-012. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ROUNDSUMMARY-012\n# TEST-ROUNDSUMMARY-012 \u2014 AC-12: Round summary\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a round ends, when the summary appears, then it ranks all players by current cumulative score and shows the completed round\u2019s points and solve times.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ROUNDSUMMARY-012\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-ROUNDSUMMARY-013#AC-12\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | A round is about to finish with controlled prior totals and current round outcomes. |\n| Test data | Before round Alice 5, Bob 0; round Alice 1 in 65 seconds, Bob 5 in 4 seconds. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Finish the round and open the round summary. | Alice ranks above Bob by cumulative totals 6 and 5. |\n| 2 | Read each completed-round row. | Alice shows 1 round point and 65 seconds; Bob shows 5 and 4 seconds. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-12: Round summary\n Scenario: TEST-ROUNDSUMMARY-012 documented design obligation\n Given A round is about to finish with controlled prior totals and current round outcomes.\n And the test data is Before round Alice 5, Bob 0; round Alice 1 in 65 seconds, Bob 5 in 4 seconds.\n When Finish the round and open the round summary.\n Then Alice ranks above Bob by cumulative totals 6 and 5.\n When Read each completed-round row.\n Then Alice shows 1 round point and 65 seconds; Bob shows 5 and 4 seconds.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ROUNDSUMMARY-012" }, { "id": "TEST-FINALSTANDINGS-013", "notes": "Original acceptance criterion: AC-13; canonical MCP ID: TEST-FINALSTANDINGS-013. Original criterion AC-13; cases AC-13-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-013. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-FINALSTANDINGS-013\n# TEST-FINALSTANDINGS-013 \u2014 AC-13: Final standings\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given the configured final round ends, when players have different total scores, then final standings rank them by total score.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-FINALSTANDINGS-013\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-FINALSTANDINGS-014#AC-13\u0060; \u0060FR-FINALSTANDINGS-014#DEC-01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Eight-round fixture has known totals and round eight is active. |\n| Test data | Final totals Alice 24, Bob 20, Cara 12. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Finish round eight. | Final standings appear rather than a ninth round. |\n| 2 | Read the ranking. | Alice ranks first with 24, Bob second with 20, Cara third with 12. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-13: Final standings\n Scenario: TEST-FINALSTANDINGS-013 documented design obligation\n Given Eight-round fixture has known totals and round eight is active.\n And the test data is Final totals Alice 24, Bob 20, Cara 12.\n When Finish round eight.\n Then Final standings appear rather than a ninth round.\n When Read the ranking.\n Then Alice ranks first with 24, Bob second with 20, Cara third with 12.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-FINALSTANDINGS-013" }, { "id": "TEST-TIMETIEBREAK-014", "notes": "Original acceptance criterion: AC-14; canonical MCP ID: TEST-TIMETIEBREAK-014. Original criterion AC-14; cases AC-14-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-014. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-TIMETIEBREAK-014\n# TEST-TIMETIEBREAK-014 \u2014 AC-14: Time tiebreak\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given two or more players tie for the highest score, when final standings are calculated, then total answer time is the sum of each round\u2019s accepted solve duration, with 80 seconds charged for an unsolved round; the lower total ranks first, and an exact tie shares the same rank.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-TIMETIEBREAK-014\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27 |\n| Covered FR/TR and criteria | \u0060FR-FINALSTANDINGS-014#AC-14\u0060; \u0060FR-FINALSTANDINGS-014#DEC-04\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Eight-round game has tied highest scores and controlled solve durations. |\n| Test data | Alice and Bob 20 points; Alice accepted solve total 30 seconds plus one unsolved round =110; Bob accepted solve total 115 and no unsolved rounds. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Complete round eight and inspect final standings. | Alice ranks above Bob because 110 \u003C 115, including Alice\u0027s 80-second unsolved charge. |\n| 2 | Repeat with both tied score and exactly equal total answer time. | Alice and Bob share the same rank. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-14: Time tiebreak\n Scenario: TEST-TIMETIEBREAK-014 documented design obligation\n Given Eight-round game has tied highest scores and controlled solve durations.\n And the test data is Alice and Bob 20 points; Alice accepted solve total 30 seconds plus one unsolved round =110; Bob accepted solve total 115 and no unsolved rounds.\n When Complete round eight and inspect final standings.\n Then Alice ranks above Bob because 110 \u003C 115, including Alice\u0027s 80-second unsolved charge.\n When Repeat with both tied score and exactly equal total answer time.\n Then Alice and Bob share the same rank.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-TIMETIEBREAK-014" }, { "id": "TEST-ORIENTATION-015", "notes": "Original acceptance criterion: AC-15; canonical MCP ID: TEST-ORIENTATION-015. Original criterion AC-15; cases AC-15-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-015. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ORIENTATION-015\n# TEST-ORIENTATION-015 \u2014 AC-15: Orientation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a phone-sized viewport in portrait or landscape, when a player enters an answer or views a hint and scorecard, then text and controls remain visible without horizontal overflow.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ORIENTATION-015\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-RESPONSIVEUI-015#AC-15\u0060; \u0060TR-MOBILE-INPUT-011#TR-11-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | A player is in an active round with a hint, answer input and populated scorecard. |\n| Test data | Proposed test configurations: 390x844 portrait and 844x390 landscape; target Cold. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Rotate between both viewports and enter Cold with touch and with keyboard in independent runs. | Prompt, hint, input, scorecard and primary action remain visible and operable. |\n| 2 | Inspect the whole page width in each orientation. | No horizontal overflow hides content or controls. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-15: Orientation\n Scenario: TEST-ORIENTATION-015 documented design obligation\n Given A player is in an active round with a hint, answer input and populated scorecard.\n And the test data is Proposed test configurations: 390x844 portrait and 844x390 landscape; target Cold.\n When Rotate between both viewports and enter Cold with touch and with keyboard in independent runs.\n Then Prompt, hint, input, scorecard and primary action remain visible and operable.\n When Inspect the whole page width in each orientation.\n Then No horizontal overflow hides content or controls.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nViewport sizes are test configurations, not invented product breakpoints.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ORIENTATION-015" }, { "id": "TEST-CONTENTVALIDATION-016", "notes": "Original acceptance criterion: AC-16; canonical MCP ID: TEST-CONTENTVALIDATION-016. Original criterion AC-16; cases AC-16-T01, AC-16-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-016. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CONTENTVALIDATION-016\n# TEST-CONTENTVALIDATION-016 \u2014 AC-16: Content validation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a category is enabled, when the content catalog is checked, then every playable pair has a prompt, target answer, three ordered hints, accepted-answer policy, and category background.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CONTENTVALIDATION-016\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_category_suggestion.svg](../../../word_association_category_suggestion.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15; [word_association_nomination_flow.svg](../../../word_association_nomination_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-11, my-svg-flowchart-G-13, my-svg-flowchart-H-15, my-svg-flowchart-I-17, my-svg-flowchart-J-19 |\n| Covered FR/TR and criteria | \u0060FR-CURATEDPAIRS-004#AC-16\u0060; \u0060TR-CATALOG-INTEGRITY-006#TR-06-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Authorized content editor has a complete draft pair in an approved category. |\n| Test data | Prompt Hot; target Cold; hints H1/H2/H3; accepted alternative chilly; approved category/background. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Remove each required field in turn and try publishing the pair. | Incomplete pairs do not become playable; validation identifies the missing field. |\n| 2 | Restore all required fields and complete the approved publishing path. | The catalog includes a complete pair with the three hints in order and its category background. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-16: Content validation\n Scenario: TEST-CONTENTVALIDATION-016 documented design obligation\n Given Authorized content editor has a complete draft pair in an approved category.\n And the test data is Prompt Hot; target Cold; hints H1/H2/H3; accepted alternative chilly; approved category/background.\n When Remove each required field in turn and try publishing the pair.\n Then Incomplete pairs do not become playable; validation identifies the missing field.\n When Restore all required fields and complete the approved publishing path.\n Then The catalog includes a complete pair with the three hints in order and its category background.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nExact validation copy is not specified; assert identified field and unchanged playability, not invented wording.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CONTENTVALIDATION-016" }, { "id": "TEST-NOMINATIONELIGIBILITY-017", "notes": "Original acceptance criterion: AC-17; canonical MCP ID: TEST-NOMINATIONELIGIBILITY-017. Original criterion AC-17; cases AC-17-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-017. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-NOMINATIONELIGIBILITY-017\n# TEST-NOMINATIONELIGIBILITY-017 \u2014 AC-17: Nomination eligibility\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player solves during the no-hint stage, when the round results are shown, then that player can submit a candidate answer nomination; players who solve after any hint cannot nominate from that round.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-NOMINATIONELIGIBILITY-017\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_nomination_flow.svg](../../../word_association_nomination_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-11, my-svg-flowchart-G-13, my-svg-flowchart-H-15, my-svg-flowchart-I-17, my-svg-flowchart-J-19 |\n| Covered FR/TR and criteria | \u0060FR-NOMINATIONS-016#AC-17\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice solves with no hint; Bob solves after Hint 1 in the same round. |\n| Test data | Candidate Moon; Alice no-hint 5 points, Bob Hint-1 3 points. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open round results as Alice and Bob. | Alice can submit a nomination from this solve; Bob cannot nominate from his hinted solve. |\n| 2 | Nominate Moon as Alice. | The candidate is recorded without altering the round score or progression. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-17: Nomination eligibility\n Scenario: TEST-NOMINATIONELIGIBILITY-017 documented design obligation\n Given Alice solves with no hint; Bob solves after Hint 1 in the same round.\n And the test data is Candidate Moon; Alice no-hint 5 points, Bob Hint-1 3 points.\n When Open round results as Alice and Bob.\n Then Alice can submit a nomination from this solve; Bob cannot nominate from his hinted solve.\n When Nominate Moon as Alice.\n Then The candidate is recorded without altering the round score or progression.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-NOMINATIONELIGIBILITY-017" }, { "id": "TEST-NOMINATIONTHRESHOLDANDMODERATION-018", "notes": "Original acceptance criterion: AC-18; canonical MCP ID: TEST-NOMINATIONTHRESHOLDANDMODERATION-018. Original criterion AC-18; cases AC-18-T01, AC-18-T02, AC-18-T02. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-018. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-NOMINATIONTHRESHOLDANDMODERATION-018\n# TEST-NOMINATIONTHRESHOLDANDMODERATION-018 \u2014 AC-18: Nomination threshold and moderation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a candidate has fewer than 10 nominations or has not passed moderation, when the answer pool is checked, then it is not eligible for future games. Given it has at least 10 nominations and passes moderation, then it enters the future-eligible answer pool but is not playable until its full curated pair record exists.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-NOMINATIONTHRESHOLDANDMODERATION-018\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_nomination_flow.svg](../../../word_association_nomination_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-11, my-svg-flowchart-G-13, my-svg-flowchart-H-15, my-svg-flowchart-I-17, my-svg-flowchart-J-19 |\n| Covered FR/TR and criteria | \u0060FR-NOMINATIONS-016#AC-18\u0060; \u0060TR-NOMINATION-MODERATION-014#DEC-07\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Candidate Moon has nine unique nominations; a tenth independent eligible profile is available. |\n| Test data | Profiles p01..p10; independent moderator m01; one complete curated pair fixture. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Inspect the candidate at nine nominations, then record the tenth unique eligible nomination. | At nine it is ineligible; at ten it enters moderation and remains ineligible until approval. |\n| 2 | Approve as independent m01, then inspect future eligibility before and after complete curation. | Approved candidate enters the future-eligible pool but is playable only after complete curated content exists. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-18: Nomination threshold and moderation\n Scenario: TEST-NOMINATIONTHRESHOLDANDMODERATION-018 documented design obligation\n Given Candidate Moon has nine unique nominations; a tenth independent eligible profile is available.\n And the test data is Profiles p01..p10; independent moderator m01; one complete curated pair fixture.\n When Inspect the candidate at nine nominations, then record the tenth unique eligible nomination.\n Then At nine it is ineligible; at ten it enters moderation and remains ineligible until approval.\n When Approve as independent m01, then inspect future eligibility before and after complete curation.\n Then Approved candidate enters the future-eligible pool but is playable only after complete curated content exists.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-NOMINATIONTHRESHOLDANDMODERATION-018" }, { "id": "TEST-CATEGORYSUGGESTIONUNLOCK-019", "notes": "Original acceptance criterion: AC-19; canonical MCP ID: TEST-CATEGORYSUGGESTIONUNLOCK-019. Original criterion AC-19; cases AC-19-T01, AC-19-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-019. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CATEGORYSUGGESTIONUNLOCK-019\n# TEST-CATEGORYSUGGESTIONUNLOCK-019 \u2014 AC-19: Category suggestion unlock\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player has fewer than 10 game wins, when they open the content suggestion flow, then category-and-pair submission is unavailable. Given they have won 10 games, then they can submit one proposed relationship category with three word pairs for review. The submission is not playable until approved and complete.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CATEGORYSUGGESTIONUNLOCK-019\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_category_suggestion.svg](../../../word_association_category_suggestion.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15 |\n| Covered FR/TR and criteria | \u0060FR-CATEGORYSUGGESTIONS-017#AC-19\u0060; \u0060FR-CATEGORYSUGGESTIONS-017#DEC-09\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Profiles have controlled lifetime win totals; no open suggestion initially. |\n| Test data | Alice 9 wins; Bob 10; Bob proposes Space with exactly three complete pair suggestions. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open category suggestions as Alice and Bob. | Alice cannot submit; Bob can submit one category with exactly three pairs. |\n| 2 | As Bob try two and four pairs, then exactly three; try opening a second suggestion. | Only exactly three is accepted and a second open suggestion is rejected. |\n| 3 | Observe submitted content before approval and complete curation. | The submission is in review and not playable. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-19: Category suggestion unlock\n Scenario: TEST-CATEGORYSUGGESTIONUNLOCK-019 documented design obligation\n Given Profiles have controlled lifetime win totals; no open suggestion initially.\n And the test data is Alice 9 wins; Bob 10; Bob proposes Space with exactly three complete pair suggestions.\n When Open category suggestions as Alice and Bob.\n Then Alice cannot submit; Bob can submit one category with exactly three pairs.\n When As Bob try two and four pairs, then exactly three; try opening a second suggestion.\n Then Only exactly three is accepted and a second open suggestion is rejected.\n When Observe submitted content before approval and complete curation.\n Then The submission is in review and not playable.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CATEGORYSUGGESTIONUNLOCK-019" }, { "id": "TEST-OPENAIOIDCPROFILE-020", "notes": "Original acceptance criterion: AC-20; canonical MCP ID: TEST-OPENAIOIDCPROFILE-020. Original criterion AC-20; cases AC-20-T01, AC-20-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-020. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-OPENAIOIDCPROFILE-020\n# TEST-OPENAIOIDCPROFILE-020 \u2014 AC-20: OpenAI OIDC profile\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player chooses account sign-in, when OpenAI OIDC authentication succeeds, then the game establishes or loads the game profile associated with that authenticated identity and allows the player to select an icon.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-OPENAIOIDCPROFILE-020\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_identity_profile.svg](../../../word_association_identity_profile.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-IDENTITY-018#AC-20\u0060; \u0060FR-PLAYERPROFILE-002#AC-20\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | An approved test OIDC provider registration is available with callback configuration. |\n| Test data | A synthetic returning OIDC subject and a separate new subject; fox icon. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Blocked for real-provider automation until OpenAI OIDC client registration/entitlement and safe test identities are available; use a controlled provider only with its evidence limitation disclosed. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Choose account sign-in and complete a valid Authorization Code with PKCE flow. | The returning subject loads its existing profile; the new subject receives its own profile. |\n| 2 | Select fox and continue to room entry. | The authenticated profile and selected icon are used for room membership; real identity-provider name is not public. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-20: OpenAI OIDC profile\n Scenario: TEST-OPENAIOIDCPROFILE-020 documented design obligation\n Given An approved test OIDC provider registration is available with callback configuration.\n And the test data is A synthetic returning OIDC subject and a separate new subject; fox icon.\n When Choose account sign-in and complete a valid Authorization Code with PKCE flow.\n Then The returning subject loads its existing profile; the new subject receives its own profile.\n When Select fox and continue to room entry.\n Then The authenticated profile and selected icon are used for room membership; real identity-provider name is not public.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-OPENAIOIDCPROFILE-020" }, { "id": "TEST-GUESTPLAY-021", "notes": "Original acceptance criterion: AC-21; canonical MCP ID: TEST-GUESTPLAY-021. Original criterion AC-21; cases AC-21-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-021. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-GUESTPLAY-021\n# TEST-GUESTPLAY-021 \u2014 AC-21: Guest play\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player chooses guest mode, when they continue without OIDC authentication, then the game creates a guest player identity, allows icon selection, and lets them create or join a room by code.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-GUESTPLAY-021\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_identity_profile.svg](../../../word_association_identity_profile.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-IDENTITY-018#AC-21\u0060; \u0060FR-IDENTITY-018#DEC-11\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | A clean browser has no profile; OIDC sign-in is not used. |\n| Test data | Guest browser A; separate clean browser B; selected owl icon. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Choose Continue as guest, select owl and create/join a room. | A guest identity with owl can participate without OIDC. |\n| 2 | Reload browser A, then open browser B; clear A\u0027s site data and reenter. | A retains its identity until site data is cleared; B does not inherit it; cleared A receives a different guest identity. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-21: Guest play\n Scenario: TEST-GUESTPLAY-021 documented design obligation\n Given A clean browser has no profile; OIDC sign-in is not used.\n And the test data is Guest browser A; separate clean browser B; selected owl icon.\n When Choose Continue as guest, select owl and create/join a room.\n Then A guest identity with owl can participate without OIDC.\n When Reload browser A, then open browser B; clear A\u0027s site data and reenter.\n Then A retains its identity until site data is cleared; B does not inherit it; cleared A receives a different guest identity.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nGuest-to-OIDC linking is not specified and must not be assumed.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-GUESTPLAY-021" }, { "id": "TEST-BROWSEOPENLOBBIES-022", "notes": "Original acceptance criterion: AC-22; canonical MCP ID: TEST-BROWSEOPENLOBBIES-022. Original criterion AC-22; cases AC-22-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-022. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-BROWSEOPENLOBBIES-022\n# TEST-BROWSEOPENLOBBIES-022 \u2014 AC-22: Browse open lobbies\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a discoverable lobby is waiting and has fewer players than its configured capacity, when a player browses lobbies, then the lobby appears as joinable; hidden, full, or started lobbies do not appear as joinable.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-BROWSEOPENLOBBIES-022\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_lobby_discovery.svg](../../../word_association_lobby_discovery.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-LOBBYDISCOVERY-019#AC-22\u0060; \u0060TR-LOBBY-MATCHING-017#TR-17-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Fixture contains four rooms with distinguishable capacity/waiting/discovery flags. |\n| Test data | Public waiting 1/2; private waiting 1/2; public full 2/2; public started 2/2. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open lobby browsing. | Only the discoverable waiting room with an open seat appears as joinable. |\n| 2 | Select that room and join. | The player reaches its room; hidden/full/started rooms remain unavailable as joinable entries. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-22: Browse open lobbies\n Scenario: TEST-BROWSEOPENLOBBIES-022 documented design obligation\n Given Fixture contains four rooms with distinguishable capacity/waiting/discovery flags.\n And the test data is Public waiting 1/2; private waiting 1/2; public full 2/2; public started 2/2.\n When Open lobby browsing.\n Then Only the discoverable waiting room with an open seat appears as joinable.\n When Select that room and join.\n Then The player reaches its room; hidden/full/started rooms remain unavailable as joinable entries.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-BROWSEOPENLOBBIES-022" }, { "id": "TEST-QUICKMATCH-023", "notes": "Original acceptance criterion: AC-23; canonical MCP ID: TEST-QUICKMATCH-023. Original criterion AC-23; cases AC-23-T01, AC-23-T02, AC-23-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-023. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-QUICKMATCH-023\n# TEST-QUICKMATCH-023 \u2014 AC-23: Quick match\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given at least one discoverable lobby has an available player slot, when a player uses quick match, then the service assigns them to the oldest eligible lobby, breaking equal creation times by stable room ID, without exceeding configured capacity. Given none is available, then the player is offered browsing or room creation.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-QUICKMATCH-023\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_lobby_discovery.svg](../../../word_association_lobby_discovery.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-LOBBYDISCOVERY-019#AC-23\u0060; \u0060TR-LOBBY-MATCHING-017#TR-17-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Two discoverable waiting rooms have open seats and known creation times. |\n| Test data | Room A older than B; equal-time second run uses stable IDs A \u003C B; third run has no eligible room. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Choose Quick match. | The player enters oldest eligible A; an equal-time run selects the lower stable room ID. |\n| 2 | Repeat with no eligible room. | The UI reports no match and offers browsing or room creation; no over-capacity join occurs. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-23: Quick match\n Scenario: TEST-QUICKMATCH-023 documented design obligation\n Given Two discoverable waiting rooms have open seats and known creation times.\n And the test data is Room A older than B; equal-time second run uses stable IDs A \u003C B; third run has no eligible room.\n When Choose Quick match.\n Then The player enters oldest eligible A; an equal-time run selects the lower stable room ID.\n When Repeat with no eligible room.\n Then The UI reports no match and offers browsing or room creation; no over-capacity join occurs.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-QUICKMATCH-023" }, { "id": "TEST-CONFIGUREDCAPACITY-024", "notes": "Original acceptance criterion: AC-24; canonical MCP ID: TEST-CONFIGUREDCAPACITY-024. Original criterion AC-24; cases AC-24-T01, AC-24-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-024. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CONFIGUREDCAPACITY-024\n# TEST-CONFIGUREDCAPACITY-024 \u2014 AC-24: Configured capacity\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player creates a room, when they set a maximum capacity from 2 through 25, then the room stores and displays that limit. Values below 2 or above 25 are rejected.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CONFIGUREDCAPACITY-024\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17 |\n| Covered FR/TR and criteria | \u0060FR-ROOMACCESS-001#AC-24\u0060; \u0060FR-LOBBYLIFECYCLE-003#AC-24\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | An identified player can create a room. |\n| Test data | Capacity inputs 1, 2, 8, 25, 26. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Try creating rooms with capacities 1 and 26. | Both invalid capacities are rejected; no invalid room is created. |\n| 2 | Create separate rooms with 2, 8 and 25. | Each room stores and displays exactly its selected limit and correct open slots. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-24: Configured capacity\n Scenario: TEST-CONFIGUREDCAPACITY-024 documented design obligation\n Given An identified player can create a room.\n And the test data is Capacity inputs 1, 2, 8, 25, 26.\n When Try creating rooms with capacities 1 and 26.\n Then Both invalid capacities are rejected; no invalid room is created.\n When Create separate rooms with 2, 8 and 25.\n Then Each room stores and displays exactly its selected limit and correct open slots.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CONFIGUREDCAPACITY-024" }, { "id": "TEST-ROOMINVITATIONS-025", "notes": "Original acceptance criterion: AC-25; canonical MCP ID: TEST-ROOMINVITATIONS-025. Original criterion AC-25; cases AC-25-T01, AC-25-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-025. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ROOMINVITATIONS-025\n# TEST-ROOMINVITATIONS-025 \u2014 AC-25: Room invitations\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player is in a room, when they share its room code or deep link, then another player can use either invitation to reach the intended room, subject to an open slot.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ROOMINVITATIONS-025\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17 |\n| Covered FR/TR and criteria | \u0060FR-ROOMACCESS-001#AC-25\u0060; \u0060FR-LOBBYDISCOVERY-019#AC-25\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice is already a player in an active room; Bob and Cara have independent profiles. |\n| Test data | The room\u0027s generated code and inviter-bound signed deep link. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Alice share the code to Bob and link to Cara. | Both invitation forms refer to Alice\u0027s intended room. |\n| 2 | Join as Bob by code and Cara by link when seats are open. | Both enter that same room subject to its configured capacity. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-25: Room invitations\n Scenario: TEST-ROOMINVITATIONS-025 documented design obligation\n Given Alice is already a player in an active room; Bob and Cara have independent profiles.\n And the test data is The room\u0027s generated code and inviter-bound signed deep link.\n When As Alice share the code to Bob and link to Cara.\n Then Both invitation forms refer to Alice\u0027s intended room.\n When Join as Bob by code and Cara by link when seats are open.\n Then Both enter that same room subject to its configured capacity.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ROOMINVITATIONS-025" }, { "id": "TEST-DEEPLINKJOINANDFULLROOM-026", "notes": "Original acceptance criterion: AC-26; canonical MCP ID: TEST-DEEPLINKJOINANDFULLROOM-026. Original criterion AC-26; cases AC-26-T01, AC-26-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-026. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-DEEPLINKJOINANDFULLROOM-026\n# TEST-DEEPLINKJOINANDFULLROOM-026 \u2014 AC-26: Deep-link join and full room\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a valid room deep link, when a player opens it, then the game bypasses lobby browsing and checks the room directly. If a slot is open, the player joins; if the room has no open player slot, the invitee is offered observer mode.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-DEEPLINKJOINANDFULLROOM-026\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17 |\n| Covered FR/TR and criteria | \u0060FR-ROOMACCESS-001#AC-26\u0060; \u0060FR-LOBBYDISCOVERY-019#AC-26\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice has a valid signed room invitation; one fixture has a seat, another is full. |\n| Test data | Invited guest Bob; same room deep-link destination. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open the invitation in each fixture. | It bypasses discovery and checks the intended room directly. |\n| 2 | Join the open fixture and inspect the full fixture. | Open fixture admits Bob as a player; full fixture offers observer mode without silently adding a player. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-26: Deep-link join and full room\n Scenario: TEST-DEEPLINKJOINANDFULLROOM-026 documented design obligation\n Given Alice has a valid signed room invitation; one fixture has a seat, another is full.\n And the test data is Invited guest Bob; same room deep-link destination.\n When Open the invitation in each fixture.\n Then It bypasses discovery and checks the intended room directly.\n When Join the open fixture and inspect the full fixture.\n Then Open fixture admits Bob as a player; full fixture offers observer mode without silently adding a player.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-DEEPLINKJOINANDFULLROOM-026" }, { "id": "TEST-FULLROOMOBSERVER-027", "notes": "Original acceptance criterion: AC-27; canonical MCP ID: TEST-FULLROOMOBSERVER-027. Original criterion AC-27; cases AC-27-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-027. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-FULLROOMOBSERVER-027\n# TEST-FULLROOMOBSERVER-027 \u2014 AC-27: Full-room observer\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an invited player follows an invitation to a full room, when they choose to observe, then they enter without consuming a player slot and are bound to the player who invited them.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-FULLROOMOBSERVER-027\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17 |\n| Covered FR/TR and criteria | \u0060FR-OBSERVERS-020#AC-27\u0060; \u0060TR-OBSERVER-PERMISSIONS-018#TR-18-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice\u0027s room has reached capacity; invited Eve is not a member. |\n| Test data | Signed invitation bound to Alice; second run uses manual room code and roster inviter selection. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Choose Observe as Eve. | Eve appears only in observers; player count/capacity is unchanged and her perspective follows Alice. |\n| 2 | Repeat code invitation and select Alice from current roster. | The observer is bound to the explicitly chosen inviter, not an arbitrary player. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-27: Full-room observer\n Scenario: TEST-FULLROOMOBSERVER-027 documented design obligation\n Given Alice\u0027s room has reached capacity; invited Eve is not a member.\n And the test data is Signed invitation bound to Alice; second run uses manual room code and roster inviter selection.\n When Choose Observe as Eve.\n Then Eve appears only in observers; player count/capacity is unchanged and her perspective follows Alice.\n When Repeat code invitation and select Alice from current roster.\n Then The observer is bound to the explicitly chosen inviter, not an arbitrary player.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-FULLROOMOBSERVER-027" }, { "id": "TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028", "notes": "Original acceptance criterion: AC-28; canonical MCP ID: TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028. Original criterion AC-28; cases AC-28-T01, AC-28-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-028. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028\n# TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028 \u2014 AC-28: Observer perspective and permissions\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an observer is following an inviter, when the inviter\u2019s player-authorized view changes, then the observer sees the corresponding update in real time. Observer attempts to submit guesses, choose categories, or change game state are rejected; the observer earns no score.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-OBSERVERS-020#AC-28\u0060; \u0060TR-OBSERVER-PERMISSIONS-018#TR-18-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Eve observes Alice in a full room; Bob is another player. |\n| Test data | Alice remains unsolved at Hint 1; Bob already solved. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Observe Eve as Alice receives her next hint. | Eve sees Alice\u0027s authorized perspective, without Bob\u0027s private guess text. |\n| 2 | As Eve attempt guessing, category selection or state-changing controls. | Observer cannot change game state and earns no score. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-28: Observer perspective and permissions\n Scenario: TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028 documented design obligation\n Given Eve observes Alice in a full room; Bob is another player.\n And the test data is Alice remains unsolved at Hint 1; Bob already solved.\n When Observe Eve as Alice receives her next hint.\n Then Eve sees Alice\u0027s authorized perspective, without Bob\u0027s private guess text.\n When As Eve attempt guessing, category selection or state-changing controls.\n Then Observer cannot change game state and earns no score.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nUI control absence is insufficient proof of server rejection; retain separate authority tests and mark bypass denial as technical coverage.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028" }, { "id": "TEST-INROUNDEMOJIREACTION-029", "notes": "Original acceptance criterion: AC-29; canonical MCP ID: TEST-INROUNDEMOJIREACTION-029. Original criterion AC-29; cases AC-29-T01, AC-29-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-029. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-INROUNDEMOJIREACTION-029\n# TEST-INROUNDEMOJIREACTION-029 \u2014 AC-29: In-round emoji reaction\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a round is active, when a player selects an emoji from the menu, then the reaction appears in real time to room players and observers and does not change scores, answer stage, or round state.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-INROUNDEMOJIREACTION-029\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-REACTIONS-021#AC-29\u0060; \u0060TR-REACTION-DELIVERY-019#DEC-18\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice, Bob and observer Eve share an active round. |\n| Test data | Approved menu \uD83D\uDC4D \u2764\uFE0F \uD83D\uDE02 \uD83C\uDF89 \uD83D\uDC40; select \uD83C\uDF89; initial scores and stage recorded. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Alice select \uD83C\uDF89 from the menu and observe Bob and Eve. | The same reaction appears to players and observers in real time. |\n| 2 | Inspect scores/stage, then observe expiry and rate boundary in separate examples. | Scores/stage do not change; reaction expires at 5 seconds; a second reaction before 2 seconds is denied and at 2 seconds is allowed. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-29: In-round emoji reaction\n Scenario: TEST-INROUNDEMOJIREACTION-029 documented design obligation\n Given Alice, Bob and observer Eve share an active round.\n And the test data is Approved menu \uD83D\uDC4D \u2764\uFE0F \uD83D\uDE02 \uD83C\uDF89 \uD83D\uDC40; select \uD83C\uDF89; initial scores and stage recorded.\n When As Alice select \uD83C\uDF89 from the menu and observe Bob and Eve.\n Then The same reaction appears to players and observers in real time.\n When Inspect scores/stage, then observe expiry and rate boundary in separate examples.\n Then Scores/stage do not change; reaction expires at 5 seconds; a second reaction before 2 seconds is denied and at 2 seconds is allowed.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-INROUNDEMOJIREACTION-029" }, { "id": "TEST-PRECOUNTDOWNOBSERVERPROMOTION-030", "notes": "Original acceptance criterion: AC-30; canonical MCP ID: TEST-PRECOUNTDOWNOBSERVERPROMOTION-030. Original criterion AC-30; cases AC-30-T01, AC-30-T02, AC-30-T03, AC-30-T04. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-030. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-PRECOUNTDOWNOBSERVERPROMOTION-030\n# TEST-PRECOUNTDOWNOBSERVERPROMOTION-030 \u2014 AC-30: Pre-countdown observer promotion\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a room is full and the start countdown has not begun, when a player leaves and at least one observer is waiting, then the observer who entered observer mode earliest becomes the final player in the roster, existing players move up to close the vacancy while preserving their relative order, and any remaining observers stay observers.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PRECOUNTDOWNOBSERVERPROMOTION-030\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_room_creation.svg](../../../word_association_room_creation.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-2, my-svg-flowchart-D-3, my-svg-flowchart-E-5, my-svg-flowchart-H-7, my-svg-flowchart-I-9, my-svg-flowchart-J-11, my-svg-flowchart-F-13, my-svg-flowchart-G-17; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-OBSERVERS-020#AC-30\u0060; \u0060FR-LOBBYLIFECYCLE-003#AC-30\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Full waiting roster Alice, Bob, Cara; observers Eve then Finn; countdown not started. |\n| Test data | Observer arrival order Eve older; equal-arrival variant resolves by stable profile ID. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Have Bob leave before countdown. | Remaining players Alice/Cara keep relative order; Eve is promoted to the last player position. |\n| 2 | Inspect observers. | Finn remains an observer; player capacity is not exceeded. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-30: Pre-countdown observer promotion\n Scenario: TEST-PRECOUNTDOWNOBSERVERPROMOTION-030 documented design obligation\n Given Full waiting roster Alice, Bob, Cara; observers Eve then Finn; countdown not started.\n And the test data is Observer arrival order Eve older; equal-arrival variant resolves by stable profile ID.\n When Have Bob leave before countdown.\n Then Remaining players Alice/Cara keep relative order; Eve is promoted to the last player position.\n When Inspect observers.\n Then Finn remains an observer; player capacity is not exceeded.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PRECOUNTDOWNOBSERVERPROMOTION-030" }, { "id": "TEST-READYCOUNTDOWNANDROSTERLOCK-031", "notes": "Original acceptance criterion: AC-31; canonical MCP ID: TEST-READYCOUNTDOWNANDROSTERLOCK-031. Original criterion AC-31; cases AC-31-T01, AC-31-T02, AC-31-T03, AC-31-T04. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-031. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-READYCOUNTDOWNANDROSTERLOCK-031\n# TEST-READYCOUNTDOWNANDROSTERLOCK-031 \u2014 AC-31: Ready countdown and roster lock\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given every player in the room has marked ready, when the final ready state is received, then the game start countdown begins immediately and the player roster locks. If a player leaves after the countdown begins, then no observer or other player is promoted or substituted into that player\u2019s place.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-READYCOUNTDOWNANDROSTERLOCK-031\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-LOBBYLIFECYCLE-003#AC-31\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Two or more players are in a waiting room; an observer is available. |\n| Test data | Alice and Bob; countdown 10 seconds; original roster recorded. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Mark every player ready. | The 10-second start countdown begins and roster locks immediately. |\n| 2 | Have one original player leave and try substituting an observer. | No substitution occurs; if fewer than two original members remain at expiry the game aborts and closes. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-31: Ready countdown and roster lock\n Scenario: TEST-READYCOUNTDOWNANDROSTERLOCK-031 documented design obligation\n Given Two or more players are in a waiting room; an observer is available.\n And the test data is Alice and Bob; countdown 10 seconds; original roster recorded.\n When Mark every player ready.\n Then The 10-second start countdown begins and roster locks immediately.\n When Have one original player leave and try substituting an observer.\n Then No substitution occurs; if fewer than two original members remain at expiry the game aborts and closes.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nRetain the specified 10-second timing condition; do not implement synchronization with a fixed sleep.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-READYCOUNTDOWNANDROSTERLOCK-031" }, { "id": "TEST-HOLDOUTWARNINGANDREMOVAL-032", "notes": "Original acceptance criterion: AC-32; canonical MCP ID: TEST-HOLDOUTWARNINGANDREMOVAL-032. Original criterion AC-32; cases AC-32-T01, AC-32-T02, AC-32-T03, AC-32-T04, AC-32-T01, AC-32-T02. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-032. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-HOLDOUTWARNINGANDREMOVAL-032\n# TEST-HOLDOUTWARNINGANDREMOVAL-032 \u2014 AC-32: Holdout warning and removal\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given all but one player have marked ready, when the room enters the holdout state, then the unready player sees a five-second warning to mark ready. If they mark ready before it expires, the start countdown begins immediately. If the warning expires while they remain unready in a room with more than two players, they are removed and the start countdown begins with the remaining roster locked. If the room has exactly two players, the holdout is not removed and the lobby continues waiting; the countdown does not begin until both are ready.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-HOLDOUTWARNINGANDREMOVAL-032\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-LOBBYLIFECYCLE-003#AC-32\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Independent waiting-room fixtures have either two or three players with all but Bob ready. |\n| Test data | 5-second holdout warning; Bob remains unready or becomes ready before expiry. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Observe Bob\u0027s warning and mark him ready before it expires in one run. | Countdown starts immediately when Bob becomes ready. |\n| 2 | Let warning expire without readiness in three-player and two-player runs. | Three-player run removes Bob and starts locked countdown; two-player run retains Bob and waits for both players. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-32: Holdout warning and removal\n Scenario: TEST-HOLDOUTWARNINGANDREMOVAL-032 documented design obligation\n Given Independent waiting-room fixtures have either two or three players with all but Bob ready.\n And the test data is 5-second holdout warning; Bob remains unready or becomes ready before expiry.\n When Observe Bob\u0027s warning and mark him ready before it expires in one run.\n Then Countdown starts immediately when Bob becomes ready.\n When Let warning expire without readiness in three-player and two-player runs.\n Then Three-player run removes Bob and starts locked countdown; two-player run retains Bob and waits for both players.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-HOLDOUTWARNINGANDREMOVAL-032" }, { "id": "TEST-IDLELOBBYREADINESSPROMPT-033", "notes": "Original acceptance criterion: AC-33; canonical MCP ID: TEST-IDLELOBBYREADINESSPROMPT-033. Original criterion AC-33; cases AC-33-T01, AC-33-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-033. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-IDLELOBBYREADINESSPROMPT-033\n# TEST-IDLELOBBYREADINESSPROMPT-033 \u2014 AC-33: Idle lobby readiness prompt\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given the game start countdown has not begun, when no player/observer membership or ready-state change occurs for 30 seconds, then the game prompts all players once for that room version to mark themselves ready; any membership or ready-state change resets the interval.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-IDLELOBBYREADINESSPROMPT-033\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-LOBBYLIFECYCLE-003#AC-33\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Room is waiting without countdown and its current membership/readiness version is recorded. |\n| Test data | 30-second unchanged interval; one ready-state or observer membership change. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Keep the room version unchanged through the idle deadline. | All players receive one ready prompt for that version, with no repeated prompts for the same unchanged version. |\n| 2 | Change readiness or membership, then await the next idle deadline. | The idle interval restarts from the change; a new prompt appears only for the later unchanged version. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-33: Idle lobby readiness prompt\n Scenario: TEST-IDLELOBBYREADINESSPROMPT-033 documented design obligation\n Given Room is waiting without countdown and its current membership/readiness version is recorded.\n And the test data is 30-second unchanged interval; one ready-state or observer membership change.\n When Keep the room version unchanged through the idle deadline.\n Then All players receive one ready prompt for that version, with no repeated prompts for the same unchanged version.\n When Change readiness or membership, then await the next idle deadline.\n Then The idle interval restarts from the change; a new prompt appears only for the later unchanged version.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-IDLELOBBYREADINESSPROMPT-033" }, { "id": "TEST-FREETIERQUOTAHANDLING-037", "notes": "Original acceptance criterion: AC-37; canonical MCP ID: TEST-FREETIERQUOTAHANDLING-037. Original criterion AC-37; cases AC-37-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-037. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-FREETIERQUOTAHANDLING-037\n# TEST-FREETIERQUOTAHANDLING-037 \u2014 AC-37: Free-tier quota handling\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a Supabase Free quota is reached, when a room or database operation cannot be served, then the game reports a recoverable service-limit state and does not silently switch to a paid resource.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-FREETIERQUOTAHANDLING-037\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060TR-FREETIER-OPERATION-021#TR-21-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | An isolated controllable fixture can make room operations return a quota/service-limit result. |\n| Test data | Recoverable service-limit outcome; existing accepted score 5. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Partial: controlled quota response and safe recovery fixture required; UI cannot establish infrastructure billing behavior. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Attempt a room operation while the fixture reports quota exhaustion. | The UI reports a recoverable service-limit state; existing score remains 5. |\n| 2 | Restore service and retry using the documented canonical retry behavior. | The operation can recover without duplicated state or silent paid-resource substitution. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-37: Free-tier quota handling\n Scenario: TEST-FREETIERQUOTAHANDLING-037 documented design obligation\n Given An isolated controllable fixture can make room operations return a quota/service-limit result.\n And the test data is Recoverable service-limit outcome; existing accepted score 5.\n When Attempt a room operation while the fixture reports quota exhaustion.\n Then The UI reports a recoverable service-limit state; existing score remains 5.\n When Restore service and retry using the documented canonical retry behavior.\n Then The operation can recover without duplicated state or silent paid-resource substitution.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-FREETIERQUOTAHANDLING-037" }, { "id": "TEST-PUBLICGAMELANDINGPAGE-043", "notes": "Original acceptance criterion: AC-43; canonical MCP ID: TEST-PUBLICGAMELANDINGPAGE-043. Original criterion AC-43; cases AC-43-T01, AC-43-T02, AC-43-T03, AC-43-T01, AC-43-T02. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-043. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-PUBLICGAMELANDINGPAGE-043\n# TEST-PUBLICGAMELANDINGPAGE-043 \u2014 AC-43: Public game landing page\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an unauthenticated visitor opens the game landing page, when the page loads, then it presents an all-time leaderboard ranked by lifetime wins, total points, earliest win, and stable profile ID; discoverable lobby cards with exact player count/capacity, waiting state, and room age; and a concise versioned rules summary. It uses generated public aliases, honors opt-outs, excludes room codes and private room/game data, and provides usable empty/unavailable states.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PUBLICGAMELANDINGPAGE-043\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix; [word_association_lobby_discovery.svg](../../../word_association_lobby_discovery.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-PUBLICLANDING-022#AC-43\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Visitor is signed out and a public-data fixture includes leaderboard/lobby results. |\n| Test data | Alias Oak wins 10 points 100; Ash wins 9 points 200; opted-out Pine; public lobby 1/2; empty and unavailable variants. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open the landing page while signed out. | Leaderboard, public lobbies and versioned rules are visible; Oak ranks above Ash by wins; Pine is omitted. |\n| 2 | Repeat with empty data and unavailable service. | Usable empty/unavailable states are shown; private room code and player-specific state never appear. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-43: Public game landing page\n Scenario: TEST-PUBLICGAMELANDINGPAGE-043 documented design obligation\n Given Visitor is signed out and a public-data fixture includes leaderboard/lobby results.\n And the test data is Alias Oak wins 10 points 100; Ash wins 9 points 200; opted-out Pine; public lobby 1/2; empty and unavailable variants.\n When Open the landing page while signed out.\n Then Leaderboard, public lobbies and versioned rules are visible; Oak ranks above Ash by wins; Pine is omitted.\n When Repeat with empty data and unavailable service.\n Then Usable empty/unavailable states are shown; private room code and player-specific state never appear.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nAlso vary equal wins using total points, earliest win and stable profile ID; exact empty/error copy remains unspecified.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PUBLICGAMELANDINGPAGE-043" }, { "id": "TEST-ACCESSIBLEGAMECONTROLS-044", "notes": "Original acceptance criterion: AC-44; canonical MCP ID: TEST-ACCESSIBLEGAMECONTROLS-044. Original criterion AC-44; cases AC-44-T01, AC-44-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-044. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ACCESSIBLEGAMECONTROLS-044\n# TEST-ACCESSIBLEGAMECONTROLS-044 \u2014 AC-44: Accessible game controls\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given a player uses a phone-sized viewport in portrait or landscape, when they operate primary game actions with touch or keyboard and view text over category backgrounds, then the actions remain operable, text and controls retain clear contrast, focus is visible, and selected icon, solved status, and score changes are indicated by labels or shapes as well as color.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ACCESSIBLEGAMECONTROLS-044\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-RESPONSIVEUI-015#AC-44\u0060; \u0060TR-UI-ACCESSIBILITY-012#TR-12-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Phone-sized active game has category background, selectable icon and score updates. |\n| Test data | Portrait 390x844, landscape 844x390 (test configurations); keyboard and touch; fox selected, Alice solved. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Use keyboard focus and touch for primary actions in both orientations. | Actions are operable, focus is visible and text/control contrast remains clear over category art. |\n| 2 | Inspect selected icon, Alice\u0027s solved state and score change without relying on color. | Labels or shapes distinguish selection, solved status and changed score. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-44: Accessible game controls\n Scenario: TEST-ACCESSIBLEGAMECONTROLS-044 documented design obligation\n Given Phone-sized active game has category background, selectable icon and score updates.\n And the test data is Portrait 390x844, landscape 844x390 (test configurations); keyboard and touch; fox selected, Alice solved.\n When Use keyboard focus and touch for primary actions in both orientations.\n Then Actions are operable, focus is visible and text/control contrast remains clear over category art.\n When Inspect selected icon, Alice\u0027s solved state and score change without relying on color.\n Then Labels or shapes distinguish selection, solved status and changed score.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nNo numeric contrast ratio or WCAG level is invented; quantitative compliance targets remain Q-A11Y-01.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ACCESSIBLEGAMECONTROLS-044" }, { "id": "TEST-AUTHORITATIVEANSWERHANDLING-045", "notes": "Original acceptance criterion: AC-45; canonical MCP ID: TEST-AUTHORITATIVEANSWERHANDLING-045. Original criterion AC-45; cases AC-45-T01, AC-45-T02, AC-45-T03, AC-45-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-045. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-AUTHORITATIVEANSWERHANDLING-045\n# TEST-AUTHORITATIVEANSWERHANDLING-045 \u2014 AC-45: Authoritative answer handling\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an unsolved player submits an answer for the current stage, when the server checks it against the target and approved accepted-answer list, then only a correct answer is accepted and scored once for that stage; an incorrect answer does not change score or expose guess text to other players; and the target answer remains unavailable to clients until round reveal.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-AUTHORITATIVEANSWERHANDLING-045\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_round_flow.svg](../../../word_association_round_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15, my-svg-flowchart-J-19, my-svg-flowchart-K-21, my-svg-flowchart-L-23, my-svg-flowchart-M-27; [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ANSWERSTAGES-008#AC-45\u0060; \u0060TR-ANSWER-VALIDATION-004#DEC-03\u0060; \u0060TR-ANSWER-CONFIDENTIALITY-005#TR-05-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice is unsolved with one permitted answer per stage and Bob watches another client. |\n| Test data | Target Cold; accepted alternative chilly; inputs \u0022 COLD \u0022, \u0022chilly\u0022, \u0022Cold!\u0022, \u0022warm\u0022 in independent stages. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Submit each input in independent fixtures. | Normalized canonical and listed alternative score once; punctuation-modified Cold! and warm do not score. |\n| 2 | Inspect Bob\u0027s view before reveal and attempt a second same-stage submission. | Bob sees no guess text or unrevealed target; a second submission cannot award additional points. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-45: Authoritative answer handling\n Scenario: TEST-AUTHORITATIVEANSWERHANDLING-045 documented design obligation\n Given Alice is unsolved with one permitted answer per stage and Bob watches another client.\n And the test data is Target Cold; accepted alternative chilly; inputs \u0022 COLD \u0022, \u0022chilly\u0022, \u0022Cold!\u0022, \u0022warm\u0022 in independent stages.\n When Submit each input in independent fixtures.\n Then Normalized canonical and listed alternative score once; punctuation-modified Cold! and warm do not score.\n When Inspect Bob\u0027s view before reveal and attempt a second same-stage submission.\n Then Bob sees no guess text or unrevealed target; a second submission cannot award additional points.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-AUTHORITATIVEANSWERHANDLING-045" }, { "id": "TEST-OIDCTOKENVALIDATION-046", "notes": "Original acceptance criterion: AC-46; canonical MCP ID: TEST-OIDCTOKENVALIDATION-046. Original criterion AC-46; cases AC-46-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-046. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-OIDCTOKENVALIDATION-046\n# TEST-OIDCTOKENVALIDATION-046 \u2014 AC-46: OIDC token validation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an OIDC identity provider is configured, when a sign-in callback presents a token with an invalid signature, issuer, audience, state, nonce, or expiry, then the service rejects the sign-in and does not create or associate an authenticated profile from the unverified identity.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-OIDCTOKENVALIDATION-046\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_identity_profile.svg](../../../word_association_identity_profile.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-13 |\n| Covered FR/TR and criteria | \u0060FR-IDENTITY-018#AC-46\u0060; \u0060TR-IDENTITY-AUTHENTICATION-016#TR-16-C01\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Controlled OIDC provider can issue invalid callback inputs without contacting real users. |\n| Test data | Separate invalid signature, issuer, audience, state, nonce and expiry examples. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Partial: safe provider/callback fixture required; exact failure-screen copy and browser-back destination are unresolved in Q-NAV-01. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Choose sign-in and return each invalid callback. | Sign-in is rejected and no authenticated profile is created or associated with the unverified subject. |\n| 2 | Return to public/guest entry. | The visitor can still use the documented unauthenticated path; private identity claims are not exposed. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-46: OIDC token validation\n Scenario: TEST-OIDCTOKENVALIDATION-046 documented design obligation\n Given Controlled OIDC provider can issue invalid callback inputs without contacting real users.\n And the test data is Separate invalid signature, issuer, audience, state, nonce and expiry examples.\n When Choose sign-in and return each invalid callback.\n Then Sign-in is rejected and no authenticated profile is created or associated with the unverified subject.\n When Return to public/guest entry.\n Then The visitor can still use the documented unauthenticated path; private identity claims are not exposed.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-OIDCTOKENVALIDATION-046" }, { "id": "TEST-MODERATIONANDCATALOGBOUNDARY-047", "notes": "Original acceptance criterion: AC-47; canonical MCP ID: TEST-MODERATIONANDCATALOGBOUNDARY-047. Original criterion AC-47; cases AC-47-T01, AC-47-T02, AC-47-T03, AC-47-T01, AC-47-T02, AC-47-T03. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-047. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-MODERATIONANDCATALOGBOUNDARY-047\n# TEST-MODERATIONANDCATALOGBOUNDARY-047 \u2014 AC-47: Moderation and catalog boundary\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an actor is not authorized to perform moderation or catalog activation, when they attempt to change moderation status or publish content, then the service rejects the action; every change to nomination count, moderation status, and eligibility is auditable; and content cannot be selected for play until it has passed moderation and is complete in the curated catalog.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-MODERATIONANDCATALOGBOUNDARY-047\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_nomination_flow.svg](../../../word_association_nomination_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-11, my-svg-flowchart-G-13, my-svg-flowchart-H-15, my-svg-flowchart-I-17, my-svg-flowchart-J-19; [word_association_category_suggestion.svg](../../../word_association_category_suggestion.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15; [admin_acl_design.md](../../../admin_acl_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-NOMINATIONS-016#AC-47\u0060; \u0060FR-CATEGORYSUGGESTIONS-017#AC-47\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Player Alice proposes content; independent moderator Bob and senior moderator Cara are available. |\n| Test data | Pending nomination with 10 unique profiles; category suggestion with 3 pairs; reason Approved for fixture. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Alice attempt moderation or publication, then review as independent Bob. | Alice\u0027s changes are rejected; Bob\u0027s permitted reasoned decision is recorded in history. |\n| 2 | Inspect future playability before complete curation and after approved complete publication. | Approval alone does not make incomplete content playable; only approved complete content reaches future rounds. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-47: Moderation and catalog boundary\n Scenario: TEST-MODERATIONANDCATALOGBOUNDARY-047 documented design obligation\n Given Player Alice proposes content; independent moderator Bob and senior moderator Cara are available.\n And the test data is Pending nomination with 10 unique profiles; category suggestion with 3 pairs; reason Approved for fixture.\n When As Alice attempt moderation or publication, then review as independent Bob.\n Then Alice\u0027s changes are rejected; Bob\u0027s permitted reasoned decision is recorded in history.\n When Inspect future playability before complete curation and after approved complete publication.\n Then Approval alone does not make incomplete content playable; only approved complete content reaches future rounds.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nEvery count/decision/eligibility change needs audit verification; UI history covers visible consequences, not transaction atomicity.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-MODERATIONANDCATALOGBOUNDARY-047" }, { "id": "TEST-LANDINGPAGEPUBLICDATA-050", "notes": "Original acceptance criterion: AC-50; canonical MCP ID: TEST-LANDINGPAGEPUBLICDATA-050. Original criterion AC-50; cases AC-50-T01. Preserve all original independent expectations and semantic negative controls. Evidence docs/evidence/phase6/acceptance-mapping.json and docs/phase6_execution.md; later regression docs/admin_acl_review_receipt.json. Database/provider/deployment evidence does not substitute for AC coverage. Former provisional MCP ID: TEST-WP-050. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-LANDINGPAGEPUBLICDATA-050\n# TEST-LANDINGPAGEPUBLICDATA-050 \u2014 AC-50: Landing-page public data\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Given an unauthenticated visitor requests landing-page data, when the service responds, then it returns only lifetime-win ranking fields, opted-in generated aliases, exact counts/capacity, waiting state, room age, and rules version for public content; it does not expose room codes, real identity, guesses, target answers, observer-only views, moderation records, or secrets.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-LANDINGPAGEPUBLICDATA-050\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_game_requirements.md](../../../word_association_game_requirements.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-PUBLICLANDING-022#AC-50\u0060; \u0060TR-LANDING-PRIVACY-030#DEC-19\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Anonymous public fixture contains opted-in generated aliases and private room/player content. |\n| Test data | Known sentinel room code, OIDC subject, guess, target, moderation reason and secret absent from public projection. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open anonymous leaderboard/lobbies/rules and inspect the public representation. | Only allowed lifetime ranking fields, generated aliases, exact counts/capacity, waiting state, age and rules version are present. |\n| 2 | Search all rendered public content and authorized public response fields for sentinels. | No room code, real identity, private game/observer view, moderation record or secret is exposed. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: AC-50: Landing-page public data\n Scenario: TEST-LANDINGPAGEPUBLICDATA-050 documented design obligation\n Given Anonymous public fixture contains opted-in generated aliases and private room/player content.\n And the test data is Known sentinel room code, OIDC subject, guess, target, moderation reason and secret absent from public projection.\n When Open anonymous leaderboard/lobbies/rules and inspect the public representation.\n Then Only allowed lifetime ranking fields, generated aliases, exact counts/capacity, waiting state, age and rules version are present.\n When Search all rendered public content and authorized public response fields for sentinels.\n Then No room code, real identity, private game/observer view, moderation record or secret is exposed.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nResponse inspection is an observation seam for public confidentiality, independent of selector/driver choices.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-LANDINGPAGEPUBLICDATA-050" }, { "id": "TEST-CONNECTIONRECOVERY-109", "notes": "New verification/extension import key: TEST-WP-109; canonical MCP ID: TEST-CONNECTIONRECOVERY-109. Technical/integration or operational evidence only. Source TR-09. Existing commands and evidence limits: docs/testing.md; docs/phase6_execution.md; docs/deployment_plan.md. Former provisional MCP ID: TEST-WP-109. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CONNECTIONRECOVERY-109\n# TEST-CONNECTIONRECOVERY-109 \u2014 Verify TR-09: Connection handling\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Simulate lost response, reconnect, expiry and stale commands; assert same-command canonical retry, unchanged committed state and authoritative recovery.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CONNECTIONRECOVERY-109\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix; [room_sync_fix.md](../../../room_sync_fix.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060TR-CONNECTION-RECOVERY-009#TR-09-C01\u0060; \u0060TR-CONNECTION-RECOVERY-009#DEC-17\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice has an accepted score and a room membership; a separate client Bob remains connected. |\n| Test data | Accepted score 5; disconnected durations below and above 120-second grace; uncertain submission fixture. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Disconnect Alice, reconnect within grace and reopen the room. | Membership and accepted score persist; no duplicate submission is recorded. |\n| 2 | Repeat beyond grace and observe the normal departure rule for the current room phase. | Expired membership departs without corrupting scores; retry of an uncertain command retains its original command ID. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Verify TR-09: Connection handling\n Scenario: TEST-CONNECTIONRECOVERY-109 documented design obligation\n Given Alice has an accepted score and a room membership; a separate client Bob remains connected.\n And the test data is Accepted score 5; disconnected durations below and above 120-second grace; uncertain submission fixture.\n When Disconnect Alice, reconnect within grace and reopen the room.\n Then Membership and accepted score persist; no duplicate submission is recorded.\n When Repeat beyond grace and observe the normal departure rule for the current room phase.\n Then Expired membership departs without corrupting scores; retry of an uncertain command retains its original command ID.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nNetwork readiness and authoritative grace expiry are conditions; do not substitute a fixed sleep. Generic recovery copy is not specified.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CONNECTIONRECOVERY-109" }, { "id": "TEST-NOMINATIONMODERATION-114", "notes": "New verification/extension import key: TEST-WP-114; canonical MCP ID: TEST-NOMINATIONMODERATION-114. Technical/integration or operational evidence only. Source TR-14. Existing commands and evidence limits: docs/testing.md; docs/phase6_execution.md; docs/deployment_plan.md. Former provisional MCP ID: TEST-WP-114. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-NOMINATIONMODERATION-114\n# TEST-NOMINATIONMODERATION-114 \u2014 Verify TR-14: Candidate nomination and moderation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Exercise eligible no-hint nominations, one-per-round/profile, normalized distinct votes at9/10, independent review, rejection, one appeal and complete-record activation.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-NOMINATIONMODERATION-114\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_nomination_flow.svg](../../../word_association_nomination_flow.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-11, my-svg-flowchart-G-13, my-svg-flowchart-H-15, my-svg-flowchart-I-17, my-svg-flowchart-J-19 |\n| Covered FR/TR and criteria | \u0060TR-NOMINATION-MODERATION-014#DEC-07\u0060; \u0060TR-NOMINATION-MODERATION-014#DEC-08\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Alice has one eligible no-hint solve; candidate Moon is already nominated by Alice; independent moderator Bob, senior Cara. |\n| Test data | 9 then 10 unique profiles; duplicate Alice nomination; one appeal; reason Needs curation. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Attempt Alice\u0027s duplicate candidate nomination and a second candidate from the same solve. | Neither increases count or consumes an additional nomination. |\n| 2 | Reach 10 unique nominations, reject as independent Bob with reason, appeal once and resolve as independent senior Cara. | Review starts at 10; reason/history persist; only one appeal is accepted; proposer/original reviewer cannot resolve the appeal. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Verify TR-14: Candidate nomination and moderation\n Scenario: TEST-NOMINATIONMODERATION-114 documented design obligation\n Given Alice has one eligible no-hint solve; candidate Moon is already nominated by Alice; independent moderator Bob, senior Cara.\n And the test data is 9 then 10 unique profiles; duplicate Alice nomination; one appeal; reason Needs curation.\n When Attempt Alice\u0027s duplicate candidate nomination and a second candidate from the same solve.\n Then Neither increases count or consumes an additional nomination.\n When Reach 10 unique nominations, reject as independent Bob with reason, appeal once and resolve as independent senior Cara.\n Then Review starts at 10; reason/history persist; only one appeal is accepted; proposer/original reviewer cannot resolve the appeal.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThe diagram\u0027s separate \u0022hold\u0022 outcome has no defined status contract: Q-MOD-02 remains blocked.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-NOMINATIONMODERATION-114" }, { "id": "TEST-SUGGESTIONREVIEW-115", "notes": "New verification/extension import key: TEST-WP-115; canonical MCP ID: TEST-SUGGESTIONREVIEW-115. Technical/integration or operational evidence only. Source TR-15. Existing commands and evidence limits: docs/testing.md; docs/phase6_execution.md; docs/deployment_plan.md. Former provisional MCP ID: TEST-WP-115. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-SUGGESTIONREVIEW-115\n# TEST-SUGGESTIONREVIEW-115 \u2014 Verify TR-15: Category suggestion eligibility and review\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Exercise lifetime wins at9/10, one open suggestion and exactly three pairs; reject unauthorized/incomplete activation and require independent review.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-SUGGESTIONREVIEW-115\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_category_suggestion.svg](../../../word_association_category_suggestion.svg) \u2014 frame IDs my-svg-flowchart-A-0, my-svg-flowchart-B-1, my-svg-flowchart-C-3, my-svg-flowchart-D-5, my-svg-flowchart-E-7, my-svg-flowchart-F-9, my-svg-flowchart-G-11, my-svg-flowchart-H-13, my-svg-flowchart-I-15 |\n| Covered FR/TR and criteria | \u0060TR-SUGGESTION-REVIEW-015#TR-15-C01\u0060; \u0060FR-CATEGORYSUGGESTIONS-017#DEC-08\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Bob has 10 lifetime wins, one open three-pair suggestion and no independent review yet. |\n| Test data | Category Space with exactly 3 pairs; independent moderator Alice; one appeal to senior Cara. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Try opening another suggestion, then independently review the existing submission with a reason. | Only one suggestion remains open and the reasoned independent decision is recorded. |\n| 2 | For a rejected example appeal once; for approved example complete required curation before activation. | Only permitted independent senior resolution succeeds; approved incomplete pairs are never playable. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Verify TR-15: Category suggestion eligibility and review\n Scenario: TEST-SUGGESTIONREVIEW-115 documented design obligation\n Given Bob has 10 lifetime wins, one open three-pair suggestion and no independent review yet.\n And the test data is Category Space with exactly 3 pairs; independent moderator Alice; one appeal to senior Cara.\n When Try opening another suggestion, then independently review the existing submission with a reason.\n Then Only one suggestion remains open and the reasoned independent decision is recorded.\n When For a rejected example appeal once; for approved example complete required curation before activation.\n Then Only permitted independent senior resolution succeeds; approved incomplete pairs are never playable.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThe diagram\u0027s \u0022request changes\u0022 action lacks a defined resubmission/status contract: Q-MOD-01 remains blocked.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-SUGGESTIONREVIEW-115" }, { "id": "TEST-ACLAUTHORIZATION-132", "notes": "New verification/extension import key: TEST-WP-132; canonical MCP ID: TEST-ACLAUTHORIZATION-132. Actual test sources: tests/application/access.test.ts, tests/application/catalog-admin.test.ts, tests/web/admin-api.test.ts, tests/integration/admin.integration.ts, tests/integration/multiplayer.integration.ts, tests/browser/admin.phase6.spec.ts. Match the applicable suite to this requirement; do not claim all suites prove every boundary. Former provisional MCP ID: TEST-WP-132. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ACLAUTHORIZATION-132\n# TEST-ACLAUTHORIZATION-132 \u2014 Verify Server-authoritative ACL transactions\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Enforce permissions in authenticated HTTP/application code and privileged SQL functions, with shared ACL locking for content writes and exclusive locking for role mutations. Validate identity/origin, strict allowlists, expected revision, digest/retry semantics and bounded private projections.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ACLAUTHORIZATION-132\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [admin_acl_design.md](../../../admin_acl_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ACCESSCONTROL-024#FR-24-C01\u0060; \u0060FR-ACCESSCONTROL-024#FR-24-C02\u0060; \u0060FR-ACCESSCONTROL-024#FR-24-C03\u0060; \u0060FR-ACCESSCONTROL-024#FR-24-C04\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Synthetic existing profiles have player/moderator/senior/admin roles; configured admin IDs are server-only. |\n| Test data | Admin Ada; moderator Mo; senior Sam; player Pat; server-configured Ada; reason Fixture role grant. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | As Ada grant moderator to Pat with a reason; open staff pages as Pat; revoke that role and retry. | Grant enables only moderation/word editing; revocation denies new privileged actions and history retains reason. |\n| 2 | Try user management as Mo/Sam and removal of configured/final administrator through the UI. | Only administrators manage roles; configured admin and final effective admin cannot be revoked. |\n| 3 | Inspect bounded user directory/history. | Only permitted profile metadata/effective roles appear; emails, OIDC subjects and credentials are absent. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Verify Server-authoritative ACL transactions\n Scenario: TEST-ACLAUTHORIZATION-132 documented design obligation\n Given Synthetic existing profiles have player/moderator/senior/admin roles; configured admin IDs are server-only.\n And the test data is Admin Ada; moderator Mo; senior Sam; player Pat; server-configured Ada; reason Fixture role grant.\n When As Ada grant moderator to Pat with a reason; open staff pages as Pat; revoke that role and retry.\n Then Grant enables only moderation/word editing; revocation denies new privileged actions and history retains reason.\n When Try user management as Mo/Sam and removal of configured/final administrator through the UI.\n Then Only administrators manage roles; configured admin and final effective admin cannot be revoked.\n When Inspect bounded user directory/history.\n Then Only permitted profile metadata/effective roles appear; emails, OIDC subjects and credentials are absent.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nUI consequences do not prove concurrent cross-revocation serialization, atomic audit or private environment handling; retain separate technical evidence.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ACLAUTHORIZATION-132" }, { "id": "TEST-CATALOGVERSIONING-133", "notes": "New verification/extension import key: TEST-WP-133; canonical MCP ID: TEST-CATALOGVERSIONING-133. Actual test sources: tests/application/access.test.ts, tests/application/catalog-admin.test.ts, tests/web/admin-api.test.ts, tests/integration/admin.integration.ts, tests/integration/multiplayer.integration.ts, tests/browser/admin.phase6.spec.ts. Match the applicable suite to this requirement; do not claim all suites prove every boundary. Former provisional MCP ID: TEST-WP-133. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-CATALOGVERSIONING-133\n# TEST-CATALOGVERSIONING-133 \u2014 Verify Immutable and bounded catalog publication\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Route editorial and community publication through the serialized moderation transaction and catalog projection, preserving exact version lookup, audit/outbox atomicity and the historical version ceiling.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-CATALOGVERSIONING-133\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [admin_acl_design.md](../../../admin_acl_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-WORDHINTEDITOR-025#FR-25-C01\u0060; \u0060FR-WORDHINTEDITOR-025#FR-25-C02\u0060; \u0060FR-WORDHINTEDITOR-025#FR-25-C03\u0060; \u0060FR-WORDHINTEDITOR-025#FR-25-C04\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Mo may edit words; an active round holds pair Hot/Cold version 0; future games can select published versions. |\n| Test data | Exactly 3 ordered hints; replacement target Chilly; invalid 2/4 hints; reason Fixture edit. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Save invalid 2-hint and 4-hint versions, then a complete 3-hint next revision. | Invalid saves do not mutate content; valid edit appends the next version without moving categories. |\n| 2 | Observe the active round, start a future round, and exclude latest pair with a reason. | Active round retains version 0; future pool uses highest selectable version and never falls back to an older excluded version. |\n| 3 | Try excluding the last playable initial-category pair and publishing at the 4096-version ceiling. | Both are rejected without deleting history or emptying the category. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Verify Immutable and bounded catalog publication\n Scenario: TEST-CATALOGVERSIONING-133 documented design obligation\n Given Mo may edit words; an active round holds pair Hot/Cold version 0; future games can select published versions.\n And the test data is Exactly 3 ordered hints; replacement target Chilly; invalid 2/4 hints; reason Fixture edit.\n When Save invalid 2-hint and 4-hint versions, then a complete 3-hint next revision.\n Then Invalid saves do not mutate content; valid edit appends the next version without moving categories.\n When Observe the active round, start a future round, and exclude latest pair with a reason.\n Then Active round retains version 0; future pool uses highest selectable version and never falls back to an older excluded version.\n When Try excluding the last playable initial-category pair and publishing at the 4096-version ceiling.\n Then Both are rejected without deleting history or emptying the category.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nActual immutable persistence and atomic ceiling checks need separate database evidence, not just the form outcome.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-CATALOGVERSIONING-133" }, { "id": "TEST-ADMINUI-136", "notes": "New verification/extension import key: TEST-WP-136; canonical MCP ID: TEST-ADMINUI-136. Browser HTTP seams are disclosed; real PostgreSQL authority is separately verified by TEST-WP-132/133. Former provisional MCP ID: TEST-WP-136. Replaced at user request with a subject-identifying ID.\n\nBEGIN UI-CASE TEST-ADMINUI-136\n# TEST-ADMINUI-136 \u2014 Administration browser flows and private-state invalidation\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Provide dedicated pages for moderation, word-pair/hint management and user-role administration.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ADMINUI-136\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [admin_acl_design.md](../../../admin_acl_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-ADMINPAGES-023#FR-23-C01\u0060; \u0060FR-ADMINPAGES-023#FR-23-C02\u0060; \u0060FR-ADMINPAGES-023#FR-23-C03\u0060; \u0060FR-ADMINPAGES-023#FR-23-C04\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Independent player, moderator, senior and administrator profiles exist with pending/appealed/approved/completed content. |\n| Test data | Routes /admin, /admin/words, /admin/users; searchable synthetic aliases; reason Fixture review. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Visit all three routes as player and then each authorized staff role; search/filter queue, words and user directory. | Player sees denied state; role-appropriate bounded records/controls appear; no private records leak. |\n| 2 | Make a reasoned permitted decision; inspect history; simulate authorization loss while an older GET remains pending. | History retains the decision; a late old response cannot restore private data after denial. |\n| 3 | Simulate an uncertain write, retry the pending operation, and use forms at 390x844. | Retry preserves command identity, successful draft clears once, no duplicate write is shown, and phone forms remain operable. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Administration browser flows and private-state invalidation\n Scenario: TEST-ADMINUI-136 documented design obligation\n Given Independent player, moderator, senior and administrator profiles exist with pending/appealed/approved/completed content.\n And the test data is Routes /admin, /admin/words, /admin/users; searchable synthetic aliases; reason Fixture review.\n When Visit all three routes as player and then each authorized staff role; search/filter queue, words and user directory.\n Then Player sees denied state; role-appropriate bounded records/controls appear; no private records leak.\n When Make a reasoned permitted decision; inspect history; simulate authorization loss while an older GET remains pending.\n Then History retains the decision; a late old response cannot restore private data after denial.\n When Simulate an uncertain write, retry the pending operation, and use forms at 390x844.\n Then Retry preserves command identity, successful draft clears once, no duplicate write is shown, and phone forms remain operable.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ADMINUI-136" }, { "id": "TEST-PWAINSTALL-137", "notes": "Source: user request2026-10-27: The game needs to be installable as a PWA on phones. Design and criteria: docs/pwa_design.md. Browser/worker evidence does not establish installation on physical Android/iPhone hardware. HostedHTTPS deployment remains future operational work.\n\nBEGIN UI-CASE TEST-PWAINSTALL-137\n# TEST-PWAINSTALL-137 \u2014 Manifest, icons and phone installation contracts\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Verify actual manifest/icon bytes and Apple/viewport metadata; test secure registration, failures, accepted/dismissed/rejected one-shot install prompts, standalone/appinstalled state and listener cleanup. Production Chromium diagnostics and phone/iPhone-UA layouts verify web install prerequisites; physical OS installation remains an unverified operational check.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PWAINSTALL-137\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [pwa_design.md](../../../pwa_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-PHONEINSTALL-026#PWA-03\u0060; \u0060FR-PHONEINSTALL-026#PWA-04\u0060; \u0060FR-PHONEINSTALL-026#PWA-05\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Phone browser opens a secure Wordpairs origin; separate native-event and unsupported-browser fixtures exist. |\n| Test data | Android Chromium; iPhone Safari guidance; 390x844; dismissed/accepted/rejected native prompt fixtures. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Partial: synthetic browser prompt lifecycle is automatable; real OS installation requires an HTTPS origin and physical devices. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Open install help without a native prompt event, then on an insecure origin in a separate run. | Android menu/iPhone Share guidance is usable; insecure origin explains HTTPS instead of presenting a nonfunctional native prompt. |\n| 2 | Provide an install event, click Install once, dismiss/reject, then supply a fresh event. | One event prompts at most once; cancellation retains manual guidance; only a fresh event enables another prompt. |\n| 3 | Enter standalone/appinstalled state and simulate registration failure separately. | Install controls hide in installed mode; registration failure does not break gameplay. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Manifest, icons and phone installation contracts\n Scenario: TEST-PWAINSTALL-137 documented design obligation\n Given Phone browser opens a secure Wordpairs origin; separate native-event and unsupported-browser fixtures exist.\n And the test data is Android Chromium; iPhone Safari guidance; 390x844; dismissed/accepted/rejected native prompt fixtures.\n When Open install help without a native prompt event, then on an insecure origin in a separate run.\n Then Android menu/iPhone Share guidance is usable; insecure origin explains HTTPS instead of presenting a nonfunctional native prompt.\n When Provide an install event, click Install once, dismiss/reject, then supply a fresh event.\n Then One event prompts at most once; cancellation retains manual guidance; only a fresh event enables another prompt.\n When Enter standalone/appinstalled state and simulate registration failure separately.\n Then Install controls hide in installed mode; registration failure does not break gameplay.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nPhysical Android/iPhone home-screen installation and manifest/icon metadata are separate verification obligations, not proven by emulation.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PWAINSTALL-137" }, { "id": "TEST-PWAPRIVACY-138", "notes": "Source: user request2026-10-27: The game needs to be installable as a PWA on phones. Design and criteria: docs/pwa_design.md. Browser/worker evidence does not establish installation on physical Android/iPhone hardware. HostedHTTPS deployment remains future operational work.\n\nBEGIN UI-CASE TEST-PWAPRIVACY-138\n# TEST-PWAPRIVACY-138 \u2014 Real worker offline, private traffic and update safety\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Run worker lifecycle negative controls and a production real-service-worker browser journey through online/offline/reconnect. Inspect CacheStorage after API/auth/private navigation, ensure offline GET/POSTAPI fails without HTML fallback, unrelated caches survive activation and no forced update reload is used.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-PWAPRIVACY-138\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [pwa_design.md](../../../pwa_design.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060FR-PHONEINSTALL-026#PWA-06\u0060; \u0060FR-PHONEINSTALL-026#PWA-07\u0060; \u0060FR-PHONEINSTALL-026#PWA-08\u0060 |\n| Priority | high, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | A real worker controls the page; a private room has been visited; an unrelated origin cache also exists. |\n| Test data | Offline navigation, private API GET and mutation POST; pending worker update during active round. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Ready for automation once isolated UI fixture seeding and observations are available; documentation only. |\n| Execution | Not executed in this documentation run. Existing record status \u0060completed\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Disconnect and navigate, then attempt private reads/mutations. | Navigation shows static reconnect guidance; private requests fail rather than receive cached private data or offline HTML. |\n| 2 | Inspect worker caches, restore connectivity and reload through the UI. | Only static allowlisted Wordpairs resources are cached; online live site returns. |\n| 3 | Install a new worker version during an active round and later activate after clients close. | No forced in-match reload/activation occurs; unrelated cache survives cleanup. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Real worker offline, private traffic and update safety\n Scenario: TEST-PWAPRIVACY-138 documented design obligation\n Given A real worker controls the page; a private room has been visited; an unrelated origin cache also exists.\n And the test data is Offline navigation, private API GET and mutation POST; pending worker update during active round.\n When Disconnect and navigate, then attempt private reads/mutations.\n Then Navigation shows static reconnect guidance; private requests fail rather than receive cached private data or offline HTML.\n When Inspect worker caches, restore connectivity and reload through the UI.\n Then Only static allowlisted Wordpairs resources are cached; online live site returns.\n When Install a new worker version during an active round and later activate after clients close.\n Then No forced in-match reload/activation occurs; unrelated cache survives cleanup.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis case documents the stated UI observations; separate technical or operational evidence remains necessary for non-UI guarantees.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-PWAPRIVACY-138" }, { "id": "TEST-ROOMSYNC-139", "notes": "Confirmed user requirements: actual live gameplay, repeatable UI integration at2..25, design updates and independent hostile validation. Source: phone stale-roster report and corrections,27October2026. SDK token callback, coalescing, lifecycle, independent worker and owned cleanup are implemented. New presence-body defect independently reproduced in Chromium;2red React tests now pass, real heartbeat browser regression passes with unread negative control and production-only body drain.532unit/acceptance tests, lint and production build pass. Updated strict game is rerunning; full2..25 remains pending. Prior25-player round1 failure and measured shared-cluster WAL stalls are retained. Volatile TLS harness preserves fsync/synchronous_commit but proves neither power-loss durability nor public capacity. Faster waiting-room fallback and hosted Phase7 remain outside this extension.\n\nBEGIN UI-CASE TEST-ROOMSYNC-139\n# TEST-ROOMSYNC-139 \u2014 Real browser multiplayer, private push and recovery integration\n\n**PENDING IMPORT \u2014 NOT PERSISTED.** Full specification is prepared for the matching existing QBrain TEST record; product-scope verification is blocked by Q-SCOPE-01.\n\nObjective: Run repeatable UI integration against an explicitly selected actual database-backed runtime with real private WebSockets and no HTTP fixtures, plus focused concurrency, lifecycle, scheduler and negative authorization regressions. Exercise2 through25 players and an observer, retain evidence and distinguish local runtime proof from hosted deployment.\n\n| Field | Specification |\n| --- | --- |\n| QBrain reference | \u0060TEST-ROOMSYNC-139\u0060 (existing record); workspace \u0060\u003Chome\u003E/github/WordGame/.mcpServer/wordpairs\u0060, layer \u0060layer-1\u0060; product unresolved |\n| Basis | Specified behavior from cited designs and current QBrain record; test data/viewports are test configurations |\n| Source revision | \u00603273c121de6517aec34503d8c769b0159e9e52df\u0060; exact dirty prose design hashes recorded in [source manifest](../sources.json) |\n| Sources | [word_association_client_message_flow.svg](../../../word_association_client_message_flow.svg) \u2014 section/sequence details in coverage matrix; [room_sync_fix.md](../../../room_sync_fix.md) \u2014 section/sequence details in coverage matrix |\n| Covered FR/TR and criteria | \u0060TR-ROOM-SYNCRECOVERY-038#LIVE-02\u0060; \u0060TR-ROOM-SYNCRECOVERY-038#LIVE-03\u0060; \u0060TR-ROOM-SYNCRECOVERY-038#LIVE-07\u0060 |\n| Priority | critical, preserved from QBrain |\n| Platform / viewport | Phone browser: Chromium/Android and Safari/iPhone behavior where applicable; 390\u00D7844 portrait and 844\u00D7390 landscape are proposed test configurations, not product breakpoints |\n| Preconditions / roles | Actual isolated TLS runtime has database, private notifications and autonomous deadline worker; separate UI contexts have real guest identities. |\n| Test data | Player counts every integer 2..25; one inviter-bound observer; controlled pairs Hot/Cold, Up/Down, Left/Right, In/Out, Day/Night, Open/Closed, Big/Small, Fast/Slow; all no-hint correct solves yield 5 per round and 40 per player. |\n| Synchronization | Await the explicit visible/authoritative conditions below. Use source-specified deadlines where applicable; harness timeouts are configuration, never fixed sleeps or an invented product SLA. |\n| Cleanup | Close only case-owned contexts; remove only case-owned test accounts/rooms/content through the isolated fixture reset, including after failure. Never clear a real player profile or shared catalog. |\n| Automation readiness | Partial: full actual-runtime UI fixture, seed control and independent observer are required; current execution state remains the existing QBrain in_progress record. |\n| Execution | Not executed in this documentation run. Existing record status \u0060in_progress\u0060 and historical criterion evidence are retained unchanged; they do not certify these newly documented scenarios. |\n\n## Ordered actions and observable results\n\n| Step | Action / awaited condition | Expected observation |\n| --- | --- | --- |\n| 1 | Join by UI room code and ready each player without manual refresh, with periodic application refresh suppressed. | All clients see the same roster, countdown and category chooser through actual private updates. |\n| 2 | Select category and submit answers through UI for eight rounds; observe hints, scorecard, reactions and summaries from remote clients. | All clients converge on authorized state and identical final ranking; accepted UI solves correspond to expected round points. |\n| 3 | Repeat each player count and perform offline/reconnect, token-renewal and socket-recovery variants. | Autonomous progression and authorized recovery work; no polling-only pass or service-only result is accepted. |\n\n## Scenario\n\n\u0060\u0060\u0060gherkin\nFeature: Real browser multiplayer, private push and recovery integration\n Scenario: TEST-ROOMSYNC-139 documented design obligation\n Given Actual isolated TLS runtime has database, private notifications and autonomous deadline worker; separate UI contexts have real guest identities.\n And the test data is Player counts every integer 2..25; one inviter-bound observer; controlled pairs Hot/Cold, Up/Down, Left/Right, In/Out, Day/Night, Open/Closed, Big/Small, Fast/Slow; all no-hint correct solves yield 5 per round and 40 per player.\n When Join by UI room code and ready each player without manual refresh, with periodic application refresh suppressed.\n Then All clients see the same roster, countdown and category chooser through actual private updates.\n When Select category and submit answers through UI for eight rounds; observe hints, scorecard, reactions and summaries from remote clients.\n Then All clients converge on authorized state and identical final ranking; accepted UI solves correspond to expected round points.\n When Repeat each player count and perform offline/reconnect, token-renewal and socket-recovery variants.\n Then Autonomous progression and authorized recovery work; no polling-only pass or service-only result is accepted.\n\u0060\u0060\u0060\n\n## Coverage limitations\n\nThis documents the outstanding matrix obligation; it does not claim that all counts passed. Private-frame privacy and worker ownership/fault contracts remain separate LIVE criteria.\n\nCriterion links identify intended verification, not proof that every clause of a compound AC is completely covered. See requirement-first gaps and coverage qualifications.\n\nEND UI-CASE TEST-ROOMSYNC-139" } ], "mappingUpdates": [ { "frId": "FR-LIVESCORECARD-011", "trIds": [ "TR-ANSWER-CONFIDENTIALITY-005", "TR-ARCHIVE-SWBOM-028", "TR-CLOCK-CONSISTENCY-008", "TR-CONNECTION-RECOVERY-009", "TR-DDD-TRANSACTIONS-031", "TR-DEPENDENCY-ATTRIBUTION-025", "TR-DEPLOYMENT-NOACTIONS-024", "TR-DESIGN-HOSTILEREVIEW-035", "TR-FREETIER-OPERATION-021", "TR-LICENSE-GPL-029", "TR-MULTIPLAYER-INTEGRATION-034", "TR-POSTGRES-PERSISTENCE-022", "TR-REALTIME-SYNC-002", "TR-SCHEMA-PROVISIONING-023", "TR-STATE-AUTHORITY-001", "TR-SWBOM-GENERATION-027", "TR-TDD-ACCEPTANCE-026", "TR-VERCEL-DEPLOYMENT-020" ], "testIds": [ "TEST-ANSWERCONFIDENTIALITY-105", "TEST-ARCHIVESWBOM-128", "TEST-AUTHORITATIVEANSWERHANDLING-045", "TEST-CATEGORYCHOICE-011", "TEST-CONFIGUREDCAPACITY-024", "TEST-CONNECTIONRECOVERY-109", "TEST-DDDTRANSACTIONS-131", "TEST-DEEPLINKJOINANDFULLROOM-026", "TEST-DEPENDENCYATTRIBUTION-039", "TEST-DEPENDENCYATTRIBUTION-125", "TEST-DEPLOYMENTNOACTIONS-124", "TEST-DESIGNHOSTILEREVIEW-135", "TEST-FINALSTANDINGS-013", "TEST-FIRSTCATEGORY-004", "TEST-FREETIEROPERATION-121", "TEST-FREETIERQUOTAHANDLING-037", "TEST-FULLROOMOBSERVER-027", "TEST-GPL20ONLYRELEASE-042", "TEST-HINTPROGRESSION-009", "TEST-HINTSCORING-007", "TEST-HOLDOUTWARNINGANDREMOVAL-032", "TEST-IDLELOBBYREADINESSPROMPT-033", "TEST-INROUNDEMOJIREACTION-029", "TEST-LANDINGPAGEPUBLICDATA-050", "TEST-LICENSEGPL-129", "TEST-LIVESCORECARD-010", "TEST-MOCKFIRSTACCEPTANCECOVERAGE-038", "TEST-MODERATIONANDCATALOGBOUNDARY-047", "TEST-MULTIPLAYERINTEGRATION-134", "TEST-NOHINTSOLVE-006", "TEST-OBSERVERPERSPECTIVEANDPERMISSIONS-028", "TEST-PLAYERLIMIT-002", "TEST-POSTGRESPERSISTENCE-122", "TEST-PRECOUNTDOWNOBSERVERPROMOTION-030", "TEST-READYCOUNTDOWNANDROSTERLOCK-031", "TEST-REALTIMESYNC-102", "TEST-ROOMINVITATIONS-025", "TEST-ROOMJOINING-001", "TEST-ROUNDSUMMARY-012", "TEST-SCHEMAPROVISIONING-123", "TEST-STATEAUTHORITY-101", "TEST-SWBOMGENERATION-127", "TEST-SWBOMRELEASEARCHIVE-041", "TEST-TDDACCEPTANCE-126", "TEST-TESTABLECONCURRENCYSAFEDOMAINBOUNDARY-051", "TEST-TIMETIEBREAK-014", "TEST-UNSOLVEDRESULT-008", "TEST-VERCELDEPLOYMENT-120" ], "notes": "" }, { "frId": "FR-ROOMACCESS-001", "trIds": [ "TR-ARCHIVE-SWBOM-028", "TR-CONNECTION-RECOVERY-009", "TR-DDD-TRANSACTIONS-031", "TR-DEPENDENCY-ATTRIBUTION-025", "TR-DEPLOYMENT-NOACTIONS-024", "TR-DESIGN-HOSTILEREVIEW-035", "TR-FREETIER-OPERATION-021", "TR-LICENSE-GPL-029", "TR-LOBBY-MATCHING-017", "TR-MULTIPLAYER-INTEGRATION-034", "TR-POSTGRES-PERSISTENCE-022", "TR-REALTIME-SYNC-002", "TR-ROOM-CODES-010", "TR-SCHEMA-PROVISIONING-023", "TR-STATE-AUTHORITY-001", "TR-SWBOM-GENERATION-027", "TR-TDD-ACCEPTANCE-026", "TR-VERCEL-DEPLOYMENT-020" ], "testIds": [ "TEST-ARCHIVESWBOM-128", "TEST-BROWSEOPENLOBBIES-022", "TEST-CATEGORYCHOICE-011", "TEST-CONFIGUREDCAPACITY-024", "TEST-CONNECTIONRECOVERY-109", "TEST-DDDTRANSACTIONS-131", "TEST-DEEPLINKJOINANDFULLROOM-026", "TEST-DEPENDENCYATTRIBUTION-039", "TEST-DEPENDENCYATTRIBUTION-125", "TEST-DEPLOYMENTNOACTIONS-124", "TEST-DESIGNHOSTILEREVIEW-135", "TEST-FINALSTANDINGS-013", "TEST-FIRSTCATEGORY-004", "TEST-FREETIEROPERATION-121", "TEST-FREETIERQUOTAHANDLING-037", "TEST-GPL20ONLYRELEASE-042", "TEST-HINTPROGRESSION-009", "TEST-HINTSCORING-007", "TEST-HOLDOUTWARNINGANDREMOVAL-032", "TEST-IDLELOBBYREADINESSPROMPT-033", "TEST-LICENSEGPL-129", "TEST-LIVESCORECARD-010", "TEST-LOBBYMATCHING-117", "TEST-MOCKFIRSTACCEPTANCECOVERAGE-038", "TEST-MODERATIONANDCATALOGBOUNDARY-047", "TEST-MULTIPLAYERINTEGRATION-134", "TEST-NOHINTSOLVE-006", "TEST-PLAYERLIMIT-002", "TEST-POSTGRESPERSISTENCE-122", "TEST-PRECOUNTDOWNOBSERVERPROMOTION-030", "TEST-QUICKMATCH-023", "TEST-READYCOUNTDOWNANDROSTERLOCK-031", "TEST-ROOMCODES-110", "TEST-ROOMINVITATIONS-025", "TEST-ROOMJOINING-001", "TEST-ROUNDSUMMARY-012", "TEST-SCHEMAPROVISIONING-123", "TEST-STATEAUTHORITY-101", "TEST-SWBOMGENERATION-127", "TEST-SWBOMRELEASEARCHIVE-041", "TEST-TDDACCEPTANCE-126", "TEST-TESTABLECONCURRENCYSAFEDOMAINBOUNDARY-051", "TEST-TIMETIEBREAK-014", "TEST-UNSOLVEDRESULT-008", "TEST-VERCELDEPLOYMENT-120" ], "notes": "" } ], "confirmedRequirements": "Reuse existing FR/TR/TEST and structured criterion IDs; no new assumptions persisted.", "preservation": "Only owned notes blocks and unioned mapping links proposed. Status, criteria, satisfaction and evidence omitted from updates and must remain unchanged.", "retry": "Re-read scope and all affected records/mappings before applying; compare baseline to avoid overwriting concurrent changes. Verify actual schema then updateTestBatch notes only, merge native mappings, and read back full preservation.", "execution": "Not run" }