# Changelog All notable changes to Chanora will be documented in this file. This project is expected to follow a Conventional Commits style workflow. ## [Unreleased] ### Added - **Product workspace scaffold (DEC-022).** Created the canonical implementation directory layout per the README sketch + SAD §7.2: - `Cargo.toml` — top-level Cargo workspace declaring seven members and excluding the `poc/` spike trees and `apps/chanora_flutter`. Pins `license = "MIT OR Apache-2.0"` (DEC-020) and `rust-version = "1.95"` workspace-wide. - `core/chanora_core/` — top-level Rust API + orchestration. Owns `ChanoraSession` (placeholder) and the `CoreError` enum that typed-wraps every subsystem error. - `crates/chanora_protocol/` — tsclientlib adapter scaffold, opaque `ChannelId` / `ClientId` types, `ProtocolError`. - `crates/chanora_state/` — `StateError`, `ConnectionState` enum. - `crates/chanora_audio/` — `AudioError`, `AudioEffects` struct whose defaults match DEC-007/008/009/010 (all four effects on). - `crates/chanora_storage/` — `StorageError`, marker traits for the two repositories per the SAD-067 separation. - `crates/chanora_diagnostics/` — `DiagnosticsError`, `REDACTION_MARKER` constant matching the PoC, `Redactor` shell. - `crates/chanora_bridge/` — `BridgeError` DTO (Serialize + Deserialize) for FRB 2.x boundary. Workspace `cargo check --workspace` and `cargo test --workspace` both clean on Rust 1.95. - **Flutter application scaffold.** - `apps/chanora_flutter/` created via `flutter create` with `--org app.chanora --project-name chanora_flutter`. Platforms enabled at scaffold time: Linux + Android. - `apps/chanora_flutter/android/app/build.gradle.kts` overridden to `minSdk = 28` per DEC-004 (raised from Flutter's default minSdk by explicit owner ruling, register v0.9.5). - `flutter_localizations` + `intl` added to `pubspec.yaml`; `flutter.generate: true` enabled. - `l10n.yaml` configured to emit `lib/l10n/generated/AppL10n` (no synthetic package — `synthetic-package` was removed in Flutter 3.41+). - `lib/l10n/app_en.arb` — English template ARB with the MVP key set (`appTitle`, `homeGreeting`, `homeNotProductionReadyBanner`, `connectAction`). - `lib/l10n/app_zh.arb` — Simplified Chinese translations per DEC-015 (MVP language scope expanded from English-only). - `lib/main.dart` and `test/widget_test.dart` rewritten as a minimal scaffold that exercises both locales. - `flutter analyze` reports no issues. `flutter test` runs the English + Simplified Chinese smoke tests and both pass. ### Changed - `docs/governance/path-migration-map.md` bumped to v0.9.3 with a new §3 *Implementation Path Layout* recording the DEC-022 directory adoption (`apps/`, `core/`, `crates/`) and pointing each subsystem at its crate alongside the relevant SAD/SysDes/DEC authority. ### Added (LICENSE files) - `LICENSE-APACHE` — Apache License Version 2.0 text (DEC-020). - `LICENSE-MIT` — MIT License text (DEC-020). - Initial repository foundation files. - Documentation-first project structure. - `justfile` with `format`, `lint`, `test`, `verify-docs`, and `security-scan` targets, completing `repository-bootstrap-plan` v0.1.0 §3. - `poc/tsclientlib-connect-spike/` — PoC proving protocol feasibility via `tsclientlib`. Verified against `cn.teamspeak.app` on 2026-05-13. - `poc/flutter_rust_bridge_hello/` — PoC proving the Flutter↔Rust command and event-stream boundary via `flutter_rust_bridge` 2.12.0. Verified on Linux desktop on 2026-05-13. - `poc/secure-storage-spike/` — PoC proving platform secure storage via a typed `SecretStorageRepository` trait and a Linux adapter selecting between Secret Service (libsecret) and kernel keyutils. Audit checks SS-AUD-001/002/003/005/006 and SS-TC-003 verified on 2026-05-13. - `poc/sqlite-storage-spike/` — PoC proving SRS-089's "embedded data store + migration mechanism" acceptance criteria: forward-only schema migrator tracked via `PRAGMA user_version`, repository pattern with `BookmarkRepository` / `SettingsRepository` traits over `LocalDatabaseRepository`. 11/11 tests verified on 2026-05-13. - `poc/diagnostics-redaction-spike/` — PoC proving the diagnostic redaction policy from `diagnostic-redaction-audit-report.md`: typed policy + regex rules + literal known-secret registry + bundle redaction. Audit cases REDACT-TC-001..010 verified on 2026-05-13. - `poc/audio-capture-playback-spike/` — PoC proving platform audio capture/playback via cpal. Desktop half (Linux + PipeWire) empirically verified end-to-end on 2026-05-13; mobile half closed separately by `poc/audio-capture-playback-android-spike`. - `poc/audio-capture-playback-android-spike/` — PoC closing the mobile half of the audio capture/playback PoC plan entry. Rust cdylib + JNI + Kotlin Android app; cpal targets Android's Oboe backend (AAudio). Verified end-to-end on a physical Motorola Moto G Stylus 5G (2023) running Android 14 arm64-v8a on 2026-05-13: 500 ms 440 Hz sine wave driven out the device speaker (22,050 frames at 44.1 kHz) and 1 s captured from the microphone into a valid 85,292-byte RIFF/WAVE mono 16-bit PCM file pulled via `adb exec-out run-as`. - `poc/README.md` summarising PoC status against `docs/architecture/proof-of-concept-plan.md`. ### Changed - **DEC-020 license resolved.** Chanora is now dual-licensed under **Apache-2.0 OR MIT** (recipient's choice), the standard Rust-ecosystem permissive model. Compatible with every direct dependency (`tsclientlib`, `flutter_rust_bridge`, `cpal`, `rusqlite`, `keyring`, etc.) and with the Flutter framework's BSD-3-Clause. `LICENSE` rewritten as a dual-license aggregator pointing at `LICENSE-APACHE` and `LICENSE-MIT`. `NOTICE` rewritten with current direct-dependency attributions. `README.md` §License updated. - `docs/governance/product-decision-register.md` bumped to v0.9.6: DEC-020 status promoted from Open to Accepted. §4 license row updated. §6 collapsed: there is no longer any open decision — DEC-012 legal review remains as a *work* item, not a pending decision. Change-history entry added. - `docs/governance/poc-results-summary.md` bumped to v0.4.0: RISK-PoC-003 closed. DEC-020 row moved from the "Still open" section into the closed table. - `docs/governance/product-decision-register.md` bumped to v0.9.5: owner confirmation on all 17 previously-Proposed decisions (DEC-001..010, 012, 015..019, 021). Sixteen were Accepted as recommended; two were modified by the owner — **DEC-004** Android minimum raised from API 24 to **API 28**, and **DEC-015** product language for MVP expanded from English-only to **English + Chinese (Simplified)**. DEC-020 license remains Open / Deferred and is now the only public-release-gating decision outstanding. §4 renamed "Recommended" → "Accepted MVP Defaults" with MODIFIED rows annotated. §6 collapsed to the single remaining DEC-020 item. §7 dated and statused for every decision. - `docs/governance/poc-results-summary.md` bumped to v0.3.0: RISK-PoC-004 closed by the owner-confirmation pass; new RISK-PoC-006 (Android `minSdk` move 24 → 28 for product code) and RISK-PoC-007 (MVP language expansion to en + zh-Hans) added. - `docs/architecture/proof-of-concept-plan.md` bumped to v0.3.0 to promote the audio PoC from PARTIAL PASS to PASS after the Android mobile half was closed; all six PoC plan entries are now PASS. - `docs/governance/product-decision-register.md` bumped to v0.9.4 to promote DEC-011.1 mobile half from Deferred to Accepted (Android), keeping iOS Deferred. - `docs/governance/poc-results-summary.md` bumped to v0.2.0: audio row promoted to PASS, RISK-PoC-001 narrowed from "mobile audio" to "iOS audio only", Android toolchain added to the toolchain table. - `poc/audio-capture-playback-spike/VERIFICATION.md` updated to point at the Android spike for the mobile half. - `poc/README.md` updated to list both audio spike directories. - `docs/architecture/proof-of-concept-plan.md` bumped to v0.2.0 to record PoC outcomes (5 PASS, 1 PARTIAL) and add a Status column. - `docs/security/secure-storage-audit-report.md` bumped to v0.9.3: SS-AUD-001/002/003/005/006 status set to PoC Pass with evidence pointers; SS-TC-003 (Linux) Actual Result populated and Status set to PoC Pass; findings SS-FIND-001..003 added; non-Linux test cases marked Deferred. - `docs/security/diagnostic-redaction-audit-report.md` bumped to v0.9.3: REDACT-TC-001..010 status set to PoC Pass with evidence pointers; export bundle policy §5 populated; findings REDACT-FIND-001..003 added. - `docs/governance/product-decision-register.md` bumped to v0.9.3: owner-confirmed decisions recorded — DEC-014 Accepted (`flutter_rust_bridge` 2.x pinned), DEC-013.1 Accepted (`rusqlite` bundled), DEC-013.2 Accepted (Linux Secret Service preferred, keyutils fallback), DEC-011.1 Accepted (desktop `cpal`) / Deferred (mobile), DEC-022 Accepted (canonical implementation directory layout per README sketch + SAD §7.2), DEC-020 explicitly Deferred and remains a public-release blocker. ### Added (governance) - `docs/governance/poc-results-summary.md` v0.1.0 — single-page reviewer-facing summary of the PoC phase, the toolchain exercised, the owner decisions taken, the audit coverage, and the open risks RISK-PoC-001..005. ### Fixed - N/A ### Security - N/A ## Versioning note The project implementation has not reached a public release version yet.