# Release checklist Run from the repository root on a quiet machine, on a branch cut from `main`. ## 1. Version Keep these in step: `package.json` and the root entry of `package-lock.json`, `src-tauri/Cargo.toml` and `src-tauri/Cargo.lock` (`cargo update --offline -p voiced`), `src-tauri/tauri.conf.json`, and `version=` plus `revision=` in `packaging/void/template`. The PDF Creator string follows `package.json` (`src/lib/pdf.tsx`); layout fingerprints do not include it, so goldens stay unchanged. ## 2. Gates ```bash npm run build npm test # about 7 minutes npm run fonts:verify cargo test --manifest-path src-tauri/Cargo.toml cargo tree -i aws-lc-sys --manifest-path src-tauri/Cargo.toml # must not match cargo tree -i aws-lc-sys --manifest-path src-tauri/Cargo.toml --target x86_64-pc-windows-msvc # must not match ``` Real-webview self-test on the debug build: ```bash npm run tauri -- build --debug --no-bundle --features custom-protocol VOICED_SELFTEST_OUT=/tmp/voiced-e2e/report.json XDG_DATA_HOME=/tmp/voiced-e2e/data \ XDG_CONFIG_HOME=/tmp/voiced-e2e/config timeout 180 src-tauri/target/debug/voiced ``` `/tmp/voiced-e2e/report.json` must contain `"ok": true`. Repeat the same check on each installed build with Settings, Diagnostics. ## 3. Void package ```bash ./packaging/void/build-xbps.sh tar --zstd -tf build/void/repo/voiced-_1.x86_64.xbps | less ``` Expect `./usr/bin/voiced`, the desktop file, hicolor icons, `usr/share/fonts/voiced//*.ttf`, `usr/share/licenses/voiced/*-OFL.txt`, `./INSTALL` and `./REMOVE`. Then install it into a clean container: ```bash podman run --rm -v "$PWD/build/void/repo:/repo:Z" ghcr.io/void-linux/void-glibc-full sh -c ' xbps-install -Syu xbps && xbps-install -y -R /repo voiced && fc-list | grep -iE "montserrat|poppins|lustria|dm sans|inter|jost|open sans|ibm plex" && ls /usr/share/licenses/voiced && ldd /usr/bin/voiced | grep "not found"; xbps-remove -y voiced' ``` `ldd` must print no `not found` line, and `xbps-remove` must finish without errors. Optionally build with `xbps-src` in a `void-packages` checkout (see the README). ## 4. Windows installer ```bash npm run app:build:windows # standard installer npm run app:build:windows:offline # only for machines without internet ``` Needs `cargo-xwin`, `makensis` and the NSIS plugin cache (README, "Building for Windows"). Check the size of `src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/*-setup.exe` against the budget of about 25 MB. Optional: sign it with `osslsigncode`. Never commit build outputs (`build/`, `dist/`, `src-tauri/target/`). ## 5. Manual first-run checklist (on a real machine, installed build, not `app:dev`) Linux and Windows. Windows has never been run on real hardware, so treat it as untested until this passes. - **Onboarding and Branding.** Complete first-run setup; upload a wide and a square logo, check the dark-theme wordmark and the signature. - **Template picker.** Open all 14 templates; switch A4 and Letter and the margin presets; check the logo slots. - **Export.** Issue an invoice; export searchable and flattened; change settings and re-export; "Original as issued" must be byte-identical to the archived PDF. On Windows, check file names with `/`, `:` and reserved names. - **Fonts.** Settings, Fonts: import a TTF for Now, Gotham or Open Sauce One (if a licensed file is at hand), confirm a template that uses it changes, remove it again. - **Clients.** Create a client with structured address and GST category; use it on an invoice. - **Settings tabs.** Business, Branding, Bank and payments, Invoice defaults, Numbering, Templates and export, Fonts, Data, Integrations: open each and save a change. - **History, detail and payments.** Filter the list; open an invoice; record a payment with TDS; cancel one; export CSV, JSON and `voiced.invoice.v1`. - **Data.** Backup now, change something, restore the backup, restart, confirm the data returned and that `backups/pre-restore-*` exists. Confirm the archive and fonts directories (Windows: under `%LOCALAPPDATA%`). - **Integrations.** Test connection and push an invoice to a test ERPNext (README, "ERPNext integration"). - **Single instance.** Launch a second copy: the first window must come to the front. ## 6. Open items A chartered accountant's sign-off on the SAC code and the signature rule is still open.