From 5b538136d23e4724188fd2bd7cacdab343b8a6e3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 16:19:24 +0000 Subject: [PATCH] CLAUDE.md: how a PR gets merged; the five places a new preference goes; checking behaviour offline - main takes only a branch that is up to date with it and green on both CI jobs: merge origin/main in (a merge commit), test, push, wait for CI on that head, then merge the PR with a merge commit. - A new preference goes in config's PREFERENCE_KEYS and preference_values, defaults/preferences.conf, the README table and its key count, and tests/test_config.py; the tests catch all but the README. - With Yahoo and Sharesight out of reach, behaviour is checked against the offline fixtures, and a refactor by comparing old and new output. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01JVEkZofdPjQ4jtXFKipeUX --- CLAUDE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 7d0a6e90..9b1ea0ab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,10 @@ The work branch named in the session instructions (`claude/...`) is the persiste An open PR takes in every commit pushed to its branch, so a PR opened for one small change can merge far more under its old title (#35 was titled as a CI tweak and merged 14 review fixes). The merge commit on `main` keeps that title for good. - Before each push, check for an open PR from the work branch. If there is one, update its title and description so they cover every commit it now holds, not only the change it was opened for. - Never make such a PR mergeable (resolve its conflict, merge `main` into it, enable auto-merge) while its title or description is out of date. +- To merge: `main` takes only a branch that is up to date with it and green on both CI jobs. Merge `origin/main` into the work branch (a merge commit, never a rebase), run the tests, push, wait for CI on that head, then merge the PR with a merge commit. ## Facts - Python 3.13.5; tests are offline and need no network (`tests/`). CI runs them on the latest 3.x and 3.13.5, except for pull requests that change only README.md, CLAUDE.md or `img/*.png` (install, compile and tests are skipped; the allowlist in `.github/workflows/ci.yml` must never include a path a test reads). - Production runs the Debian system packages (including `python3-croniter`, for the scheduler in `lib/jobs.py`); `requirements.txt` is for pip/uv users and CI. +- A new preference goes in five places: `PREFERENCE_KEYS` and `preference_values` (`lib/config.py`), `defaults/preferences.conf`, the README's preferences table and its key count, and `DEFAULTS` plus the key count in `tests/test_config.py`. The tests catch all but the README. +- If Yahoo and Sharesight are unreachable (the cloud environment's network policy can block them), check behaviour against the offline fixtures in `tests/common.py`. For a refactor, compare old and new output: load `git show HEAD:` as a module beside the new one and diff what both produce for the same inputs.