Files
mudmouth/docs/development.md
T
pleb 1648ec5672
CI / macos-latest (push) Has been cancelled
CI / ubuntu-latest (push) Has been cancelled
CI / windows-latest (push) Has been cancelled
Add a size and packaging guardrail
2026-07-29 11:06:21 -07:00

4.1 KiB
Raw Blame History

Development and build notes

Local development

Mudmouth requires Rust stable. On NixOS, the included shell also provides the ALSA development metadata used by the Linux audio backend:

nix-shell

Run the normal validation suite before submitting a change:

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo build --release

Refreshing the PEQ NPC gender index

The checked-in generated/peq-npc-gender-index.json is generated data, not a runtime database dependency. Regenerate it from an explicit ProjectEQ dump with the tool below; it reads either create_tables_content.sql directly or the peq-dump/create_tables_content.sql member of the supplied zip archive. unzip is available in shell.nix for the latter.

cargo run --bin generate_peq_npc_index -- \
  --dump "$HOME/Downloads/peq-1759046415.zip" \
  --output generated/peq-npc-gender-index.json

The tool prints its input identity, complete conflict/neuter statistics, and output size. Run it twice and compare the output hashes before updating the checked-in artifact. The source archive and any temporary database files must not be committed or included in release archives.

The parser tests cover the observed log formats, including NPC dialogue, channel-chat exclusion, zone events, normalization, persistent/random speaker voice policies, log truncation, and first-run log discovery.

Running locally

Start the local Kokoro FastAPI service when necessary, then pass an EverQuest log directly:

doas systemctl start podman-kokoro-fastapi.service
cargo run --release -- --log "$HOME/Games/EverQuestLegends/Logs/eqlog_Pleb_oggok.txt"

Starting without a log path opens first-time setup. Mudmouth scans common Steam and Daybreak install folders for eqlog_*.txt files and lets you choose a character; if it finds none, enter the EverQuest game directory. Use [r] to rescan after enabling /log on in EverQuest. You can also change the log path and Kokoro endpoint from Settings:

cargo run --release
cargo run --release -- --kokoro-url http://127.0.0.1:8880

Release builds

Build Linux and Windows binaries locally with release.nix, then package them with:

nix-build release.nix -A linux -o result-linux
nix-build release.nix -A windows -o result-windows
./scripts/package-release.sh \
  --linux result-linux/bin/mudmouth \
  --windows result-windows/bin/mudmouth.exe

The packager writes platform-qualified archives and SHA256SUMS.txt to dist/. It also writes SIZE-REPORT.txt, recording the generated PEQ index, the two executables, and both final archives in bytes. Before writing the checksums, the packager verifies that each archive contains exactly its binary, README.md, LICENSE, and config.toml. This excludes PEQ dumps, SQL/fixture inputs, MariaDB data, the generator, and all source files from releases.

Keep the size report with the release/change description. When changing the embedded index encoding, compare its archive sizes against the previous report and record the Linux .tar.gz and Windows .zip deltas. Do not add an archive size threshold until a stable release baseline has been established.

PEQ index size audit — 2026-07-29

The following release builds compare pre-PEQ commit 561ace9 with the current core mapping implementation (tasks 14). The after size includes the embedded index and its resolver code.

Artifact Before After Delta
Generated index 0 B 719,199 B +719,199 B
Linux executable 6,772,856 B 7,535,632 B +762,776 B
Linux .tar.gz 2,871,605 B 3,010,723 B +139,118 B
Windows executable 6,577,369 B 7,332,144 B +754,775 B
Windows .zip 2,805,692 B 2,944,841 B +139,149 B

Both archives were inspected after packaging and contained only the platform binary, README.md, LICENSE, and config.toml. The compressed distribution cost is about 139 KB per platform; retain the JSON encoding until a future measurement establishes a material reason to optimize it.

scripts/publish-release.sh uploads the archive assets and checksums as a Gitea pre-release after the worktree is committed and clean.