Mirror fuj infer's read-only mode: SyncOpts.DryRun skips WriteHeader,
AppendValues, and SortByDateColumn, printing one "Dry run: would …"
line per planned operation instead. ID-dedup still runs so the output
reflects exactly what the next real sync would write.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
When token is empty, New falls back to transparentClient with the
caller-supplied hc. main.go passes nil, so the first Do() call panicked.
Default to http.DefaultClient when hc is nil.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
extractSecondTableRows tracked a boolean inTarget flag and exited on
the first </table> token while inside the target. Any nested <table>
(e.g. pagination markup in the real Fio page) would cause an early
return before reading any data rows, explaining the 0-transaction report.
Fixed by tracking targetDepth instead: depth increments on every <table>
inside the target and we only return when it reaches 0 again.
parseCzechDate also only tried zero-padded layouts ("02.01.2006").
The real Fio transparent page emits non-padded dates ("7.5.2026");
added "2.1.2006" and "2/1/2006" as the preferred layouts.
Also adds a dry-run diagnostic line ("fetched N transaction(s) from Fio")
so the fetch vs dedup split is visible without reading logs.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
kacerr
merged commit f0a0f79475 into main2026-05-07 10:48:54 +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.
Summary
Fakefor adult/junior tabs (no auth needed for public sheets)modifiedTime-only client +FakeGetValues,AppendValues,BatchUpdateValues,WriteHeader,SortByDateColumn) +Fakewith call-capture for assertionsFileCache; two TTL knobs (file-mtime guard + in-memory debounce); atomic writes viaos.Rename; genericGet[T]; Python-compatible JSON format;Flush()Clientinterface withapiClient(REST JSON) andtransparentClient(HTML scraper viax/net/html);Fake; fixtures intestdata/NewSourceswires all IO intoLoadAdults,LoadJuniors,LoadTransactions,LoadExceptions; Czech month/merged-month parsingSyncToSheets(SHA-256 Sync ID dedup, optional sort) +InferPayments([?]review prefix, dry-run) — all tested with fakessyncandinfersubcommands wired to real clients;feesandreconcilenow use realNewSourcesTest plan
make go-test— all packages green (race detector on)make go-lint— golangci-lint v1.64.8 clean (gofumpt extra-rules, errcheck, staticcheck, unused)fuj fees,fuj reconcile,fuj sync --dry-run,fuj infer --dry-runagainst real credentials (manual, post-merge)🤖 Generated with Claude Code
extractSecondTableRows tracked a boolean inTarget flag and exited on the first </table> token while inside the target. Any nested <table> (e.g. pagination markup in the real Fio page) would cause an early return before reading any data rows, explaining the 0-transaction report. Fixed by tracking targetDepth instead: depth increments on every <table> inside the target and we only return when it reaches 0 again. parseCzechDate also only tried zero-padded layouts ("02.01.2006"). The real Fio transparent page emits non-padded dates ("7.5.2026"); added "2.1.2006" and "2/1/2006" as the preferred layouts. Also adds a dry-run diagnostic line ("fetched N transaction(s) from Fio") so the fetch vs dedup split is visible without reading logs. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>