Night card choices
2-9 asks which card Dave should strengthen, but its request omitted the actual cards. The game also accepted only the number already displayed, rejecting a valid typed selection of another slot. The paired portable change supplies a named selector for 2-2/2-6/2-7/2-9 and fixes the native 2-9 atomic choice. Authored effects and difficulty remain unchanged.
The host advertises source29-card-choice-v1. New clients send current source/packet/generation identities plus the gift flag only after seeing that capability. Names and one-based slots distinguish an ordinary Fume-shroom from Dave's gift; Flame-shroom and Gloom-shroom retain their real identities. Wallet, individual plant and unrelated Dave projections remain closed for this chapter. Card-slot answers must exist when cards are supplied; older requests remain accepted. The client additionally checks the current packet generation before applying the result.
Validation: 441 isolated NPC/route tests pass. The real compiled 2-9 request passes the actual host schema, prompt assembly and response validation in English and Chinese. Gift slot 7 changes from 75 to 45 sun while the ordinary copy stays at 75; replies wait for Continue and combat resumes. The initial compiled rejection and native failing assertion are retained alongside the passing fix. This is targeted evidence, not a full-campaign or physical-phone certification.
The required OSS check also exposed existing Studio image-batch imports whose hosted implementation is excluded from the export. Explicit unavailable-feature stubs and a shared location for the unchanged request-scope helper restore that export boundary without importing hosted billing/workers. Hosted build/typecheck pass; final OSS results and public deployment are recorded with publication.
