Implements the canonical implementation directory layout adopted by
DEC-022 (register v0.9.5). Closes the scaffolding phase; no PoC code
has been promoted in yet (per proof-of-concept-plan.md §4 a PoC is
not product code unless explicitly promoted).
Rust workspace
==============
Top-level Cargo.toml declares seven workspace members:
core/chanora_core top-level Rust API + orchestration
crates/chanora_protocol tsclientlib isolation (SAD-067, SysDes-011/029)
crates/chanora_state state sync, reducers, deltas
crates/chanora_audio capture, DSP, Opus, jitter, mixer, playback
crates/chanora_storage non-secret DB + platform secure store
crates/chanora_diagnostics logs, redaction, export
crates/chanora_bridge typed Flutter/Rust DTOs
Workspace-wide pins:
license = "MIT OR Apache-2.0" (DEC-020)
rust-version = "1.95"
edition = "2021"
The Flutter app (apps/chanora_flutter) is NOT a Cargo workspace
member; it is owned by the Flutter / Gradle toolchain and is in the
workspace exclude array along with every poc/* spike.
Each crate ships:
* a Cargo.toml referring to workspace.dependencies pins;
* a lib.rs with #![forbid(unsafe_code)] + #![warn(missing_docs)],
a typed Error enum, and the public types relevant to the
subsystem's role per SAD §7.2;
* minimal unit tests so
running 1 test
test tests::defaults_match_decisions ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::it_compiles ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::session_can_be_constructed ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::marker_matches_poc ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::it_compiles ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::state_transitions_compile ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 1 test
test tests::it_compiles ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s is non-empty.
chanora_core's CoreError type-wraps every subsystem error via
#[from] so callers can match on origin without parsing strings.
chanora_audio's AudioEffects struct defaults all four effects to
true, matching DEC-007 (AEC), DEC-008 (AGC), DEC-009 (NS),
DEC-010 (HPF). A unit test pins this so a future regression that
flips a default fails immediately.
chanora_diagnostics exports REDACTION_MARKER = "[REDACTED]",
identical to the PoC's marker so audit grep patterns survive the
promotion.
chanora_bridge's BridgeError is Serialize + Deserialize so it can
flow across the FRB 2.x boundary (DEC-014).
Empirical verification: cargo check --workspace clean, cargo test
--workspace clean (7 unit tests + 7 doc-test runners, all passing)
against Rust 1.95.0 stable.
Flutter app
===========
apps/chanora_flutter created with .
DEC-004 applied: minSdk overridden to 28 in
android/app/build.gradle.kts with a comment that points back at the
decision register and forbids lowering it without re-opening DEC-004.
DEC-015 applied: shipped English + Simplified Chinese at MVP.
- pubspec.yaml gains flutter_localizations + intl + generate:true.
- l10n.yaml emits lib/l10n/generated/AppL10n (no synthetic package
— that was removed in Flutter 3.41+).
- lib/l10n/app_en.arb is the source of truth; lib/l10n/app_zh.arb
mirrors the key set in zh-Hans. ARB metadata explicitly
reaffirms ADR-008: server-provided content (channel names,
nicknames, welcome banners) is preserved verbatim and never
translated.
lib/main.dart and test/widget_test.dart were rewritten from the
template counter into a minimal localized scaffold that proves
both locales render correctly.
Empirical verification: reports no issues;
runs the two locale smoke tests and both pass.
227 lines
6.3 KiB
Plaintext
227 lines
6.3 KiB
Plaintext
# Generated by pub
|
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
packages:
|
|
async:
|
|
dependency: transitive
|
|
description:
|
|
name: async
|
|
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "2.13.1"
|
|
boolean_selector:
|
|
dependency: transitive
|
|
description:
|
|
name: boolean_selector
|
|
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "2.1.2"
|
|
characters:
|
|
dependency: transitive
|
|
description:
|
|
name: characters
|
|
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.4.1"
|
|
clock:
|
|
dependency: transitive
|
|
description:
|
|
name: clock
|
|
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.1.2"
|
|
collection:
|
|
dependency: transitive
|
|
description:
|
|
name: collection
|
|
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.19.1"
|
|
cupertino_icons:
|
|
dependency: "direct main"
|
|
description:
|
|
name: cupertino_icons
|
|
sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.0.9"
|
|
fake_async:
|
|
dependency: transitive
|
|
description:
|
|
name: fake_async
|
|
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.3.3"
|
|
flutter:
|
|
dependency: "direct main"
|
|
description: flutter
|
|
source: sdk
|
|
version: "0.0.0"
|
|
flutter_lints:
|
|
dependency: "direct dev"
|
|
description:
|
|
name: flutter_lints
|
|
sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "6.0.0"
|
|
flutter_localizations:
|
|
dependency: "direct main"
|
|
description: flutter
|
|
source: sdk
|
|
version: "0.0.0"
|
|
flutter_test:
|
|
dependency: "direct dev"
|
|
description: flutter
|
|
source: sdk
|
|
version: "0.0.0"
|
|
intl:
|
|
dependency: "direct main"
|
|
description:
|
|
name: intl
|
|
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "0.20.2"
|
|
leak_tracker:
|
|
dependency: transitive
|
|
description:
|
|
name: leak_tracker
|
|
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "11.0.2"
|
|
leak_tracker_flutter_testing:
|
|
dependency: transitive
|
|
description:
|
|
name: leak_tracker_flutter_testing
|
|
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "3.0.10"
|
|
leak_tracker_testing:
|
|
dependency: transitive
|
|
description:
|
|
name: leak_tracker_testing
|
|
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "3.0.2"
|
|
lints:
|
|
dependency: transitive
|
|
description:
|
|
name: lints
|
|
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "6.1.0"
|
|
matcher:
|
|
dependency: transitive
|
|
description:
|
|
name: matcher
|
|
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "0.12.19"
|
|
material_color_utilities:
|
|
dependency: transitive
|
|
description:
|
|
name: material_color_utilities
|
|
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "0.13.0"
|
|
meta:
|
|
dependency: transitive
|
|
description:
|
|
name: meta
|
|
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.17.0"
|
|
path:
|
|
dependency: transitive
|
|
description:
|
|
name: path
|
|
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.9.1"
|
|
sky_engine:
|
|
dependency: transitive
|
|
description: flutter
|
|
source: sdk
|
|
version: "0.0.0"
|
|
source_span:
|
|
dependency: transitive
|
|
description:
|
|
name: source_span
|
|
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.10.2"
|
|
stack_trace:
|
|
dependency: transitive
|
|
description:
|
|
name: stack_trace
|
|
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.12.1"
|
|
stream_channel:
|
|
dependency: transitive
|
|
description:
|
|
name: stream_channel
|
|
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "2.1.4"
|
|
string_scanner:
|
|
dependency: transitive
|
|
description:
|
|
name: string_scanner
|
|
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.4.1"
|
|
term_glyph:
|
|
dependency: transitive
|
|
description:
|
|
name: term_glyph
|
|
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "1.2.2"
|
|
test_api:
|
|
dependency: transitive
|
|
description:
|
|
name: test_api
|
|
sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "0.7.10"
|
|
vector_math:
|
|
dependency: transitive
|
|
description:
|
|
name: vector_math
|
|
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "2.2.0"
|
|
vm_service:
|
|
dependency: transitive
|
|
description:
|
|
name: vm_service
|
|
sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
|
|
url: "https://pub.dev"
|
|
source: hosted
|
|
version: "15.2.0"
|
|
sdks:
|
|
dart: ">=3.11.5 <4.0.0"
|
|
flutter: ">=3.18.0-18.0.pre.54"
|