Skip to content

docs(readme): canonicalize shields.io endpoint-badge URL form (#16)#27

Merged
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
docs/canonicalize-shields-url
Apr 26, 2026
Merged

docs(readme): canonicalize shields.io endpoint-badge URL form (#16)#27
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
docs/canonicalize-shields-url

Conversation

@cmeans-claude-dev

@cmeans-claude-dev cmeans-claude-dev Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

Summary

Single-character README fix. Line 11's https://shields.io/endpoint redirected to the canonical https://shields.io/badges/endpoint-badge already used at line 96. Now both refs match.

Line Before After
11 [shields.io](https://shields.io/endpoint) [shields.io](https://shields.io/badges/endpoint-badge)
96 [endpoint badge](https://shields.io/badges/endpoint-badge) unchanged (already canonical)

Out of scope: line 8's https://img.shields.io/endpoint?url=… is the actual badge endpoint URL pattern (the shields service that produces the SVG), not a doc link. Untouched.

Test plan

  • Click the shields.io link in the rendered README on this branch — lands on the canonical doc page (no redirect)
  • git diff origin/main.. shows two files changed (README.md, CHANGELOG.md), 5 insertions, 1 deletion

CHANGELOG

Closes #16

…16)

Line 11's `https://shields.io/endpoint` redirected to the
canonical `https://shields.io/badges/endpoint-badge` already used
at line 96. Single edit so both refs match.

Note: line 8's `https://img.shields.io/endpoint?url=…` is
unchanged — that's the actual badge endpoint URL pattern (the
shields service that produces the SVG), not a doc link.
@github-actions github-actions Bot added the Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA label Apr 26, 2026
@cmeans-claude-dev cmeans-claude-dev Bot added the Ready for QA Dev work complete — QA can begin review label Apr 26, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions github-actions Bot removed the Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA label Apr 26, 2026
@cmeans cmeans added QA Active QA is actively reviewing; Dev should not push changes and removed Ready for QA Dev work complete — QA can begin review labels Apr 26, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA round 1 — clean (one nice-to-have follow-up: #28, pre-existing CHANGELOG ordering issue)

PR closes #16 as designed: the line-11 doc link is canonicalized to match line 96; both now point at https://shields.io/badges/endpoint-badge directly without relying on the /endpoint/badges/endpoint-badge 301 redirect.

Verification on head 8b3eb772:

Check Result
Issue #16 scope matches — issue asks for line 11 to be canonicalized to the form already on line 96 (numbering shifted; on this branch the second occurrence is at line 96). PR does exactly that.
Redirect chain (curl -sI -L) https://shields.io/endpoint → 301 with location: /badges/endpoint-badge → 200. Confirms PR's premise.
Diff scope exactly README.md (+1/-1) + CHANGELOG.md (+4) — matches PR test-plan claim
Repo-wide grep for shields.io doc-link drift only line 11 needed canonicalization; line 8 and the deploy/README badge URL are img.shields.io/endpoint?url=… (the badge service endpoint, not a doc URL) — correctly left alone per PR body. All other matches are img.shields.io/<badge-shape>/… badge URLs or shields.io/ root references; no further drift.
CHANGELOG entry under ### Fixed with Closes #16 — correct Keep-a-Changelog category and reference
uv run pytest -q 56 passed, 0 deselected, 0.14s
uv run ruff check + ruff format --check + uv run mypy src clean
CI on PR head all SUCCESS (test 3.11/3.12/3.13, lint, typecheck, on-push, qa-approved)

Test-plan checkboxes: ticked items 1 + 2 (both verifiable pre-merge).

Follow-up filed: #28nice-to-have. Pre-existing ## [Unreleased] ordering issue. Three older entries (deploy/README Tailscale Funnel from #22; README Acknowledgments + License + Install pointer from #15) are visually orphaned: PR #25's new ### Added and ### Changed blocks landed above them, and #27's new ### Fixed block now sits between ### Changed and the orphans, so they appear under ### Fixed. Not introduced by this PR — #27 just made the issue visually obvious. Should be cleaned up before the next release tag so categorization is correct in the rendered CHANGELOG.

No findings. Transitioning label to Ready for QA Signoff.

@cmeans

cmeans commented Apr 26, 2026

Copy link
Copy Markdown
Owner

Applying Ready for QA Signoff — see review above. Closes #16 cleanly; redirect verified, repo-wide grep shows no other shields.io doc-link drift, local tests/lint/format/mypy all clean. One nice-to-have follow-up filed as #28 (pre-existing CHANGELOG ordering issue from #25's merge — not introduced by this PR, not blocking; should be cleaned up before next release tag).

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge QA Approved Manual QA testing completed and passed and removed QA Active QA is actively reviewing; Dev should not push changes Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Apr 26, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cmeans-claude-dev cmeans-claude-dev Bot merged commit 86be28a into main Apr 26, 2026
39 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the docs/canonicalize-shields-url branch April 26, 2026 23:56
cmeans-claude-dev Bot added a commit that referenced this pull request Apr 27, 2026
Three mechanical edits:

- pyproject.toml: version "0.1.0" -> "0.1.1"
- CHANGELOG.md: insert `## [0.1.1] - 2026-04-26` directly under
  the (still empty) `## [Unreleased]` header so all 12 PRs'
  worth of bullets that have been accumulating since v0.1.0
  ship are now categorized under the 0.1.1 release. Updated
  the link refs at the bottom: [Unreleased] now compares from
  v0.1.1, and a new [0.1.1] entry compares v0.1.0...v0.1.1.
- uv.lock: refreshed by `uv lock` so the locked
  pypi-winnow-downloads version (0.1.1) matches pyproject.toml.

What ships in v0.1.1 (highlights — full changelog under
## [0.1.1]):

Library fixes (operator-visible):
- collector: _write_health OSError no longer escapes
  per-package isolation. Disk-full / perm errors now produce
  structured `winnow-collect: ...; health file write failed:
  [Errno 28] No space left on device` exit instead of a raw
  traceback. Closes #32.
- collector: stale_threshold_days is now actually consulted —
  the "warn if previous run is older than N days" feature
  documented in config.example.yaml since v0.1.0 finally
  fires. Log-only per the documented v1 contract; degrades
  silently on first-run / unreadable / malformed / future-
  timestamped previous _health.json. Closes #33.

Documentation:
- README acknowledgments / license / BigQuery dataset link
  refresh (PR #15)
- README shields.io URL canonicalization (PR #27, closes #16)
- deploy/README.md Tailscale Funnel as alternative HTTPS
  exposure (PR #22)
- deploy/README.md "Pick an approach" table updated to
  reflect the new Caddy logging shape (in PR #30)

CI / project infrastructure (no PyPI consumer impact, but
hardens future releases):
- Community health files: CONTRIBUTING / CoC / SECURITY /
  issue templates (PR #20)
- .github/dependabot.yml across pip + github-actions + docker
  ecosystems (PR #21)
- Dependabot PR hygiene cascade from cmeans/mcp-synology:
  PULL_REQUEST_TEMPLATE.md + auto-CHANGELOG workflow (App-
  token authenticated so required CI re-fires on the bot's
  HEAD SHA) + dependabot.yml prefix fix (PR #25). Validated
  end-to-end via the first two real Dependabot bumps PR #23
  (codecov-action 5->6) and PR #24 (python 3.13-slim ->
  3.14-slim).
- deploy-smoke CI job that builds the Dockerfile, smokes the
  entrypoint, validates compose+Caddyfile against caddy:2
  (PR #29, closes #7). Promoted to required status check on
  the main-protection ruleset 2026-04-26 22:43 (issue #31
  closed via operator action).
- deploy/caddy/Caddyfile.example gains global error logger +
  per-site access logger with built-in lumberjack rotation,
  documents the validate-as-root gotcha (PR #30). Live CT 112
  deployment fixed in the same change.
- 100% coverage on src/ via real tests (no `# pragma: no
  cover`), with `fail_under = 100` gate in pyproject.toml so
  future regressions trip CI (PR #38, closes #37).

Verified locally: 71/71 pytest pass, ruff/format/mypy clean,
coverage gate green at 100.00%.

After this merges:
1. Tag the squash-merge commit as v0.1.1 and push the tag —
   publish.yml fires and uploads to PyPI via the existing
   trusted-publisher OIDC flow.
2. Update the live CT 112 deployment to install
   pypi-winnow-downloads==0.1.1 from PyPI (currently runs a
   wheel built from main, but pinning to the released
   version keeps deploy reproducible).
3. Close any post-release follow-ups Chris wants tracked.

Co-authored-by: cmeans-claude-dev[bot] <272174644+cmeans-claude-dev[bot]@users.noreply.github.com>
cmeans-claude-dev Bot added a commit that referenced this pull request Apr 27, 2026
)

Documentation-only patch release. v0.1.1 shipped with three CHANGELOG
entries miscategorized under `### Fixed` instead of `### Added`:

- `deploy/README.md` Tailscale Funnel section (originally added in PR #22)
- README `## Acknowledgments` and `## License` sections (PR #15)
- README `## Install` pointer to pypinfo's GCP setup (PR #15)

The orphaning was introduced when PR #25 added new `### Added` and
`### Changed` blocks at the top of the then-active `## [Unreleased]`
section without repositioning the entries from earlier PRs. PR #27
later inserted a `### Fixed` block between `### Changed` and the
orphans, which is the layout that shipped in v0.1.1.

Three mechanical edits:

- `pyproject.toml`: version 0.1.1 → 0.1.2
- `CHANGELOG.md`: insert `## [0.1.2] - 2026-04-27` with one `### Fixed`
  bullet describing the recategorization; move three orphan bullets
  from `## [0.1.1]` `### Fixed` to `## [0.1.1]` `### Added`; update
  link refs (Unreleased compares from v0.1.2, new [0.1.2] compares
  v0.1.1...v0.1.2)
- `uv.lock`: refreshed by `uv lock` so locked version (0.1.2) matches
  pyproject.toml

No code, dependency, or runtime behavior changes. Closes #28.

Co-authored-by: cmeans-claude-dev[bot] <272174644+cmeans-claude-dev[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

QA Approved Manual QA testing completed and passed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(readme): canonicalize shields.io endpoint-badge URL form (line 11)

2 participants