Skip to content

arch: restructure monorepo into domain-driven packages #46

@kayodebristol

Description

@kayodebristol

Summary

Restructure the repository from the current flat package layout into a domain-driven architecture with clear ownership boundaries.

Target Package Structure

packages/
  domain/          — Pure types, invariants, value objects
  ledger/          — Accounts, balances, postings, transfers, snapshots, reconciliation
  ingestion/       — CSV/OFX/QFX adapters, file templates, row parsing, provenance
  resolution/      — Merchant resolution, alias graph, duplicate clustering, transfer detection
  analytics/       — Trend analysis, debt scenarios, budget vs actual, burn rate
  advice/          — Plan generation, recommendation ranking, scenario comparisons
  ai-providers/    — LLM provider abstraction (demoted from center stage)
  mcp-server/      — MCP tools exposing stable domain/analytics operations

Current State

  • packages/shared → becomes packages/domain
  • packages/financial-tools → split into ledger, ingestion, resolution, analytics
  • packages/ai-integration → becomes packages/ai-providers (utility, not core)
  • packages/mcp-server → stays, but depends on real domain operations
  • packages/vscode-extension → keep as-is for now

Principles

  • Each package has a single clear owner domain
  • No cross-package circular dependencies
  • AI is a supporting capability, not the architecture
  • Domain types are strict — no "optional everything" models

Acceptance

  • All 8 packages created with clear boundaries
  • Existing code migrated to correct packages
  • Package dependency graph is acyclic
  • Each package has its own tsconfig, tests, exports

Metadata

Metadata

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions