6 changed files with 244 additions and 0 deletions
@ -0,0 +1,40 @@ |
|||||||
|
# Contributor instructions |
||||||
|
|
||||||
|
Before substantive work, read [product scope](docs/product.md), |
||||||
|
[architecture](docs/architecture.md), [data policy](docs/data-policy.md), and |
||||||
|
[roadmap](docs/roadmap.md). This file is the authoritative agent entry point. |
||||||
|
|
||||||
|
## Binding decisions |
||||||
|
|
||||||
|
- Gizmoduck is the clean successor to Robopato. |
||||||
|
- Use Python, Django, PostgreSQL, migrations from the beginning, Docker Compose |
||||||
|
for local infrastructure, and pytest for automated tests. |
||||||
|
- Import bank accounts from CSV and Banco do Brasil/Ourocard credit cards from |
||||||
|
TXT. OFX is not supported. |
||||||
|
- Keep parsing, normalization, validation, duplicate detection, preview, and |
||||||
|
persistence separate. |
||||||
|
- Obtain owner approval before changing these constraints or product scope. |
||||||
|
|
||||||
|
## Working rules |
||||||
|
|
||||||
|
- Preserve user changes and avoid unrelated edits. |
||||||
|
- Make small, cohesive changes with verification appropriate to their risk. |
||||||
|
- Use isolated Git worktrees for concurrent implementation that could overlap. |
||||||
|
- Design and plan substantial subsystems before implementing them. |
||||||
|
- Report assumptions, checks performed, and unresolved risks accurately. |
||||||
|
- Do not perform destructive operations, pushes, merges, releases, or history |
||||||
|
rewrites without explicit authorization. |
||||||
|
- Focused local commits are allowed after verification. Inspect both staged |
||||||
|
paths and staged content for real financial data and secrets before every |
||||||
|
commit. When uncertain whether data is safe, stop and ask the owner. |
||||||
|
- Agent-authored commits use repository-local `Codex <codex@localhost>`; |
||||||
|
human-authored commits retain the human contributor's identity. |
||||||
|
|
||||||
|
## Financial data |
||||||
|
|
||||||
|
Agents may read every file in Robopato and copy real documents for local |
||||||
|
development, parser validation, migration, and compatibility testing. Store |
||||||
|
real data only in ignored local directories or local databases. Never commit |
||||||
|
raw data, identifying excerpts, snapshots, logs, screenshots, reports, or dumps. |
||||||
|
Committed fixtures must be synthetic or irreversibly sanitized. Follow the |
||||||
|
[full data policy](docs/data-policy.md) before handling source documents. |
||||||
@ -0,0 +1,55 @@ |
|||||||
|
# Architecture |
||||||
|
|
||||||
|
## Binding stack |
||||||
|
|
||||||
|
Use Python and Django for the application, PostgreSQL for persistent storage, |
||||||
|
schema migrations from the beginning, Docker Compose for local infrastructure, |
||||||
|
and pytest for automated tests. Changes require explicit owner approval and a |
||||||
|
documented architectural decision. |
||||||
|
|
||||||
|
Dependency versions and tooling will be selected in the application-skeleton |
||||||
|
design. This foundation does not prescribe a database schema or UI framework. |
||||||
|
|
||||||
|
## Import boundaries |
||||||
|
|
||||||
|
```text |
||||||
|
source document |
||||||
|
-> source-specific parsing |
||||||
|
-> normalization |
||||||
|
-> validation |
||||||
|
-> duplicate detection |
||||||
|
-> preview |
||||||
|
-> explicit commit and persistence |
||||||
|
-> categorization and reporting |
||||||
|
``` |
||||||
|
|
||||||
|
Bank-account parsers consume CSV; Banco do Brasil/Ourocard card parsers consume |
||||||
|
TXT. OFX is unsupported. Parsers are pure transformations of supplied input; |
||||||
|
they do not query or write the database. Normalization maps parser output into |
||||||
|
a common candidate representation without committing transactions. |
||||||
|
|
||||||
|
Validation reports issues for review. Duplicate detection compares candidates |
||||||
|
with the relevant import and persisted records through a separate boundary. |
||||||
|
Preview displays candidates and issues without committing financial records. |
||||||
|
Persistence owns database writes, migrations, and commit integrity. Parser |
||||||
|
grammars, candidate contracts, duplicate rules, and transaction boundaries are |
||||||
|
specified and tested when the import subsystem is designed. |
||||||
|
|
||||||
|
## Data and accountability |
||||||
|
|
||||||
|
Preserve import provenance. Imports and material data changes record actor, |
||||||
|
source, timestamp, and outcome so human, application, and automated activity can |
||||||
|
be distinguished. Keep sensitive audit details in local storage governed by |
||||||
|
the [data policy](data-policy.md). |
||||||
|
|
||||||
|
Use separate least-privilege database accounts for development and application |
||||||
|
processes. Credentials belong in local environment configuration, never in |
||||||
|
tracked source. The skeleton design must define role provisioning and migration |
||||||
|
permissions. Schema changes must use migrations, not manual database drift. |
||||||
|
|
||||||
|
## Delivery boundaries |
||||||
|
|
||||||
|
The financial domain model, UI, importer grammar, duplicate algorithm, deployment |
||||||
|
model, and backup implementation each require design before substantial work. |
||||||
|
Follow the [roadmap](roadmap.md) for sequencing and [product scope](product.md) |
||||||
|
for acceptance boundaries. |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
# Financial data policy |
||||||
|
|
||||||
|
## Authorized local use |
||||||
|
|
||||||
|
Agents may read every file in the Robopato repository and copy real financial |
||||||
|
documents for local development, parser validation, migration, and compatibility |
||||||
|
testing. This permission does not authorize committing that material or sending |
||||||
|
it to external services. |
||||||
|
|
||||||
|
Real financial data may exist only in ignored local directories and local |
||||||
|
databases. Use these repository-root directories: |
||||||
|
|
||||||
|
| Location | Purpose | |
||||||
|
| --- | --- | |
||||||
|
| `data/` | Local working data and database storage | |
||||||
|
| `documents/` | Source documents copied from Robopato | |
||||||
|
| `imports/` | Local import inputs and intermediate results | |
||||||
|
| `uploads/` and `media/` | Application-managed local files | |
||||||
|
| `exports/` | User exports and generated reports | |
||||||
|
| `backups/` | Database and application backups | |
||||||
|
|
||||||
|
Verify the destination with `git check-ignore` before copying financial data. |
||||||
|
Keep local credentials in ignored `.env` files; `.env.example` may contain only |
||||||
|
non-secret examples. Keep sensitive execution output out of shared transcripts. |
||||||
|
|
||||||
|
## Git boundary |
||||||
|
|
||||||
|
Never add real financial data to Git. This includes raw documents, database |
||||||
|
dumps, copied excerpts, snapshots, logs, screenshots, generated reports, and |
||||||
|
documentation containing identifying transaction data. Ignoring a file does |
||||||
|
not remove data that was already tracked. Never use force-add to bypass this |
||||||
|
policy. |
||||||
|
|
||||||
|
Committed tests and examples must use synthetic or irreversibly sanitized data. |
||||||
|
Use `tests/fixtures/synthetic/` for explicitly synthetic CSV, TXT, and PDF |
||||||
|
fixtures. A fixture exception in `.gitignore` is not evidence that its contents |
||||||
|
are safe. Sanitization must remove identifying information and prevent recovery |
||||||
|
of the original sensitive data; changing a name alone is insufficient. |
||||||
|
|
||||||
|
Before every commit, inspect `git diff --cached --name-only` and |
||||||
|
`git diff --cached`, including newly added fixtures, for financial data and |
||||||
|
secrets. When uncertain whether material is safe, stop and ask the owner. |
||||||
|
|
||||||
|
## Runtime handling |
||||||
|
|
||||||
|
Use separate least-privilege development and application database accounts. |
||||||
|
Record actor, source, timestamp, and outcome for imports and material changes. |
||||||
|
Treat audit records, errors containing source rows, and test output derived from |
||||||
|
real documents as financial data. Use synthetic data for shareable diagnostics. |
||||||
|
|
||||||
|
If sensitive material is accidentally tracked, stop propagation and notify the |
||||||
|
owner. Do not push it or rewrite history without explicit authorization. |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
# Product scope |
||||||
|
|
||||||
|
Gizmoduck is a privacy-conscious personal finance application for an individual |
||||||
|
managing their own accounts and credit cards locally. It succeeds Robopato, |
||||||
|
retaining lessons from Banco do Brasil statements and Ourocard invoices without |
||||||
|
carrying forward notebook-driven architecture or importing historical data by |
||||||
|
default. |
||||||
|
|
||||||
|
## MVP |
||||||
|
|
||||||
|
- Manage bank accounts and credit cards. |
||||||
|
- Import bank-account CSV and Banco do Brasil/Ourocard credit-card TXT. |
||||||
|
- Preview parsed transactions, validation issues, and suspected duplicates |
||||||
|
before committing an import. |
||||||
|
- Preserve provenance and detect duplicates across imports. |
||||||
|
- Organize transactions by payee and category. |
||||||
|
- Represent transfers, refunds, and installments correctly. |
||||||
|
- Inspect monthly cash flow and spending summaries. |
||||||
|
- Export and back up user-owned data. |
||||||
|
|
||||||
|
A successful MVP supports the local path from source file through reviewed |
||||||
|
import to understandable transactions and summaries, with tests using synthetic |
||||||
|
or irreversibly sanitized fixtures. A failed or cancelled preview must not |
||||||
|
commit financial transactions. Exact importer grammars and financial modeling |
||||||
|
rules require subsystem designs before implementation. |
||||||
|
|
||||||
|
## Exclusions |
||||||
|
|
||||||
|
OFX is not supported. Bank APIs, investment tracking, mobile clients, receipt |
||||||
|
recognition, forecasting, and AI categorization are outside the MVP. Hosted |
||||||
|
multi-user operation is not part of the initial local release. |
||||||
|
|
||||||
|
The owner must approve scope changes. Technical choices are defined in |
||||||
|
[architecture](architecture.md); financial data handling follows the |
||||||
|
[data policy](data-policy.md). |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
# Agent Foundation Implementation Plan |
||||||
|
|
||||||
|
> **For agentic workers:** Use superpowers:executing-plans to implement this plan inline, task by task. |
||||||
|
|
||||||
|
**Goal:** Establish the approved contributor guidance and privacy boundaries. |
||||||
|
|
||||||
|
**Architecture:** Keep AGENTS.md concise and authoritative. Separate product, |
||||||
|
architecture, data policy, and delivery sequence into linked documents. |
||||||
|
|
||||||
|
**Tech Stack:** Markdown and Git; the application will use Python, Django, |
||||||
|
PostgreSQL, Docker Compose, and pytest. |
||||||
|
|
||||||
|
**Spec:** [Approved foundation design](../specs/2026-09-06-agent-foundation-design.md). |
||||||
|
|
||||||
|
## Global constraints |
||||||
|
|
||||||
|
- The project is named Gizmoduck and is the clean successor to Robopato. |
||||||
|
- The backend uses Python and Django. |
||||||
|
- Persistent storage uses PostgreSQL with migrations from the beginning. |
||||||
|
- Local infrastructure uses Docker Compose. |
||||||
|
- Automated tests use pytest. |
||||||
|
- Bank-account transactions are imported from CSV. |
||||||
|
- Credit-card transactions are imported from Banco do Brasil/Ourocard TXT. |
||||||
|
- OFX is not supported. |
||||||
|
- Parsing, normalization, validation, duplicate detection, preview, and |
||||||
|
persistence remain separate stages. |
||||||
|
- Real financial data and secrets must never enter Git. |
||||||
|
- Preserve existing README and ignore-file content while making targeted updates. |
||||||
|
|
||||||
|
## Task 1: Publish contributor and project guidance |
||||||
|
|
||||||
|
**Files:** Create AGENTS.md, docs/product.md, docs/architecture.md, |
||||||
|
docs/data-policy.md, docs/roadmap.md; update README.md. |
||||||
|
|
||||||
|
**Interfaces:** Consumes the approved spec; produces linked contributor policy. |
||||||
|
|
||||||
|
- [x] Write AGENTS.md with binding constraints, reading order, operating rules, |
||||||
|
local commit identity, and links to the four project documents. |
||||||
|
- [x] Write product scope and exclusions, architecture boundaries, permitted |
||||||
|
Robopato access and local-data locations, and milestone acceptance criteria. |
||||||
|
- [x] Link the documents from README and align its architecture language with |
||||||
|
the approved binding choices. |
||||||
|
- [x] Check that every relative Markdown link resolves and review all documents |
||||||
|
against the approved spec for contradictions and unresolved policy choices. |
||||||
|
|
||||||
|
## Task 2: Verify data exclusions and readiness |
||||||
|
|
||||||
|
**Files:** Update .gitignore only where approved protections are missing. |
||||||
|
|
||||||
|
**Interfaces:** Consumes data-policy locations; produces Git exclusion rules. |
||||||
|
|
||||||
|
- [x] Exclude raw financial CSV/TXT/PDF and database dump formats, keeping |
||||||
|
explicitly synthetic fixture paths trackable. Preserve existing rules. |
||||||
|
- [x] Use git check-ignore with representative paths under each local-data |
||||||
|
directory, secret and dump formats, and synthetic fixtures. Confirm raw data |
||||||
|
is ignored and synthetic fixtures remain trackable without creating real data. |
||||||
|
- [x] Run git diff --check; verify repository-local user.name and user.email |
||||||
|
equal Codex and codex@localhost; inspect changed files for secrets/data. |
||||||
|
- [x] Report the completed foundation and next application-skeleton milestone. |
||||||
|
Leave existing user edits and new documents available for review locally. |
||||||
Loading…
Reference in new issue