Before generating code, find relevant ADRs by keyword and read them.

By topic

Go / code quality

  • ADR-0001: golangci-lint quality gate → linting, errcheck, gocritic, staticcheck, ci, go

Database / persistence

  • ADR-0002: PostgreSQL AFTER triggers for audit trails → audit, compliance, triggers, leave, postgresql, jsonb
  • ADR-0007: Two complementary audit systems → audit, audit_trail, audit_log, compliance, triggers, leave

Messaging / events

  • ADR-0003: Transactional outbox pattern → outbox, nats, events, reliability, distributed-systems

Architecture / modules

  • ADR-0004: Shared kernel + Anti-Corruption Layer for inter-module lookup → modules, decoupling, ddd, bounded-context, microservice, acl
  • ADR-0009: ACL per module for bounded context isolation → ddd, bounded-context, acl, microservice, modules

Authentication / authorization

  • ADR-0005: Stateless JWT with direct PostgreSQL reads → authentication, jwt, better-auth, postgresql, redis, security
  • ADR-0006: Go backend as read-only Better Auth consumer → authentication, better-auth, postgresql, multi-tenancy, permissions

HTTP / API

  • ADR-0008: Automatic validation middleware → http, echo, validation, middleware, handlers

CLI / developer tooling

  • ADR-0010: grm CLI uses OAuth 2.0 Device Flow with API key storage → cli, grm, oauth2, device-flow, api-key, authentication
  • ADR-0011: Better Auth bearer plugin required for CLI API key creation → cli, grm, better-auth, bearer, api-key, authentication
  • ADR-0012: Per-device API key naming and revocation → cli, grm, api-key, hostname, revocation, multi-device

Database / conventions

  • ADR-0021: Table naming — module-owned vs cross-cutting registries → database, naming, conventions, ddd, modules

Fieldforce / task management

  • ADR-0013: Event-based API for task status transitions → fieldforce, state-machine, api, patch, events, transitions
  • ADR-0014: Generic state machine in shared kernel → fieldforce, state-machine, shared-kernel, ddd, reuse
  • ADR-0015: Append-only review_notes JSONB array for rejection history → fieldforce, jsonb, audit, history, immutability
  • ADR-0016: Two-tier feature flags — global kill-switch + per-org toggle → fieldforce, feature-flags, multi-tenancy, admin
  • ADR-0017: Supervisor team scope resolved by scanning shared member table → fieldforce, teams, supervisor, better-auth, adr-0006
  • ADR-0018: Frontend server action handles SeaweedFS upload, Go persists metadata only → fieldforce, s3, seaweedfs, upload, attachments
  • ADR-0019: Unified org_module_configs table for per-org module configuration → fieldforce, org-config, jsonb, multi-tenancy, modules
  • ADR-0020: Overdue escalation is notify-only, no auto-reassignment → fieldforce, overdue, escalation, notifications
  • ADR-0022: Daily fieldforce briefings as stored snapshots → fieldforce, briefing, snapshot, cron, ai, idempotency
  • ADR-0023: Lease-then-LLM ordering for cron-driven AI generation → cron, ai, idempotency, multi-replica, fieldforce, briefing
  • ADR-0024: Per-org local-time scheduling via Go-side time.LoadLocation → cron, scheduling, timezones, fieldforce, briefing
  • ADR-0025: DB-managed LLM prompts as canonical, no code fallback → ai, prompts, llm, fieldforce, briefing

Docs / spec review tooling

  • ADR-0026: LLM-driven HTML enrichment with agent file-writing contract → ai, llm, docs, astro, plans, generation, agentic-cli
  • ADR-0027: Closed component vocabulary for plans-app spec review pages → docs, astro, plans, design-system, llm, ai, generation

Digital Worker / chat agents

  • ADR-0028: Two-tier LLM — local triage as an unbilled pre-gate filter → ai, llm, digital-worker, ollama, triage, access-gate, cost
  • ADR-0029: Worker acts on external chat without per-action approval (safe-executable vs consequential) → digital-worker, security, approval, capability-policy, chat
  • ADR-0030: Extraction watermark — advance-on-success, divergent outage recovery (flag-off skips, cap-exhaustion backfills) → digital-worker, dedup, watermark, privacy, cost
  • ADR-0031: Direct messenger integration (no middleware); Discord Gateway single-owner lease → digital-worker, integration, telegram, discord, whatsapp, multi-replica, lease
  • ADR-0032: Role-agent-owned, cross-channel memory with policy precedence → digital-worker, memory, learning, multi-tenancy, ddd, precedence
  • ADR-0033: Verified-identity-gated auto-save for role-agent memory → digital-worker, memory, learning, security, prompt-injection, identity
  • ADR-0034: Non-destructive memory budgeting — inject-time cap, no LLM compaction → digital-worker, memory, learning, cost, prompt-assembly
  • ADR-0035: Self-service DM-code identity verification; webhook external_user_id is the authoritative binding key → digital-worker, identity, verification, onboarding, telegram, whatsapp, security
  • ADR-0036: Verification resolves pre-identity with atomic single-use code consumption; generic no-oracle failures; extends ADR-0029 safe-set → digital-worker, identity, verification, atomicity, rate-limiting, security

Fieldforce mobile / Flutter client

  • ADR-0037: Flutter for the mobile client (over React Native, Capacitor, native) → fieldforce, digital-worker, mobile, flutter, platform, vibe-coding, offline-first
  • ADR-0038: melos monorepo with multi-app + shared core_* packages, structured from day one → fieldforce, digital-worker, mobile, flutter, monorepo, melos, modules, ddd
  • ADR-0039: Clean Architecture with an inward-pointing package dependency DAG → fieldforce, digital-worker, mobile, flutter, architecture, clean-architecture, hexagonal, ddd, dependency-rule
  • ADR-0040: FieldForce offline + realtime sync — adopt PowerSync over a hand-built sync engine → fieldforce, mobile, flutter, offline-first, realtime, sync, powersync, postgres, idempotency
  • ADR-0041: Mobile auth — Go-minted JWT with refresh-on-401, offline grace, verified-identity gate → fieldforce, digital-worker, mobile, flutter, authentication, jwt, security, offline, verified-identity, better-auth
  • ADR-0042: Riverpod for dependency injection and state management → fieldforce, digital-worker, mobile, flutter, state-management, dependency-injection, riverpod, codegen
  • ADR-0043: FieldForce background location — flutter_background_geolocation, three-gate activation, telemetry routed around PowerSync → fieldforce, mobile, flutter, location, background-execution, feature-flags, privacy, consent, telemetry
  • ADR-0044: Push notifications — FCM + APNs with sync-on-push and deep-link routing → fieldforce, digital-worker, mobile, flutter, notifications, fcm, apns, deep-link, background-execution, powersync
  • ADR-0045: Error modeling — sealed Result<T> + AppFailure over Either/exceptions → fieldforce, digital-worker, mobile, flutter, error-handling, result, sealed-class, dart, type-safety
  • ADR-0046: Internationalization — slang over official gen-l10n → fieldforce, digital-worker, mobile, flutter, i18n, localization, slang, codegen
  • ADR-0047: Mobile CI/CD on Codemagic (backend stays on GitHub Actions) → fieldforce, digital-worker, mobile, flutter, ci-cd, codemagic, github-actions, code-signing, monorepo
  • ADR-0048: Mobile version skew — server-driven minimum-version gate + backward-compatible API window → fieldforce, digital-worker, mobile, flutter, versioning, compatibility, forced-upgrade, api, release, powersync
  • ADR-0049: Device data lifecycle — per-user local database, lock-vs-wipe policy, encryption at rest → fieldforce, digital-worker, mobile, flutter, security, privacy, powersync, sqlite, sqlcipher, offboarding, offline