# Graph Report - finance (2026-09-14) ## Corpus Check - 147 files · ~51,467 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 1078 nodes · 3099 edges · 62 communities (42 shown, 14 thin omitted) - Extraction: 98% EXTRACTED · 2% INFERRED · 0% AMBIGUOUS · INFERRED: 50 edges (avg confidence: 0.93) - Token cost: 0 input · 0 output ## Community Hubs (Navigation) - Identity and Configuration - Budget Domain Services - Database Models - Database Context and Exports - Statement Import Services - Parser Adapters - Ledger Services - API Domain Types - Authentication UI - Ledger API - Import Review UI - TypeScript Configuration - Analytics UI - API and Analytics - Frontend Development Dependencies - Accounts UI - Frontend Runtime Dependencies - Import Detail Mutations - Operations UI - Query Keys and Operations - Frontend Bootstrap - Frontend Test Support - Budget UI - HTTP API Client - Form Fields - Infrastructure and CI - Core Finance Domain - Frontend Scripts - Settings and Data Lifecycle - Budget Allocation Model - MVP and Import Design - Data Security and Recovery - Ledger Concepts - Parser Versioning - Frontend Architecture - Beta Release Governance - Package Metadata - Tenant Isolation - Deletion and Restore - API Generation Script - OpenAPI Schema - API Integration Tests - Localization Tests - Income Classification - Accessibility ESLint - JavaScript Globals - JSDOM Dependency - React Type Definitions - React DOM Types - TypeScript ESLint - Vite React Plugin - Vitest Dependency - Favicon Design - Database Role Initialization - Payee Concept - Backend Package Metadata ## God Nodes (most connected - your core abstractions) 1. `Session` - 111 edges 2. `Base` - 46 edges 3. `AppError` - 41 edges 4. `get_settings()` - 38 edges 5. `PkMixin` - 38 edges 6. `TimestampMixin` - 37 edges 7. `conflict()` - 34 edges 8. `record()` - 32 edges 9. `bad_request()` - 27 edges 10. `not_found()` - 26 edges ## Surprising Connections (you probably didn't know these) - `Versioned Statement Imports` --conceptually_related_to--> `Statement Import` [INFERRED] docs/adr/0003-versioned-statement-imports.md → CONTEXT.md - `MVP Release Gates` --conceptually_related_to--> `Closed Beta Launch Gates` [INFERRED] .kilo/plans/1789034192214-financial-tracker-mvp.md → docs/operations/beta-release-runbook.md - `Financial Space Ownership` --conceptually_related_to--> `Financial Space` [INFERRED] docs/adr/0001-financial-space-ownership-and-rls.md → CONTEXT.md - `Typed Same-Origin API Client` --conceptually_related_to--> `Same-Origin Reverse Proxy` [INFERRED] frontend/README.md → infra/README.md - `Compose and Nginx Validation` --references--> `Docker Compose Development Stack` [EXTRACTED] .github/workflows/ci.yml → infra/docker-compose.yml ## Import Cycles - None detected. ## Hyperedges (group relationships) - **Financial Space Tenancy Boundary** — context_financial_space, context_membership, docs_adr_0001_financial_space_ownership_and_rls_defense_in_depth_authorization, docs_adr_0001_financial_space_ownership_and_rls_transaction_local_rls, docs_adr_0001_financial_space_ownership_and_rls_cross_space_integrity [EXTRACTED 1.00] - **Auditable Financial Model** — context_operation, context_posting, docs_adr_0002_journal_and_budget_reserves_derived_balances, docs_adr_0002_journal_and_budget_reserves_plan_funding_separation, docs_adr_0002_journal_and_budget_reserves_closure_snapshots [EXTRACTED 1.00] - **Safe Statement Import Flow** — context_statement_import, context_parse_run, context_source_record, docs_adr_0003_versioned_statement_imports_immutable_statement_document, docs_adr_0003_versioned_statement_imports_conservative_deduplication, docs_adr_0003_versioned_statement_imports_atomic_confirm_revert [EXTRACTED 1.00] ## Communities (62 total, 14 thin omitted) ### Community 0 - "Identity and Configuration" Cohesion: 0.05 Nodes (87): get_settings(), Settings, current_context(), current_session(), alias, Context, CurrentSession, Db (+79 more) ### Community 1 - "Budget Domain Services" Cohesion: 0.09 Nodes (84): balances(), cash_flow(), category_spend(), plan_fact(), date, UUID, BudgetPeriod, Calendar month budget period in the space timezone (month granularity). (+76 more) ### Community 2 - "Database Models" Cohesion: 0.08 Nodes (64): downgrade(), upgrade(), AuditEvent, Append-only domain/security event. Never stores raw financial payloads., ExpectedIncome, ExpectedIncomeMatch, FundingMovement, PeriodClosure (+56 more) ### Community 3 - "Database Context and Exports" Cohesion: 0.06 Nodes (46): get_db(), get_session_factory(), Any, sessionmaker, Transaction-local RLS context. No-op on SQLite (tests); fail-closed on…, Transactional scope for workers/endpoints that own the transaction lifecycle., session_scope(), set_space_context() (+38 more) ### Community 4 - "Statement Import Services" Cohesion: 0.10 Nodes (55): detect_adapter(), magic_kind(), new_object_key(), decrypt_file(), encrypt_file(), EncryptedFile, Per-file random DEK; DEK wrapped with the KEK from the secret manager., Crypto-shred hook: deleting wrapped DEK rows in DB plus blobs removes access. (+47 more) ### Community 5 - "Parser Adapters" Cohesion: 0.08 Nodes (42): AppError, Any, Domain error rendered as a machine-readable JSON error payload., unprocessable(), AlfaCreditXlsxAdapter, AlfaDebitXlsxAdapter, AlfaXlsxAdapterBase, _cell_str() (+34 more) ### Community 6 - "Ledger Services" Cohesion: 0.14 Nodes (48): Any, record(), get_income_source(), conflict(), not_found(), confirm_document(), Operation, Posting (+40 more) ### Community 7 - "API Domain Types" Cohesion: 0.07 Nodes (39): AccountStatus, BalanceItem, BalancesReport, BudgetBlocker, BudgetCategory, BudgetStatus, BudgetSummary, BudgetWarning (+31 more) ### Community 8 - "Authentication UI" Cohesion: 0.10 Nodes (33): AcceptInvitePayload, LoginPayload, PasswordResetPayload, AcceptInvitePage, AccountsPage, BudgetPage, LoginPage, OperationsPage (+25 more) ### Community 9 - "Ledger API" Cohesion: 0.15 Nodes (31): account_json(), AccountBody, accounts(), archive_account(), create_account(), create_operation(), delete_account(), operation_json() (+23 more) ### Community 10 - "Import Review UI" Cohesion: 0.11 Nodes (21): Operation, ImportsPage, NotFoundPage, ReviewQueuePage, Badge(), BadgeTone, EmptyState(), EmptyStateProps (+13 more) ### Community 11 - "TypeScript Configuration" Cohesion: 0.07 Nodes (28): compilerOptions, baseUrl, esModuleInterop, forceConsistentCasingInFileNames, isolatedModules, jsx, lib, module (+20 more) ### Community 12 - "Analytics UI" Cohesion: 0.12 Nodes (19): AnalyticsPage, CashFlowColumn, ColumnChart(), ColumnChartProps, BarRow, HorizontalBars(), HorizontalBarsProps, PlanFactBars() (+11 more) ### Community 13 - "API and Analytics" Cohesion: 0.14 Nodes (22): balances(), cash_flow(), category_spend(), plan_fact(), Context, date, Db, get (+14 more) ### Community 14 - "Frontend Development Dependencies" Cohesion: 0.10 Nodes (21): eslint, @eslint/js, eslint-plugin-react-hooks, devDependencies, eslint, @eslint/js, eslint-plugin-react-hooks, openapi-typescript (+13 more) ### Community 15 - "Accounts UI" Cohesion: 0.16 Nodes (15): Account, AccountType, ConfirmDialog(), ConfirmDialogProps, Modal(), ModalProps, useAccounts(), useArchiveAccount() (+7 more) ### Community 16 - "Frontend Runtime Dependencies" Cohesion: 0.11 Nodes (19): dependencies, @hookform/resolvers, i18next, react, react-dom, react-hook-form, react-i18next, react-router-dom (+11 more) ### Community 17 - "Import Detail Mutations" Cohesion: 0.27 Nodes (15): RowDecision, ImportDetailPage, useToast(), useConfirmImport(), useImport(), useImportErrorToaster(), useReparseImport(), useRevertImport() (+7 more) ### Community 18 - "Operations UI" Cohesion: 0.27 Nodes (14): useActiveAccounts(), useCreateOperation(), useLedgerMutation(), useOperations(), useVoidOperation(), amountField(), dateField(), ExpenseForm() (+6 more) ### Community 19 - "Query Keys and Operations" Cohesion: 0.22 Nodes (10): api, invalidationRoots, queryKeys, SESSION_ROOT, sessionInvalidationRoot, SPACE_ROOT, spaceInvalidationRoot, OperationFilters (+2 more) ### Community 20 - "Frontend Bootstrap" Cohesion: 0.17 Nodes (10): Locale, App(), queryClient, AppRoutes(), createI18n(), detectLocale(), i18n, LOCALES (+2 more) ### Community 21 - "Frontend Test Support" Cohesion: 0.17 Nodes (12): User, ToastApi, ToastContext, ToastItem, ToastKind, ToastProvider(), createTestQueryClient(), renderWithProviders() (+4 more) ### Community 22 - "Budget UI" Cohesion: 0.36 Nodes (12): useBudgetCategories(), useBudgetErrorToaster(), useBudgetSummary(), useCloseMonth(), useCopyPreviousMonth(), useFundCategory(), usePeriodMutation(), useReopenMonth() (+4 more) ### Community 23 - "HTTP API Client" Cohesion: 0.23 Nodes (10): apiClient, ApiError, buildUrl(), ErrorEnvelope, parseErrorEnvelope(), QueryValue, readCsrfToken(), request() (+2 more) ### Community 24 - "Form Fields" Cohesion: 0.23 Nodes (10): FieldChrome, InputProps, MoneyField(), MoneyFieldProps, SelectFieldProps, SelectProps, TextareaField(), TextareaFieldProps (+2 more) ### Community 25 - "Infrastructure and CI" Cohesion: 0.18 Nodes (12): Backend Quality Gate, CI Pipeline, Compose and Nginx Validation, Frontend Quality Gate, Commodity Infrastructure Services, Docker Compose Development Stack, Internal Backend Network, Same-Origin Frontend Service (+4 more) ### Community 26 - "Core Finance Domain" Cohesion: 0.22 Nodes (9): Credit Reserve, Financial Account, Financial Space, Membership, User, Carry-Over Budget Reserves, Closed Beta Zero-Based Budgeting, Finance Tracker (+1 more) ### Community 27 - "Frontend Scripts" Cohesion: 0.22 Nodes (9): scripts, api:generate, build, dev, lint, preview, test, test:watch (+1 more) ### Community 28 - "Settings and Data Lifecycle" Cohesion: 0.44 Nodes (7): useCancelDeletion(), useRequestDeletion(), useRequestExport(), useSpaceDeletion(), DeletionForm(), DeletionFormValues, SettingsPage() ### Community 29 - "Budget Allocation Model" Cohesion: 0.29 Nodes (8): Budget Period, Funding, General Pool, Monthly Category, Plan Assignment, Savings Envelope, Immutable Closure Snapshots, Plan and Funding Separation ### Community 30 - "MVP and Import Design" Cohesion: 0.25 Nodes (8): Atomic Import Confirm and Revert, Conservative Deduplication, Versioned Statement Imports, Budget Invariants, Critical User Path, Financial Tracker MVP, Statement Import Pipeline, Modular Monolith ### Community 31 - "Data Security and Recovery" Cohesion: 0.25 Nodes (8): Immutable Statement Document, Per-File Envelope Encryption, Provider-Neutral Data Boundary, Russian Federation Data Residency, Backup and Restore Runbook, Mandatory KEK Backup, Quarterly Restore Drill, Provider-Neutral Infrastructure ### Community 32 - "Ledger Concepts" Cohesion: 0.38 Nodes (7): Internal Transfer, Operation, Posting, Refund, Derived Account Balances, Operations and Postings Journal, Ledger Invariants ### Community 33 - "Parser Versioning" Cohesion: 0.33 Nodes (7): Parse Run, Source Record, Statement Import, Parser Versioning and Review Diff, Layout Drift Re-Gating, Parser Private Fixture Gate, Private Statement Test Contract ### Community 34 - "Frontend Architecture" Cohesion: 0.29 Nodes (7): Server-Side Secret Boundary, Grossbukh Application Shell, Accessible Responsive UI, Finance Frontend SPA, RU and EN Localization, Space-Scoped Query Keys, Typed Same-Origin API Client ### Community 35 - "Beta Release Governance" Cohesion: 0.29 Nodes (7): Closed Beta Release Runbook, Forward-Fix Rollback Policy, Financial Data Incident Response, Closed Beta Launch Gates, Production Launch Sequence, Adapter Beta Eligibility, MVP Release Gates ### Community 36 - "Package Metadata" Cohesion: 0.29 Nodes (6): allowScripts, esbuild@0.25.12, name, private, type, version ### Community 37 - "Tenant Isolation" Cohesion: 0.33 Nodes (6): Audited Break-Glass Access, Cross-Space Referential Integrity, Defense-in-Depth Authorization, Financial Space Ownership, Transaction-Local RLS Context, Tenant Boundary ### Community 38 - "Deletion and Restore" Cohesion: 0.40 Nodes (6): Crypto-Shredded Deletion, Disaster Restore Procedure, Thirty-Day Space Deletion, Durable Deletion Ledger, Idempotent Resumable Purge, Post-Restore Deletion Replay ### Community 39 - "API Generation Script" Cohesion: 0.40 Nodes (5): firstReadable(), LOCAL_CANDIDATES, main(), OUT_DIR, REMOTE_CANDIDATES ### Community 40 - "OpenAPI Schema" Cohesion: 0.33 Nodes (5): components, $defs, operations, paths, webhooks ### Community 41 - "API Integration Tests" Cohesion: 0.67 Nodes (3): TestClient, test_invite_login_and_authenticated_space(), test_openapi_contains_critical_paths() ## Knowledge Gaps - **176 isolated node(s):** `finance-backend`, `name`, `private`, `version`, `type` (+171 more) These have ≤1 connection - possible missing edges or undocumented components. (Counts symbols only; 296 node(s) total have ≤1 connection when file, concept and rationale nodes are included.) - **14 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ - **Why does `Session` connect `Budget Domain Services` to `Identity and Configuration`, `Database Models`, `Database Context and Exports`, `Statement Import Services`, `Ledger Services`?** _High betweenness centrality (0.072) - this node is a cross-community bridge._ - **Why does `AppError` connect `Parser Adapters` to `Identity and Configuration`, `Budget Domain Services`, `Database Models`, `Database Context and Exports`, `Statement Import Services`, `Ledger Services`, `API and Analytics`?** _High betweenness centrality (0.035) - this node is a cross-community bridge._ - **Why does `get_settings()` connect `Identity and Configuration` to `Database Models`, `Database Context and Exports`, `Statement Import Services`, `Parser Adapters`, `API and Analytics`?** _High betweenness centrality (0.024) - this node is a cross-community bridge._ - **Are the 2 inferred relationships involving `Session` (e.g. with `UTCDateTime` and `test_postgres_rls_requires_matching_transaction_context()`) actually correct?** _`Session` has 2 INFERRED edges - model-reasoned connections that need verification._ - **Are the 3 inferred relationships involving `Base` (e.g. with `downgrade()` and `upgrade()`) actually correct?** _`Base` has 3 INFERRED edges - model-reasoned connections that need verification._ - **Are the 13 inferred relationships involving `AppError` (e.g. with `request_export()` and `login()`) actually correct?** _`AppError` has 13 INFERRED edges - model-reasoned connections that need verification._ - **What connects `finance-backend`, `name`, `private` to the rest of the system?** _176 weakly-connected nodes found - possible documentation gaps or missing edges._