- Move ASPICE docs to chanoraapp/docs submodule at docs/ - Move development docs to dev-docs/ (superpowers, offline-knowledge, impl-mapping) - Add AGENTS.md with project conventions for AI agents - Add impl-mapping.md (SAD component → source file mapping) - Archive completed plans to dev-docs/superpowers/plans/_archived/ - Remove AGENTS.md from .gitignore (now tracked)
215 lines
7.2 KiB
Markdown
215 lines
7.2 KiB
Markdown
# Function Inventory Review
|
|
|
|
> Review of `docs/offline-knowledge/function-inventory.md` for accuracy, completeness, and quality.
|
|
> Reviewed on: 2026-06-13
|
|
|
|
---
|
|
|
|
## 1. Accuracy Check (10 Random Entries)
|
|
|
|
**Result: PASS (10/10 correct)**
|
|
|
|
| # | Entry | File:Line | Signature | Purpose | Verdict |
|
|
|---|-------|-----------|-----------|---------|---------|
|
|
| 1 | `BlobCache::put` | lib.rs:63 | `pub async fn put(&self, prefix: &str, key: &str, data: &[u8]) -> Result<(), BlobCacheError>` | Store a blob with prefix+key | ✅ |
|
|
| 2 | `ProtocolClient::connect` | adapter.rs:304 | `pub async fn connect(cfg: ConnectConfig) -> Result<Self, ProtocolError>` | Dial server, wait for initial snapshot | ✅ |
|
|
| 3 | `BridgeChannel` | api.rs:404 | `pub struct BridgeChannel { ... }` | Channel DTO for Dart | ✅ |
|
|
| 4 | `IdentityFileStore::load` | lib.rs:390 | `pub fn load(&self) -> Result<Option<String>, StorageError>` | Read persisted identity | ✅ |
|
|
| 5 | `ServerState::from_snapshot` | lib.rs:83 | `pub fn from_snapshot(snapshot: ServerSnapshot) -> Self` | Build from initial snapshot | ✅ |
|
|
| 6 | `AudioEngine::start` | engine.rs:634 | `pub fn start(cfg: AudioEngineConfig, ...) -> Result<Self, AudioError>` | Start audio engine | ✅ |
|
|
| 7 | `ChanoraResolver::resolve` | lib.rs:178 | `pub async fn resolve(&self, args: &Args) -> Result<Resolution>` | Resolve with Args | ✅ |
|
|
| 8 | `ServerPrefetcher::prefetch` | lib.rs:99 | `pub async fn prefetch(&self, host: String) -> Result<(), ServerPrefetchError>` | Schedule fire-and-forget prefetch | ✅ |
|
|
| 9 | `Redactor::redact` | lib.rs:150 | `pub fn redact(&self, s: &str) -> String` | Apply redaction policy | ✅ |
|
|
| 10 | `ChanoraSession::new` | lib.rs:245 | `pub fn new() -> Self` | Create session | ✅ |
|
|
|
|
---
|
|
|
|
## 2. Completeness Check (3 Random Source Files)
|
|
|
|
**Result: PASS with 1 error**
|
|
|
|
### Rust: `chanora_state/src/lib.rs`
|
|
All public items verified present in inventory:
|
|
- `ServerState`, `Reduction`, `ConnectionState`, `Delta`, `StateEvent`, `StateError`
|
|
- All `ServerState` methods (`from_snapshot`, `replace_from_snapshot`, `channel`, `client`, `channels`, `clients`, `channel_count`, `client_count`, `own_channel`, `clients_in_channel`)
|
|
- `reduce`, `reduce_reconnect_snapshot`
|
|
|
|
**Verdict: ✅ Complete**
|
|
|
|
### Dart Widget: `voice_compact.dart`
|
|
- `VoiceStatusChip` at line 46 ✅
|
|
- `VoicePttButton` at line 255 ✅
|
|
|
|
**Verdict: ✅ Complete**
|
|
|
|
### Dart Service: `snapshot_state_mapper.dart`
|
|
- Inventory lists: `SnapshotStateMapper` at line 43
|
|
- Actual file contains:
|
|
- `OwnClientSnapshotState` class at line 3
|
|
- `ownClientSnapshotState()` function at line 23
|
|
- `snapshotChannelName()` function at line 43
|
|
- `snapshotNeededTalkPower()` function at line 48
|
|
|
|
**Verdict: ❌ Error** — The inventory lists a non-existent class name `SnapshotStateMapper`. The actual class is `OwnClientSnapshotState` (line 3), and the file contains 3 public functions not listed individually.
|
|
|
|
---
|
|
|
|
## 3. Dead Code Analysis (3 Items)
|
|
|
|
**Result: PASS (3/3 correct)**
|
|
|
|
| Claimed Dead Code | Verification | Verdict |
|
|
|-------------------|--------------|---------|
|
|
| `publish_permission_state` — `#[cfg_attr(not(target_os = "android"), allow(dead_code))]` | Confirmed at `api.rs:190-191`: `#[cfg_attr(not(target_os = "android"), allow(dead_code))]` | ✅ |
|
|
| `run()` in chanora_resolver — CLI entry point | Confirmed at `lib.rs:804`: `pub async fn run(args: Args) -> Result<()>` | ✅ |
|
|
| Platform-gated items (`AndroidVoiceUnit`, `IosVoiceUnit`) | Confirmed: these are `#[cfg]`-gated | ✅ |
|
|
|
|
---
|
|
|
|
## 4. Useless Code (3 Items)
|
|
|
|
**Result: PASS**
|
|
|
|
The inventory claims:
|
|
- No empty impls found
|
|
- No commented-out function bodies found
|
|
- No dead trait implementations found
|
|
|
|
Verified by searching for empty `impl` blocks and commented-out function bodies. No issues found.
|
|
|
|
**Verdict: ✅ Correct**
|
|
|
|
---
|
|
|
|
## 5. Formatting Check
|
|
|
|
**Result: PASS with minor issues**
|
|
|
|
| Check | Status | Notes |
|
|
|-------|--------|-------|
|
|
| Table alignment | ✅ | All tables properly formatted |
|
|
| Broken links | ✅ | No links in document |
|
|
| Missing entries | ⚠️ | `snapshot_state_mapper.dart` has missing public functions |
|
|
| Duplicate entries | ✅ | No duplicates found |
|
|
| Consistent column headers | ✅ | All tables use same format |
|
|
|
|
---
|
|
|
|
## 6. Stats Verification
|
|
|
|
**Result: PASS with 4 errors in enum variant counts**
|
|
|
|
| Stat | Claimed | Verified | Status |
|
|
|------|---------|----------|--------|
|
|
| Rust Crates | 10 | 10 | ✅ |
|
|
| Rust pub fn | ~180 | Plausible | ✅ |
|
|
| Rust pub struct | ~90 | Plausible | ✅ |
|
|
| Rust pub enum | ~50 | Plausible | ✅ |
|
|
| Rust pub trait | 6 | Plausible | ✅ |
|
|
| Rust pub const | ~30 | Plausible | ✅ |
|
|
| Dart files | 56 | Plausible | ✅ |
|
|
| Dart public classes | ~80 | Plausible | ✅ |
|
|
| TODO/FIXME comments | 15 | 15 (verified) | ✅ |
|
|
| Empty/commented stubs | 0 | 0 (verified) | ✅ |
|
|
|
|
### Enum Variant Count Errors
|
|
|
|
| Enum | Location | Claimed | Actual | Status |
|
|
|------|----------|---------|--------|--------|
|
|
| `CoreError` | chanora_core lib.rs:84 | 7 variants | 12 variants | ❌ |
|
|
| `ProtocolError` | chanora_protocol lib.rs:62 | 9 variants | 10 variants | ❌ |
|
|
| `BridgeError` | chanora_bridge lib.rs:55 | 8 variants | 7 variants | ❌ |
|
|
| `AudioError` | chanora_audio lib.rs:100 | 7 variants | 8 variants | ❌ |
|
|
|
|
**Actual variant counts:**
|
|
|
|
`CoreError` (12 variants):
|
|
1. Protocol
|
|
2. State
|
|
3. Audio
|
|
4. Storage
|
|
5. Cache
|
|
6. FileTransfer
|
|
7. Diagnostics
|
|
8. Invariant
|
|
9. NotConnected
|
|
10. AlreadyConnected
|
|
11. AudioNotStarted
|
|
12. Ptt
|
|
|
|
`ProtocolError` (10 variants):
|
|
1. Invalid
|
|
2. DnsFailed
|
|
3. Connect
|
|
4. DisconnectedEarly
|
|
5. Lost
|
|
6. Identity
|
|
7. Timeout
|
|
8. ServerRejected
|
|
9. Backend
|
|
10. FileTransfer
|
|
|
|
`BridgeError` (7 variants):
|
|
1. InvalidCommand
|
|
2. DnsFailed
|
|
3. Connection
|
|
4. NotConnected
|
|
5. AlreadyConnected
|
|
6. ServerRejected
|
|
7. Unmapped
|
|
|
|
`AudioError` (8 variants):
|
|
1. NoInputDevice
|
|
2. NoOutputDevice
|
|
3. StreamConfig
|
|
4. Opus
|
|
5. Backend
|
|
6. PlatformNotReady
|
|
7. InvalidAudioProcessingConfig
|
|
8. UnsupportedAudioProcessingConfig
|
|
|
|
---
|
|
|
|
## Corrections Needed
|
|
|
|
1. **`snapshot_state_mapper.dart` entry** (line ~558):
|
|
- Change `SnapshotStateMapper` → `OwnClientSnapshotState`
|
|
- Change line reference from `:43` to `:3`
|
|
- Add missing public functions:
|
|
- `ownClientSnapshotState` at line 23
|
|
- `snapshotChannelName` at line 43
|
|
- `snapshotNeededTalkPower` at line 48
|
|
|
|
2. **`CoreError` variant count** (line ~461):
|
|
- Change "7 variants" → "12 variants"
|
|
|
|
3. **`ProtocolError` variant count** (line ~65):
|
|
- Change "9 variants" → "10 variants"
|
|
|
|
4. **`BridgeError` variant count** (line ~116):
|
|
- Change "8 variants" → "7 variants"
|
|
|
|
5. **`AudioError` variant count** (line ~260):
|
|
- Change "7 variants" → "8 variants"
|
|
|
|
---
|
|
|
|
## Overall Quality Score
|
|
|
|
**Score: 7/10**
|
|
|
|
**Strengths:**
|
|
- Excellent file:line accuracy (100% on sampled entries)
|
|
- Good signature documentation
|
|
- Comprehensive coverage of Rust crates
|
|
- Proper dead code analysis with correct `#[cfg]` annotations
|
|
- Clean formatting and consistent structure
|
|
|
|
**Weaknesses:**
|
|
- 4 enum variant count errors (off by 1-5)
|
|
- 1 incorrect Dart class name in Services table
|
|
- Missing 3 public functions from `snapshot_state_mapper.dart`
|
|
- No verification of variant counts against source
|
|
|
|
**Recommendation:** Fix the 5 corrections listed above. The document is otherwise high quality and suitable for developer reference.
|