Repository navigation
Board-owned keycontroller minigames and runtime game selection #32
Description
Implement the shared board-owned keycontroller engine. Table boards retain their separate role. Press-to-win is the default; Press-to-win and Toggle are untimed unless configured. All ten modes are included by default and can be omitted individually at build time.
Source checkpoint includes illuminated target, color matching, Simon, matching pairs, clear-all speed, ordered colors, switch pattern, reaction chase, and toggle/latch/momentary. Settings are persisted; explicit controls and raw input use the existing correlated API/WebSocket/USB paths. AVR ownership is acknowledged, bounded and fail-closed. Countdown and two warning levels feed TM1637 and shared LED effects. Eight output rules are configurable.
- Deterministic engine and host boundary tests (all modes and press-only build)
- ESP persistence, correlated command admission, live state and shared renderer source
- AVR raw input ownership, companion-loss safe stop and nine-key burst tests
- Flutter controls: analyzer and 22 targeted tests; APK built
- Rust controls: Check, six focused tests and Release build
- Canonical Web controls: command tests and isolated mobile-width DOM/hold checks
- Final ESP and AVR target builds after ownership and input-epoch fixes
- Approved paired deployment and real USB/Wi-Fi testing
- Physical feedback for each mode, sound, display, outputs and reconnect
APK SHA256: 4F772A3D31433A710A52C12CDF631F6419C8D299D56491552A7312BED88E91B6
Rust EXE SHA256: 883f25c7ca51d30cfa70867335c75e1925bc29bd50a54f834013e43facef5225
Source checkpoint 46a68b3 is pushed on PR #27; concurrent SSH implementation is preserved separately and not included. Exact approved-source/profile deployment rebuild remains required. No board, tablet or running Rust process was changed in this implementation pass. Tests/builds are not physical acceptance. This requirement supersedes the earlier single-game policy within the keycontroller role, not the table/keycontroller role separation.
Physical feedback queue (not yet deployed; each requires David's observations):
- Press to win: latch, reset, winner audio and existing effects
- Illuminated target: correct/wrong press, reaction deadline, rounds
- Color pattern: forward tap, three-second reverse hold, both groups
- Simon: presentation notes/order, response and failure
- Matching pairs: reveal, match/mismatch and odd-box behavior
- Clear all: all enabled keys and elapsed time
- Color order: order, wrong input, time penalty
- Switch pattern: toggle and hard latch
- Reaction chase: target movement, allowed window and latency readout
- Toggle: flip/latch/momentary, reset and output mapping
- TM1637 countdown/status, warning thresholds, USB/Wi-Fi and multi-client synchronization
Additive Mine Field checkpoint (2026-10-29)
Eleven modes are now included by default in keycontroller source (commit42d2106, PR37); old acceptance/package records above are historical. Mine Field toggles cyan/yellow to a uniform color, with a configurable60s deadline, cyan high/low pulse, measured winning time and red timeout feedback.
- Mine Field engine, persisted settings, build inclusion flag and Flutter/Rust/Web controls verified by focused tests and ESP/APK builds.
- Install the current candidates after David's tablet-use deferral; verify physical Mine Field inputs, colors, countdown and audio with David.
Activity
atomicdeploy commentedon Oct 27, 2026
Final paired builds now pass after the source/input-epoch/output-ownership review fixes.
No hardware/client deployment or physical acceptance. A minigame-only source checkpoint is being separated from concurrent SSH edits without overwriting them. Existing PR27's two unrelated check-doc-links CodeQL review threads remain open; this feature does not resolve or waive them. CI will not be waited on or represented as passing before results exist.
atomicdeploy commentedon Oct 27, 2026
Paired deployment completed on 2026-10-28. Keycontroller ESP updated over Wi-Fi; full independently downloaded running-image SHA256 fe15419230b3b013d86a1a6411fc5c480c384592d68eb697f95ea0c04408f4d1 (2347808 bytes) matches candidate. Initial inline readback timed out; no upload replay. Previous firmware backup verified first. Six enabled boxes and existing hardware profile retained. AVR candidate 6a339b07d249890ba90a8d519edf5f1e12a4e584ec5559ecaa899af31ed4c292 completed Urboot programming, full flash/EEPROM verification and application recovery; no fuse or bootloader writes. Flutter APK 4f772a3d31433a710a52c12cdf631f6419c8d299d56491552a7312bed88e91b6 installed on SM-X906B; Rust EXE 883f25c7ca51d30cfa70867335c75e1925bc29bd50a54f834013e43facef5225 replaced through guarded graceful workflow on ASUS, preserving rollback and preferences. Running screenshots inspected; both expose the new controls, Rust WebSocket live, tablet wireless ADB responsive. Board reports all ten modes and acknowledged AVR ownership. David confirmed he is now testing; automated command tests stopped before mutation when their idle precondition failed. All per-mode physical/audio/display/output acceptance remains open. Runtime RMT switch error258 was observed in native events with GPIO-static retained; not marked resolved. Deployment build includes concurrent shared-checkout guarded shell changes with SSH disabled, not an exact clean-commit attestation.
atomicdeploy commentedon Oct 27, 2026
Keycontroller Flutter box workspace redesigned and published in bf158e3.
Both the board-owned minigame panel and older first-wins path now share a responsive box designer. Each box has separate circular Button/Indicator LED groups, observed RGB segments, semantic winner/lost/held/latched state, dimmed disabled boxes, fixed hover geometry and per-box actions. Arrange mode supports persistent selection, multi-box dragging with preserved spacing, bounded movement and snap on release. It never sends a game command. Readiness fences retain the panel; stale-peer sheets and held-key release keep the existing command ownership rules.
Analyzer and 25 focused tests pass: 4 designer, 8 minigame and 13 OutputPanel. Phone large-text overflow and action-sheet clipping found during verification were fixed. APK SHA256 e347a2c9f3d2e733d118c349ff48301185f1b363477ae4d0c817928b0b9841cd is installed on the SM-X906B tablet; the installed base.apk hash matches. The running app is connected to keycontroller, and its real screenshot was inspected. Wireless ADB responds. No board firmware, scene, enabled-box mask or effects settings were changed by this UI delivery.
Actual PCController ActivityStrip was reread with its recorded source hash; Pealayer drag and header functions were inspected for reserved action gutters and grab-offset behavior. Scoped mobile donor records/hashes were updated in the existing shared ledger, preserving concurrent native/SSH work. Whole-ledger report regeneration still encounters a separate stale Puzzles.ino -> tests/key_minigame_integration_test.mjs reference; that unrelated review is not certified by this UI change. User visual acceptance remains open.
atomicdeploy commentedon Oct 27, 2026
Follow-up defects under active repair: verified running keycontroller press-to-win is untimed (limit_ms=0, timed=false, auto_reset_ms=0), but both clients misleadingly render elapsed timing. Native Game, Game settings, Keys and Melodies are being separated into persisted capability-filtered dock panels; duplicate collapsing IDs removed; contextual settings and box marquee selection added. 494 native tests passed, including non-actuating box selection and geometry regressions; mobile analyzer and nine minigame tests passed. RMT initialization priority conflicts with the already-running Arduino status-pixel channel; candidate inherits the shared RMT group priority while retaining independently witnessed level-3/core-1 GDMA refill. Full worker and DMA-guard host fixtures passed. Firmware and release client candidates are building; no follow-up hardware deployment or optical acceptance claimed.
atomicdeploy commentedon Oct 28, 2026
Follow-up source implementation underway: two-line/icon mode choices across Flutter/Rust/canonical Web; 10-second illuminated default; configurable sequential color/pairs reveal and optional buffered arpeggios; per-entry Simon feedback; distinct configurable 1200ms wrong-pair feedback with full incorrect cue and full configured success cue during rainbow. Engine and Web interaction tests pass. Flutter false-obsolete handling after input-fence ACK is corrected while preserving board/boot ownership and no replay. Candidate builds remain in progress; current production ESP has not been updated by this follow-up. Per-mode physical/audio acceptance remains open.
atomicdeploy commentedon Oct 28, 2026
Published b571b37 on PR #27. Game feedback source, client controls and candidate builds are complete for this follow-up; hardware acceptance remains open. Passing: 11 Flutter minigame tests, 6 actual WS/fallback tests (box taps send no HTTP mutation/preflight read while WS is live), 6 native game tests, core/exclusion/soak and 160 generated color puzzles, AVR audio tests, canonical Web protocol/DOM checks, and 15 existing Snake host tests while refreshing stale committed consumer bindings. Mode menu screenshot inspected. ESP candidate 2ce2d9fc056eeb2497fc98428b46d773bb3adef9112e038ba626ed726cb1bba9; buffered RF AVR 717f89b913b3e5a39f31facd0ea89409200eb05c88ec2fae10b171545a83a5c4; Android APK 60f79ed9f786a3b8fdd6ab701e79d34a374c90854c06fda731278fd62e5aa786; staged native EXE db0a01c6c425fd36e156bb9516b90490d09ad5e7a51a292482ff2deb853f5f7e. All are new candidates, not installed by this follow-up. ASUS SSH8022 refused three attempts; audible AVR feedback from the preceding installed timeline remains pending. No new board mutation or instance settings reset. Builds use the shared checkout with concurrent guarded SSH/native-artwork/signal UI work preserved; not clean-commit binary attestations. Read previous CI failure: stale session/workspace donor bindings; scoped staged source/evidence projection now passes every anchor/hash plus generated report Check and 50 route mappings. Fresh CI has been triggered, not waited on or claimed passed. Existing broader donor gaps remain open.
atomicdeploy commentedon Oct 28, 2026
cb6ff1d (PR #27) applies the follow-up Simon default: one round containing eight steps. This is applied on new/default mode selection, not a migration of saved round/sequence settings. All/excluded-mode core fixtures pass. S3 candidate is built, but ASUS localhost:8022 still refuses SSH, so this default is not claimed installed; prior AVR audible acceptance remains pending. No board changes occurred in this pass. Detailed terminal/build evidence is on issue #29.
atomicdeploy commentedon Oct 28, 2026
Source candidate PR #37 is published at eaf1c3d. It implements configurable first/last boot selection (default first/Press to win), exact PuzzleBoard Ready perimeter animation, default-on timed second/minute cues with odd/even tones, and AVR idle-only audio admission so ticks cannot cut a melody. Flutter/Rust/Web settings, 12 Flutter tests, 6 native tests, core/panel/audio and isolated Web fixtures pass; AVR + RF and the Android APK build. ESP32-S3 build is still running. No production board or client was contacted/deployed; physical display/audio and paired installation remain open. Existing masks, scenes, corrections, settings and backups remain untouched.
atomicdeploy commentedon Oct 28, 2026
PR #37 candidates are ready locally: paired S3/AVR builds pass; final Rust six tests, Flutter analysis + 12 tests and APK, actual persistence/fault fixture, core/exclusion/panel/audio and isolated Web checks pass. S3 image SHA256 88211d73b356444e6b2ae35f5b6a1768f5741c2c0bbfee14ca003aab989aeeab; AVR + Urboot fa3d01739769b43401be7d11b23b8d3546fde120a0394d1a669bac390ec14782; APK ba7a160f9e57e82faf407e315505b8cd33534bfcecb2fa4a0a853716164c41ae. Exact profiles/build usage and remaining production approval, paired installation, optical/acoustic/boot acceptance are in docs/KEY-MINIGAMES.md. Full CI is not yet complete; no production board, ASUS or tablet was modified.
atomicdeploy commentedon Oct 29, 2026
Checkpoint 5b0d1b1 pushed. Fixes stale generic result cues preempting Press-to-win winner override: delayed feedback is fenced by exact game/input epoch. Color Pattern reveal cap500ms, separated default7 colors, per-box exact color/match diagnostics; all511 masks and palettes2–9 pass. No independent matching algorithm defect reproduced; actual6/6 optical acceptance remains open.
Tablet base.apk SHA256 ed7dba272ad67409479562db98897e5e4752810087ff706ee42fe48f7330c65e verified after install via wireless ADB. Professional firmware progress and exact Urboot backup export pass47 focused Flutter tests/analyzer. Canonical S3 candidate b5252660a9487bb209987bc0a9afa45d70c16b76c57f2ab3a92ed3ed63405206 (2424000bytes) built, not yet deployed. Previous actual tablet ESP upload b73c65... subsequently passed complete independent running-image hash/newboot. Current AVRjob0, no AVRwritecompleted; tablet left maintenance before a job started while game changed externally. No uncertain write repeated. Receipts and remaining live/audio/display gates in docs/KEY-MINIGAMES.md. Acceptance stays open. Connected GitHub comment integration returned403; publishing this exact checkpoint through authenticated gh fallback.
atomicdeploy commentedon Oct 29, 2026
Deployment continuation: new tablet APK installed/hashverified, consolidated ESP candidate built/tested/staged but NOT applied. ASUS localhost:8022 now refuses three consecutive connections. AVRjob0 atlastread, no uncertain write repeated. Source and deployment receipt pushed; need restored ASUS access to complete actual tablet-led ESP/AVR verification and human feedback. No board acceptance checked from fixture results.
atomicdeploy commentedon Oct 29, 2026
Checkpoint f395348 pushed, workspace clean. Completed the requested-feedback source audit and recorded every item/proof/remaining device gate in docs/KEY-MINIGAMES.md. Existing numbered/icon/two-line pickers, configurable10s target, ordered opt-in ColorPattern reveal, default-on MatchingPairs reveal/tones, Simon per-entry feedback, WS-first box controls, arpeggios and configured full winner cue beside success rainbow are implemented. Fixed repeatedwrong-pair samephase melody loss, friendly settings/hold failure text (realcause/draft retained), and Web rejection of exposedboot/timerfields. No claim allnetworkfailures are eliminated or physicalcolormatchingverified.
Latest user overrides: ColorPatternintro defaultOFF (savedinstance changepending); Simon defaults3rounds with3→5→7steps,300mslit/120msgap,240msfeedback. Added bounded optional sequence_growth0..31 toboardpersistenceandFlutter/Rust/Web, preservingexplicitoldsettings/noautomaticflashwrites.
Evidence: core/full/subset+persistence pass, compiledproductionaudiointegration7/7, Fluttergame19/19+unchangedWStransport6/6/analyzerclean, nativefocused10/10, WebtransportandisolatedDOM tests pass, canonicalS3/APK/full+onboardWeb builds pass. FinalESP SHA2566679ecb3a65032ef4ce49274a4cb5fe2bcc2e0b560741dd1d1a3c557225b06cc(2424240bytes); APK72a41b4db3ad3a514efaffd89a1084bb52e1d7a8902dd4326b9956da22d01c29. NativeproductionEXEnotpackagedthisaudit; AVRsourceunchanged/latestpairedcandidatepending. No board/tablet changes thisaudit: userconfirmedusingtablet and askedretrylater; ASUS accessalsofailed. Currentinstanceintro/Simonsettingsandactual3roundhardware/audiofeedbackremainpending. Leavephysicalacceptanceopen.
atomicdeploy commentedon Oct 29, 2026
Washed-color checkpoint d3d450c pushed on PR #37. Optional Pink is now #FF0080 (no gray floor); shared normal/diagnostic rainbow explicitly requests HSV saturation/value 255/255 instead of FastLED convenience saturation 240. Saved custom colors, brightness, channel calibration and correction rules remain unchanged. Audited game compositor/published frame/S3 wire encoder; tests cover all nine game colors, six brightness levels and zero-channel preservation under scalar effects. Canonical minigame core/settings, both baked-role profiles, full LED pipeline and S3 first-wins build PASS. Candidate application 2,424,192 bytes, SHA256 bfc86d3e0408f58975186760b7a5e12e440d2782f09349fad0e25174c010449d. The initially locked test process cleared and the same canonical wrapper passed; no cleanup-policy workaround. NOT deployed: David deferred tablet/board maintenance while using controls. Last observed running firmware predates the vivid palette. Physical color feedback and current-instance settings/deployment remain open; source tests do not prove optical or electrical health.
atomicdeploy commentedon Oct 29, 2026
Mine Field implemented in 42d2106 (PR #37), optional/default-on within keycontroller builds; existing mode IDs preserved and Toggle remains last. Both groups of each enabled box start as a playable mix of cyan/yellow. Cyan pulses high/low; yellow remains solid. Each Down toggles one box (duplicates ignored). All cyan OR all yellow wins; elapsed time freezes and Flutter/Rust display a precise Winning time result. Default 60 s limit and 1000 ms pulse period are configurable/persisted through existing limit_ms/show_ms; timeout flashes all participating groups red. At least two boxes; no current instance settings modified. Existing WS-first USB/HTTP/MQTT command owners, TM1637 countdown, shared effects/audio/output rules retained. PASS: all 502 enabled-box masks with >=2 boxes and both solutions, press-only exclusion, settings persistence, role profiles, production dispatch fixtures, Web typed WS + isolated browser, Flutter analyzer/22 tests, native13 tests, full/onboard Web and S3/APK builds. ESP application SHA256 32f1a454eced20fa1efaf9916e17a72ef843aab52f98206c2e84466a78476122; APK 8c8e150a8903d494c6e0bf8e8fb1062f4896954b2333e69190c8206b8b09c771. NOT DEPLOYED: prior tablet-in-use deferral remains; physical play/display/audio and installation acceptance stay open. Native evidence is compiled tests, not a newly packaged production exe.
atomicdeploy commentedon Oct 29, 2026
Rust keycontroller Game settings checkpoint 41956c8 (PR #37). Fixes incomplete known-mode default resets (Color Pattern intro Off, Illuminated10s, Simon3/5/7, Color Order9 colors, Mine Field pulse1s), only for explicit selection and already-advertised fields. Preserves same-mode edits, relay wiring/device policies/unknown data; future board modes retain their own values. Contextual Countdown/Challenge/Presentation fields hide ignored controls; reveal timing follows intro toggle; numeric IDs stay field-bound. Mode menu is numbered with existing icons/details. Toggle and output mapping use readable shared dropdowns; painting output rows no longer reconstructs/drops optional JSON. Warning validation uses the selected new mode defaults; Apply remains narrow, peer-bound and readback-verified. PASS17 minigame tests (110 different-mode transitions,11 layouts at280/740px, visibility, validation, readback and zero-send/unchanged-draft checks), plus5 shared-dropdown keyboard/hover/focus tests and comparison generation/check. Native-only; no firmware/APK build, board commands, app replacement or installed-ASUS acceptance claimed. Existing production/deployment holds and unrelated shell work preserved.
atomicdeploy commentedon Oct 29, 2026
New physical feedback from David: rainbow looks OK; non-primary colors with low contrast look washed out. This narrows the next live review to palette/mixed-color rendering and per-board color response, not a blanket brightness/timing change. I inspected the current minigame palette and ColorMatch output: player/reference colors use the same palette; introduction scales channels together without adding white, and the vivid-palette correction is already in the source candidate. I have not freshly identified the running image or changed brightness, channel order, color/correction rules, or the production scene from this feedback. Mixed-color physical acceptance remains open; do not mark it resolved from the SSH build or source tests.