Updates RISK-PoC-005 to 'partially closed' and adds a v0.5.0 change
history entry documenting:
- the tsclientlib spike promotion into crates/chanora_protocol;
- the typed ChanoraSession in core/chanora_core wiring the
protocol API;
- the FRB 2.12.0 bridge wiring;
- the Flutter Alpha UI;
- the empirical verification path through alpha_e2e_test.dart
and alpha_smoke.rs;
- the v0.1.0-alpha.1 tag pointing at commit 3bb038c.
No other doc bumps are needed: the decision register stays at v0.9.6
(no new decisions), the audit reports stay at v0.9.3 (no new audit
evidence beyond what the PoCs already provided), the PoC plan stays
at v0.3.0 (all six PoC entries were already PASS).
12 KiB
PoC Results Summary
Document type: Governance / PoC Results Summary
Version: 0.5.0
Status: Draft
Language: English
Product: Chanora
Repo path: docs/governance/poc-results-summary.md
1. Purpose
This document is the single top-level entry point summarising the
outcome of the technical proof-of-concept (PoC) phase defined by
docs/architecture/proof-of-concept-plan.md.
It exists so that reviewers (security, audit, baseline-approval) can
read one page and follow pointers to evidence, rather than having to
crawl seven VERIFICATION.md files under poc/.
This summary records facts as of 2026-05-13.
2. Status table
| Spike | PoC plan exit criterion | Status | Evidence |
|---|---|---|---|
flutter_rust_bridge_hello |
Flutter can call Rust and receive event stream data | PASS | poc/flutter_rust_bridge_hello/VERIFICATION.md |
tsclientlib-connect-spike |
Rust can connect to a compatible server/test double | PASS | poc/tsclientlib-connect-spike/VERIFICATION.md |
secure-storage-spike |
Secret write/read/delete works through platform secure storage | PASS (Linux only) | poc/secure-storage-spike/VERIFICATION.md |
sqlite-storage-spike |
Schema, migration, and repository pattern are demonstrated | PASS | poc/sqlite-storage-spike/VERIFICATION.md |
diagnostics-redaction-spike |
Password and identity-secret samples are redacted (REDACT-TC-001..010 covered) | PASS | poc/diagnostics-redaction-spike/VERIFICATION.md |
audio-capture-playback-spike (desktop half) + audio-capture-playback-android-spike (mobile half) |
Capture/playback works on at least one desktop and one mobile target | PASS — desktop on Linux + PipeWire; mobile on a physical Motorola Moto G Stylus 5G running Android 14 arm64-v8a. iOS remains explicitly deferred per DEC-011.1. | poc/audio-capture-playback-spike/VERIFICATION.md, poc/audio-capture-playback-android-spike/VERIFICATION.md |
Aggregate test count across the PoCs: 44 tests + 1 live-server CLI run + 1 desktop-audio CLI round-trip + 1 Android playback + 1 Android capture (real-device, with WAV file inspection), all passing in the recorded runs. All six PoC plan entries now PASS.
3. Toolchain exercised
| Tool | Version |
|---|---|
| Rust toolchain | stable 1.95.0 (59807616e 2026-04-14) |
| Rust Android targets | aarch64-linux-android, armv7-linux-androideabi, x86_64-linux-android, i686-linux-android |
| Flutter SDK | 3.41.9 stable (Dart 3.11.5) |
flutter_rust_bridge (Rust + Dart) and codegen |
2.12.0 |
tsclientlib |
git 04aa2491 (no published crates.io release) |
cpal |
0.16 |
rusqlite |
0.32 (bundled) |
keyring |
3.6.3 (sync-secret-service + linux-native) |
linux-keyutils |
0.2.5 |
regex / serde / serde_json |
1 |
| Android SDK | platform 34, build-tools 34.0.0 |
| Android NDK | r26.3.11579264 |
cargo-ndk |
4.1.2 |
| AGP / Gradle / Kotlin | 8.5.2 / 8.7 / 1.9.24 |
jni, ndk-context, android_logger |
0.21, 0.1.1, 0.14 |
| Host OS for verification | Linux (Arch, kernel 7.0.5-arch1-1, x86_64) |
| Host audio server | PipeWire 1.6.4 (via pcm_pipewire ALSA plugin) |
| Host Secret Service backend | gnome-keyring (default collection observed locked; kernel keyutils backend used for hermetic tests) |
| Android test device | Motorola Moto G Stylus 5G (2023), Android 14 (SDK 34), arm64-v8a |
4. Owner-confirmed decisions
Recorded in docs/governance/product-decision-register.md at version 0.9.5:
From the PoC phase (decisions surfaced by the spikes)
| Decision | Status | Closed by |
|---|---|---|
| DEC-014 typed bridge | Accepted (flutter_rust_bridge 2.x pinned) |
flutter_rust_bridge_hello |
| DEC-013.1 SQLite crate | Accepted (rusqlite bundled) |
sqlite-storage-spike |
| DEC-013.2 Linux secure-storage backend policy | Accepted (Secret Service preferred, keyutils fallback) | secure-storage-spike |
| DEC-011.1 audio crate | Accepted (desktop: cpal; Android: cpal-on-Oboe) / Deferred (iOS) |
audio-capture-playback-spike (desktop) + audio-capture-playback-android-spike (mobile) |
| DEC-022 canonical implementation directory layout | Accepted (README sketch — apps/chanora_flutter/, core/chanora_core/, crates/chanora_*) |
Owner ruling on 2026-05-13 |
| DEC-020 license | Accepted (Apache-2.0 OR MIT dual-license) | Owner ruling on 2026-05-14; license texts added as LICENSE-APACHE and LICENSE-MIT. |
From the 2026-05-14 owner-confirmation pass (all 17 previously-Proposed)
| Decision | Status | Notes |
|---|---|---|
| DEC-001 Release type sequence | Accepted | Alpha → Beta → Public. |
| DEC-002 MVP platform scope | Accepted | All five platforms; staged release allowed. |
| DEC-003 Minimum iOS | Accepted | iOS 13. |
| DEC-004 Minimum Android | Accepted — MODIFIED | API 28 (raised from the recommendation of API 24). Affects the Android spike's minSdk = 24; product apps/chanora_flutter must move it to 28. |
| DEC-005 Android target SDK | Accepted | Google Play-required API on upload date. |
| DEC-006 Connections in MVP | Accepted | Single connection. |
| DEC-007 AEC | Accepted | Enabled by default where supported. |
| DEC-008 AGC | Accepted | Enabled by default + toggle. |
| DEC-009 Noise suppression | Accepted | Enabled by default + toggle. |
| DEC-010 High-pass filter | Accepted | Enabled by default. |
| DEC-011 Audio path | Accepted | Platform-native first. |
| DEC-012 Legal review gate | Accepted (as a release gate) | The legal review work itself is still to be performed. |
| DEC-013 Local DB | Accepted | SQLite or equivalent. |
| DEC-015 Product language for MVP | Accepted — MODIFIED | English + Chinese (Simplified) at MVP (expanded from the recommendation of English-only). Affects translation pipeline and design-system text length budgets. |
| DEC-016 Diagnostics upload | Accepted | User-initiated local export only. |
| DEC-017 Crash reporting | Accepted | Disabled for MVP. |
| DEC-018 Product name | Accepted | Chanora. |
| DEC-019 Non-affiliation statement | Accepted (drafted wording) | Final legal sign-off still required under DEC-012. |
| DEC-021 Apple App Store SDK gate | Accepted | Xcode 26+ / iOS 26 SDK+ on or after 2026-04-28. |
Still open
(none — DEC-020 closed on 2026-05-14; see register v0.9.6.)
DEC-012 legal/trademark/licensing review remains a release-gating work item but is not an open decision.
5. Audit-report coverage
| Audit ID | Verified by | Audit-report row updated? |
|---|---|---|
| SS-AUD-001 (identity secret absent from local DB) | secure-storage-spike |
Yes — docs/security/secure-storage-audit-report.md §4 v0.9.3 |
| SS-AUD-002 (server password absent from local DB) | secure-storage-spike |
Yes |
| SS-AUD-003 (no secrets in logs) | secure-storage-spike + cross-ref diagnostics-redaction-spike |
Yes |
| SS-AUD-004 (no secrets in diagnostic export) | diagnostics-redaction-spike REDACT-TC-008 |
Yes |
| SS-AUD-005 (safe error on backend failure) | secure-storage-spike (test + live CLI fallback) |
Yes |
| SS-AUD-006 (delete removes entry) | secure-storage-spike |
Yes |
| SS-AUD-007 (per-platform documentation) | Linux only — partial | Yes (status: Partial) |
| SS-AUD-008 (migration path safety) | Pending (depends on product chanora_storage) |
Yes (status: Pending) |
| SS-TC-001 (Windows) | Not run | Status: Deferred |
| SS-TC-002 (macOS) | Not run | Status: Deferred |
| SS-TC-003 (Linux) | secure-storage-spike |
PoC Pass |
| SS-TC-004 (Android) | Not run | Status: Deferred |
| SS-TC-005 (iOS) | Not run | Status: Deferred |
| REDACT-TC-001..010 | diagnostics-redaction-spike (12/12) |
Yes — docs/security/diagnostic-redaction-audit-report.md §4 v0.9.3 |
| Export bundle policy §5 (all rows) | diagnostics-redaction-spike |
Yes — §5 v0.9.3 |
6. Open risks and gaps
| ID | Risk | Owner | Recommended close path |
|---|---|---|---|
| RISK-PoC-001 | iOS audio (AVAudioEngine via cpal or a per-platform iOS adapter) is not verified. The desktop and Android halves of the PoC plan's audio criterion are met; iOS is explicitly deferred per DEC-011.1. | Audio Owner + iOS Owner | iOS spike on macOS + Xcode hardware; or accept the risk and discover it during product integration (not recommended). |
| RISK-PoC-002 | Windows / macOS / iOS / Android secure-storage adapters not implemented. SS-TC-001/002/004/005 unverified. | Platform Owners | Per-platform adapter spike or first-implementation-in-chanora_storage with the audit checks re-run on each target. |
| RISK-PoC-003 | Product Owner + Legal | Closed. | |
| RISK-PoC-004 | Product Owner | Closed. | |
| RISK-PoC-005 | Production code does not exist yet. README's "Implementation status: Not production-ready" remains accurate. | Software Architect | Partially closed 2026-05-14. Product scaffold landed (b628d2d); first Alpha build wired end-to-end (3bb038c, tag v0.1.0-alpha.1). Audio integration and full UX remain. |
| RISK-PoC-006 | DEC-004 Android minimum was raised to API 28 from the spike's minSdk = 24. The Android spike still builds and runs; product code in apps/chanora_flutter must move minSdk to 28 and may simplify its AAudio fallback logic accordingly. |
Android Owner | Set minSdk = 28 when the Android target is added to apps/chanora_flutter. |
| RISK-PoC-007 | DEC-015 expanded the MVP language scope from English-only to English + Chinese (Simplified). Adds zh-Hans translation, font, and design-system text-length-budget work to MVP. | Product Owner + i18n Owner | Land en + zh-Hans message catalogues in chanora_flutter/lib/i18n/ at scaffolding time; verify Material 3 design tokens accommodate CJK text metrics. |
7. Non-promotion reminder
Per proof-of-concept-plan.md §4: a PoC is not product code unless
explicitly promoted. Nothing under poc/ should be imported by
the future apps/chanora_flutter or crates/chanora_* trees
without an explicit promotion record per spike.
8. Change History
| Version | Date | Description |
|---|---|---|
| 0.1.0 | 2026-05-14 | Initial PoC results summary. Records the outcome of the first PoC batch (5 PASS, 1 PARTIAL), the toolchain versions exercised, the owner-confirmed decisions, audit-report coverage, and the open risks. |
| 0.2.0 | 2026-05-14 | Audio PoC promoted from PARTIAL to PASS after the Android spike verified the mobile half on a physical Motorola Moto G Stylus 5G running Android 14 arm64-v8a. All six PoC plan entries now PASS. RISK-PoC-001 narrowed from "mobile audio" to "iOS audio only". Android toolchain (NDK r26.3, cargo-ndk, AGP/Gradle/Kotlin, jni/ndk-context/android_logger) added to the toolchain table. |
| 0.3.0 | 2026-05-14 | Recorded the owner-confirmation pass on the 17 remaining Proposed decisions (register at v0.9.5). RISK-PoC-004 closed. Added RISK-PoC-006 (Android minSdk 24 → 28) and RISK-PoC-007 (MVP language expanded to English + Chinese Simplified) for the two decisions that diverged from the original recommendations. DEC-020 license remains the sole open release-gating decision. |
| 0.4.0 | 2026-05-14 | DEC-020 license closed as Apache-2.0 OR MIT dual-license (register v0.9.6). RISK-PoC-003 closed. No remaining open decisions; the only release-gating activity outstanding is the DEC-012 legal review work, which is sign-off rather than an architectural choice. |
| 0.5.0 | 2026-05-14 | Internal Alpha build reached. poc/tsclientlib-connect-spike promoted into crates/chanora_protocol; core/chanora_core::ChanoraSession wires the typed protocol API; crates/chanora_bridge exposes the FRB 2.12.0 boundary; apps/chanora_flutter runs the connect → snapshot → disconnect cycle end-to-end against cn.teamspeak.app. Verified by apps/chanora_flutter/test/alpha_e2e_test.dart + core/chanora_core/tests/alpha_smoke.rs. Tag: v0.1.0-alpha.1 (commit 3bb038c). RISK-PoC-005 partially closed. |