SMART CONFERENCE ROOM 3.2.3.8 - VALIDATION REPORT
==================================================

BASELINE
- Source baseline                         : Smart Conference Room 3.2.3.7 Full Source
- Release type                            : Original Full Source (no license, no Builder)
- Scope                                   : Seat-Mic Event Handler & Persistence Integrity Hotfix only

CONFIRMED ROOT CAUSE
- The save button previously registered saveConferenceMappings directly as a click handler.
- Browser MouseEvent was therefore passed as the function's first mapping argument.
- MouseEvent.isTrusted was normalized and persisted as a fake microphone ID.
- The submitted payload then legitimately contained zero assigned mappings and explicitEmpty=true.
- Central, meeting snapshot and local session consequently confirmed and stored the same corrupted empty mapping.

IMPLEMENTED HOTFIX
- Save-button listener uses a no-argument wrapper.
- Accidental DOM Event payloads are explicitly rejected.
- Save reads checked data-mic-id/data-seat-id controls directly from the DOM.
- DOM mapping is compared with the in-memory draft; visible user selection is authoritative.
- Normal save cannot infer an explicit request to clear all mappings.
- Client verifies operationId, mapping count, mapping hash and seatMicRevision.
- Client verifies the rendered checkbox state after a canonical response.
- Full session snapshots now use the same stale seatMicRevision protection as deltas.
- PC Server and Central reject Event-property IDs such as isTrusted, target, currentTarget, type and timeStamp.
- Central startup migration removes invalid IDs from room profiles and meeting snapshots.
- PC Server startup/legacy import removes invalid IDs from SQLite local sessions,
  microphone_mappings.json and meta.json SCR3 snapshots.
- Lost real mic-seat relationships are not guessed automatically.

SOURCE VALIDATION
- JavaScript syntax                       : 195/195 PASS
- Python syntax (AST parse)                : 8/8 PASS
- JSON parse before current release manifest: 20/20 PASS
- Runtime version consistency              : PASS
- Central state schema                     : 324
- PC local-session schema                  : 308

TARGETED REGRESSION
- SCR 3.2.3.8 event/persistence integrity  : PASS
- Click-listener wrapper contract           : PASS
- DOM checked-mapping collection            : PASS
- Invalid isTrusted mapping rejection       : PASS
- Central profile/meeting normalization     : PASS
- PC local-session/SCR3 normalization       : PASS
- Legacy JSON cleanup write-back contract   : PASS
- Explicit-empty save rejection             : PASS
- Seat-mic atomic transaction               : PASS
- Seat-mic profile consistency              : PASS
- Existing profile regression               : PASS
- Mic auto-assignment / chairperson guard   : PASS
- Modern navigation / UI static contracts   : PASS

LONG-MEETING REGRESSION
- Realtime delivery/backpressure            : PASS
- Inbound STT queue/coalescing               : PASS
- Incremental persistence                    : PASS
- Synthetic soak                            : PASS
  - 3,000 segments
  - 20,000 partial updates coalesced
  - soak execution observed                 : 2,319 ms in this container run

BROADER NON-LIVE MATRIX
- Selected tests                            : 110
- PASS                                      : 109
- BLOCKED                                   : 1
- Assertion failures                        : 0
- Blocked test                              : client/pc-server/tests/stt-boundary-test.js
- Block reason                              : container does not provide the ws dependency

ANDROID STT
- JVM tests                                 : 12/12 PASS
- Android source vs 3.2.3.7 baseline        : 79/79 files byte-for-byte unchanged
- Android baseline                          : Official 1.1.20.4

CR PYTHON REGRESSION
- Physical segment inspection               : PASS
- External overlap dedupe                    : PASS
- Offline model downloader                   : PASS
- Result                                    : 3/3 PASS

SOURCE HYGIENE
- Active SCR license runtime marker files    : 0
- User-provided token/secret matches         : 0
- node_modules                               : 0
- __pycache__ / *.pyc / *.pyo                : 0
- Runtime SQLite/log artifacts               : 0

DATA MIGRATION NOTE
- Corrupted isTrusted entries are removed automatically from all supported persistence layers.
- The application cannot reconstruct the correct Mic-to-Seat assignment because that assignment
  was never submitted successfully. Affected profiles must be mapped once again and updated after upgrade.

LIMITATIONS / REQUIRED WINDOWS ACCEPTANCE
- The exact user's existing Windows data directory was not mounted into this environment; migration was
  verified through source execution contracts and corrupted mapping fixtures.
- Full browser E2E with real click events, live WebSocket traffic and service restart sequence remains a
  Windows acceptance item.
- Full DICENTIS Gateway WebSocket / real-bridge operation was not run because the container lacks the ws
  package and Bosch Windows runtime.
- Final acceptance should run on Windows with Chrome/Edge, Central, Room Agent, PC Server, Gateway,
  Android and the target DICENTIS environment.

PACKAGING
- Current release manifest                  : SOURCE_MANIFEST_3.2.3.8.json
- Manifest-listed files                     : 661
- Final package files including manifest    : 662
- ZIP CRC                                    : PASS
- Extracted-file manifest verification       : PASS
- SHA-256 sidecar                            : generated with release ZIP
