# CODEGRAPH ## Project - Product: Wails v3 / Go desktop dictation app. - Git root: `/Users/ar/Projects/PrivateVoice/03-O`. - Source root: `/Users/ar/Projects/PrivateVoice/03-O/C1.source/privatevoice.src`. - Current branch purpose: Round 6 Cantonese language version real-user test package based on `v2.2.0-build20260702.0303`. - Protected behavior: existing macOS App Store, local DMG, Monterey compatibility, Windows preview, model download safety, and paste/clipboard protection must not be changed without a scoped task and QA plan. ## Automatic Codebase Memory - Status: `enabled`. - Tool: `codebase-memory-mcp` 0.8.1. - Current project name after path unification: `Users-ar-Projects-PrivateVoice-03-O`. - Existing artifact note: `.codebase-memory/artifact.json` may still record legacy project name `Users-ar-Projects-PrivateVoice2-03-O` until the graph is regenerated. - Shared artifact: `.codebase-memory/graph.db.zst`; metadata: `.codebase-memory/artifact.json`. - Scope: `/Users/ar/Projects/PrivateVoice/03-O`. - Refresh command: `codebase-memory-mcp cli index_repository '{"repo_path":"/Users/ar/Projects/PrivateVoice/03-O"}'`. - Current `indexed_at`, commit, node count, and edge count are recorded in `.codebase-memory/artifact.json`. - Excluded by indexer: `.git`, `K3.运营与发布资料/legacy-运营资料/PrivateVoice-26.0604上架`, `K3.运营与发布资料/legacy-运营资料/运营文档`, `C1.source/privatevoice.src/frontend/dist`, `C1.source/privatevoice.src/frontend/node_modules`. - Query example after regenerating graph from Git root: `codebase-memory-mcp cli search_graph '{"project":"Users-ar-Projects-PrivateVoice-03-O","query":"model registry","limit":5}'`. - This automatic graph is an exploration aid only; it does not replace source reading, tests, QA evidence, or this `CODEGRAPH.md`. - Refresh rule: regenerate `.codebase-memory/` before each source freeze, version freeze, formal rollback-capable test package, or release package; daily Coder work-in-progress changes do not force a refresh. - Freeze record requirement: record the refresh command, `.codebase-memory/artifact.json` path, indexed commit, freeze commit, and whether the two commits match or differ only by `.codebase-memory/` artifact updates. ## Core Entrypoints - `C1.source/privatevoice.src/main.go`: process startup, data migration, logger, single-instance guard. - `C1.source/privatevoice.src/app.go`: Wails app wiring, settings window, tray, recorder, hotkey loop, ASR init, paste orchestration. - `C1.source/privatevoice.src/embed.go`: embeds frontend assets and app/tray icons. ## Language And Model Registry - `C1.source/privatevoice.src/internal/model/profile.go`: model and language IDs, model profile shape, install status types. - `C1.source/privatevoice.src/internal/model/registry.go`: language profile order, model profiles, language profiles, and normalization. - `C1.source/privatevoice.src/internal/modelselection/selection.go`: resolves current language and model, including manual-model fallback. - Round 6 Cantonese path: - Language ID: `yue-HK`, displayed as `粤语`. - Default model: `sensevoice-yue-2025-09-09`. - Backend: SenseVoice with `LanguageParam="yue"`. - The Cantonese language profile intentionally has no upgrade models, so Qwen3-ASR and X-ASR are not shown as Cantonese-specific options. ## Platform Modules - Audio: `C1.source/privatevoice.src/internal/audio/recorder.go` - Hotkey: - macOS: `C1.source/privatevoice.src/internal/hotkey/hotkey_darwin.go` - Windows: `C1.source/privatevoice.src/internal/hotkey/hotkey_windows.go` - Text input: - macOS: `C1.source/privatevoice.src/internal/input/paste_darwin.go` - Windows: `C1.source/privatevoice.src/internal/input/paste_windows.go` - ASR engine: - macOS: `C1.source/privatevoice.src/internal/engine/engine_darwin.go` - Windows: `C1.source/privatevoice.src/internal/engine/engine_windows.go` - Linux: `C1.source/privatevoice.src/internal/engine/engine_linux.go` - Overlay: - macOS: `C1.source/privatevoice.src/internal/overlay/overlay_darwin.go` - Windows: `C1.source/privatevoice.src/internal/overlay/overlay_windows.go` ## Windows Preview Scope - Windows preview supports `SenseVoice` only. - Non-SenseVoice models remain visible in settings but are disabled through `model.IsModelSupportedInCurrentBuild`. - Windows unsupported reason: `windows_preview_unsupported`. - Windows overlay remains native Win32/GDI+, with a larger translucent spectrum-style capsule indicator for recording states. - Build script: `C1.source/privatevoice.src/scripts/build-windows-preview.sh`. - Evidence verifier: `C1.source/privatevoice.src/scripts/verify-windows-qa-evidence.sh`. ## macOS Package Scope - Local DMG script: `C1.source/privatevoice.src/scripts/build-local-macos.sh`. - Universal DMG script: `C1.source/privatevoice.src/scripts/build-local-macos-universal.sh`. - Monterey compatibility script: `C1.source/privatevoice.src/scripts/build-local-macos-monterey.sh`. - Developer ID / notarization script: `C1.source/privatevoice.src/scripts/build-release-macos.sh`. - Mainline macOS local packages keep `LSMinimumSystemVersion=14.0`. - Monterey-compatible packages remain a separate build line. ## Standard Verification Commands Run from `C1.source/privatevoice.src`: ```bash npm --prefix frontend run build go test ./... GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go test -exec=/usr/bin/true ./... ./scripts/build-windows-preview.sh ./scripts/build-local-macos.sh arm64 ./scripts/build-local-macos.sh x86_64 ./scripts/build-local-macos-universal.sh ./scripts/verify-windows-qa-evidence.sh /path/to/qa-evidence-YYYYMMDD-HHMMSS.zip ``` ## Known Gaps - Windows runtime QA must still be performed on Windows 10/11 hardware before calling Windows stable. - macOS 2.2.0 real-user test DMGs are locally signed and not notarized. - Monterey compatibility was not revalidated for the 2.2.0 package set. - Independent-site sales still need Developer ID release packaging, download page, authorization/activation, update strategy, support path, release manifest, and rollback policy.