# VoiceCat working method Start with `CLAUDE.md` for commands and architecture and `PROGRESS.md` for the current handoff. The supported product is the .NET 10 implementation. ## Definition of done A clean compile is the floor. Changes are done when their observable behavior is covered by a test or, for hardware/accessibility/release behavior, by a clearly recorded manual gate. For implementation work: 1. Read the relevant code and current contract document. 2. Add or adjust the smallest behavior test that demonstrates the requested result. 3. Implement the change without weakening encryption, real-time safety, or accessibility. 4. Build and run the affected tests, then the full managed test suite when practical. 5. Update concise current documentation and `PROGRESS.md` if the handoff changed. ## Supported layout | Path | Purpose | |---|---| | `proto/voicecat.proto` | Control-plane wire schema | | `src/` | Managed server, core, protocol, crypto, audio, codec/DSP, and CLI | | `tests/VoiceCat.Tests/` | Managed behavior tests | | `clients/windows/` | Supported WinForms client | | `clients/apple/` | Supported AppKit and UIKit clients | | `native/media/` | Required narrow Opus/RNNoise C ABI | | `native/rnnoise/` | Vendored RNNoise source/model | | `native/apple/broadcast/` | Required ReplayKit extension and shared-memory producer | ## Core verification ```bash ./scripts/build-native.ps1 dotnet restore VoiceCat.slnx --locked-mode dotnet build VoiceCat.slnx -c Release --no-restore dotnet test VoiceCat.slnx -c Release --no-build ./scripts/check-licenses.ps1 ``` Apple builds additionally use `./scripts/build-native-ios.sh` and `clients/apple/VoiceCat.Apple.slnx` on macOS. ## Hard rules - Encryption is mandatory: TLS control plus authenticated encrypted UDP media. - Never introduce GPL/LGPL dependencies. - Real-time audio callbacks never allocate, lock, block, or perform I/O. - Preserve accessible names, keyboard operation, and curated screen-reader announcements. - Wire, database, and shared-ring changes are deliberate versioned changes. - Keep `PROGRESS.md` short. Use Git history rather than accumulating completed-work prose.