Skip to content

Validate final-image buttons, menus, reset stability, and audio cues on hardware #69

Open

Description

@atomicdeploy

Original request

Relevant excerpt, lightly grammar-corrected for publication. Credentials, personal data, private paths, and unrelated transcript content are omitted.

Physical front-panel keys, PC-sent virtual buttons, and RF-received keys must always respond immediately; fix the root cause and protect against regression.

Source: session edge-current, authored turn 204.

Parent epic: #13

Requirement

Validate final-image buttons, menus, reset stability, and audio cues on hardware

Acceptance criteria

  • Test Buttons 1-4 Down/Up/Click, double-click, hold acceleration, and editors while monitoring reset count.
  • Validate the nested settings fields, save/discard, default-page behavior, and no menu-navigation reset.
  • Listen for boot melody, one clean beep per key, and save/discard/door/relay cues with Silent off.
  • Confirm the first-run TUI remains synchronized through board ready and welcome-melody completion.
  • Request this physical pass only after safe setup by showing WAIT and playing the unique repeating ringtone; stop the cue immediately after acknowledgement.

Current evidence and gaps

Earlier melody and buttons 1/2 evidence exists, but the final-image full key/menu/audio and synchronized first-run pass is not complete.

Traceability

  • Canonical checklist section: Final hardware validation and handoff
  • Includes only curated, issue-relevant prompt excerpts; complete transcripts, credentials, secrets, and private paths remain unpublished.

Activity

  1. changed the title [-]Validate final-image buttons, menus, reset stability, and audio cues on hardware[/-] [+]Validate final-image buttons, menus, reset stability, and buzzer cues on hardware[/+] on Aug 2, 2026
  2. atomicdeploy commented on Aug 6, 2026

    @atomicdeploy
    OwnerAuthor

    Production-board hardware run (third/live board):

    • Full pre-change flash+EEPROM backup completed under AppData before programming.
    • UART Urclock flash/readback passed; USBasp was not required. Live HELLO is build 45E57A94, timestamp 260806133100, capabilities 0xFF7DF7FF.
    • EEPROM non-defaults migrated and independently decoded: lighting Auto, on brightness 175, user PWM [0,100,92,38,0,0,0,0]. Settings CRC, RF store, and reset journal all valid.
    • Present: INA/PCA at I2C 0x40/0x41; both DS18B20 sensors. Absent: LCD. Empty/unconfigured: board name and RF mappings. All 19 final status profiles query successfully.
    • Live virtual Down dispatch passed. One physical panel-key tap is pending to close perceived-latency acceptance.
  3. atomicdeploy commented on Aug 6, 2026

    @atomicdeploy
    OwnerAuthor

    Fixed the repeated startup-melody / missing Prog lifecycle regression in df5c6e9.

    Root cause: --reinitialize-eeprom intentionally preserved the original raw EEPROM but never armed the durable programming latch afterward, then programmed a normal factory image with Silent/Programming clear. Urclock verification resets therefore looked like ordinary boots.

    The guarded lifecycle now:

    1. completes and validates the untouched raw backup;
    2. reconnects and arms/reads back Silent+Programming before flash when the current schema supports it;
    3. treats post-backup latch failure as a no-flash gate;
    4. writes a complete transaction factory EEPROM with Silent+Programming armed, outputs off, and closed-door display brightness equal to the Prog brightness;
    5. clears both transient flags only after final authenticated settings verification, then plays one ready cue.

    Live acceptance on COM5: fresh full backup pccontroller-20260806-143218; latch changed false -> true; program mode became 0; one deliberate DTR reset advanced reset count exactly 10 -> 11; latch remained true after reboot; original settings were restored and normal sensing resumed. Current uptime evidence also disproved an ongoing reset loop.

    Validation: go test ./..., go vet ./..., and 76 build/firmware contract tests pass.

  4. atomicdeploy commented on Aug 6, 2026

    @atomicdeploy
    OwnerAuthor

    Final merge/install evidence (2026-08-06): PR #113 is merged to main as 87537eb897269fad717ae8a6d836b135910d0f8a. The merged-main Windows host was rebuilt and installed at the canonical AppData path. A fresh COM5 query through that installed binary reported firmware 45E57A94, uptime 1h45m54.317s, reset count 11, settings flags=0x01, programming_latch=false, and all relay/PWM outputs off. The reset count remains exactly the value reached by the one deliberate latch-persistence reset, so the repeated-reset/startup-melody regression is no longer present. The programming transaction still asserts Silent+Programming/Prog until authenticated final verification clears it. This regression's scope is complete; this parent issue remains open only for its other listed acceptance criteria.

  5. changed the title [-]Validate final-image buttons, menus, reset stability, and buzzer cues on hardware[/-] [+]Validate final-image buttons, menus, reset stability, and audio cues on hardware[/+] on Aug 8, 2026
  6. atomicdeploy commented on Aug 9, 2026

    @atomicdeploy
    OwnerAuthor

    Acceptance disposition for the silent delivery pass

    This issue owns final-image physical front-panel key perception and menu acceptance, including immediate down/up behavior from #27/#28. Motion with real loads belongs to #72; harmless macro streaming belongs to #74.

    Its audio/startup-melody checks cannot be claimed during the user-mandated silent pass. Silence is a safety constraint, not an audio test pass. The current board is not enumerated, the latest verified backup reports Silent=true, and this reconciliation did not probe, flash, actuate, or play sound. Keep hardware acceptance blocked until David is present and explicitly confirms the safe gate.

  7. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    PR #237 restores and unit-tests the exact autonomous door and motion/output tones. Physical acceptance still requires observing door open/close and loaded motion/output activation/release on the exact flashed artifact; keep this issue open until that hardware evidence is recorded.

  8. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    Merge-safe P1 reconciliation — fbb66f215b63476a54ca101f404c6bb50ff5bb32

    This branch was recovered in the clean worktree C:\Users\David\AppData\Local\PCController\worktrees\pr271-complete. It contains only normal merge commits—no rebase, force push, or mutation of the evidence checkout. Current origin/main 9f2782cf0346464eb91a6bc122eeb4c0aa3f9f76 is an ancestor of this head.

    Persisted MENU/MOVE policy

    • Stable ID 12 (MOVE) remains a direct MENU_SET_PAGE compatibility selector for the unified page-9 KEY motion surface. It is not a separately browsable local page.
    • The direct wire catalog remains a 14-ID permutation: MENU_LIST reports ID 12 with the KEY program-mode ID. Host parsing uses that mode to distinguish this alias from the historical genuine MOVE page.
    • Local compact navigation, configured visibility/order, categories, and the host layout editor never expose a second KEY or disturb RF ID 13.
    • When a legacy persisted visible mask has ID 12 set, firmware maps it to ID 9. If 9 was hidden, it swaps the stored 9/12 ranks so the effective KEY position is retained while RF and all other ranks remain unchanged. Factory EEPROM has ID 12 hidden.

    Evidence

    • node --test Tools/Firmware/firmware.test.mjs: 28/28 passed.
    • Test-only AVR-adapter CMake target firmware_controls_tests: passed; it covers persisted legacy mask/default/order migration and RF rank preservation. No VirtualBoard runtime source was changed.
    • Formatting and git diff --check: passed.
    • The ordinary full stable Windows Go runner was invoked twice through Tools/Build/go-tests.mjs; it exceeded the shared product runner's 5-minute tool window without emitting a source failure, so it is not claimed green.
    • Exact fixed-identity source AVR compile was invoked through a stable, product-owned controller.exe (the normal go run is correctly blocked by the workstation's deny-execute Go-temp ACL). It fails at the existing fixed .firmware_identity/.data overlap: identity 0x7E74..0x7E7F; .data 0x7DBC..0x7E87. This is SRAM/identity placement, not a flash overflow; no size claim is made for this head. The compiler emitted only one non-fatal enum conditional warning before the linker failure.

    No flash, serial, sound, relay, or VirtualBoard runtime action occurred. Keep this PR Draft until the exact-head CI and resource gate are green. Remaining #69 physical acceptance is deliberately untouched.

    Related #28 and #69.

  9. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    CAFE final-image checkpoint for the KEY/motion regression: PR #271 head cfa47439ea2cff72f33dcf5da7b8ac61d6ace7ff; flashed firmware identity 2A866A70 (260814005200). Guarded flash/readback/auth passed. Injected K1 lifecycle on the final image passed: Down -> mode 28 / relay mask 0x02; Up -> relay mask 0x00; explicit all-off followed. Firmware now treats KEY as Side A/B motion and implements configured 2-second single-key/opposing-pair/all-four exit with chord immediate stop and release quarantine. Board is returned to KEY page 9, silent=true, relays=0. A 25-second physical-event observation received no key transition (inputs=0xFF, keys=0), so physical hold acceptance remains truthfully open and requires the operator to press the panel. Full all-key/audio matrix remains under this issue; no audio test was performed because night/silent was requested.

  10. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    Follow-up exact-head checkpoint: 87f395ac77a296371bc000c0612fc4cafb3ae86e resolves the non-baseline AVR identity collision without moving the fixed identity region. Fresh source build: 32,250/32,384 flash (134 free), static SRAM 1,459, modeled peak 1,764/2,048 (284 free); npm test --prefix Tools/Firmware 29/29 and test-only firmware_controls_tests passed. The earlier repo-health stale-regex failure was fixed in 59ca509; exact-head CI is now running. No hardware action. See the PR body for source/app SHA-256 and full policy.

  11. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    PR #271 CI-repair checkpoint: test-only commit 5b427151f2133fe8b9599c2aec7afaf70ee819f2 updates stale host catalog expectations to the documented 14-wire-ID protocol: ID 12 remains a direct non-browsable KEY alias and RF remains ID 13. Product-owned Go runner passed 37/37 packages; firmware contract passed 29/29. AVR source is unchanged from the already measured 32,250/32,384 build. Draft remains pending exact-head hosted CI; no hardware action. #271

  12. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    PR #271 is source/CI ready at 5b427151f2133fe8b9599c2aec7afaf70ee819f2 and has the persisted MENU/MOVE alias P1 resolved: #271 (comment)

    #69 remains open for the separate live physical-panel gesture acceptance. No flash, serial, sound, relay, or hardware action was taken in this recovery.

  13. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    PR #271 main-refresh checkpoint: clean normal merge d675a41892ce18d784503ec41bdd4477fc4a2e79 includes main@109f4e2; local source gates are green (stable Go 37/37, vet, firmware 29/29, CMake adapter, fixed-identity AVR 32,254/32,384 with 284-byte modeled SRAM margin). Hosted exact-head CI is queued. No serial, flash, sound, relay, or physical-board action occurred.

    #69 remains the separate post-merge physical-panel acceptance gate. Its existing 🔥 priority: critical, 🎛️ front-panel, 🧪 testing, and 🔍 needs-hardware labels remain accurate. Next owner: Integration after #271 exact-head CI and merge. #271

  14. atomicdeploy commented on Aug 13, 2026

    @atomicdeploy
    OwnerAuthor

    PR #271 second main-refresh checkpoint: clean normal merge dae37d83dd407d6825b83453bd46aa1bc63cdb81 includes main@ce8a837; local source gates passed (stable Go 37/37, vet, firmware 29/29, CMake adapter, fixed-identity AVR 32,254/32,384 with 284-byte modeled SRAM margin). Hosted exact-head CI is running. No serial, flash, sound, relay, or physical-board action occurred.

    #69 remains the separate post-merge physical-panel acceptance gate. Existing 🔥 priority: critical, 🎛️ front-panel, 🧪 testing, and 🔍 needs-hardware labels remain accurate. Next owner: Integration after #271 CI and merge.

  15. DRSDavidSoft commented on Aug 13, 2026

    @DRSDavidSoft
    Collaborator

    PR #271 is now source/CI complete at dae37d8 (all hosted checks green, current main ce8a837 included). The persisted MENU/MOVE alias is resolved: ID 12 remains direct-only KEY compatibility and RF remains ID 13.

    No serial, flash, sound, relay, or physical-board action occurred. #69 therefore remains the distinct post-merge live front-panel acceptance gate. Existing priority-critical, front-panel, testing, and needs-hardware labels remain accurate; no taxonomy gap.

    Next owner: Integration may merge #271, then coordinate human-safe physical acceptance here. #271

  16. atomicdeploy commented on Aug 23, 2026

    @atomicdeploy
    OwnerAuthor

    Hardware acceptance remains required after PR #284: validate specific relay/motion tones without a leading generic beep, global Silent suppression, door open/close cues, physical door notification source/context, and reconnect after a changed USB port assignment. Source/unit/AVR gates are complete; this comment intentionally does not claim live-board acceptance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    🎛️ front-panelSeven-segment, LCD, keys, and menus🔍 needs-hardwareRequires physical-board observation or operation🔥 priority: criticalSafety or release-blocking work🧪 testingAutomated, simulated, UX, or hardware verification

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions