Files
ark-stronghold-protocol/test/ui
sganggs 30d9a41c51 feedback5 WAB: the collapsible bond strip test waits for the mock's answer to the teammate tap before it starts the battle (test/ui/bond-collapse.e2e.test.js; flaky 1 in 4 since 0.1.4, no product change)
.gm__watching shows at the tap, but the dev mock answers the row's g.watch 40-100 ms later (game-mock.js mockRequest). The test started the battle about 50 ms after the tap. When the answer came after that, the mock took the scouting request as a battle watch, as a server-run server does, and moved m.field and the battle frames to the teammate's field. The strip follows the field on screen, so it rightly showed that teammate, who has no bonds in the mock, and `.bslot .bond` never came (3 of 10 runs at 1920x1080). Each 640x360 touch tap takes about 100 ms, so the answer always came first there. A player never loses their own strip this way: client-side combat (the default) refuses a teammate's field while the own battle runs. Under server-run combat the late tap shows that teammate's battle with their real bonds and the eye tag.

Now the test waits until m.field is the teammate's read-only board before the phase change. It also asserts that the own battle's expanded strip is the player's own (no data-owner). Every other check is unchanged. 10 of 10 runs pass. Golden unchanged.
2026-10-07 00:05:21 +08:00
..
feedback5 WE: the 整备区 rules of PRTS 卫戍协议/帮助 §手牌区 (GitHub #82, second part) — a full regular hand refuses every purchase and reward pick, also one whose copy would complete a merge at once ("当常规手牌区全满无空位时,玩家将无法执行使手牌溢出的操作" — "例如招募/购入等通常情况下会增加手牌的操作"; BWIKI 盟约 says the same with no exception; the reporter checked it in the official game), and a free regular slot pulls the 临时整备区 in at once ("常规手牌区出现空位时自动移入"): PlayerState._fillHandFromTemp runs in every recompute, the temp row right to left (the order it fills, [ASSUMED]) into the hand's free slots right to left — after a sale, a deployment from the hand, a merge that consumed hand copies, an item equipped / destroyed / used, a summon stack removed with its owner. invariants.js: temp holds pieces only while the hand is full. The client's refusal path follows (gameLogic.shopBlockReason: 整备区已满 on every card — a one-line change in a file the R5 split moves). Bots: a full hand never tries a purchase, an affordable third copy of a held pair sheds the weakest hand single first (never one of this prep), resolveTemp decides temp right to left. Tests: test/match/feedback5-hand.test.js; merge / hardening / playtest6-elite-to-board / economy / prep-bench / uiFixes updated to the rule. Docs: META §1 Hand, DESIGN §6, PLAYING §3, research 00-INDEX / 01 (the old "a merge-completing purchase is allowed" corrected). Golden: 3 match scenarios moved (coop2-NORMAL-3, solo-HARD-9-boosted, coop2-ABYSS-10-boosted — bot seats that reached a full hand: the merge-completing purchase refused or a single shed first, temp pieces moving in by themselves); every battle digest unchanged
2026-10-05 18:17:08 +08:00