# Report — repository cleanup and the editor, now Unheard City (mission 2) ## What works (verified) - **Repository**: clean layout (`ackit/`, `app/`, `tests/`, `data/catalog/`, `docs/`, `tools/`); old state in git tag `pre-cleanup`. One CLI (`ackit`) and one app (`UnheardCity`). - **Toolkit**: portable encoder (libvorbis via libsndfile; no Wwise, ffmpeg or vgmstream), WAD/pack injector, originals store with byte-exact revert, conflict detection, mod packages, Steam/Linux/Proton game discovery. - **Catalog**: CSVs for ITA/INT/FRA/DEU/ESN/SFX (11,467 sounds per speech language set), categories, verified speakers from the user's lists (3,366 lines in every language), inferred characters for the rest, original sizes and checksums. Schema in `data/catalog/README.md`. - **Editor**: browse/search/filter, listen (A/B, loop, waveforms), replace from file or recording, trim/gain/ normalize/loudness, apply/revert/revert all, changed-underneath warnings, notes/tags/favorites, mod export/import, settings. - **Tests**: 75 automated tests (synthetic game, real-game read-only tests, offscreen GUI tests) pass. `ackit verify` (offline self-check on the installed game) PASS. - **Real game**: `ackit verify --ingame` PASS (ncc 1.0); `tools/e2e_editor.py` — replacement applied through the editor is heard in the game (ncc 1.0, no crash), revert leaves WAD and pack index byte-identical; a speech line applied and reverted byte-identically. Game files are original at the end. - **Package (Windows x86-64)**: `dist/UnheardCity-2.0.0-windows-amd64.zip` (78 MB) with `THIRD_PARTY_LICENSES.txt`; runs its smoke test and starts the GUI with `PATH` reduced to `C:\Windows`. Contains a per-user installer (`Install.cmd`): install, upgrade and uninstall (Settings > Apps) verified. ## What is not verified / limitations - Speech lines being *heard* in the game needs gameplay; verified indirectly (same decoder/WAD path as the music test, byte-level apply/revert, boot test with modified speech WAD). - Speech/effects replacements must fit the original's size (index lives in compressed `.upk` packages). - Channel order for 4-6 channel sounds is unverified (tests used identical channels). - Inputs: WAV/FLAC/OGG/OPUS/MP3/AIFF built in; M4A/AAC/WMA only with an ffmpeg installed on the system. - Character labels outside the user's lists are inferred from names (marked as such), not verified speakers. ## Next steps 1. Extend the curated speaker lists (`data/catalog/source//*.txt`) and rebuild with `tools/build_catalog.py`. 2. Optional: rewrite the BKPK indexes inside `.upk` packages (LZO) to lift the size limit for speech.