Repository navigation
bankstatementparser.com 0.0.9 - #45
Merged
Merged
Conversation
The release workflow, devcontainer, AGENTS.md and DEVELOPMENT.md pinned ssg 0.0.69 and the README badge named 0.0.63, while the workspace rule is to build every ssg site with the latest release. Move every pin to 0.0.72, the current release on crates.io. A local build with 0.0.72 passes make verify with no template changes. Assisted-by: Claude Code:claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
run_regression (cyclomatic 22, cognitive 38) and validate_readme's validate (cyclomatic 13, cognitive 19) were over the workspace ceilings, and nothing stopped new offenders. Split both into small checks with identical output: an old-versus-new run on good and mutated inputs gave byte-identical reports. tests/test_complexity.py now fails CI when any function in scripts/, tests/ or audit/ exceeds cyclomatic 10, Halstead difficulty 30 or 60 lines, or a file exceeds 500 lines. It failed on the two functions before the split and passes after. No baseline is needed: there are no remaining offenders (complexipy also reports cognitive <= 15). requirements/test.txt is regenerated with uv pip compile --generate-hashes to add radon 6.0.1 and its two dependencies, colorama 0.4.6 and mando 0.7.1; existing pins are unchanged and pip-audit reports no known vulnerabilities. Assisted-by: Claude Code:claude-opus-5-5 radon complexipy pip-audit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
scripts/release_notes.py titled releases "BSP v0.0.9" and fenced the checksums without the "SHA-256 of every asset attached to this release:" line or a text fence. The portfolio release format requires "<project> <version>" with no leading v, which is why v0.0.8's title had to be corrected by hand after publishing. Title releases "bankstatementparser.com 0.0.9" and build the checksum block in its own function. tests/test_release_notes.py covers both; the title test fails against the previous script. Fixes: 2ff6124 Assisted-by: Claude Code:claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
Every page canonicalises to its trailing-slash URL (/formats/), but the header, footer, home page, FAQs and 404 page linked to the /formats/index.html duplicate: 20 links on every page from the header and footer, 28 on the home page. Search Console reports such duplicates as "Alternative page with proper canonical tag", and crawl budget goes on URLs that are never indexed. Link to the canonical URL instead. tests/test_site_urls.py (next commit) fails on all 20 built pages before this change and passes after. Fixes: 13c47db Assisted-by: Claude Code:claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
Search Console reports 483 URLs not indexed against 33 indexed. All sampled 5xx and 404 URLs come from the 28-locale site that dae79d2 replaced on 2026-07-28 (its sitemap listed 364 URLs, canonicals in /page/index.html form), plus English pages it renamed: /faq/ is now /faqs/ and /contribute/ is /contributing/. Today they all return 404, and the current sitemap lists only the 18 live pages. Three generator changes in scripts/post-build.py: - The sitemap keeps a page only if it is not noindex, not a redirect and is its own canonical, so no future page can advertise a URL Google will refuse. Before, any built HTML file was listed. - config/redirects.json maps moved URLs to their new home; a meta-refresh page with a canonical to the target is written at each old URL, since GitHub Pages cannot send HTTP redirects. - The 404 page is also published at /404.html, the path GitHub Pages serves for any missing URL; it was only at /404/, so dead links got GitHub's generic page. Removed translations stay 404: the site has been English-only since dae79d2 and has no same-language page to send them to. tests/test_site_urls.py checks the deployed docs/ tree: every sitemap URL maps to a built, indexable, self-canonical page; every same-site URL in a page resolves; internal links avoid index.html; each redirect lands on a built page; /404.html exists. It failed 23 cases on the previous build and passes on this one. A unit test shows the old collector listing noindex, redirect and non-canonical pages. Fixes: dae79d2 Assisted-by: Claude Code:claude-opus-5-5 html-validate Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
Bump VERSION, CITATION.cff and the service worker cache name to 0.0.9, add the 0.0.9 CHANGELOG section and release Highlights, and add the missing 0.0.8 and new 0.0.9 entries to the site changelog. docs/ and public/ are regenerated with make build (ssg 0.0.72 and scripts/post-build.py), not edited by hand. Beyond version strings and build dates, the output changes are: canonical internal links on every page, the /faq/ and /contribute/ redirect pages, /404.html, and ssg 0.0.72's serialisation of the per-page rss.xml files. sitemap.xml still lists the same 18 URLs. Assisted-by: Claude Code:claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Sebastien Rousseau <sebastienrousseau@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR fixes the Search Console indexing report by linking pages by their canonical URLs, keeping the sitemap to indexable canonical pages, and redirecting moved pages.
Google should stop finding duplicate URLs on the site, and the 483 not-indexed URLs (all left over from the 28-locale site removed in July) can now age out as clean 404s or redirects.
Highlights ⭐️
/page/index.htmlwhile every page canonicalises to/page/, which Search Console reports as "Alternative page with proper canonical tag". Every internal link now uses the canonical URL.scripts/post-build.pylists a page only if it is notnoindex, not a redirect and is its own canonical. It still lists the same 18 live URLs, and each maps to a built file./faq/and/contribute/(renamed to/faqs/and/contributing/) now redirect through meta-refresh pages generated fromconfig/redirects.json, and the 404 page is published at/404.html, the path GitHub Pages serves for missing URLs.ssg0.0.72, release titles followbankstatementparser.com 0.0.9, and CI now enforces the complexity ceilings on every Python function.What's Changed
build: build the site with ssg 0.0.72by @sebastienrousseaurefactor: keep Python under complexity ceilingsby @sebastienrousseaufix: format release title and checksumsby @sebastienrousseaufix: link pages by their canonical URLsby @sebastienrousseaufix: list only canonical pages and redirect movesby @sebastienrousseauchore: release v0.0.9by @sebastienrousseauRoot cause: every sampled 5xx and 404 URL (
/ha/a-propos/,/fr/,/contribute/index.htmland the rest) comes from the multi-locale site thatdae79d26replaced on 2026-07-28. Its sitemap listed 364 URLs with/index.htmlcanonicals, and its generator really did put French slugs under other locales. The current site is English-only by design, so/fr/and the other locale pages are not missing from the build. They stay 404 because there is no same-language page to send them to. The 5xx responses could not be reproduced: every sample returns 404 today.tests/test_site_urls.pychecks the deployeddocs/tree: sitemap URLs, same-site URLs in every page, canonical internal links, redirect targets and/404.html.tests/test_complexity.pyaddsradon6.0.1 to the hash-pinnedrequirements/test.txt.ai-plugin.jsonpoints at/legaland/openapi.yaml, andmcp.jsonat/.well-known/mcp, none of which exist. Settingai_plugin = falseand[agents.mcp] enabled = falseinssg.tomlwould stop advertising them.Validation
make verify(ssg 0.0.72): lint, regression tests and all 15ssg auditgates pass with zero findings.python -m pytest tests(CI requirements): 93 passed. The new URL test failed 23 cases on themainbuild before the fix. The complexity test failed onrun_regressionandvalidatebefore the refactor, and the release-title test failed against the old script.npx html-validate@10 "docs/**/*.html",audit/contrast.pyand the CI structure guardrails: clean.index.html. Served locally,/faq/and/contribute/index.htmlreturn the redirect page and/fr/returns 404.pip-audit -r requirements/test.txt: no known vulnerabilities.Checksums
SHA-256 of the artifacts produced by
python3 scripts/release_backfill.py --src . --tag v0.0.9on this branch:Full Changelog: v0.0.8...feat/v0.0.9