## v1.4.10 — Delta Patch: TouchCenter isolation + inline authorization
- Stopped the 6270 monochrome TouchCenter from inheriting 6271CV color-only screen styling and assets.
- Replaced the copied 6271CV Console Mode background on 6270 with a monochrome 6270-native keypad composition.
- Arming/disarming authorization no longer navigates to Console Mode. Code entry stays inline on the Security page.
- AWAY/STAY/NIGHT always request a code; if Quick Arm is enabled, a separate QUICK ARM control appears in the authorization overlay.

## v1.4.9 — Delta Patch: 6270 Console asset repair
- Added the missing `assets/6270/console-bg.png`, which caused the 6270 code-entry screen to render as a white broken-image panel.
- Repositioned the TouchCenter auth prompt into the console display area.
- Removed remaining CSS gradients from the browser UI and removed Arial fallbacks from Arimo-first UI declarations.

## v1.4.8 — Delta Patch: Touch auth flow + UtilitarianWave
- TouchCenter DISARM no longer performs a one-tap disarm; it now opens Console Mode and requires a valid code entry.
- TouchCenter arming buttons now honor code-entry arming unless Quick Arm is enabled; when Quick Arm is enabled they still act as quick-arm buttons.
- Added a pending TouchCenter auth flow that routes arm/disarm through Console Mode.
- Message Center overlay now uses the requested count/header wording and shows a no-message placeholder or a formatted message row.
- Applied the UtilitarianWave UI pass: Arimo-first font stack, squared corners, and gradient-free browser UI chrome.

## v1.4.7 — TouchCenter console / Message Center / lighting / armed-state repair

- Console Mode now uses the original 320×240 SWF console face and invisible native-coordinate key hit regions instead of a browser-generated 3×4 button grid.
- 6271CV Message Center now uses its native SWF frame, local message count/entry display, and working record/play/stop/delete controls backed by the existing persisted voice-message store.
- 6271CV Lighting now follows the real Garage Door / Basement Light / Porch Light / Backyard Light layout using recovered ON/OFF/ACTIVATE raster controls.
- TouchCenter arming/armed status uses a red header and `Armed <mode>` text, appending `Bypassed` when bypasses are present.
- Armed security view now follows the real TouchCenter armed layout with DISARM and MORE CHOICES rather than leaving the disarmed arm-mode picker active.
- Fixed all keypad paths so arm commands cannot switch arming modes while already armed or while an arming sequence is in progress.
- Removed the duplicate oversized utility-page HOME button that polluted Setup and related pages.

## v1.4.6 — TouchCenter event-log collision repair
- Rejected the v1.4.5 event-log composition: it stacked a runtime “Event log empty” overlay, generic Refresh/Home controls, clock/date chrome, and baked SWF sample rows on the same screen.
- Rebuilt the 6271CV Event Log as one source-coordinate plane. Baked sample rows are removed from a derived clean source frame and live emulator events are rendered in the source table region only.
- Removed the duplicate bottom HOME/REFRESH controls and clock/date overlays from Event Log so the SWF Show More / filter controls remain unobstructed.
- Corrected the ready-state casing back to source wording `Ready to Arm` and tightened the status type treatment using Arial Narrow at a smaller source-faithful scale.

## v1.4.5 — TouchCenter header/navigation repair
- Repaired the 6271CV HOME and BACK navigation controls. HOME now returns to a distinct TouchCenter Home screen; BACK returns to the previously viewed screen instead of both buttons aliasing the Arming screen.
- Added a source-derived Home screen using the SWF SECURITY, LIGHTING, and MESSAGE controls at recovered native coordinates.
- Rebuilt the live status text overlay from the SWF `ArmStatus` text field: Arial, 20 px, centered in the original 236×29.65 field at x=42.3, y=0.35 on the 320×240 display.
- Corrected the normal ready-state wording to `Ready To Arm` to match the source TouchCenter UI.
- Navigation controls now produce the normal TouchCenter key acknowledgement when used.


## v1.4.4 — TouchCenter source-frame fidelity

- Removed the browser-invented 3×3 “More Choices” dashboard that mixed controls from unrelated SWF screens.
- Reconstructed the actual More Choices source frame from sprite 307 / frame 90 placement matrices: Show Zones, Console Mode, Event Logs, Operating Modes, and Setup only, at native SWF coordinates.
- Removed the developer “SWF source shell…” caption from the rendered keypad.
- Added source-derived status header strips and stopped stretching controls into arbitrary grid cells.
- Continued using source rasters for the housing and controls; browser rendering is limited to dynamic panel data/status.
# Public Changelog

This changelog is intentionally public-facing. It records behavior and feature changes that matter to users of the emulator; abandoned experiments, internal handoff notes, temporary asset-analysis work, and development-only troubleshooting have been omitted.

## v1.4.3 — TouchCenter SWF stage reconstruction

- Rebuilt the 6270 and 6271CV around the physical housing imagery embedded in the supplied SWFs instead of a generic CSS bezel.
- Recovered the native 320×240 screen rectangle and primary Security-page control coordinates from SWF display-list transforms.
- Restored the genuine 6270 **MEDICAL** bitmap that the earlier extraction pass missed, plus source 6271CV HOME/BACK/clock controls.
- Added dynamic ARMED/READY/MESSAGE lens overlays and transparent 6270 bezel-key hit regions without replacing source shell art.
- Fixed touchscreen click routing so controls carrying `data-touch-action` now execute their actions.
- Added source-stage housing bitmaps and documented transparency-isolated shell crops to `SWF_SOURCE_ASSET_MANIFEST.json`.

## v1.4.2 — SWF source-asset fidelity

- Enforced a strict source-art rule for the 6270 and 6271CV: graphical keys and touchscreen buttons must be exact raster assets extracted from the supplied SWF files. No hand-drawn SVG/vector substitutes are used for those keypad controls.
- The v1.4.2 extraction pass omitted 6270 **MEDICAL** because its JPEG/bitmap tag was not identified at the time. The genuine source asset was recovered and restored in v1.4.3.
- Removed source-inaccurate fallback HOME/Monitoring Center graphics from the simulated touchscreen. Emulator-only data remains available elsewhere on the page rather than masquerading as original keypad artwork.
- Removed the earlier generic/vector-like touchscreen styling block so it cannot leak into the SWF-derived models.
- Added `SWF_SOURCE_ASSET_MANIFEST.json` with source filenames, dimensions, and SHA-256 hashes for the mapped 6270/6271CV controls.

## v1.4.1 — 6270 / 6271CV implementation hotfix

- Fixed the v1.4 asset/runtime cache mismatch: the HTML still loaded `app.js?v=1.3`, so a browser could expose the new selector entries while executing the pre-touchscreen runtime.
- Reimplemented the 6270 and 6271CV around source artwork extracted directly from the supplied SWF files.
- Preserved the 6270 gray rectangular UI and 6271CV blue/yellow rounded UI as distinct keypad families instead of rendering both as generic browser controls.
- Added functional Security, Messages/Message Center, Lighting, More Choices, Console Mode, Event Logs, Zones, Operating Modes, and Setup pages.
- Connected touchscreen controls to live panel arming/disarming, faults, bypass state, virtual lighting outputs, emergency alarms, and Monitoring Center history.
- Normalized inconsistent Flash asset rectangles and deliberately omitted demo-only news/sports/weather/email/stocks content from the security-system workflow.

## v1.3 — Programming cursor & pixel-grid fidelity

- Forced all three keypad models into exact fixed-row/fixed-column key grids with uniform key dimensions.
- Added a true flashing underline cursor to alpha-keypad programming screens.
- Reworked <code>*56</code> pre-populated editing so each typed digit replaces the active character and advances/wraps the cursor.
- Changed the write data-field selector from <code>Go to Data Field</code> to <code>Field ?</code>.
- Improved report-code presentation while retaining programmable report data.
- Added the integrated <code>Custom Words?</code> step and refined alpha descriptor entry, including the BACK/DOOR-style <code>#XXX</code> flow.

## v1.2 — Monitoring Center

- Added a simulated central-station **Monitoring Center** at the bottom of Vista Emulator DELUXE.
- Central-station events are timestamped and remain in a separate persistent receiver history until explicitly cleared.
- Alarm transmissions include zone number, alpha descriptor, partition, and report code when the zone has a programmed report code.
- Duress-authority users now transmit a prominently marked **DURESS** event while the keypad continues to respond normally and silently.
- Communication tests feed the receiver. Programmed `*65` opening, `*66` closing/arming, and `*61` bypass report fields also generate matching receiver events.
- Added a dedicated **Clear Events** control without tying receiver history to panel reset/NVRAM operations.

## v1.1 — Vista Emulator DELUXE

- Promoted the emulator under its official public name: **Vista Emulator DELUXE**.
- Added a prominent DELUXE brand lockup to the startup screen and a persistent brand identity above the running controls.
- Updated the browser/page title, README, public changelog, visible release version, and runtime asset cache revision to **v1.1**.
- No intentional panel-behavior changes were made from v1.0.8.11 in this branding release.

## v1.0.8.11 — Bypass command reliability

- Fixed a state-machine bug where a successful manual bypass left `bypassEntry` active. Subsequent digits could therefore be consumed as more bypass-zone input for up to 10–15 seconds instead of being parsed as a new panel command. A successful bypass now immediately clears bypass-entry digits/timers and resets the rolling command input.
- Hardened **Quick (Forced) Bypass**. With installer field **`*23`** enabled for partition 1, `code + 6 + #` bypasses every currently faulted zone that is legally bypassable; fire, CO, and other non-bypassable 24-hour/life-safety zones remain protected.
- Changed the active alpha bypass-entry prompt from `BYPASS` to the VISTA-style `BYPAS` abbreviation.
- Armed alpha displays now show the selected armed mode on line 1 and `ZONE BYPASSED` on line 2 whenever bypassed zones remain after exit delay.

## v1.0.8.10 — Source-project behavior audit

- Performed a targeted source-code/behavior audit against the supplied **Honeywell 6150 Keypad Demo** and **6160V Excluding Voice Implementation** Scratch projects. Website artwork remains authoritative; no Scratch-project images were copied into the web build.
- Removed a critical life-safety input bug that intercepted a bare `1` whenever fire/CO was active. Since the normal master code begins with `1`, that could prevent a valid code+OFF sequence from ever reaching the rolling command parser.
- Corrected 6150 delay audio. The Scratch project's `arming2` WAV is silent and is used only as a one-second timing track. Added the actual 6150 `arming` WAV for entry/exit warnings and the 6150 `startup` WAV for model-correct startup audio.
- Entry and audible AWAY/MAXIMUM delay sequences now use three actual model-specific warning pulses before voice output. Repeating delay audio stays suppressed until the voice sequence completes, avoiding overlapping warning/voice playback.
- 6150 entry delay now uses 6150 warning/final-ten-second audio as well as 6150-initiated exit delay.
- Rebuilt fire temporal-three from the model's own warning pulse, matching the supplied Scratch loop: three warning pulses followed by the one-second temporal pause.
- Alarm sounder selection is now derived from all currently active alarm zones, preventing a later burglary/silent zone from accidentally demoting an existing fire or CO cadence.
- Fixed 6150 fixed-English multi-alarm display selection so it follows the same cycling alarm zone as alpha keypads.
- Corrected voice STATUS while disarmed/not-ready to announce `Disarmed. Not. Ready to arm.`
- Hardened function-key routing: **No Label Applied** is always inert; A/B/C/D keyboard input uses the same two-second hold requirement as pointer input; *58 A/B/C/D navigation works from swapped and auxiliary keypad views; function actions retain the initiating keypad identity for model-correct acknowledgement/arming behavior.
- Extended exit-delay fault handling so 24-hour/life-safety points remain active during arming instead of being swallowed by the exit-delay branch.
- Imported only behavior/reference information and two 6150 sound assets from the supplied projects. No image asset in the website was changed.

## v1.0.8.9 — Backlight, function-key, and fire-alarm reliability

- **No Label Applied** now makes the selected A/B/C/D function key inert and clears any stale emergency-zone assignment.
- Added a **30-second backlight timeout**. Installer programming, entry delay, exit delay, an active alarm, startup, and fresh keypad activity force illumination.
- Unified the alpha-LCD palette used by the 6160 and 6160V so keypad model changes do not change the backlight color.
- Function-key two-second holds now cancel as soon as the pointer leaves the physical key rectangle, including drags/releases outside the stage.
- Replaced the erroneous fire sounder pattern with a proper **temporal-three** cadence based on single 0.5-second pulses.
- Made two-stage fire-alarm clearing robust: first valid OFF silences/disarms and retains memory; a second valid OFF clears the memory condition.
- Cancel active and queued alarm voice prompts when a life-safety alarm is silenced or the system is disarmed, preventing stale annunciations from continuing afterward.

## v1.0.8.8 — Custom function-key labels

- Added the complete 19-costume A/B/C/D key label set from `CustomLabelKey.sprite3`, preserving its SVG path artwork.
- Each function key can be labeled independently. Lower function keys are positioned on an exact 23-pixel vertical stage grid derived from the top key on a 480×360 Scratch stage.
- Label presets cover Fire, Fire Glyph, Red Cross Glyph, Panic, Hospital Glyph, Police, Medical, Police Glyph, Night, Lights, Time, Aux, Aux2, Test, Arm, Stay, Away, Page, and No Label Applied.
- Choosing a named preset programs its matching function and emergency zone where applicable. Installer `*57` can subsequently alter the programmed function without changing the physical label.
- Implemented Output Device toggling for LIGHTS/AUX/AUX2 presets with independent saved on/off states.

## v1.0.8.7 — Perimeter protection during exit delay

- Corrected Zone Type 03 **Perimeter** behavior during arming: perimeter protection is active immediately when the arming sequence starts, rather than being deferred until the exit countdown expires.
- Opening a perimeter contact/window during an active exit delay now triggers the burglary alarm immediately and terminates the exit delay.
- Preserved the armed-state indication when an alarm originates during the arming/exit-delay phase.
- Entry/Exit zone types retain their intended exit-delay allowance; this change does not turn the exit countdown into an instant alarm for the designated exit path.

## v1.0.8.6 — Delay and alarm voice sequencing

- Corrected AWAY/MAXIMUM arming startup. With audible exit warning enabled, the keypad now begins with the actual entry/exit-warning burst, performs the 6160V arming announcement, then resumes the repeating warning. With audible exit warning disabled, it gives a double ding, still performs the voice announcement, and keeps the exit countdown silent.
- Entry delay now starts with the entry/exit-warning burst, pauses warning audio for the 6160V phrase `Disarm system now`, then resumes normal warning cadence.
- Changed repeating alarm voice cadence from five seconds to ten-second sounder windows.
- A newly tripped alarm zone must remain in alarm for at least ten seconds before its details are spoken.
- When multiple zones are active, eligible alarm zones are announced together in zone-number order with a two-second silent pause between announcements; the hi-lo sounder stays paused for the entire batch and then resumes for another ten seconds.
- Kept LCD alarm-zone cycling at five seconds so display behavior remains responsive while voice timing is handled independently.
- Suppressed redundant voice annunciation when a valid code+OFF command is entered on an already-disarmed system with no alarm state or memory to clear.

## v1.0.8.5 — Multi-zone alarm and voice-annunciation fidelity

- Added five-second cycling across every zone currently in alarm, with newly violated zones shown immediately and the cycle continuing in numeric order.
- 6160V alarm voice now identifies the violated zone by alpha descriptor (for example, `Alarm. Front Door.`) instead of announcing only `Alarm`; zones without an alpha descriptor fall back to `Alarm. Zone. <number>.`
- Voice announcements now pause the active alarm cadence for the duration of the spoken prompt and resume the correct cadence when speech finishes.
- Repeating voice annunciation follows the same five-second active-alarm cycle as the LCD.
- First disarm/silence with alarm memory remaining now announces `Disarmed. Not. Ready to arm.`; the second OFF/clear can return to the normal ready announcement.
- Corrected the voice-vocabulary aliases for the source-library FOUR and SIX clips so numeric zone fallback can cover the full 1–99 range.

## v1.0.8.4 — 6150 keypad fidelity

- Replaced transformed 6160 key hit geometry on the 6150 with exact key positions measured from the supplied Honeywell 6150 Scratch project.
- Normalized all sixteen 6150 keycaps to one physical SVG size so the rows and columns stay on a firm grid.
- Added the source project's 6150-specific `arming2` and final-ten-second countdown sounds for 6150-initiated exit delays instead of the 6160 repeating arming beep.
- Added live entry/exit-delay time to the 6150 three-digit seven-segment display.

## v1.0.8.3 — Door interaction and 6150 swing-door hotfix

- Corrected closed-door hit geometry across the keypad cover implementation so the vertical A/B/C/D cutout is no longer covered by the door-open click target.
- Restored the 6150's full ten-costume swing-door sequence from the supplied `Honeywell 6150 Keypad Demo` Scratch project instead of behaving as a two-state open/closed graphic.
- Restored the source project's layer change: door costumes 1–5 are in front of the keypad, while costumes 6–10 move behind the keypad during the open half of the swing.
- Preloaded all ten 6150 door frames and guaranteed intermediate browser paints to prevent fast SVG swaps from visually collapsing into only the first and last frame.
- Kept the source project's existing OPEN/CLOSE sounds, which were already the exact audio assets used by the emulator.

## v1.0.8.2 — Keycap geometry hotfix

- Fixed the new SVG keycaps being stretched to the rectangular click/touch hitboxes.
- Preserved each keycap SVG's native aspect ratio and centered the artwork within the hit target.
- Corrected the most obvious distortion on the taller `8`, `*`, `0`, and `#` hitboxes across 6160, 6150, and 6160V renderers.

## v1.0.8.1 — Startup/cache hotfix

- Fixed a JavaScript initialization-order regression introduced by v1.0.8. The primary keypad was requesting the new keycap asset helper before its revision constant had been initialized, aborting the runtime and leaving startup/creator dialogs nonfunctional.
- Updated the page to request versioned v1.0.8.1 JavaScript and CSS so a standard refresh no longer reuses the previous v1.0.7 runtime.
- Kept the path-based SVG keycaps and versioned their URLs so stale key graphics are replaced without requiring Ctrl+Shift+R.

## v1.0.8 — Path-based SVG keycaps

- Replaced keypad label artwork with new enclosed SVG keycaps that use path geometry instead of live text rendering.
- Applied the new path-based legends across all supported keypad variants: 6160, 6150, and 6160V.
- Improved cross-browser and cross-OS consistency by eliminating dependence on host font availability and text layout differences for keypad legends.
- Added a keycap asset revision query so deployments are less likely to show stale cached key-label SVGs.

## v1.0.7 — Manual parity pass and public changelog

### Panel operation
- Cross-checked core end-user behavior against the Honeywell/Resideo VISTA-15P/VISTA-20P User Guide and installer programming guide.
- Corrected **NIGHT-STAY** so interior protection follows **Zone List 5** instead of simply behaving like ordinary STAY.
- Corrected **Chime-by-Zone** so, when enabled by field `*26`, **Zone List 3** controls which eligible zones chime.
- Corrected **Interior Follower (Zone Type 04)** so it follows an already-started entry delay rather than immediately creating a burglary alarm.
- Added the disarmed trouble behavior for **Trouble by Day / Alarm by Night (Zone Type 05)**.
- Added distinct **Carbon Monoxide (Zone Type 14)** life-safety state/display behavior and life-safety silencing behavior.
- Added a verification window for **Fire with Verification (Zone Type 16)** rather than treating it as ordinary immediate fire.
- Added operation behavior for compatible RF button zones programmed as **Arm-STAY (20), Arm-AWAY (21), and Disarm (22)**.
- Tightened bypass behavior: bypass is a disarmed operation, normal bypass entry is additive, and life-safety/24-hour zone types cannot be manually bypassed through the normal burglary bypass path.
- Reworked **Walk Test** toward panel behavior: requires a ready/disarmed panel, starts with a short sounder test, produces zone-test feedback without creating real alarms, supplies reminder beeps, and times out automatically.
- Implemented the `*91` **Exit Delay Restart/Reset** option, including STAY-family quick-exit restart and the one-time AWAY entry/exit-door reset behavior.

### Installer programming
- `*56` now accepts the documented VISTA-20P zone-number range used by menu programming, including reserved/emergency zone numbers, rather than rejecting every number above 64.
- `*56` now presents the documented **DELETE ZONE?** confirmation when Zone Type `00` is selected.
- Preserved the v1.0.6 `*56` fixes for pre-populated zone numbers, replacing defaults on first digit entry, next-zone progression, and `#` field-review navigation.
- `*58` is now a distinct **Expert Zone Programming** workflow instead of being an alias for `*56`; the compact summary/cursor concept, A/B navigation, C serial-copy behavior, and D wireless-template branch are represented.
- `*81` now follows the documented **delete list / delete individual zone(s)** sequence.
- `*96` now initializes the downloader/subscriber-account data represented by the emulator.
- `*97` now reloads programming-field defaults and the documented hardwire-zone factory profile rather than performing only a partial zone reset.
- Corrected the factory default for `*95` Ring Count for Downloading to `#15` and made reserved/emergency zone programming survive browser persistence.
- Field `*26` and `*91` options now feed the runtime features they configure.

### Accuracy/transparency
- Added `PARITY_AUDIT.md`, which records what was checked, what changed, and what is still intentionally partial.
- Added a **Changelog** button to both the Start Emulator screen and the running-emulator toolbar.
- Added this cleaned `CHANGELOG.md` as the longer public release history.
- The emulator no longer presents recognized-but-unfinished `*79/*80` output programming as if it were complete.

## v1.0.6 — Programming navigation fixes
- Prevented A/B/C/D keypad functions from triggering panics or arming while installer programming is active, except where those keys are explicitly part of a programming menu such as `*57`.
- Fixed the `*56` **SET TO CONFIRM?** default so `*` can accept the displayed value without requiring it to be re-entered.
- Pre-populated the first programmed zone on entry to `*56` and the next zone after completing a zone.
- Made the first typed digit replace a pre-populated zone number instead of appending to it.
- Made `#` clear the displayed `*56` zone first, then enter field review on the next `#`.
- Removed a field-selection soft lock that previously required reloading the page.

## v1.0.5 — Mobile audio and performance
- Reduced expensive audio preloading, especially large uncompressed sources.
- Added a lower-bandwidth mobile-friendly source for the creator statement while retaining a compatibility fallback.
- Improved mobile/WebKit audio initialization and fallback playback.
- Cached static LCD rendering work and reduced unnecessary keypad repaints.
- Removed expensive mobile backdrop effects and tightened touch handling.

## v1.0.4 — Startup prompt ordering
- Changed startup order to **Start Emulator → creator notice → emulator**.
- Made the creator-notice image reliably tappable/clickable across the full card.
- Closing the creator notice immediately stops and rewinds its audio.
- Starting audio from the Start Emulator user gesture improved browser autoplay reliability.

## v1.0.3 — 6160V, LCD, and startup integration
- Refined 6160V arming announcements for AWAY/STAY/INSTANT/MAXIMUM completion states.
- Replaced the generated LCD typeface with the locally bundled LCD-display font.
- Continued 6160V Message Center and voice behavior integration.
- Added the creator notice requested for the public project startup sequence.

## v1.0.2 — 6150/6160V behavior refinements
- Corrected 6160V MAXIMUM arming speech sequencing.
- Reworked the 6150 door animation using constant-size transparent frames so costume changes no longer resize the door element.
- Continued keypad-specific acknowledgement/audio cleanup.

## v1.0.1 — Realism corrections
- Separated 6150 acknowledgement sounds from ordinary 6160 acknowledgement sounds.
- Removed most synthetic `CODE ERROR` feedback from malformed ordinary user input; the rolling command stream can recover from later valid commands.
- Corrected LCD alignment so installer-programming/menu text remains left-aligned rather than globally centering short strings.
- Refined 6160V arming voice behavior.

## v1.0 — Public release
- Promoted the browser emulator to a public VISTA-20P-oriented release.
- Supported swappable primary **6160 Alpha**, **6150 Fixed-English**, and **6160V Alpha/Voice** keypads at ECP address 16.
- Supported additional keypad addresses 17–23 controlled by `*190–*196`.
- Included persistent browser programming, hardwired/RF zone devices, arming/alarm/entry/exit state, installer programming, 6160V voice behavior, and Message Center functionality.

## Earlier public-development milestones
- Converted the original Scratch-style simulator into browser-native HTML/CSS/JavaScript rather than embedding the Scratch stage.
- Added a software-rendered 2×16 alpha LCD and keypad hitboxes/keyboard input.
- Added the ECP keypad bus, 6150 fixed-English behavior, movable secondary keypads, and persistent keypad positions.
- Added rolling command parsing, alarm memory, realistic ARMED/READY logic, entry/exit delay behavior, and zone-device modeling.
- Added installer programming foundations including direct fields, `*56`, `*57`, `*81`, `*82`, custom alpha words, descriptors, secondary keypad address fields, and persistent settings.
- Added the clean-model 6160V keypad, voice annunciation, volume controls, Voice Chime/Status, and browser microphone-based Message Center.

## Current scope note
The project aims for close **user-visible VISTA-20P behavior**, not a byte-for-byte emulation of every panel microcontroller, communicator, RF receiver, or output-module subsystem. See `PARITY_AUDIT.md` for the currently known boundaries.