docs(readme): dogfood pypi-winnow-downloads badge for download count#62
Conversation
Replaces the shields.io built-in PyPI downloads badge (which counts all download events, including CI traffic) with the dogfooded badge from cmeans/pypi-winnow-downloads, which excludes CI installer traffic by parsing the BigQuery PyPI Linehaul dataset. Before: https://img.shields.io/pypi/dm/mcp-synology → links to https://pypi.org/project/mcp-synology/ → label reads "Downloads" After: https://img.shields.io/endpoint?url=https%3A%2F%2Fpypi-badges.intfar.com%2Fmcp-synology%2Fdownloads-30d-non-ci.json → links to https://github.com/cmeans/pypi-winnow-downloads → label reads "pip*/uv/poetry/pdm (30d)" The link-target swap to the source repo is the "powered by" attribution. Curious readers can click through to see exactly how the count is produced (BigQuery query against PyPI Linehaul, filtering by installer to drop CI traffic). No Acknowledgements section line needed — Acknowledgements is for thanking external collaborators / methodologies, not promoting our own infrastructure. Endpoint verified live (curl returned valid shields.io endpoint JSON with schemaVersion 1, label, message, and color fields).
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
cmeans
left a comment
There was a problem hiding this comment.
QA Round 1 — PR #62
Verification on 8a9432b
| Check | Result |
|---|---|
curl -fsS https://pypi-badges.intfar.com/mcp-synology/downloads-30d-non-ci.json |
{"schemaVersion":1,"label":"pip*/uv/poetry/pdm (30d)","message":"134","color":"blue"} — valid shields.io endpoint contract |
Shields.io render https://img.shields.io/endpoint?url=… |
HTTP 200, image/svg+xml |
Click-through target github.com/cmeans/pypi-winnow-downloads |
HTTP 200 |
git diff main..HEAD -- README.md |
exactly one line replaced (line 16); no other badges touched |
| CHANGELOG entry | under ### Changed, references #62, accurately describes the swap and the label-text side effect |
| Test plan | 3 of 4 ticked (post-merge visual check correctly unticked) |
uv run pytest |
499 passed, 96.04% coverage |
uv run ruff check src/ tests/ scripts/ |
clean |
| Required CI rollup | all green |
Verdict
Ready for QA Signoff. No findings. QA Approved remains the maintainer's call.
Nice loop-closing detail: the dogfooded badge displays 134 (real-user installs over 30d, CI traffic excluded), which is meaningfully different from the shields.io built-in dm count and exactly the kind of accuracy the pypi-winnow-downloads service exists to produce.
QA audit — round 1Branch / SHA: `docs/dogfood-downloads-badge` @ `8a9432b` ``` → {"schemaVersion":1,"label":"pip*/uv/poetry/pdm (30d)","message":"134","color":"blue"}curl -fsS -I 'https://img.shields.io/endpoint?url=https%3A%2F%2Fpypi-badges.intfar.com%2Fmcp-synology%2Fdownloads-30d-non-ci.json' → HTTP/2 200, content-type: image/svg+xmlcurl -fsS -I https://github.com/cmeans/pypi-winnow-downloads → HTTP/2 200git diff main..HEAD -- README.md # one line, line 16 only Outcome: Ready for QA Signoff. No findings. `QA Approved` remains the maintainer's call. |
…w-downloads endpoint (#98) ## Summary Mirrors `cmeans/mcp-synology#62`. The shields.io built-in `pypi/dm` metric counts CI/installer/mirror traffic, which drifts from the "real users" signal as the project's own CI matrix grows. The dogfooded endpoint at `pypi-badges.intfar.com` winnows `pip*`/`uv`/`poetry`/`pdm` installs out of the BigQuery PyPI Linehaul dataset over the trailing 30 days. ## Three deliberate changes 1. **Image URL** — shields.io `endpoint` adapter pointing at `pypi-badges.intfar.com/mcp-clipboard/downloads-30d-non-ci.json` (the live JSON the dogfooded service produces). 2. **Link target** — swapped from `pypi.org/project/mcp-clipboard/` (already covered by the `PyPI version` badge above) to `github.com/cmeans/pypi-winnow-downloads` so a click on the badge surfaces the source-of-truth methodology. 3. **Honesty** — the displayed count is 30-day non-CI installs, not raw monthly downloads. ## Endpoint pre-flight The JSON returns: ``` {"schemaVersion":1,"label":"pip*/uv/poetry/pdm (30d)","message":"103","color":"blue"} ``` `shields.io/endpoint?url=...` returned HTTP 200 in pre-flight. Closes #97. ## Test plan - [x] Confirm the rendered badge in this PR's README preview reads sensibly (single integer, "pip*/uv/poetry/pdm (30d)" label, blue) - [x] Confirm the badge image link target resolves to `https://github.com/cmeans/pypi-winnow-downloads` - [x] Spot-check that no other badge in the row was disturbed - [x] Confirm `## [Unreleased]` → `### Changed` CHANGELOG entry references `#97` ## Notes The bogus remote branch `docs/dogfood-downloads-badge` (no PR, garbage content from a local branch-state mishap during cherry-pick) is left in origin for now — force-push is blocked by sandbox policy. I can request authorization to delete it, or you can drop it via `git push origin --delete docs/dogfood-downloads-badge`. Either is safe; nothing references it. 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>
## Summary Adds two new badge groups to `README.md` mirroring the layout `cmeans/mcp-clipboard` adopted after the upstream [`cmeans/pypi-winnow-downloads`](https://github.com/cmeans/pypi-winnow-downloads) service grew its installer/OS endpoints. - **Group 1 (six badges):** `pip`, `pipenv`, `pipx`, `uv`, `poetry`, `pdm` — each linked via `installer-{installer}-30d-non-ci.json`. - **Group 2 (three badges):** `linux`, `macos`, `windows` — each linked via `os-{os}-30d-non-ci.json`. **All nine new badges link to `cmeans/pypi-winnow-downloads`** (the dogfooded service) rather than PyPI itself. This is the explicit ask on this PR and is consistent with the existing aggregate Downloads badge from PR #62 — keeps the "powered by" attribution implicit and gives a curious reader a single click into the data source. ## Endpoint verification Pre-push sanity check that the endpoints are live for `mcp-synology`: \`\`\` $ curl -sf https://pypi-badges.intfar.com/mcp-synology/installer-pip-30d-non-ci.json {"schemaVersion": 1, "label": "pip (30d)", "message": "52", "color": "blue"} $ curl -sf https://pypi-badges.intfar.com/mcp-synology/os-linux-30d-non-ci.json {"schemaVersion": 1, "label": "linux (30d)", "message": "47", "color": "blue"} \`\`\` ## Diff at a glance \`\`\`markdown [](https://glama.ai/mcp/servers/cmeans/mcp-synology) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) + +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) +[](https://github.com/cmeans/pypi-winnow-downloads) MCP server for Synology NAS devices. ... \`\`\` ## QA ### Manual tests 1. - [x] View the rendered README on the PR's "Files changed" tab and confirm all 9 new badges render (no broken-image icons). The shields.io endpoint adapter sometimes takes ~30s to fetch a freshly-cached payload — refresh once if any badge is grey. 2. - [x] Click through one badge from each group (e.g. `uv` from installer group, `macos` from OS group) and confirm both land on `https://github.com/cmeans/pypi-winnow-downloads`, NOT on PyPI. 3. - [x] Compare side-by-side with [`cmeans/mcp-clipboard`'s README](https://github.com/cmeans/mcp-clipboard) — same badge set, same ordering, same labels. Only difference: link targets here point to the upstream repo per the explicit instruction; mcp-clipboard's installer/OS badges currently link to its own PyPI page. 4. - [x] Spot-check that the existing main badge group (PyPI version, Python versions, License, Tests, Coverage, Downloads, Glama) is unchanged. ### Verification I already ran | Check | Result | |---|---| | Endpoint live for `installer-pip` | ✅ schemaVersion 1, label "pip (30d)" | | Endpoint live for `os-linux` | ✅ schemaVersion 1, label "linux (30d)" | | README renders locally (markdown lint) | clean | | `git diff --stat` | 2 files changed, 15 insertions (README +11, CHANGELOG +4) | No code, test, or workflow changes. CI on this PR is informational (lint/test/typecheck/vdsm should still pass since nothing in `src/` or `tests/` changed). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- 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>
Summary
Replaces the shields.io built-in PyPI downloads badge with the dogfooded badge from
cmeans/pypi-winnow-downloads, the service that winnows CI installer traffic out of the BigQuery PyPI Linehaul dataset to produce a more accurate "real users" download count.Before (
README.md:16):After:
Three deliberate changes:
pypi-badges.intfar.com/mcp-synology/downloads-30d-non-ci.jsonvia shields.io'sendpointadapter. This is the live JSON the dogfooded service produces.pypi.org/project/mcp-synology/github.com/cmeans/pypi-winnow-downloads. The badge image already comes from the dogfooded service; pointing the click-through at the source repo is the idiomatic "powered by" attribution and keeps the Acknowledgements section reserved for what it's already for (Spec-First Coding methodology credit).No changes to any other badge.
Test plan
curl -fsS https://pypi-badges.intfar.com/mcp-synology/downloads-30d-non-ci.jsonreturns a valid shields.io endpoint JSON (schemaVersion 1, label, message, color)## Unreleased→### Changedreferences this PR