# Source and release layout The repository has one source tree for both platforms. Generated files have separate destinations: - GNU/Linux compiler outputs: `build/linux/` - Windows compiler outputs: `build/windows/` - Windows portable runtime staging: `dist/windows-x64/` - Installers and platform packages: `dist/installers/` and `dist/linux-*/` - Source archive: `dist/source/` `build/` is disposable compiler output and is ignored by Git. External Dillo checkouts live in `test-deps/`; machine keys and test-run output live in `local-data/`. Both are local-only and ignored. Reusable tests and archive fixtures live under `tests/`, so a clean operation cannot remove them. Do not zip the working directory directly. To make a source-only archive that retains the historical fixtures and interoperability tests while excluding machine data and generated outputs, run from PowerShell at the repository root: ```powershell .\package-source.ps1 ``` The script writes `dist\source\dat-gpt-v0.0.002-source.zip` (the version comes from `VERSION`). It includes project sources, documentation, assets, the historical code under `extra/`, `third_party/`, the complete `tests/` tree, and the root historical `.dat` verifier fixture. It excludes installed `node_modules/`, `build/`, `dist/`, `local-data/`, `test-deps/`, `.git/`, per-machine Dillo keys, and generated configure files. It also skips local identity keys, cookie jars, SSH private keys, and `.env` files by name. It does not compile or bundle executables. Keep persistent node identity files in per-user application data outside the checkout. The source ZIP excludes local runtime state. For target packages, use `make package` on GNU/Linux and `build-windows-installer.ps1` on Windows. The Windows `build-windows.ps1` also creates a portable ZIP without requiring Inno Setup.