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:
@@ -2,7 +2,7 @@
|
||||
# CHANORA_CFG_Product_Decision_Register_v0.9.7.0.0
|
||||
|
||||
**Document type:** Configuration / Product Decision Register
|
||||
**Version:** 0.9.7
|
||||
**Version:** 0.9.8
|
||||
**Status:** Baseline Candidate
|
||||
**Language:** English
|
||||
**Product:** Chanora
|
||||
@@ -221,3 +221,115 @@ release but is not an open decision:
|
||||
| 0.9.10 | 2026-05-15 | Code-side promotion: the Linux GNOME-Wayland backend (DEC-025) is now a live `org.freedesktop.portal.GlobalShortcuts` session — `CreateSession` + `BindShortcuts` + `Activated` / `Deactivated` signal subscription scoped to the session handle, owned by a dedicated tokio task per backend instance. The Flutter "Configure" button on Linux portal delegates to the portal's own system dialog (Q3a) rather than the in-app `_PttBindingCaptureDialog`. Descriptor transitions broadcast via a `watch::Sender` consumed by `chanora_core::ChanoraSession::start_audio` and forwarded to `SessionEvent::PttCapability`. Cancellation / failure path downgrades to `L0Focused` and re-emits. No decision rows mutate. |
|
||||
| 0.9.11 | 2026-05-15 | Added DEC-029 and DEC-030 covering the v1 audio + PTT lifecycle redesign. DEC-029 rejects Flutter global-hotkey packages (`hotkey_manager`, `super_hot_key`, equivalents) for PTT — they consume the key, do not deliver key-up, and do not support mouse side-buttons; the native Rust `DesktopPttBackend` already specified in SDD-083 / SDD-084 / SDD-085 is the v1 capture path. DEC-030 defers Voice Activity Detection to P1: `TransmitMode::VoiceActivity` ships as a reserved enum variant with no v1 implementation pending a backend trade-off review (RMS vs WebRTC VAD vs Silero VAD differ by ~8–16 MB and an ONNX-runtime dependency surface). No prior decision rows mutate; §5 impact matrix and §7 open-decision log gain matching rows. |
|
||||
| 0.9.12 | 2026-05-16 | Added DEC-031: missed-key-up watchdog is disabled on P0 (supersedes DEC-028 for the v1 ship). The 30 s default ceiling spec'd in DEC-028 was cutting real PTT users off mid-sentence whenever a single utterance crossed the timeout; the watchdog's intent (catching OS-level key-up loss) remains valid, but the fixed-timeout implementation is the wrong shape. The `MissedKeyUpWatchdog` Rust type and its unit tests remain in `crates/chanora_audio/src/ptt.rs`; only the `ChanoraSession::start_audio` spawn is removed. P1 will choose between a raised ceiling, OS key-state polling (`GetAsyncKeyState` / `CGEventSourceKeyState` / `XQueryKeymap`), an RMS-silence fallback paired with the audio level meter, or a combination. DEC-028 stays in the register as historical context. |
|
||||
|
||||
|
||||
## Baseline Candidate 0.9.8 Update — DEC-032
|
||||
|
||||
### DEC-032 — Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| Decision ID | DEC-032 |
|
||||
| Title | Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle. |
|
||||
| Status | **Active (temporary deviation)** |
|
||||
| Owner | Build/Toolchain |
|
||||
| Restore-by | P0 release gate (must be restored before any P0 release upload). |
|
||||
| Date recorded | 2026-05-18 |
|
||||
| Supersedes | None (temporary deviation from SDD-073 item 4 and SDD-118 item 3; does NOT supersede them). |
|
||||
|
||||
**Context.** SDD-073 item 4 and SDD-118 item 3 mandate the canonical
|
||||
three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` for the Android AAB.
|
||||
`apps/chanora_flutter/android/app/build.gradle.kts:72-79` currently has
|
||||
`abiFilters` reduced to `arm64-v8a` only with a `TODO(x86_64/armv7
|
||||
follow-up)` comment explaining the reduction.
|
||||
|
||||
**Cause.** The `audiopus_sys` + `cmake-rs` + NDK toolchain-file
|
||||
interaction does not propagate `ANDROID_ABI` as a CMake variable when
|
||||
invoked via the Gradle Exec task chain. `armeabi-v7a` and `x86_64`
|
||||
builds fail because the inner CMake configure step does not see the
|
||||
correct `-DANDROID_ABI=<abi>` argument. `arm64-v8a` (the smoke-test
|
||||
emulator target) builds cleanly because it happens to be the default
|
||||
that `cmake-rs` emits when no `ANDROID_ABI` is propagated.
|
||||
|
||||
**Scope.** Smoke-test build only. The P0 release **must** restore the
|
||||
full three-ABI set before any release upload. Internal Beta / RC
|
||||
builds for the smoke-test emulator path may continue using the
|
||||
reduced set while the cmake-rs propagation fix is in flight.
|
||||
|
||||
**Exit criteria (all four must be met to close DEC-032).**
|
||||
|
||||
1. `audiopus_sys` / `cmake-rs` `ANDROID_ABI` propagation gap resolved
|
||||
(research + builder-dispatch fix; root-cause whether upstream
|
||||
`cmake-rs` patch, a builder-side env override, or a Gradle-Exec
|
||||
level argument injection is the correct fix).
|
||||
2. All three ABIs (`arm64-v8a`, `armeabi-v7a`, `x86_64`) compile
|
||||
cleanly in CI for `chanora_bridge` cdylib.
|
||||
3. The `abiFilters` declaration in
|
||||
`apps/chanora_flutter/android/app/build.gradle.kts` is restored to
|
||||
the canonical three-ABI set, and the `TODO(x86_64/armv7
|
||||
follow-up)` comment removed.
|
||||
4. The SDD-118 item 10 release-inspection assertion confirms that all
|
||||
three `libchanora_bridge.so` files **and** all three
|
||||
`libc++_shared.so` co-staged files (per SDD-118 item 6 extended,
|
||||
absorbed into the traceability matrix v0.9.9 addendum) are present
|
||||
in any release AAB.
|
||||
|
||||
**Impact assessment.**
|
||||
|
||||
- `arm64-v8a` installs work on all 64-bit modern Android devices,
|
||||
including the smoke-test emulator and every device meeting the
|
||||
DEC-004 API 28 minimum on 64-bit hardware.
|
||||
- `armeabi-v7a` (32-bit ARM Android, ~1% of the 2026 active install
|
||||
base for app-stores that still permit 32-bit) installations are
|
||||
**blocked** until restoration. Affected users see Play Store
|
||||
filtering and cannot install the AAB.
|
||||
- `x86_64` (some Android emulators outside the smoke-test loop, rare
|
||||
Chromebook deployments, some VMs) installations are **blocked**
|
||||
until restoration.
|
||||
- **P0 release-gate cannot pass** until the three-ABI set is
|
||||
restored: release-inspection assertion (SDD-118 item 10) would
|
||||
fail, and the canonical SDD-073 item 4 / SDD-118 item 3 contract
|
||||
would be violated.
|
||||
- No SDD edit is required: the deviation is governance-layer only
|
||||
and the SDD canonical intent is unchanged.
|
||||
|
||||
**Cross-references.**
|
||||
|
||||
- SDD-073 item 4 (canonical Android ABI set).
|
||||
- SDD-118 item 3 (Gradle automation enforcing the three-ABI set);
|
||||
also item 6 (extended) for `libc++_shared.so` co-staging and item
|
||||
10 for the release-inspection assertion that any future restoration
|
||||
must satisfy.
|
||||
- `apps/chanora_flutter/android/app/build.gradle.kts:72-79`
|
||||
(in-source TODO comment marking the deviation site).
|
||||
- Audit task `ses_1c7645e36ffeY007MaYPep4wqs` (auditor New-D — origin
|
||||
of this DEC entry).
|
||||
- Traceability matrix v0.9.9 §D (governance cross-reference).
|
||||
- DEC-031 (separate temporary deviation, for `MissedKeyUpWatchdog`
|
||||
P0 disable) — listed only as precedent for the
|
||||
"Active (temporary deviation)" status pattern; no direct technical
|
||||
overlap.
|
||||
|
||||
**§3 row (for canonical table consistency).**
|
||||
|
||||
| Decision ID | Decision | Recommended decision | Status | Owner | Why it matters |
|
||||
|---|---|---|---|---|---|
|
||||
| DEC-032 | Android `abiFilters` set during P0 smoke-test cycle | Temporarily reduced to `arm64-v8a` only; restore to canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` (per SDD-073 item 4 / SDD-118 item 3) before any P0 release upload | **Active (temporary deviation)** | Build/Toolchain | Affects who can install the AAB (armv7 + x86_64 currently blocked); P0 release gate cannot pass until restored; documents the SDD-073 / SDD-118 deviation site so it is not silently shipped. |
|
||||
|
||||
**§5 row (impact matrix).**
|
||||
|
||||
| Decision | Affects SysRS | Affects SysDes | Affects SRS | Affects SAD | Affects SDD | Affects Verification | Affects Release |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| `abiFilters` temporary reduction (DEC-032) | No | No | No | No | No (canonical intent unchanged; SDD-073 item 4 / SDD-118 item 3 stand) | Yes (release-inspection assertion path) | Yes (release-gate blocker until restored) |
|
||||
|
||||
**§7 row (open decision log).**
|
||||
|
||||
| Decision ID | Owner | Decision | Status | Date | Notes |
|
||||
|---|---|---|---|---|---|
|
||||
| DEC-032 | Build/Toolchain | Temporary reduction of Android `abiFilters` to `arm64-v8a` only during P0 smoke-test cycle | Active (temporary deviation) | 2026-05-18 | Restore to canonical three-ABI set before any P0 release. Root cause: `audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap. Exit criteria (4 items) listed in DEC-032 detail entry. SDD-073 item 4 / SDD-118 item 3 unchanged. |
|
||||
|
||||
### Change history
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.8 | 2026-05-18 | Added DEC-032: temporary reduction of Android `abiFilters` to `arm64-v8a` only during the P0 smoke-test cycle. Status: Active (temporary deviation) from SDD-073 item 4 / SDD-118 item 3, which both remain unchanged. Restore-by gate: any P0 release upload must restore the canonical three-ABI set `{arm64-v8a, armeabi-v7a, x86_64}` and satisfy the SDD-118 item 10 release-inspection assertion (including the `libc++_shared.so` co-staging per SDD-118 item 6 extended). Root cause: `audiopus_sys` + `cmake-rs` + NDK toolchain-file `ANDROID_ABI` propagation gap. Owner: Build/Toolchain. Cross-references: SDD-073 item 4, SDD-118 item 3 (+ item 6 extended, item 10), `apps/chanora_flutter/android/app/build.gradle.kts:72-79` (in-source TODO), audit task ses_1c7645e36ffeY007MaYPep4wqs, traceability matrix v0.9.9 addendum §D. No prior decision row mutates. |
|
||||
|
||||
Reference in New Issue
Block a user