Files
chanora/CHANGELOG.md
T
EdisonJwa e0f34009d9 docs(governance): record product scaffolding paths (DEC-022)
Updates two documents to reflect the workspace + Flutter app
scaffold landed in the previous commit.

path-migration-map.md v0.9.2 -> v0.9.3:
  Adds §3 Implementation Path Layout. Lists each subsystem's
  canonical crate path alongside its SAD / SysDes / DEC authority.
  Notes that the Flutter app is owned by Flutter tooling and is
  not a Cargo workspace member.

CHANGELOG entry under [Unreleased]:
  - Documents the seven new Cargo workspace members and the
    invariants pinned at the workspace level.
  - Documents the Flutter app scaffold, the DEC-004 minSdk = 28
    override, and the DEC-015 English + Simplified Chinese ARB
    catalogue (with the ADR-008 server-content reaffirmation).
  - Records the empirical verification (cargo check + cargo test
    + flutter analyze + flutter test all clean).
2026-05-14 21:02:16 +08:00

9.4 KiB

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.