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

191 lines
9.4 KiB
Markdown

# 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.