Files
chanora/docs/implementation-status-2026-05-28.md

9.9 KiB
Raw Permalink Blame History

Chanora Implementation Status — 2026-05-28

Workspace version: v0.2.0-beta.1 CHANGELOG latest: v1.0.0-rc.1 Build status: All 9 crates compile cleanly.


P0 / MVP

Done

Area Evidence
App shell / startup main.dart (2313 lines), app_bootstrap.dart, RustLib.init() wired
Flutter UI Full widget set: connect_widgets, snapshot_view, chat_views, voice_bar, voice_compact, voice_settings, voice_settings_controls, client_info_sheet, input_dialogs, bbcode_text
Material 3 + design tokens chanora_tokens.dart, platform_capabilities.dart
Localization (en + zh-Hans) l10n/generated/app_localizations_en.dart + app_localizations_zh.dart, l10n.yaml
Flutter/Rust bridge chanora_bridge crate (2152-line api.rs), generated frb_generated.rs, Dart side generated
Protocol adapter chanora_protocoltsclientlib isolated behind ProtocolClient, typed DTOs, ProtocolError catalogue
Connection lifecycle chanora_core (2682-line lib.rs) — supervisor task, exponential backoff reconnect (1s→60s), user-disconnect suppresses reconnect
State sync reducer unit chanora_stateConnectionState, channel_join, snapshot/delta reducers, reconnect handling, deterministic ordering, malformed duplicate normalization, channel-delete/client cleanup, and reducer unit tests. Runtime core integration still uses snapshot/probe refresh paths and remains separate validation work.
Audio subsystem chanora_audio — Opus encode/decode, HPF/NS/AEC3/AGC2 DSP, PTT backends (Windows/macOS/Linux/focused), iOS VoiceProcessingIO, Android Oboe, jitter buffer via tsclientlib::audio::AudioHandler, mixer, mute/deaf gates, release-tail timer, VAD
Push-to-talk Per-platform backends: Windows Raw Input + hook fallback, macOS Event Tap, Linux freedesktop portal, focused fallback; PttCapabilityLevel (L0L3); missed-key-up watchdog
Voice controls UI voice_bar, voice_compact, voice_haptics, voice_level_meter, voice_platform, ptt_capability_badge, talk_power_warning
Storage (non-secret) chanora_storageBookmarkRepository (SQLite/rusqlite bundled, schema v2), ChaCha20-Poly1305 encrypted passwords
Storage (secrets) IdentityFileStore with platform keyring (Linux Secret Service, macOS Keychain, Windows Credential Manager, iOS Keychain); file fallback with 0600 perms
Diagnostics chanora_diagnosticsRedactor (IP/host/email/token/path/secret scrubbing), InMemoryLogSink, DiagnosticExport JSON bundle, KnownSecretRegistry, panic hook
Server address resolution chanora_resolver — SRV/TSDNS/DNS fallback
Server prefetch chanora_prefetch crate + prefetch_debouncer.dart — invisible host-field prefetch, TTL cache, generation-safe
Android platform android_voice_unit.rs, android_permissions_service.dart, MODE_IN_COMMUNICATION routing, foreground service (flutter_foreground_task)
iOS platform ios_voice_unit.rs, ios_raw_unit.rs, ios_permissions_service.dart, AVAudioSession integration, audio_session package
Permission UX permission_state_banner.dart, pre-request explainers
Bookmark UI Save/connect/delete in connect_widgets.dart
Channel join Tap-to-join with optional password, channel_join_error_mapper.dart, channel_spacer.dart
Chat chat_views.dart, BBCode rendering (bbcode_text.dart)
Audio settings UI voice_settings.dart, voice_settings_controls.dart, audio_processing_config_state.dart, audio_device_list_tile.dart, audio_output_tile.dart
Audio debug stats audio_debug_stats_panel.dart
TS3 server link ts3_server_link.dartts3server:// URI parsing
UI preferences ui_preferences_service.dart, shared_preferences
Connection phase state connection_phase_state.dart
Snapshot state mapper snapshot_state_mapper.dart
Back intent (Android) back_intent_policy.dart, back_intent_service.dart
Audio lifecycle audio_lifecycle_service.dart
Link trust link_trust_service.dart
About dialog Non-affiliation statement, dual-license declaration, NOTICE pointer
CI GitHub Actions on every push
Workspace compiles All 9 crates build cleanly

Partial / Scaffold Only

Area Gap
Event replay tooling Reducer tests cover the state-sync contract, but standalone replay-file tooling remains a P1 verification gap.
Reducer runtime integration evidence The standalone reducer is unit-tested, but chanora_core still refreshes UI state through snapshot/probe paths rather than folding all live protocol events through chanora_state::reduce.
Silero VAD assets/models/silero_vad.onnx bundled but DEC-030 defers VAD to P1; TransmitMode::VoiceActivity is reserved and disabled in this baseline.
macOS build Not in v1.0.0-rc.1 release artifacts (source-buildable only per staged-release-plan.md).
Windows build Same — source-buildable, not in rc.1 release artifacts.
iOS build Same — source-buildable, not in rc.1 release artifacts.

Not Done (P0 blockers remaining)

Item Status
DEC-012 legal/trademark/OSS review Explicitly open — v1.0.0-rc.1 is the candidate awaiting sign-off. Public release is blocked.
Android Keystore-backed DEK Deferred to v1.1. Android still uses file-fallback for the Data Encryption Key.
iOS AVAudioSession.Mode.voiceChat Implemented in apps/chanora_flutter/ios/Runner/AppDelegate.swift; release readiness still requires device audio validation and candidate evidence attachment.
Candidate state-sync evidence attachment Reducer tests exist and pass locally; release readiness still needs candidate CI/run IDs and runtime integration evidence attached before public release approval.

P1 / Beta

Done (promoted from Beta work)

Area Evidence
Diagnostics export UI Diagnostics dialog in main.dart, share_plus for export
Reconnect banner Referenced in CHANGELOG v0.4
Identity persistence IdentityFileStore shipped
Audio loopback/processing test hooks compare_baseline.rs, emit_baseline.rs examples; ptt_privacy.rs, linux_portal_smoke.rs tests
Opus codec benchmarks benches/opus_codec.rs, benches/resampler.rs, benches/realtime_capture.rs
Audio processing backend abstraction processor/mod.rs with sonora, webrtc_apm, noop backends
Per-user mute SRS-074 implemented in audio gate
Protocol adapter isolation SRS-053 trait boundary in place

Not Done (P1 backlog)

Item Notes
Per-user volume (SRS-075) Not yet wired to UI/storage
Recent servers persistence (SRS-085) Not confirmed in storage crate
UI settings persistence (SRS-087) Implemented for current P1 scope using shared_preferences: host, nickname, permission explanation flag, and theme mode (system / light / dark). SQLite-backed UI settings remain a future hardening option if multi-profile or transactional settings are introduced.
Event replay tool (SRS-061, SRS-098) No replay infrastructure found
Network diagnostics (SRS-100) Not found in diagnostics export
Side navigation rail for medium layout (SRS-153) Not confirmed
Keyboard focus traversal (SRS-160) Not confirmed
Android audio focus / BT route changes (SRS-112) Partial — MODE_IN_COMMUNICATION done; full focus/BT handling not confirmed
Windows installer packaging (SRS-116) Not in rc.1 artifacts
Linux packaging (AppImage/Flatpak/deb/rpm) (SRS-118) Not confirmed
Android AAB release build pipeline (SDD-109) Referenced but not confirmed as CI-automated
iOS TestFlight/App Store build pipeline (SRS-120) Deferred
Light/dark theme toggle (SAD-043) Not confirmed in UI
Audio device hot-plug recovery (SRS-082) Noted as follow-up work in chanora_audio/src/lib.rs

P2 / Production

Not Done (all P2 items pending)

Item Notes
DEC-012 legal sign-off Hard blocker for public release
macOS signed + notarized builds (SRS-117) Requires macOS build host
C4 architecture views in SAD (SAD-046) Documentation artifact
ADRs for significant decisions (SAD-047) Documentation artifact
Architecture glossary (SAD-055, SDD-063) Documentation artifact
Staged rollout plan staged-release-plan.md referenced but not confirmed complete
Bidirectional text (SRS-175) Deferred
Expanded layout persistent side panes (SRS-154) Deferred

SOP (Standing Operating Procedures)

In Place

  • Agent router + phase spec docs (in git history, currently untracked/renamed)
  • phase_index.json machine-readable requirement index
  • Conventional Commits style enforced
  • Privacy/security gates documented (SOP_AGENT_OPERATIONS.md)
  • Traceability chain: SysRS → SysDes → SRS → SAD → SDD
  • SECURITY.md, CONTRIBUTING.md, NOTICE, dual-license files present

Needs Attention

  • The agent spec docs (P0_MVP_AGENT_SPEC.md, P1_BETA_AGENT_SPEC.md, etc.) are deleted from the working tree but still in git HEAD. The new docs/srs.md, docs/sysdes.md, docs/sysrs.md are untracked. Docs reorganization in progress — files need to be committed or deletions reverted.

Summary

P0 / MVP:   ~85% done. Core product works end-to-end (connect, voice, chat,
            bookmarks, storage, diagnostics). Main blockers: DEC-012 legal
            review (hard gate), Android Keystore DEK, iOS voiceChat evidence,
            and candidate evidence attachment.

P1 / Beta:  ~40% done. Audio processing backend, diagnostics export, and
            loopback tests are in. Per-user volume, event replay, network
            diagnostics, packaging pipelines, and several UI hardening items
            remain.

P2 / Prod:  ~5% done. Blocked on P0 legal gate. Documentation artifacts
            (C4 views, ADRs, glossary) and production signing pipelines
            not started.

SOP:        Docs in place but a working-tree reorganization is uncommitted.