Skip to content

feat(examples): add personal-finance project for UK Self Assessment#350

Merged
buremba merged 2 commits into
mainfrom
feat/personal-finance-example
Apr 26, 2026
Merged

feat(examples): add personal-finance project for UK Self Assessment#350
buremba merged 2 commits into
mainfrom
feat/personal-finance-example

Conversation

@buremba
Copy link
Copy Markdown
Member

@buremba buremba commented Apr 25, 2026

Summary

  • New examples/personal-finance/ project: UK Self Assessment helper exposed as a WhatsApp accountant.
  • 15 entity types (tax_year, account, transaction, holding, cgt_event, asset_lot, income_source, employer, trade, property, expense, contribution, relief_claim, document, goal) modelling SA100 + SA102 / SA103 / SA105 / SA106 / SA108.
  • 8 relationship types (account_contains, disposal_of, income_from, employed_by, trade_of, expense_of, for_tax_year, parsed_from).
  • 1 Gmail watcher (gmail-tx) that extracts transactions / cgt_events / dividends / documents from forwarded financial emails, with reaction guidance for linking to the active tax_year.
  • Agent persona/rules in agents/personal-finance/{IDENTITY,SOUL,USER}.md.

This is the canonical schema source. In the architecture it's the read-only template; per-user installs will mirror this schema into each user's personal org via the upcoming install flow.

Test plan

  • All 24 model YAMLs validate against `@lobu/owletto-cli`'s `validateModel` schema.
  • `lobu.toml` parses.
  • Pre-commit hooks (Biome, tsc) pass.
  • Once auth is set up: `owletto seed --dryRun` reports the planned writes correctly.
  • Once seeded: schema visible in the personal-finance org via `manage_entity_schema(action=list)`.

UK Self Assessment helper exposed as a WhatsApp accountant. Schema covers
SA100 + supplementary pages (SA102 employment, SA103 self-employment, SA105
UK property, SA106 foreign, SA108 capital gains): 15 entity types, 8
relationship types, 1 Gmail-extraction watcher. Agent prompt anchors all
work to the active tax_year and routes uncertain inputs to save_knowledge
rather than guessing structured fields.

This is the canonical schema source. Per-user installs mirror it into each
user's personal org via the upcoming install flow; no user data lives here.
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

The wildcard `.gov.uk` already covers `gov.uk`; keeping both entries was
redundant.

The reviewer flag about a missing data/ directory turned out to be a
misread — `data/` is a runtime-only path for the Owletto memory plugin
(matches the global `data/` .gitignore rule), not a seed directory.
@github-actions github-actions Bot added the triage:needs-human Triage agent escalated for human review label Apr 25, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Triage decision: needs-human

Reasons:

  • PR has merge conflicts or blocking issues (mergeStateStatus: BLOCKED)
  • Base branch conflicts require manual resolution

Next: Resolve merge conflicts and address any blocking issues, then re-run triage

@buremba buremba merged commit 5852ea6 into main Apr 26, 2026
12 checks passed
@buremba buremba deleted the feat/personal-finance-example branch April 26, 2026 16:23
buremba added a commit that referenced this pull request Apr 26, 2026
, #359 install-half) (#372)

The install flow as built — schema-mirror clones a template's entity types /
relationship types / classifiers / watchers into each user's personal org —
was the wrong abstraction. Cross-org vocabulary (an entity in tenant org A
referencing a type defined in a public-catalog org B by FK) is the planned
direction; the mirror pipeline duplicated rows per user and added re-sync
complexity for no working installs (verified 0 rows used the mirror columns
in prod).

Removed:
- packages/owletto-backend/src/agents/install.ts (installAgentFromTemplate, resyncInstalledAgent)
- packages/owletto-backend/src/agents/install-routes.ts (POST /api/install)
- packages/owletto-backend/src/agents/install-manifest-routes.ts (GET /api/install/manifest/:slug)
- All associated integration tests
- subject-identities WhatsApp helpers (normalizePhoneE164, phoneToWhatsAppJid, linkWhatsAppToMember) + their unit tests
- db/migrations/20260425120000_add_template_mirror_tracking.sql (rolled back on prod first)
- Route registrations from src/index.ts

Kept:
- subject-identities.ts provisionMemberAndCoreIdentities — used by the signup
  hook in personal-org-provisioning.ts, orthogonal to install flow.
- #352 personal-org-on-signup, #350/#354/#355/#356 personal-finance content —
  no install dependencies.

DB state: prod migrated down via dbmate (mirror columns dropped), then
20260426120000_entities_entity_type_fk re-applied. 0 user-visible data lost.
@buremba buremba restored the feat/personal-finance-example branch May 12, 2026 00:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage:needs-human Triage agent escalated for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant