From a90de92e92ec04f9c8dd862af4a8fe42bb740cd8 Mon Sep 17 00:00:00 2001 From: Simon Axelsson Date: Tue, 15 Sep 2026 01:47:56 +0200 Subject: [PATCH] feat(governance): add siax.repo.v3.json (P003) + companion siax.repo.json (v2) First siax manifest for this repo (none existed). Schema-validated against siax-standard's siax.repo.v3.schema.json and siax.repo.schema.json (both valid:true, zero errors), and siax-doctor's `repo` command confirms REPO-16/REPO-03/REPO-04 all PASS. Fields reflect the repo's actual current state, not aspiration: - category: business, tier: satellite (adopted external AGPL-3.0-or-later OSS product, upstream Jakob Wennberg/gnubok; not a SIAX-native platform capability -- same pattern as crm-siax's Twenty CRM fork). - operationalState: planned (imported into sax3l 2026-09-10, governance scaffold only so far -- PLAN/MASTERPLAN_INDEX.md's X-120 is still at SCAFFOLDED, no SIAX-operated deployment/domain/node exists yet). - replacesSaaS: [Fortnox] per Simon's 2026-09-14 decision (ERPNext/Accounted, not Fortnox). - licenses.approved: false (AGPL-3.0-or-later has real network-copyleft implications for a self-hosted operator; no compliance sign-off found). - decoupled: true, as the v2 schema's business-category rule requires and as this repo's actual architecture is (no @siax/* deps, consumes: []). - appId: null with a written justification (no CL0UD APP_REGISTRY entry). Pure addition: two new root-level JSON files, nothing else touched. Co-Authored-By: Claude Sonnet 5 --- siax.repo.json | 57 +++++++++++++++++++++++ siax.repo.v3.json | 113 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 siax.repo.json create mode 100644 siax.repo.v3.json diff --git a/siax.repo.json b/siax.repo.json new file mode 100644 index 00000000..941a6b48 --- /dev/null +++ b/siax.repo.json @@ -0,0 +1,57 @@ +{ + "$schema": "https://git.siax.io/sax3l/siax-standard/raw/branch/main/schema/siax.repo.schema.json", + "repo": "ACCOUNTED", + "category": "business", + "subcategory": "bookkeeping-engine", + "appId": null, + "appIdJustification": "No SIAX appId registered. Accounted is an adopted external open-source Swedish bookkeeping product (package.json name \"erp-base\", upstream copyright Jakob Wennberg / gnubok, AGPL-3.0-or-later) brought into the sax3l org on 2026-09-10 as a finance capability alongside ERPNext for engagement bookkeeping (see Simon's 2026-09-14 decision: ERPNext/Accounted, not Fortnox). It is not a SIAX-branded 0-suffix platform product, so it has no CL0UD APP_REGISTRY entry; that assignment is a separate, not-yet-made decision.", + "owner": "SIAX Technology AB", + "lifecycle": "active", + "operationalState": "planned", + "gitHost": "git.siax.io", + "node": null, + "domains": [], + "consumes": [], + "consumedBy": [], + "replacesSaaS": ["Fortnox"], + "children": [ + { + "path": "app", + "purpose": "Next.js 16 App Router: UI, API route handlers (app/api/**), cron endpoints, and the OAuth 2.1 MCP connector surface (app/api/mcp-oauth)", + "lifecycle": "active" + }, + { + "path": "lib/core/bookkeeping", + "purpose": "Double-entry bookkeeping engine: voucher commit/storno, period locks, correction chains, enforced by Postgres triggers per Bokforingslagen", + "lifecycle": "active" + }, + { + "path": "packages/accounted-mcp", + "purpose": "Current-generation MCP tool package (150+ bookkeeping tools) for agent access; additive successor to gnubok-mcp", + "lifecycle": "active" + }, + { + "path": "packages/gnubok-mcp", + "purpose": "Legacy-named MCP compatibility package kept for existing MCP installs/API-key prefixes (gnubok_sk_/gnubok_inv_); never to be renamed per CLAUDE.md", + "lifecycle": "active" + }, + { + "path": "extensions", + "purpose": "Opt-in extension system (AI categorization, receipt OCR, email/calendar, bank/Peppol/Skatteverket connectors); core code must never import from here", + "lifecycle": "active" + }, + { + "path": "supabase/migrations", + "purpose": "Postgres schema migrations, including the legally-required enforcement triggers (migration 017) and RLS policies", + "lifecycle": "active" + }, + { + "path": "claude-plugin", + "purpose": "Claude Code plugin distributing approval-gated workflow skills (/accounted:bookkeep, /accounted:vat, /accounted:year-end)", + "lifecycle": "active" + } + ], + "capabilityPrefix": "accounted", + "packageName": "erp-base", + "decoupled": true +} diff --git a/siax.repo.v3.json b/siax.repo.v3.json new file mode 100644 index 00000000..a8f07a8d --- /dev/null +++ b/siax.repo.v3.json @@ -0,0 +1,113 @@ +{ + "$schema": "https://git.siax.io/sax3l/siax-standard/raw/branch/main/schema/siax.repo.v3.schema.json", + "standardVersion": "3.0", + "repo": "ACCOUNTED", + "tier": "satellite", + "category": "business", + "subcategory": "bookkeeping-engine", + "appId": null, + "appIdJustification": "No SIAX appId registered. Accounted is an adopted external open-source Swedish bookkeeping product (package.json name \"erp-base\", upstream copyright Jakob Wennberg / gnubok, AGPL-3.0-or-later) brought into the sax3l org on 2026-09-10 as a finance capability alongside ERPNext for engagement bookkeeping (see Simon's 2026-09-14 decision: ERPNext/Accounted, not Fortnox). It is not a SIAX-branded 0-suffix platform product, so it has no CL0UD APP_REGISTRY entry; that assignment is a separate, not-yet-made decision.", + "owner": "SIAX Technology AB", + "lifecycle": "active", + "operationalState": "planned", + "gitHost": "git.siax.io", + "canonicalRemote": "https://git.siax.io/sax3l/accounted.git", + "mirrors": [ + { + "host": "github.com", + "url": "https://github.com/erp-mafia/accounted.git", + "role": "mirror", + "direction": "push-from-canonical" + } + ], + "node": null, + "domains": [], + "consumes": [], + "consumedBy": [], + "replacesSaaS": ["Fortnox"], + "children": [ + { + "path": "app", + "purpose": "Next.js 16 App Router: UI, API route handlers (app/api/**), cron endpoints, and the OAuth 2.1 MCP connector surface (app/api/mcp-oauth)", + "lifecycle": "active" + }, + { + "path": "lib/core/bookkeeping", + "purpose": "Double-entry bookkeeping engine: voucher commit/storno, period locks, correction chains, enforced by Postgres triggers per Bokforingslagen", + "lifecycle": "active" + }, + { + "path": "packages/accounted-mcp", + "purpose": "Current-generation MCP tool package (150+ bookkeeping tools) for agent access; additive successor to gnubok-mcp", + "lifecycle": "active" + }, + { + "path": "packages/gnubok-mcp", + "purpose": "Legacy-named MCP compatibility package kept for existing MCP installs/API-key prefixes (gnubok_sk_/gnubok_inv_); never to be renamed per CLAUDE.md", + "lifecycle": "active" + }, + { + "path": "extensions", + "purpose": "Opt-in extension system (AI categorization, receipt OCR, email/calendar, bank/Peppol/Skatteverket connectors); core code must never import from here", + "lifecycle": "active" + }, + { + "path": "supabase/migrations", + "purpose": "Postgres schema migrations, including the legally-required enforcement triggers (migration 017) and RLS policies", + "lifecycle": "active" + }, + { + "path": "claude-plugin", + "purpose": "Claude Code plugin distributing approval-gated workflow skills (/accounted:bookkeep, /accounted:vat, /accounted:year-end)", + "lifecycle": "active" + } + ], + "runtime": { + "language": "typescript", + "node": ">=20", + "framework": "next", + "packageManager": "npm" + }, + "canonical": true, + "parentRepo": null, + "capabilities": [], + "surfaces": ["ui", "api", "mcp"], + "contracts": {}, + "identity": { + "workloadIdentity": false, + "authProvider": "supabase", + "tenantScoped": true + }, + "persistence": { + "stateful": true, + "database": "postgres", + "storage": "other" + }, + "deployment": { + "node": null, + "dedicated": false, + "environments": [] + }, + "observability": { + "health": true, + "ready": false, + "metrics": false, + "otel": false + }, + "reliability": { + "slo": false, + "backupFrequency": "none", + "provenRestore": false, + "rollback": false + }, + "engines": ["postgres", "supabase", "redis"], + "licenses": { + "spdx": "AGPL-3.0-or-later", + "approved": false + }, + "productionEvidence": { + "verified": false + }, + "decoupled": true, + "packageName": "erp-base" +}