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