Release checklist
Walk through this before releasing a change that touches docs, the CLI, the API, or SONARA behavior.
Privacy and hygiene
- No examples expose private paths, usernames, real track names, secrets, or local database locations. This includes drive letters from the author's own machine and any hard-coded default path a tool carries.
- Generated reports, SQLite files, logs, node_modules, and local model artifacts are not staged.
Contract drift
Each item below names a mismatch that has already reached a release once.
- Every registered route appears in
reference/api.md. Compare the@app.getand@app.postdecorators acrossapi_routes_*.pyagainst the tables on that page. - Every option on every command appears in
reference/commands.mdwith its real range and default. Compare against the Typer signatures incli.pyand the argparse definitions undertools/andscripts/. - Every environment variable the code reads appears in
reference/configuration.md. - Every table in
db_ddl.pyappears inreference/database.md. uv.lockandpyproject.tomlagree about extras, souv sync --lockedsucceeds.- Any control named in the documentation exists in the UI, under the label the UI actually shows.
- Any safety gate described in the documentation exists in code. A phrase, a prompt, or a confirmation that no source file contains must be removed rather than softened.
Behavior
- CLI docs use the unified
dj-sim analyzecommand. - Frontend and docs builds ran when touched.
- Focused tests cover touched behavior.
- SONARA decode, requested fields, output storage, and current tested dependency agree with
sonara_runtime.pyandsonara_features.py. - A SONARA semantic change also reviews database structure, classifier feature recipes, optional reanalysis, and focused SONARA tests.
- Sidebar entries and local links include every new documentation page, and no sidebar entry points at a page that was removed.
Safety audit
Review any code path that writes audio tags or deletes audio. Also check relocation, analysis reset, and database clear paths.