Ctrl K
ComunidadGuías…

CONTRIBUTING.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Contributing

Thanks for considering a contribution! This is a **local-first** personal-finance
app — Python 3 + Flask + a single SQLite file + vanilla JS, no build step. The
guiding principles are: your data stays on your machine, dependencies stay
minimal, and the repo stays generic (no maintainer-specific data).

## Dev setup

```bash
git clone https://github.com/grzella/kist-finance.git
cd kist-finance
pip install -r requirements.txt -r requirements-dev.txt
./run.sh                       # → http://127.0.0.1:8321
```

On first launch a wizard lets you load a fake sample persona (or start empty).
You can also seed a throwaway DB directly:

```bash
FINANCE_PROJECT_DIR=$(mktemp -d) python seed.py
```

## Before you open a PR

Both of these run in CI on every PR — run them locally first:

```bash
python -m pytest -q                          # tests must pass
cd server && python -m security_review --ci  # must exit 0 (no blockers)
```

### Tests that touch the AI: mock both local-model paths

`_ai_answer` prefers tool-calling: when `db_tools.schema_summary()` returns a schema
(almost always), it calls `llm_local.chat_with_tools`, not `llm_local.chat`. A test
that mocks only `chat` **silently hits the real local model**. It passes in isolation
(the model answers, ~35s) but fails in a full suite run when the model is busy, with
a misleading `AI offline`. Mock both functions, which also keeps the test fast and
independent of load, or mark the test as an integration test on purpose.

## Ground rules

- **Runtime dependencies stay minimal:** Flask, `cryptography` for backup
  encryption and `pytrends` for the barometer. Prefer the standard library. If a
  change truly needs another package, raise it in an issue first — most things
  (RAG, backups, forecasting) are built on stdlib on purpose.
- **Keep it generic.** No real names, employers, cities, or personal figures in
  code — the security review's personal-data audit will fail the build. Real data
  lives in your local data directory, outside the repo
  (`~/Library/Application Support/Kist` on macOS, `~/.local/share/kist` on Linux;
  older installs keep a git-ignored `.finance/`).
- **Local-first.** The server binds to `127.0.0.1`; cloud integrations
  (Supabase, n8n, a cloud LLM) are always opt-in and never required.
- **Never commit** `.finance/`, `.env`, or `backups/` (they're git-ignored).
- **Match the surrounding code.** Vanilla JS, no framework, no bundler; Python in
  the existing style. Add a test when you add behavior.

## Good first contributions

- **i18n** — the UI is English-only; translation dictionaries and new languages
  are welcome (`static/js/app.js`).
- **Market-data adapters** — alternatives to the Supabase reader (Stooq, Yahoo…).
- **New forecast models** — the forecast journal grades itself; add a model and
  let it compete on band-coverage.
- **UX polish** — the frontend is plain HTML/CSS/JS, easy to iterate on.

## Reporting bugs / requesting features

Open an issue using the templates. For security-sensitive reports, please avoid
posting secrets or real data in the issue.