aboutsummaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md24
1 files changed, 22 insertions, 2 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index d98a427..a89841a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -25,13 +25,17 @@ The Firefly III source is cloned at `../GITHUB/firefly-iii/` for reference only
3. If it is a new module, add it to the import line in `commands/__init__.py`.
4. Write a unit test under `tests/unit/` (mock `ctx.client` / `ctx.resolver`).
5. Update `SKILL.md` (the agent-operating guide) with the new command.
+6. Regenerate bash completion (it is generated, not hand-edited):
+ `python scripts/gen_completion.py > completions/firefly.bash`.
No other files change.
## Conventions
- Python 3.11+, standard library only. No third-party runtime deps.
- Output JSON by default (agent-first); `--human` for tables.
-- Name args resolve to IDs; ambiguous or missing names are HARD errors listing
- candidates. Never silently guess an account (real money).
+- Account name args resolve to IDs; ambiguous or missing names are HARD errors
+ listing candidates. Never silently guess an account (real money).
+- Categories and tags are NOT resolved: their names pass straight to Firefly,
+ which auto-creates them. Accounts are never auto-created (`account create`).
- All errors are `firefly_cli.errors.FireflyError` subclasses; `cli.main`
catches them, prints `{"error": ...}` to stderr, returns exit code 1.
@@ -46,5 +50,21 @@ No other files change.
contract, name resolution, task recipes). Keep it in sync when commands change.
It carries skill frontmatter and is symlinked into the Claude Code skills dir.
+## Versioning
+`MAJOR.MINOR.PATCH`, keyed on the tool's *contract*, not the size of the diff.
+The contract is the CLI surface (command/flag names) plus the JSON output and
+exit codes that an agent and SKILL.md depend on.
+- **PATCH**: bug fixes and small enhancements that keep the contract (e.g.
+ better help text, `--human` output tweaks, a new optional flag).
+- **MINOR**: new commands or functionality added without breaking existing
+ callers (e.g. a new `budget` group).
+- **MAJOR**: a breaking change to the contract, renamed/removed command or
+ flag, changed JSON shape or exit codes, regardless of how small the diff is.
+ A large internal refactor that leaves the contract intact is NOT a major.
+
+On every release bump the version in BOTH `pyproject.toml` and
+`firefly_cli/__init__.py` (keep them equal), then create a GPG-signed tag
+`vX.Y.Z` and push with `--follow-tags`.
+
## License
GPLv2-only. Per-file header: `Copyright (C) 2026 Danilo M. <danix@danix.xyz>`.