docs(p0): SysRS/SysDes/SRS/SAD/SDD/Verification + traceability for Android P0 reconciliation
Full P0 Android documentation chain: - SysRS: API 24 → API 28 reconciliation per DEC-004 (SysRS-288); add SysRS-305 (Android in-call audio mode), SysRS-306 (RECORD_AUDIO runtime timing). - SysDes: SysDes-152 (in-call audio mode subsystem), SysDes-153 (RECORD_AUDIO permission flow), SysDes-154 (Android voice audio backend), SysDes-155 (macOS runtime baseline). - SRS: SRS-187 → API 28; add SRS-208 (in-call audio mode), SRS-209 (RECORD_AUDIO + listen-only fallback), SRS-210..215 (Android voice audio backend latency/preset/AEC/usage/sharing/foreground service); retarget SysDes anchors from generic SysDes-135 to SysDes-152/153/154. - SAD: SAD-063 refreshed (API 28); add SAD-084 (audio mode controller), SAD-085 (permission adapter with listen-only), SAD-086 (foreground service), SAD-087 (macOS runtime baseline); formalize cross-cutting + platform-specific allocation pattern in §24.1. - SDD: expand SDD-028 (BackIntentService); refresh SDD-073 (build config); add SDD-105 (JNI bootstrap), SDD-106 (permission requester), SDD-107 (foreground service), SDD-108 (audio mode controller), SDD-109 (AAB pipeline), SDD-110 (PTT capability), SDD-111..116 (Android voice audio backend), SDD-118 (Android bridge build automation), SDD-119 (iOS/macOS bridge build automation back-fill). - Verification: create android-p0-acceptance.md TC-1..TC-18; add SWE4-UV-040..052, SWE5-IV-016..026, SWE6-SV-018..030, SYS4-SIV-015 strengthened + SYS4-SIV-017/018. - Governance: traceability matrix v0.9.9 with end-to-end chain closure; DEC-032 documents the temporary abiFilters reduction to arm64-v8a only and its restore-by gate. Trace: full chain SysRS → SysDes → SRS → SAD → SDD → Code → Verification.
This commit is contained in:
@@ -241,3 +241,160 @@ Software verification results shall be summarized in a software verification sum
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.3 | 2026-05-15 | Added desktop PTT software-verification item SWE6-SV-017 covering end-to-end SRS-195..203 verification across Windows, macOS, and GNOME-on-Wayland Linux reference hosts. |
|
||||
|
||||
|
||||
## 9. Android P0 Software Verification Addendum
|
||||
|
||||
**SWE6-SV-018**: Verify Android voice foreground service satisfies SRS-111.
|
||||
|
||||
- Source SRS: SRS-111
|
||||
- Verification method: Device-level software-qualification test on API 28 floor device + mid-tier + current target (per `docs/verification/android-p0-acceptance.md` TC-3)
|
||||
- Pass criteria: While connected to a voice channel the foreground service runs with `foregroundServiceType="microphone"` (API 30+) and a non-dismissible notification; mic capture and playback continue with the screen off for ≥ 10 minutes without being killed; service stops cleanly on disconnect.
|
||||
- Evidence: Device test log + screen-recording
|
||||
- Cross-link (added in 0.9.5): SRS-215 device-matrix expansion is covered by SWE6-SV-030. SWE6-SV-018 remains the single-device baseline; SWE6-SV-030 collects per-SDD-116-row evidence.
|
||||
|
||||
**SWE6-SV-019**: Verify RECORD_AUDIO request timing and listen-only fallback satisfy SRS-209.
|
||||
|
||||
- Source SRS: SRS-209
|
||||
- Source SysRS: SysRS-306
|
||||
- Verification method: Device-level test (android-p0-acceptance.md TC-2)
|
||||
- Pass criteria: The mic permission is requested at the user gesture that first needs it (not at app launch); denial drops capture but keeps playback open (listen-only); permanently-denied state opens the system settings deep-link instead of re-prompting; re-grant re-enables capture without process restart.
|
||||
- Evidence: Device test log
|
||||
|
||||
**SWE6-SV-020**: Verify Android in-call audio mode round-trip satisfies SRS-208.
|
||||
|
||||
- Source SRS: SRS-208
|
||||
- Source SysRS: SysRS-305
|
||||
- Verification method: Device-level test with `dumpsys audio` (android-p0-acceptance.md TC-6)
|
||||
- Pass criteria: Pre-join mode is recorded; during voice session mode is `MODE_IN_COMMUNICATION`; on leave/disconnect prior mode is restored exactly. No permanent mode lock across multiple sessions. No crash if a Bluetooth headset is connected/disconnected mid-session (P0 minimum).
|
||||
- Evidence: Device test log + dumpsys traces
|
||||
|
||||
**SWE6-SV-021**: Verify Android back navigation satisfies SRS-163.
|
||||
|
||||
- Source SRS: SRS-163
|
||||
- Verification method: Device-level test (android-p0-acceptance.md TC-11 + TC-12) on API 28, an API ≤ 32 device, and an API 33+ device.
|
||||
- Pass criteria: Modal-first close; one-pop-per-press; home-route back backgrounds; PTT-active ignores back. Predictive-back animation present on API 33+ and absent on pre-33 with identical end behaviour.
|
||||
- Evidence: Device test log + screen-recording
|
||||
|
||||
**SWE6-SV-022**: Verify Android minimum API satisfies SRS-187 and DEC-004.
|
||||
|
||||
- Source SRS: SRS-187
|
||||
- Source SysRS: SysRS-288
|
||||
- Verification method: Manifest inspection + install attempt on API 28 device
|
||||
- Pass criteria: Merged manifest declares `minSdkVersion = 28`. Install on API 28 succeeds. Install attempt on API 27 simulator/device is rejected with a clean error.
|
||||
- Evidence: Manifest dump + install logs
|
||||
|
||||
**SWE6-SV-023**: Verify Android Play target API and AAB packaging satisfy SRS-119 and SRS-188.
|
||||
|
||||
- Source SRS: SRS-119, SRS-188
|
||||
- Verification method: AAB inspection + Play Console upload to Internal Testing (android-p0-acceptance.md TC-13)
|
||||
- Pass criteria: `targetSdkVersion` matches the currently-required Play target per SRS-188; release artifact is an AAB (not a bare APK) per SRS-119; Play Console accepts the bundle; signing key is the CI release key.
|
||||
- Evidence: AAB dump + Play Console acceptance screenshot
|
||||
|
||||
**SWE6-SV-024**: Verify Android PTT capability badge reports `L0Focused` per SAD-086 / SDD-110.
|
||||
|
||||
- Source SRS: SRS-208 (mode boundary), SRS-209
|
||||
- Verification method: Device-level UI test (android-p0-acceptance.md TC-4 + TC-10)
|
||||
- Pass criteria: Capability badge shows `L0Focused` with Android-specific explanatory copy. No global hotkey is bound. Backgrounding the app stops PTT transitions from being delivered.
|
||||
- Evidence: UI screenshot + log
|
||||
|
||||
| SRS Range | SWE.6 Coverage |
|
||||
|---|---|
|
||||
| SRS-111 | SWE6-SV-018 |
|
||||
| SRS-119 | SWE6-SV-023 |
|
||||
| SRS-163 | SWE6-SV-021 |
|
||||
| SRS-187 | SWE6-SV-022 |
|
||||
| SRS-188 | SWE6-SV-023 |
|
||||
| SRS-208 | SWE6-SV-020, SWE6-SV-024 |
|
||||
| SRS-209 | SWE6-SV-019, SWE6-SV-024 |
|
||||
|
||||
|
||||
### Android voice audio backend qualification items (SRS-210..SRS-215, SDD-111..SDD-116 wave)
|
||||
|
||||
**SWE6-SV-025**: Verify SRS-210 mouth-to-ear latency target per device-class on the SDD-116 device matrix.
|
||||
|
||||
- Source SRS: SRS-210
|
||||
- Source SDD: SDD-111, SDD-112, SDD-116
|
||||
- Verification method: Glass-to-glass acoustic measurement on each SDD-116 matrix device (API 28, API 31, API 34; at least one Pixel + one Samsung). See "Glass-to-glass latency measurement procedure" below.
|
||||
- Pass criteria: On devices where `achieved_performance_mode() == LowLatency` the measured mouth-to-ear latency is **≤ 150 ms** (median of 20 samples, 95th percentile ≤ 180 ms). On devices where the achieved mode is `None`/`PowerSaving` the measured latency is **≤ 250 ms** (median of 20 samples, 95th percentile ≤ 300 ms). Tier classification is derived from the SWE4-UV-051 unit-level mapping evaluated against the per-device `achieved_performance_mode` from SWE6-SV-026.
|
||||
- Evidence: Per-device measurement log (CSV: device, API, achieved_mode, sample_index, latency_ms) + reference audio recording for spot-check + acceptance form rows TC-17, TC-18
|
||||
- SDD-116 matrix rows satisfied: all (one row per device)
|
||||
|
||||
**SWE6-SV-026**: Verify SRS-211 input preset achieved value recorded per device.
|
||||
|
||||
- Source SRS: SRS-211
|
||||
- Source SDD: SDD-112 (`achieved_input_preset()`), SDD-116
|
||||
- Verification method: Device-level test reading the backend's diagnostics export after `voice_join`
|
||||
- Pass criteria: For each SDD-116 matrix device the diagnostics record one of `{VoiceCommunication, VoicePerformance, Generic}` and that value is consistent with the fallback ladder verified by SWE4-UV-048. `VoiceCommunication` is preferred and any deviation must be accompanied by a recorded fallback rationale (e.g. preset rejected by OEM stack). No device reports an unrecorded/unknown preset.
|
||||
- Evidence: Per-device diagnostics export
|
||||
- SDD-116 matrix rows satisfied: all
|
||||
|
||||
**SWE6-SV-027**: Verify SRS-212 hardware AEC engagement (and NS/AGC where supported) per device.
|
||||
|
||||
- Source SRS: SRS-212
|
||||
- Source SDD: SDD-113, SDD-116
|
||||
- Verification method: Device-level test inspecting backend diagnostics + audible regression check (echo audibility) under speakerphone-routed playback
|
||||
- Pass criteria: For each matrix device the diagnostics record per-effect engagement: `{aec: hw|sw|unavailable, ns: hw|sw|unavailable, agc: hw|sw|unavailable}`. Where `AcousticEchoCanceler.isAvailable()` returns true the recorded value MUST be `hw`. Where it returns false the recorded value MUST be `sw` (software fallback per SDD-113 item 5) — never silent. Audible echo evaluation (test sequence: 10 s of speakerphone playback with mic open at conversational distance) yields no operator-perceptible echo on at least one Pixel device and at least one Samsung device.
|
||||
- Evidence: Per-device diagnostics export + audible-check operator note
|
||||
- SDD-116 matrix rows satisfied: all (AEC/NS/AGC availability column)
|
||||
|
||||
**SWE6-SV-028**: Verify SRS-213 output usage and content type achieved per device.
|
||||
|
||||
- Source SRS: SRS-213
|
||||
- Source SDD: SDD-112 (`achieved_output_usage`, `achieved_output_content_type`), SDD-116
|
||||
- Verification method: Device-level test reading backend diagnostics; cross-checked with `dumpsys media.audio_flinger` where queryable
|
||||
- Pass criteria: For each matrix device the diagnostics record `achieved_output_usage == VoiceCommunication` AND `achieved_output_content_type == Speech`. Where `dumpsys` exposes the stream attributes, the dump corroborates. Mismatch fails the case. Also verifies the in-call routing side-effect: volume slider during the session adjusts the call-volume stream, not media volume (operator check on at least one device).
|
||||
- Evidence: Per-device diagnostics export + dumpsys excerpt + operator volume-routing note
|
||||
- SDD-116 matrix rows satisfied: all
|
||||
|
||||
**SWE6-SV-029**: Verify SRS-214 sharing mode achieved per device.
|
||||
|
||||
- Source SRS: SRS-214
|
||||
- Source SDD: SDD-112 (`achieved_sharing_mode`), SDD-116
|
||||
- Verification method: Device-level test reading backend diagnostics on each matrix device
|
||||
- Pass criteria: For each matrix device the diagnostics record `achieved_sharing_mode ∈ {Exclusive, Shared}`. The requested value is always `Exclusive`; deviation to `Shared` is acceptable and must be recorded with no operational regression (assert: no callback errors in the first 60 s of the session when the achieved mode is `Shared`). The aggregate device-matrix table in the test report cross-tabulates `requested vs achieved` per device.
|
||||
- Evidence: Per-device diagnostics export
|
||||
- SDD-116 matrix rows satisfied: all
|
||||
|
||||
**SWE6-SV-030**: Verify SRS-215 background mic capture under foreground-service-type=microphone per device.
|
||||
|
||||
- Source SRS: SRS-215
|
||||
- Source SDD: SDD-107, SDD-114 (manifest declarations), SDD-115 (FGS-first sequencing), SDD-116
|
||||
- Verification method: Device-level test (extends SWE6-SV-018 / android-p0-acceptance.md TC-3) executed on each SDD-116 matrix device
|
||||
- Pass criteria: With the screen off (device locked or screen timed out) for ≥ 10 minutes the input stream remains open AND frames continue to be produced by the AAudio input (verified by a periodic per-minute frame-count probe in the diagnostics) on every matrix device. On API 34 devices the FGS-type is `microphone` (verified by `dumpsys activity services` excerpt). No `ForegroundServiceDidNotStartInTimeException` or `MissingForegroundServiceTypeException` in logcat. Cross-link annotation: this item extends SWE6-SV-018 with per-matrix-row evidence; SWE6-SV-018 remains the single-device baseline and SWE6-SV-030 is the device-matrix expansion.
|
||||
- Evidence: Per-device test log + dumpsys excerpt + frame-count probe export
|
||||
- SDD-116 matrix rows satisfied: all
|
||||
|
||||
| SRS Range | SWE.6 Coverage |
|
||||
|---|---|
|
||||
| SRS-210 | SWE6-SV-025 |
|
||||
| SRS-211 | SWE6-SV-026 |
|
||||
| SRS-212 | SWE6-SV-027 |
|
||||
| SRS-213 | SWE6-SV-028 |
|
||||
| SRS-214 | SWE6-SV-029 |
|
||||
| SRS-215 | SWE6-SV-018 (single-device baseline), SWE6-SV-030 (device-matrix expansion) |
|
||||
|
||||
#### Glass-to-glass latency measurement procedure (SWE6-SV-025)
|
||||
|
||||
Mouth-to-ear (glass-to-glass) latency for SRS-210 shall be measured end-to-end across the Android device under test acting as the speaker AND a second Android device (or reference Linux host) acting as the listener, both joined to a controlled test TeamSpeak 3 server on the same LAN (no internet hop; LAN RTT must be measured and recorded separately, and subtracted as a baseline only if > 5 ms).
|
||||
|
||||
Measurement setup:
|
||||
|
||||
1. Connect the DUT and the reference listener device to the test server. The DUT is the talker; the reference is the listener.
|
||||
2. Drive a short acoustic impulse (a 1 kHz tone burst, 20 ms duration, or a click track) into the DUT microphone from a controlled acoustic source (small loudspeaker at fixed distance, OR a wired line-in adapter where the DUT supports one).
|
||||
3. Capture the listener device's loudspeaker output with a reference microphone connected to a stereo audio interface; the same audio interface ALSO captures the source impulse on the second channel via a hardwired tap from the impulse generator. Both channels are recorded into a single stereo WAV at ≥ 48 kHz, 16-bit minimum.
|
||||
4. Latency is the time delta between the impulse-onset sample on channel A (source tap) and the impulse-onset sample on channel B (listener loudspeaker capture), expressed in milliseconds. Onset detection: first sample exceeding 10× the RMS noise floor of the preceding 100 ms.
|
||||
5. Required precision: ≤ 1 ms (achievable at 48 kHz with single-sample onset detection). The measurement tool is unspecified; any DAW, `sox`, or custom script that meets the precision requirement is acceptable. The script and raw WAV files are part of the evidence and shall be archived.
|
||||
6. Per-device run: 20 impulses spaced ≥ 2 s apart. Record median and 95th percentile.
|
||||
7. Baseline subtraction: LAN one-way latency to the test server is measured (e.g. via ICMP / TS3 control-channel ping) and recorded but NOT subtracted from the SRS-210 result, because SRS-210's "mouth-to-ear" definition includes the network hop on a representative network. The LAN result is the ceiling case; WAN regression is out of scope for SRS-210 on this matrix.
|
||||
8. Operator notes record: DUT model, Android API, `achieved_performance_mode`, `achieved_sharing_mode`, `achieved_input_preset`, headset/loudspeaker routing, ambient noise estimate, ambient temperature only if extreme.
|
||||
|
||||
This procedure is reproducible without proprietary fixtures. A loopback-cable-only variant (DUT line-out → DUT line-in on a single device with a wired headset adapter) is acceptable as a screening test but is NOT sufficient for SRS-210 sign-off because it does not exercise the network path.
|
||||
|
||||
|
||||
## Baseline Candidate 0.9.4 Update
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.4 | 2026-05-18 | Added Android P0 software-qualification items SWE6-SV-018..SWE6-SV-024 mapped to SRS-111, SRS-119, SRS-163, SRS-187, SRS-188, SRS-208, SRS-209; cross-linked to `docs/verification/android-p0-acceptance.md` test cases. |
|
||||
| 0.9.5 | 2026-05-18 | Added Android voice audio backend software-qualification items SWE6-SV-025..SWE6-SV-030 covering SRS-210 (latency tier per SDD-116 matrix, with glass-to-glass measurement procedure), SRS-211 (input preset achieved), SRS-212 (hardware AEC engagement + software fallback evidence), SRS-213 (output usage/content type achieved), SRS-214 (sharing mode achieved), SRS-215 (FGS-hosted background capture per matrix row). Annotated SWE6-SV-018 with cross-link to SWE6-SV-030 (device-matrix expansion). |
|
||||
|
||||
Reference in New Issue
Block a user