Lands SDD-081..088 + SDD-092 implementations on top of v1.0.0-rc.3.
The cross-platform pieces — `AudioTransmitGate`, the per-platform
backend ladder, and the missed-key-up watchdog — are wired into the
audio engine lifecycle. Per-platform live verification on Windows
/ macOS / GNOME-Wayland reference hosts is the remaining work
(RR-PTT-001..006/008 in `release-readiness-go-nogo-record.md`).
`chanora_audio::ptt`
--------------------
* `AudioTransmitGate` now owns an `Arc<AtomicBool>` plus a
`tokio::sync::watch::Sender<bool>` (SAD-075 / SDD-089). The
encoder feed reads the atomic on the hot path; the watchdog
subscribes to the watch channel.
* `MissedKeyUpWatchdog::spawn(gate, timeout)` watches the gate
transitions and self-clears `transmit_active` if the
`false -> true` lifetime exceeds the configured ceiling
(DEC-028, default 30s). Two unit tests cover the timeout-fires
and the no-fire-on-normal-release paths.
`chanora_audio::ptt_backends`
-----------------------------
* `DesktopPttBackend` trait + `PttBinding` value type + `PttInputClass`
enum + `PttBackendError` (SDD-081). `PttBinding` deliberately
carries only `input_class` and an opaque `platform_key`
string; raw key codes never appear in the type surface.
* `select()` factory (SAD-071): runtime ladder evaluation per
OS. Windows → Raw Input → low-level hook → Focused; macOS →
Event Tap → Focused; Linux → GNOME-Wayland portal probe →
Focused.
* `FocusedPttBackend` (SDD-087): universal terminal fallback;
integrates with the existing Flutter Listener-driven PTT.
* `WindowsRawInputBackend` + `WindowsHookBackend` (SDD-083 /
SDD-084): three-rung ladder evaluated once at engine start.
Each backend runs a dedicated worker thread that holds the
OS-level handle; `start`/`stop` lifecycle is honest. Live
`RegisterRawInputDevices` / `SetWindowsHookEx` wiring is
platform-verification work — the scaffolding lets the
descriptor + watchdog + capability event be exercised
end-to-end now.
* `MacOSEventTapBackend` (SDD-085): two-rung ladder with
explicit `PermissionState` (Granted / Denied / Undetermined).
`Undetermined` resolves to `L0Focused` so capability
advertising matches actual runtime behaviour even before
Input Monitoring is granted. Live `CGEventTap` + `IOHIDCheckAccess`
wiring is platform-verification work.
* `LinuxGnomeWaylandBackend` (SDD-086): probes GNOME-on-Wayland
via `XDG_SESSION_TYPE` + `XDG_CURRENT_DESKTOP`, then verifies
the `org.freedesktop.portal.GlobalShortcuts` D-Bus interface
is reachable by reading the `version` property over a
blocking zbus session. Reports `gnome-wayland-portal` /
`L2GlobalHoldToTalk`. Other Linux environments fall through
to the universal Focused backend (DEC-025).
`chanora_audio::engine`
-----------------------
* Engine now owns `transmit_gate: AudioTransmitGate` and
threads a `flag_arc()` clone into the existing capture
state for the cheap hot-path read. `set_transmit_active` /
`transmit_active()` go through the gate so subscribers see
every transition.
* `start_audio` selects the highest-capability backend via
`ptt_backends::select()`, calls `backend.start(gate, none())`,
and spawns the watchdog. Both are released in `stop()` and
on Drop.
* New `engine.rebind_ptt(binding) -> PttBackendDescriptor`
drives the binding-capture flow without restarting the engine.
* New `engine.ptt_descriptor()` returns the privacy-safe
descriptor for the initial UI render before the first
capability event arrives.
`chanora_core`
--------------
* Re-exports `PttBinding` + `PttInputClass`.
* New `ChanoraSession::set_ptt_binding(binding)` — calls
`audio.rebind_ptt` and broadcasts the freshly-published
`SessionEvent::PttCapability` so the UI badge updates live.
* New `ChanoraSession::ptt_descriptor()` for the initial render.
`chanora_bridge`
----------------
* New `BridgePttInputClass` enum + `set_ptt_binding(input_class,
platform_key)` async function. The `platform_key` string is
opaque to the bridge and never logged.
* New `ptt_descriptor()` async accessor returning the
`(level, backend_id, bound_input_class)` triple.
Flutter
-------
* `_AudioControls` now has a "Configure" button next to the
capability badge; `_PttBindingCaptureDialog` captures the
next key press (via `Focus.onKeyEvent`) or mouse side button
(via `Listener.onPointerDown` filtered to button bitmasks
`0x08` / `0x10`). The captured value is the platform-neutral
`LogicalKeyboardKey.keyLabel` or `mouse-side-button:{button}`.
* The dialog explicitly tells the user that the actual key
value never leaves it (DEC-027).
* New ARB keys: `pttConfigureAction`, `pttConfigureTitle`,
`pttConfigurePrompt`, `pttConfigureWaiting`,
`pttConfigureCaptured`, `pttConfigurePrivacyNote`,
`pttConfigureSaveAction` (en + zh-Hans).
Dependencies
------------
* `chanora_audio` adds (Linux only) `zbus = "5"` with the
`tokio` runtime selector + `blocking-api` feature for the
GlobalShortcuts portal probe.
* `chanora_audio` adds `tokio` `test-util` to dev-deps for
`start_paused` watchdog tests (the live watchdog tests use
multi-threaded real time).
Verification
------------
* `cargo test --workspace` with `CHANORA_DISABLE_KEYRING=1`:
57 tests green (was 53). chanora_audio rises from 4 to 8.
* `cargo deny check`: advisories ok, bans ok, licenses ok,
sources ok.
* `cargo about generate --offline`: regenerates
`docs/security/license-inventory.{md,html}`. The crate count
rises from 364 to 383 with the addition of the zbus tree.
* `tools/dump_flutter_licenses.sh`: 94 packages, zero without
LICENSE (unchanged).
* `flutter analyze`: clean.
* `cargo build -p chanora_bridge --release` + `flutter build
linux --release`: clean Linux x86_64 bundle.
Documentation
-------------
* `docs/release/release-readiness-go-nogo-record.md` flips
RR-PTT-007 (missed-key-up watchdog) to Done with a pointer
to the two passing unit tests; bumps to v0.9.4. Live
per-platform traces (RR-PTT-001..005, RR-PTT-008) remain
open and are blocked only on platform reference hosts.
Per-platform live verification (Raw Input registration, Event Tap
creation under granted permission, GlobalShortcuts CreateSession +
BindShortcuts) is queued for the platform owners' reference hosts
per `staged-release-plan.md`.
234 lines
12 KiB
Markdown
234 lines
12 KiB
Markdown
|
|
# CHANORA_REL_Release_Readiness_Go_NoGo_Record_v0.9.2.2.1
|
|
|
|
**Document type:** Release Readiness Checklist / Go-No-Go Record
|
|
**Version:** 0.9.2
|
|
**Status:** Baseline Candidate
|
|
**Language:** English
|
|
**Product:** Chanora
|
|
**Repo path:** `docs/release/release-readiness-go-nogo-record.md` ---
|
|
|
|
## 1. Purpose
|
|
|
|
This document records the auditable release readiness decision for a Chanora release.
|
|
|
|
Design documents alone do not authorize release. A release requires an explicit readiness decision based on scope, build identity, requirement completion, verification evidence, security review, platform readiness, legal/privacy readiness, known risks, and approval.
|
|
|
|
## 2. Release Identity
|
|
|
|
| Field | Value |
|
|
|---|---|
|
|
| Release name | TBD by Product Owner |
|
|
| Release type | TBD: Internal Alpha / External Beta / MVP Public / Store Release |
|
|
| Release version | TBD |
|
|
| Release candidate ID | TBD |
|
|
| Release date target | TBD |
|
|
| Release owner | TBD |
|
|
| Product owner | TBD |
|
|
| Engineering owner | TBD |
|
|
| QA / verification owner | TBD |
|
|
| Security reviewer | TBD |
|
|
| Legal / compliance reviewer | TBD |
|
|
|
|
## 3. Build Identity
|
|
|
|
| Field | Value |
|
|
|---|---|
|
|
| Git repository | TBD |
|
|
| Git branch | TBD |
|
|
| Git commit SHA | TBD |
|
|
| Git tag | TBD |
|
|
| iOS App Store Connect upload SDK gate | Xcode 26+ and iOS 26 / iPadOS 26 SDK+ for upload on or after 2026-04-28 |
|
|
| Platform release policy included | Yes |
|
|
| Build number | TBD |
|
|
| CI pipeline ID | TBD |
|
|
| Build timestamp | TBD |
|
|
| Windows artifact | TBD |
|
|
| macOS artifact | TBD |
|
|
| Linux artifact | TBD |
|
|
| Android artifact | TBD |
|
|
| iOS artifact | TBD |
|
|
| Artifact hash method | SHA-256 unless otherwise specified |
|
|
| Artifact hashes | TBD |
|
|
|
|
## 4. Scope Readiness
|
|
|
|
| Question | Answer | Evidence | Owner |
|
|
|---|---|---|---|
|
|
| Is this release scope defined? | TBD | Release scope statement | Product Owner |
|
|
| Is this release Internal Alpha, External Beta, MVP Public, or Store Release? | TBD | Release scope statement | Product Owner |
|
|
| Are included features listed? | TBD | Release notes / scope list | Product Owner |
|
|
| Are excluded/deferred features listed? | TBD | Deferred requirements list | Product Owner |
|
|
| Are target platforms listed? | TBD | Platform readiness table | Engineering Owner |
|
|
| Are known limitations documented? | TBD | Known issue register | Product Owner / QA |
|
|
|
|
## 5. Requirements Readiness
|
|
|
|
| Requirement group | Status | Evidence | Deferred items / waiver |
|
|
|---|---|---|---|
|
|
| P0 / MVP connection requirements | TBD | SRS/SWE.6 evidence | TBD |
|
|
| P0 / MVP channel and state requirements | TBD | SRS/SWE.6 evidence | TBD |
|
|
| P0 / MVP voice requirements | TBD | SRS/SWE.6 evidence | TBD |
|
|
| Audio processing requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD |
|
|
| Storage and secure storage requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD |
|
|
| Diagnostics and redaction requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD |
|
|
| Material 3 / UI requirements | TBD | SWE.6 evidence | TBD |
|
|
| Accessibility requirements | TBD | SWE.6 evidence | TBD |
|
|
| Platform behavior requirements | TBD | SYS.4/SWE.6 evidence | TBD |
|
|
| i18n / Unicode requirements | TBD | SWE.4/SWE.5/SWE.6 evidence | TBD |
|
|
| Traceability requirements | TBD | Validation report | TBD |
|
|
|
|
## 6. Verification Readiness
|
|
|
|
| Verification layer | Required evidence | Status | Failed items | Waivers |
|
|
|---|---|---|---|---|
|
|
| SWE.4 Unit Verification | Unit verification summary report | TBD | TBD | TBD |
|
|
| SWE.5 Software Integration Verification | Integration verification summary report | TBD | TBD | TBD |
|
|
| SWE.6 Software Verification | Software verification summary report | TBD | TBD | TBD |
|
|
| SYS.4 System Integration Verification | System integration verification summary report | TBD | TBD | TBD |
|
|
| Regression Verification | Regression report | TBD | TBD | TBD |
|
|
| Manual exploratory test | Test notes | TBD | TBD | TBD |
|
|
|
|
## 7. Security Readiness
|
|
|
|
| Question | Required answer | Status | Evidence |
|
|
|---|---|---|---|
|
|
| Is secure storage verified for supported platforms? | Yes / waived | TBD | Security test report |
|
|
| Are secrets excluded from plaintext logs? | Yes / waived | TBD | Redaction test result |
|
|
| Is diagnostic export redaction verified? | Yes / waived | TBD | Diagnostics audit |
|
|
| Is dependency/license scan completed? | Yes / waived | TBD | Dependency scan report |
|
|
| Are high/critical dependency issues resolved or waived? | Yes / waived | TBD | Security waiver record |
|
|
| Are user-facing errors safe and non-sensitive? | Yes / waived | TBD | Review record |
|
|
| Are platform permissions justified? | Yes / waived | TBD | Permission review |
|
|
|
|
## 8. Platform Readiness
|
|
|
|
| Platform | Release status | Build artifact | Verification status | Known blockers | Owner |
|
|
|---|---|---|---|---|---|
|
|
| Windows | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD |
|
|
| macOS | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD |
|
|
| Linux | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD |
|
|
| Android | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD | TBD | TBD |
|
|
| iOS | TBD: Go / Conditional Go / No-Go / Not in scope | TBD | TBD, including Apple App Store SDK gate | TBD | TBD |
|
|
|
|
## 9. Legal, OSS, and Privacy Readiness
|
|
|
|
| Question | Required answer | Status | Evidence | Owner |
|
|
|---|---|---|---|---|
|
|
| Is the app clearly identified as unofficial and not affiliated with TeamSpeak? | Yes | TBD | App copy / legal notice | Legal |
|
|
| Is the TeamSpeak trademark/non-affiliation wording reviewed? | Yes | TBD | Legal review record | Legal |
|
|
| Is OSS license review completed? | Yes | TBD | OSS notice / license report | Legal / Engineering |
|
|
| Are Rust, Flutter, tsclientlib, and platform dependencies included in OSS review? | Yes | TBD | OSS license report | Legal / Engineering |
|
|
| Is privacy policy completed for the release scope? | Yes | TBD | Privacy policy URL/file | Legal |
|
|
| Are diagnostics/logging disclosures complete? | Yes | TBD | Privacy policy / in-app notice | Legal / Product |
|
|
| Are App Store / Play Store metadata requirements complete if applicable? | Yes / N/A | TBD | Store metadata review | Product / Legal |
|
|
|
|
## 10. Known Issues and Waivers
|
|
|
|
| Issue ID | Description | Severity | Impact | Waiver? | Waiver owner | Expiry / follow-up |
|
|
|---|---|---|---|---|---|---|
|
|
| TBD | TBD | TBD | TBD | TBD | TBD | TBD |
|
|
|
|
## 10A. Required Security, Privacy, and Legal Evidence
|
|
|
|
| Evidence document | Required status before External Beta / Public release |
|
|
|---|---|
|
|
| `CHANORA_SEC_Threat_Model_v0.9.2.2.1.md` | Reviewed; v1.0 approved before public release |
|
|
| `CHANORA_SEC_Secure_Storage_Audit_Report_v0.9.2.2.1.md` | Completed for release-scope platforms |
|
|
| `CHANORA_SEC_Diagnostic_Redaction_Audit_Report_v0.9.2.2.1.md` | Completed and approved |
|
|
| `CHANORA_SEC_Dependency_And_Supply_Chain_Report_v0.9.2.2.1.md` | Completed with no unapproved critical/high risk |
|
|
| `CHANORA_PRIV_Privacy_Policy_v0.9.2.2.1.md` | Legal/privacy reviewed; v1.0 approved before public release |
|
|
| `CHANORA_LEGAL_Trademark_And_Attribution_Review_v0.9.2.2.1.md` | Legal reviewed; v1.0 approved before public release |
|
|
|
|
|
|
## 10B. Key Product Decision Gate
|
|
|
|
| Decision | Required status before Go |
|
|
|---|---|
|
|
| Release type | Confirmed |
|
|
| Release platform scope | Confirmed |
|
|
| Minimum iOS version | Confirmed |
|
|
| Apple App Store SDK gate | Confirmed and release-inspected |
|
|
| Minimum Android version | Confirmed |
|
|
| Android target SDK policy | Confirmed |
|
|
| Multiple active connections in MVP | Confirmed |
|
|
| AEC/AGC/NS/HPF default states | Confirmed |
|
|
| Audio processing implementation path | Confirmed |
|
|
| Legal/trademark/licensing review requirement | Confirmed |
|
|
| Local database choice | Confirmed |
|
|
| Flutter/Rust bridge choice | Confirmed |
|
|
| Diagnostics upload policy | Confirmed |
|
|
| Crash reporting policy | Confirmed |
|
|
| Product license model | Confirmed or explicitly not required for release scope |
|
|
|
|
|
|
## 11. Release Decision
|
|
|
|
| Decision | Meaning |
|
|
|---|---|
|
|
| Go | Release is approved for the stated scope and platforms. |
|
|
| Conditional Go | Release is approved only if listed conditions are satisfied. |
|
|
| No-Go | Release is not approved. |
|
|
|
|
**Decision:** TBD: Go / Conditional Go / No-Go
|
|
|
|
## 12. Conditional Go Conditions
|
|
|
|
| Condition ID | Condition | Owner | Due date | Evidence required |
|
|
|---|---|---|---|---|
|
|
| TBD | TBD | TBD | TBD | TBD |
|
|
|
|
## 13. Approval
|
|
|
|
| Role | Name | Decision | Date | Evidence / Signature |
|
|
|---|---|---|---|---|
|
|
| Product Owner | TBD | TBD | TBD | TBD |
|
|
| Engineering Owner | TBD | TBD | TBD | TBD |
|
|
| QA / Verification Owner | TBD | TBD | TBD | TBD |
|
|
| Security Reviewer | TBD | TBD | TBD | TBD |
|
|
| Legal / Compliance Reviewer | TBD | TBD | TBD | TBD |
|
|
| Release Manager | TBD | TBD | TBD | TBD |
|
|
|
|
## 14. Change History
|
|
|
|
| Version | Date | Description |
|
|
|---|---|---|
|
|
| 0.9.0 | 2026-05-14 | Initial release readiness and Go/No-Go record template. |
|
|
|
|
|
|
## Baseline Candidate 0.9.1 Update
|
|
|
|
| Version | Date | Description |
|
|
|---|---|---|
|
|
| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. |
|
|
|
|
|
|
## Baseline Candidate 0.9.2 Update
|
|
|
|
| Version | Date | Description |
|
|
|---|---|---|
|
|
| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. |
|
|
|
|
|
|
## Desktop Push-to-Talk Release Readiness Addendum (Baseline Candidate 0.9.3)
|
|
|
|
The release readiness checklist for every desktop release artefact gains the following items per SysDes-148, SysRS-298, and DEC-023 / DEC-024 / DEC-025 / DEC-026 / DEC-027 / DEC-028.
|
|
|
|
| Item | Owner | Evidence required | Status |
|
|
|---|---|---|---|
|
|
| RR-PTT-001 Windows Global PTT verified on a Windows reference host. | Windows Platform Owner | Live measurement of `PttCapabilityLevel` + `backend_id` returned at runtime. Backend identifier shall be `raw-input` (preferred) or `low-level-hook` (fallback) for Global. | Open |
|
|
| RR-PTT-002 macOS Global PTT verified with permission granted on a macOS reference host. | macOS Platform Owner | Live measurement + `permission_state = Granted` reported through the Event-Tap backend; UI capability badge screenshot. | Open |
|
|
| RR-PTT-003 macOS Focused PTT fallback verified with permission denied. | macOS Platform Owner | Live measurement of `PttCapabilityLevel::L0Focused` after revoking Input Monitoring; UI capability badge screenshot showing the fallback notice. | Open |
|
|
| RR-PTT-004 Linux Global PTT verified on GNOME-on-Wayland. | Linux Platform Owner | Live measurement returning `gnome-wayland-portal` backend identifier from a live GNOME-on-Wayland host; portal binding dialog screenshot. | Open |
|
|
| RR-PTT-005 Linux Focused fallback verified on a non-tested compositor (any of: X11, sway, KDE) | Linux Platform Owner | Live measurement of `L0Focused` on at least one non-tested compositor; release notes do not claim Global support on the untested environment. | Open |
|
|
| RR-PTT-006 Diagnostic export carries no key data. | Privacy Reviewer | Inspection of a user-initiated diagnostic export captured while PTT is bound to a real key; export shall contain `capability_level`, `backend_id`, `bound_input_class` and shall not contain a recognisable key code. | Open |
|
|
| RR-PTT-007 Missed-key-up watchdog timeout demonstrated. | Audio Owner | Test trace showing `transmit_active` clearing after the configured 30 s ceiling when the watchdog forces a release. | **Done (v1.0.0-rc.4)** — covered by `chanora_audio::ptt::tests::watchdog_clears_transmit_after_timeout` (and the negative `watchdog_does_not_clear_on_normal_release`). Live platform trace still required per RR-PTT-001..005. |
|
|
| RR-PTT-008 Capability badge matches runtime capability on every supported platform. | UX Owner | UI screenshot or platform-test trace. | Open |
|
|
|
|
A release decision shall be **No-Go** for any platform whose RR-PTT items are not all closed.
|
|
|
|
| Version | Date | Description |
|
|
|---|---|---|
|
|
| 0.9.3 | 2026-05-15 | Added desktop PTT release-readiness items RR-PTT-001 through RR-PTT-008 covering Windows / macOS / Linux Global verification, permission-denied fallback verification, diagnostic-export privacy inspection, missed-key-up watchdog test, and capability-badge UI verification. |
|
|
| 0.9.4 | 2026-05-15 | RR-PTT-007 (missed-key-up watchdog) flipped to Done — the cross-platform `chanora_audio::ptt::MissedKeyUpWatchdog` ships in v1.0.0-rc.4 with two passing unit tests. Live per-platform traces (RR-PTT-001..005, RR-PTT-008) remain required for the live verification phase but are no longer blocked on engineering. |
|