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.
65 lines
2.3 KiB
TOML
65 lines
2.3 KiB
TOML
# Chanora — top-level Cargo workspace.
|
|
#
|
|
# Layout authority: DEC-022 in
|
|
# docs/governance/product-decision-register.md, which adopts the
|
|
# README's sketch as canonical:
|
|
#
|
|
# apps/chanora_flutter/ — Flutter application (separate toolchain)
|
|
# core/chanora_core/ — top-level Rust API + orchestration
|
|
# crates/chanora_protocol/ — tsclientlib isolation
|
|
# crates/chanora_state/ — snapshot, deltas, reducers
|
|
# crates/chanora_audio/ — capture, DSP, Opus, jitter, mixer
|
|
# crates/chanora_storage/ — bookmarks, settings, identity refs
|
|
# crates/chanora_diagnostics/ — logs, redaction, export
|
|
# crates/chanora_bridge/ — Flutter/Rust typed DTOs + glue
|
|
#
|
|
# The Flutter app is not part of this Cargo workspace; it is owned by
|
|
# Gradle / Xcode / Flutter tooling under apps/chanora_flutter/.
|
|
#
|
|
# Non-promotion reminder (proof-of-concept-plan.md §4): nothing under
|
|
# poc/ is product code. The crates here are blank scaffolds at this
|
|
# stage; promotion of PoC code happens crate-by-crate with explicit
|
|
# audit-trail commits.
|
|
|
|
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"core/chanora_core",
|
|
"crates/chanora_protocol",
|
|
"crates/chanora_state",
|
|
"crates/chanora_audio",
|
|
"crates/chanora_storage",
|
|
"crates/chanora_diagnostics",
|
|
"crates/chanora_bridge",
|
|
]
|
|
|
|
# Excludes: the PoC trees stay outside the product workspace so that
|
|
# `cargo check --workspace` at the root does not pull in PoC builds.
|
|
exclude = [
|
|
"poc/tsclientlib-connect-spike",
|
|
"poc/secure-storage-spike",
|
|
"poc/sqlite-storage-spike",
|
|
"poc/diagnostics-redaction-spike",
|
|
"poc/audio-capture-playback-spike",
|
|
"poc/audio-capture-playback-android-spike",
|
|
"poc/flutter_rust_bridge_hello",
|
|
"apps/chanora_flutter",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.0.1-pre"
|
|
edition = "2021"
|
|
rust-version = "1.95"
|
|
authors = ["The Chanora Project Contributors"]
|
|
license = "MIT OR Apache-2.0" # DEC-020
|
|
repository = "https://github.com/anomalyco/opencode"
|
|
publish = false # not on crates.io
|
|
readme = "README.md"
|
|
|
|
# Shared dependency pinnings. Members refer to these via
|
|
# `package.dependencies.<x>.workspace = true` so versions stay aligned.
|
|
[workspace.dependencies]
|
|
thiserror = "2"
|
|
tracing = "0.1"
|
|
serde = { version = "1", features = ["derive"] }
|