Anarlog

An AI notepad for meetings, with desktop, mobile, and developer interfaces.

A green workflow is not proof that skipped native jobs tested the release candidate.

Documents

├── 
├──  · imports ./AGENTS.md
├── .agents
│   └── skills
│       ├── anarlog-workflow
│       │   └── 
│       └── release-new-version
│           └── 
├── .github
│   └── 
├── **
│   └── AGENTS.mdNearest component instructions
├── apps
│   ├── api
│   │   └── 
│   ├── mobile
│   │   ├── 
│   │   └──  · imports AGENTS.md
│   └── web
│       ├── content
│       │   └── 
│       └── 
├── crates
│   ├── api-ticket
│   │   └── src
│   │       └── github
│   │           └── 
│   ├── chrome-native-host
│   │   └── 
│   ├── cloudsync
│   │   └── 
│   ├── db-app
│   │   └── 
│   ├── db-change
│   │   └── 
│   ├── db-core
│   │   └── 
│   ├── db-execute
│   │   └── 
│   ├── db-migrate
│   │   └── 
│   ├── db-reactive
│   │   └── 
│   ├── mobile-bridge
│   │   └── 
│   ├── notification-linux
│   │   └── 
│   ├── notification-macos
│   │   └── 
│   ├── notification-windows
│   │   └── 
│   └── template-app
│       └── 
├── docs
│   └── 
├── e2e
│   └── blackbox
│       └── 
├── enterprise
│   └── 
├── examples
│   └── plugins
│       └── 
├── packages
│   ├── changelog
│   │   └── content
│   │       └── 
│   └── db
│       └── 
└── plugins
    ├── db
    │   └── 
    ├── fs-sync
    │   └── src
    │       └── 
    ├── hooks
    │   └── 
    └── 

The file, explained

What makes it useful

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.

Techniques in this file

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.
Treat `.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.
- 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.
- 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.
- 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.
Use 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

  1. Map changed components to complete validation jobs, including setup.
  2. Report skipped checks separately from passing checks.
  3. Bind release evidence to one immutable candidate.
  4. Name generated files together with the command that owns them.
  5. Document how schema changes affect older installed clients.

How the file is organized

  1. 01Commands
  2. 02Pre-commit verification
  3. 03Release verification
  4. 04Guidelines
  5. 05Code Style
  6. 06CLI TUI Command Architecture
  7. 07Misc
  8. 08Cursor Cloud specific instructions
Read this revision on GitHub ↗

Context your instructions cannot carry

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.

Try Modem