Anarlog maps a TypeScript and Rust workspace to component-specific verification. It distinguishes desktop JavaScript checks from scheduled native jobs, requires evidence from the exact release candidate, and names generated artifacts and database compatibility constraints. The guide also keeps simple CLI screens from acquiring an unnecessary reducer and effect architecture.
Quoted passages are verbatim. Open one to see it in the source.
01 / Verification by change type
Match checks to the affected component
The verification table covers desktop, web, API, CLI, mobile, databases, billing, and a separate enterprise workspace. It warns that workflow path filters can miss consumers of shared packages.
Source excerpt starting at line 31.
31Treat `.github/workflows/` and their composite actions as the source of truth for commands, setup, features, targets, and exclusions. Re-read them when changing this guide or CI. Run locally reproducible checks before committing; include affected consumers of shared packages even when workflow path filters miss them. A skipped workflow/job is not passing coverage.
02 / Verification by change type
Verify the job and the candidate
Native desktop and mobile coverage is not implied by a green PR result. Release verification requires the relevant job on the recorded candidate SHA.
Source excerpt starting at line 70.
70- Desktop native CI (macOS, Windows, Linux x86_64/ARM64, and Swift) runs only on the daily schedule and `workflow_dispatch`, including release-candidate verification. PRs and pushes to `main` run desktop JS and i18n checks. Mobile iOS, Android, and watchOS native jobs also skip PRs. Check each required job and SHA, not only the aggregate green result.
03 / Generated file guards
Name generated outputs and their owners
OpenAPI, native bindings, permissions, and translations each have an owning generation command. Stable regeneration is required; hand-editing output would leave the source of truth unchanged.
Source excerpt starting at line 61.
61- Regenerate native bindings and permissions using their owning Rust build/generator; do not hand-edit generated output. The macOS desktop job checks `plugins/db/js/bindings.gen.ts`, `plugins/db/permissions/autogenerated`, and `plugins/db/permissions/schemas/schema.json` for drift. Mobile bridge generation belongs to `cargo xtask mobile-bridge`.
04 / Architecture as narrative
Design migrations for the installed older build
Nightly and stable share a database. The file requires additive migrations by default and an explicit marker when older versions must refuse to open a newer schema.
Source excerpt starting at line 82.
82- New SQLite migrations must be downgrade-safe (older builds tolerate newer schemas): additive only, new columns nullable or with a DEFAULT. If a migration can't be downgrade-safe, add a `-- breaking` line to the leading comment block of its `.sql` file so older builds refuse the database with an update prompt. Nightly and stable desktop builds share one database, so a breaking migration published in Nightly locks stable out until stable ships it.
05 / Behavioral framing
Scale command architecture to its state
The reducer/effect/runtime split is conditional on actual orchestration or state complexity. Simple browse and select flows are directed to a smaller structure.
Source excerpt starting at line 97.
97Use the full reducer/effect/runtime split only when the command has async orchestration, a multi-step workflow, or substantial state transitions that benefit from reducer-style tests.
Put it to work
Borrow this for your repo
01Map changed components to complete validation jobs, including setup.
02Report skipped checks separately from passing checks.
03Bind release evidence to one immutable candidate.
04Name generated files together with the command that owns them.
05Document how schema changes affect older installed clients.
Anarlog's file tells an agent how the codebase works. It cannot tell it which bug three customers hit this week. Modem keeps that context current and attaches it to the work.