Stacked on the feat/python-to-legacy MR; merge that one first.
Why
make parity between the Python and Go servers reported 0/3 routes matching. Two causes:
Go rendered a numeric VS cell as 2.609767878e+09.
Python's /api/adults and /api/juniors did not return months_to_show.
Changes
VS on read (Go): text columns of the payments sheet go through a new sheets.CellString helper that never uses exponent form. Bank inference uses it too.
VS on write (Go and Python): sync appends VS as a text cell, so Sheets keeps it a string and leading zeros survive. Existing rows are not rewritten; the read side handles both.
months_to_show (Python): added to the two JSON API responses. The HTML pages already had the feature.
Docs: the pre-feature cleanup task list from the repo audit, and the plan for these fixes.
Testing
make go-test-all and make test (37 Python tests) pass, including new tests for each change.
Live parity between the two containers: 3/3 routes match.
Not exercised: a real (non-dry-run) sync. After the next one, check that a new row's VS shows as text with no visible apostrophe.
Stacked on the `feat/python-to-legacy` MR; merge that one first.
## Why
`make parity` between the Python and Go servers reported 0/3 routes matching. Two causes:
1. Go rendered a numeric VS cell as `2.609767878e+09`.
2. Python's `/api/adults` and `/api/juniors` did not return `months_to_show`.
## Changes
- **VS on read (Go):** text columns of the payments sheet go through a new `sheets.CellString` helper that never uses exponent form. Bank inference uses it too.
- **VS on write (Go and Python):** sync appends VS as a text cell, so Sheets keeps it a string and leading zeros survive. Existing rows are not rewritten; the read side handles both.
- **`months_to_show` (Python):** added to the two JSON API responses. The HTML pages already had the feature.
- **Docs:** the pre-feature cleanup task list from the repo audit, and the plan for these fixes.
## Testing
- `make go-test-all` and `make test` (37 Python tests) pass, including new tests for each change.
- Live parity between the two containers: 3/3 routes match.
- Not exercised: a real (non-dry-run) sync. After the next one, check that a new row's VS shows as text with no visible apostrophe.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
kacerr
changed target branch from feat/python-to-legacy to main2026-10-08 11:45:37 +02:00
Go stringified sheet cells with fmt.Sprint, so a numeric VS read with
UNFORMATTED_VALUE was rendered as 2.609767878e+09. Text columns of the
payments sheet now go through sheets.CellString, which never uses
exponent form; bank inference uses the same helper.
Both sync implementations now append VS as a text cell so Sheets keeps
it a string and leading zeros survive. Existing rows are not rewritten.
Python already read VS as a digit string; a regression test pins that.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Go returns months_to_show in /api/adults and /api/juniors; the Python
API did not, so make parity failed on both routes. The Python HTML
pages already had the feature.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task list from the 2026-10-08 repo audit, plus the plan for the two
parity fixes found while validating the legacy/ move.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kacerr
merged commit cfdc5cbb2a into main2026-10-08 11:45:53 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Stacked on the
feat/python-to-legacyMR; merge that one first.Why
make paritybetween the Python and Go servers reported 0/3 routes matching. Two causes:2.609767878e+09./api/adultsand/api/juniorsdid not returnmonths_to_show.Changes
sheets.CellStringhelper that never uses exponent form. Bank inference uses it too.months_to_show(Python): added to the two JSON API responses. The HTML pages already had the feature.Testing
make go-test-allandmake test(37 Python tests) pass, including new tests for each change.🤖 Generated with Claude Code