DYY9 Release Candidate
OE / SM Integration Update
Operational discoveries, corrections, validation results, and remaining release notes from the July 19-24 engineering push.
Current Release Position
| Area | Current state |
|---|---|
| OE runtime | OE-001 is operating as the current DYY9 release-candidate OE. Health endpoint reports OK; startup audio duration cache reports ready with no errors. |
| OE network | PPOE operates at 192.168.50.1. PPSM operates at 192.168.50.2. |
| OE master image | C:\PagePoint\OE-MASTER-071926.img, size 62562238464, SHA256 557E30001B2B1B250C23031BFB0D1EB578704D52AA2C6603EA8B036F6410C68E. The active OE has later release-candidate fixes; recapture before producing final install media. |
| Operational audio | PagePoint Audio Standard V1 is active: 16 kHz, 16-bit, mono Linear PCM WAV. Stored playback is CHIME -> ZONE ID -> MESSAGE. Live paging is CHIME -> LIVE MICROPHONE. |
| Output mapping | Current logical-to-ALSA channel map is LPA=0, LPB=1, LPC=6, LPD=7, LPE=2, LPF=3, LPG=4, LPH=5. DYY9 installation uses LPA front-left, LPB front-right, LPC side-left, and LPD side-right. |
| Time authority | PPSM has the DS3231 RTC on GPIO SDA 21 / SCL 20 via dtoverlay=i2c-rtc-gpio,ds3231,i2c_gpio_sda=21,i2c_gpio_scl=20. Chrony is active and serves local NTP on 192.168.50.2. OE is configured to use PPSM NTP. |
| Phones | Phone provisioning now sets PagePoint NTP and DYY9 timezone. Current frozen timezone target is America/New_York; future regional deployments should make this a site configuration value. |
Faults Discovered and Corrections Made
| Fault / discovery | Evidence | Correction | Reasoning |
|---|---|---|---|
| SM showed the OE offline until Diagnostics was tapped. | OE status changed to OK only after manual Diagnostics refresh. | PPSM now broadcasts refreshed OE health at startup and on each polling interval. | The service screen must actively reflect operational reachability without requiring installer interaction. |
| Isolated network had no reliable time authority. | OE, SM, and phones could disagree on time; public NTP is unavailable in normal isolated operation. | PPSM now uses RTC plus chrony as the site NTP server. OE points to 192.168.50.2. |
Use Linux NTP infrastructure rather than inventing a PagePoint time protocol. |
| Phones could remain on wrong time or timezone after provisioning. | One phone remained incorrect after wizard flow until explicit time configuration was added. | Provisioning writes ntp_server=192.168.50.2, enables auto-time, disables auto-timezone, and sets America/New_York. Health validation now checks those values. |
DYY9 requires deterministic local time and correct daylight-saving behavior through the Android timezone database. |
| Stored-message trigger delay was too long and new stored messages could glitch existing zones. | Before fix, trigger-to-pipeline was about 2.5-2.6 seconds. Synchronous ffprobe calls took about 625-655 ms each and ran for chime, zone ID, and message. |
Built a startup-only duration cache in server.js. playMessage() uses cached durations only and refuses playback if startup validation is not ready. |
Removing synchronous duration probing from the live command path prevents Node event-loop blocking and mixer starvation while preserving the existing playback architecture. |
| Stored-message manual startup delay could be tighter after duration-cache fix. | Post-cache latency was about 514-542 ms with the old 500 ms intentional delay. | Changed only the manual stored-message startup delay from 500 ms to 300 ms. | Measured four-zone stacked manual message latency became 312-342 ms, within the 315-345 ms target band, with no large underruns. |
| Zone live page incorrectly interrupted stored messages on unrelated zones. | startLivePage() used a global stopCurrentPlayback(true) path for the first zone live page. |
Live-page priority now filters interruption scope: same-zone only for zone pages, all zones for All Call/emergency. | LIVE PAGE IS KING within its proper scope. Zone isolation must remain intact while All Call remains global. |
| Stored and live audio competed for the same USB sound card. | Stored messages used one 8-channel aplay process and live mic used a second 8-channel aplay process, both targeting surround71:CARD=ICUSBAUDIO7D,DEV=0. ALSA dmix proof-of-concept was not acceptable for live mic quality. |
RoutedAudioMixer became the single ALSA/aplay owner. audio_receiver.js remains modular but now feeds live PCM into the shared mixer instead of spawning its own aplay. |
One hardware owner permits stored messages to continue on unrelated zones while a zone live page owns only its target zone. |
| Live-page chime became glitchy when routed through the live receiver pump. | Receiver-pumped chime had clicky/broken playback even when stored-message chimes were clean. | Live-page chime is now a normal RoutedAudioMixer file source. Live mic PCM is enabled after the live chime completes. | The mixer file path is already suited to complete chime playback; the receiver pump should handle microphone PCM, not file chimes. |
| Live mic latency/glitch balance needed tuning after single-owner migration. | Early shared-mixer live path had high latency or dropouts depending on queue size. | Accepted tuning uses a small live start queue and bounded sender/mixer queues while preserving the 100 ms ALSA mixer buffer. | Operational reliability and fast handoff matter more than eliminating every tiny underrun. Occasional brief click/pop is acceptable if operation is reliable and quick. |
| First tap sometimes chimed but did not open the live page line. | Failed trace showed route opened after chime, but no sender lock and no first mic frame until a second tap. | Server broadcasts state after route-open; phone mic transmit is gated on routeActive=true instead of starting during chime while the route is closed. |
The phone must not start/stop its mic sender before the OE route is actually ready to receive. Validation showed first-tap SENDER_LOCK and FIRST_MIC_FRAME_ACCEPTED for All Call and zone pages. |
| Live-page trace logging was useful during diagnosis but too noisy for release operation. | Recent first-tap diagnosis added LIVE_TRACE route, sender-lock, first-frame, and receiver-ready logs. |
LIVE_TRACE output is now gated behind PAGEPOINT_LIVE_TRACE=1 and disabled by default. |
The trace remains available for focused diagnosis without polluting production logs or changing audio behavior. |
| Legacy relay/I2C and LPD6803 LED code was still able to run in an audio-only DYY9 OE. | DYY9 OE hardware no longer includes XL9535 relay boards or LPD6803 LEDs, and I2C failures can delay startup work. | Deprecated the hardware path. Default mode is PAGEPOINT_OUTPUT_MODE=logical and PAGEPOINT_LED_MODE=logical; legacy hardware requires explicit opt-in. |
Audio timing must never depend on absent relay or LED hardware. |
| Settings UI work briefly added the wrong entry point. | A gear/floating entry changed the main visual hierarchy and affected the logo/status area. | Original Settings entry under the status bar was restored. Settings content was reorganized internally into ROLE, TRAFFIC CONTROL, SEQUENCE BUILDER, FIND PHONES, and confirmed ALL CANCEL subflows. | Main screen is for operation; Settings is for configuration. Do not redesign working entry points during an internal modal reorganization. |
Accepted Operational Rules
- LIVE PAGE IS KING. A same-zone live page immediately owns its zone. All Call live page immediately owns all zones.
- Zone live page interrupts only the same zone. Unrelated stored messages and sequences continue.
- All Call live page interrupts stored messages and sequences globally.
- Stored manual messages and sequence-generated messages share the same playback path.
- Do not optimize instrumentation at the expense of launch-manager usability. Small, brief clicks are lower priority than a page failing to start or starting late.
- When the requested change is small, preserve the blast radius. Channel mapping changes should not become buffering, mixer, UI, or diagnostics changes.
Validation Evidence
DYY9_DURATION_CACHE_VALIDATION_2026-07-22.md: trigger latency reduced from about 2.5 seconds to about 0.52 seconds.DYY9_300MS_STORED_MESSAGE_DELAY_VALIDATION_2026-07-23.md: four-zone stacked latency measured at 312-342 ms; stored All Call measured at 325 ms; sequence path remained shared and operational.DYY9_LIVE_PRIORITY_SCOPE_VALIDATION_2026-07-23.md: same-zone live interruption, cross-zone isolation, and All Call global priority validated.DYY9_900MS_HANDOFF_DELAY_INVESTIGATION_2026-07-23.md: 900 ms delay identified as legacy live-page-release-to-stored-message handoff, not stored-message-to-live-page protection.- 2026-07-24 first-tap trace: All Call and zone pages produced
ROUTE_OPEN,SENDER_LOCK, andFIRST_MIC_FRAME_ACCEPTEDon first activation. - Manual audible validation: stored messages and live page behavior are accepted with limited, brief glitches tolerated.
Known Follow-Up Items
- Recapture the final OE install image after current release-candidate code is frozen.
LIVE_TRACElogging is gated off by default. Keep it disabled for production unless focused live-page diagnosis is required.- Future chime split: active runtime filenames should be
message_chime.wavandpage_chime.wavafter client-approved files are supplied and validated. - Progress-bar timing remains secondary and should be corrected later without disturbing audio behavior.
- FFmpeg removal remains a future contained audio-subsystem project, not a DYY9 release-blocking task.
- Timezone is frozen to
America/New_Yorkfor DYY9 and Northeast deployment. Later deployments should promote timezone to site configuration.