Files
accounted/AGENTS.md
T
Jakob Wennberg 9396e54965 docs: correct stale product facts (arkivplan, architecture, agents, self-hosting, extensions, database map) (#1931)
Every statement was verified against the code on main before editing; the
docs had drifted from the product in ways a customer or agent would act on.

- public/docs/arkivplan-mall.md: product named erp-base; magic-link login;
  BAS 2025/2026; eu-central/eu-west region; US subprocessors for AI. Now
  Accounted, e-mail + password + TOTP (BankID optional), BAS 2026,
  eu-north-1 Stockholm, Bedrock in EU with Resend as the only US
  subprocessor; adds rättelselogg, Peppol inbound, skattekonto imports and
  the säkerhetsbackup ZIP to the räkenskapsinformation tables.
- ARCHITECTURE.md: adds the inline-rättelse correction path, OAuth 2.1 and
  lazy MCP auth, accounted-mcp and claude-plugin, 150+ tools.
- AGENTS.md: defers to CLAUDE.md instead of a drifted copy; keeps the
  Codex-only constraints with the Supabase project name fixed (erp-base).
- README.md: drops LangChain/OpenAI (not dependencies), Node 20/22 facts,
  150+ tools, adds betalfil, Peppol, skattekonto and the Claude plugin.
- docs/PEPPOL_FOUNDATION.md: the two sentences denying network delivery
  and inbound support now describe the live Qvalia path.
- docs/SELF-HOSTING.md, docs/DOCKER.md: clone URLs and directory names,
  Sentry DSNs are not read by the app, image pinning uses the 7-char SHA
  tags the workflow actually publishes (no semver tag has been cut).
- docs/EXTENSIONS.md: replaces the fictional sector tree with the 19 real
  extensions/general directories; lib/reports/sru-encoding.ts.
- .claude/rules/database.md: 680+ migrations, ~170 live tables, adds the
  tables and RPCs that matter since July, drops sandbox_users.

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 13:36:05 +02:00

3.9 KiB

AGENTS.md: Accounted

Swedish accounting SaaS: double-entry bookkeeping under Swedish accounting law (Bokföringslagen) for sole traders (enskild firma) and limited companies (aktiebolag). Multi-tenant: users belong to companies via company_members; teams group companies for consultants.

This file is the entry point for Codex and other agents that do not read CLAUDE.md on their own. It deliberately does not duplicate the project rules: an earlier copy drifted from CLAUDE.md within weeks (missing the inline-rättelse correction path, a stale tenancy resolution order, an outdated MCP tool count). Read CLAUDE.md first and follow it as written.

Source of truth: CLAUDE.md

CLAUDE.md at the repo root holds everything that applies to every agent, and it wins whenever this file and it disagree:

  • Hard Rules: the seven accounting invariants (the two sanctioned correction paths, storno and inline rättelse; engine-only journal writes; balanced entries; period locks; document retention; money math; account numbers as strings) and the general prohibitions (migrations, extension imports, dependencies, the gnubok → Accounted rename, .env.local, diff scope, no em or en dashes).
  • When Uncertain: stop and ask; Swedish domain questions go through the swedish-* skills, never training data.
  • Definition of Done: all nine items, including the last one: the last mile is verified in-session (migration applied, PR merged, routine observed firing), or the final output states exactly what is not live yet.
  • Commands, Architecture (tenancy resolution, application-side MFA plus server-enforced session limits, event bus, Supabase clients, extensions, the 150+ MCP tools), Repository Map, Testing, and the Decision Log (DECISIONS.md).

Do not copy sections from CLAUDE.md into this file; link to them instead.

Codex-specific working constraints

These apply to Codex sessions run by Emil (Mattsson) and were added 2026-07-21; they are not in CLAUDE.md because they describe one operator's environment rather than the product. Keep them here.

  • Apply migrations only to the erp-base Supabase project's staging branch. Never apply migrations to a local database or a locally hosted Supabase instance.
  • Never write to the erp-base Supabase production database without Emil's explicit approval for the specific write. Production reads are allowed, including fetching data for a requested account, but no INSERT, UPDATE, DELETE, DDL, migration, mutating RPC, repair, seed, or other state-changing operation may run until Emil has clearly said okay. Do not infer approval from a request to investigate, diagnose, fix code, or fetch data.
  • Never write directly to the main branch without Emil's explicit approval. Do not commit, push, merge, or otherwise update main; use a feature branch unless Emil clearly approves the specific main-branch write.
  • Never open, start, or run Docker locally. Do not run Docker commands or commands that start Docker-managed services.

Path-specific guidance (.claude/rules/)

The files below are the shared source of truth for path-specific guidance. Claude Code loads them through their paths frontmatter. Codex does not interpret that frontmatter, so before reading, editing, reviewing, or otherwise working with a matching path, read and follow the listed rule. Do not duplicate the rule bodies here.

  • .claude/rules/design.md: design system, locked tokens (app/**, components/**)
  • .claude/rules/i18n.md: sv/en conventions, "stays Swedish" surfaces
  • .claude/rules/api-routes.md: withRouteContext route pattern, endpoint map (app/api/**)
  • .claude/rules/database.md: migration rules, key tables/RPCs/triggers, pg-real (supabase/migrations/**)
  • .claude/rules/mcp-server.md: MCP tool authoring, staged-operation pattern, OAuth 2.1 connector auth
  • .claude/rules/bookkeeping.md: BAS accounts, VAT treatments/rutor, lib/core/ services