Skip to content

docs(readme): dogfood pypi-winnow-downloads badge for download count#62

Merged
cmeans-claude-dev[bot] merged 2 commits into
mainfrom
docs/dogfood-downloads-badge
Apr 26, 2026
Merged

docs(readme): dogfood pypi-winnow-downloads badge for download count#62
cmeans-claude-dev[bot] merged 2 commits into
mainfrom
docs/dogfood-downloads-badge

Conversation

@cmeans-claude-dev
Copy link
Copy Markdown
Contributor

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):

[![Downloads](https://img.shields.io/pypi/dm/mcp-synology)](https://pypi.org/project/mcp-synology/)

After:

[![Downloads](https://img.shields.io/endpoint?url=https%3A%2F%2Fpypi-badges.intfar.com%2Fmcp-synology%2Fdownloads-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)

Three deliberate changes:

  1. Image URL — points at pypi-badges.intfar.com/mcp-synology/downloads-30d-non-ci.json via shields.io's endpoint adapter. This is the live JSON the dogfooded service produces.
  2. Link target — swapped from pypi.org/project/mcp-synology/ to 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).
  3. Label text changes as a side effect of the new endpoint — from generic "Downloads" to "pip*/uv/poetry/pdm (30d)", which accurately reflects what the count includes (only the four canonical Python installers; explicitly excludes CI traffic).

No changes to any other badge.

Test plan

  • curl -fsS https://pypi-badges.intfar.com/mcp-synology/downloads-30d-non-ci.json returns a valid shields.io endpoint JSON (schemaVersion 1, label, message, color)
  • CHANGELOG entry under ## Unreleased### Changed references this PR
  • No other badge URLs touched
  • After merge: visual inspection of rendered README on github.com/cmeans/mcp-synology to confirm the badge displays correctly and the click-through lands on the pypi-winnow-downloads repo

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).
@cmeans-claude-dev cmeans-claude-dev Bot added the Ready for QA Dev work complete — QA can begin review label Apr 26, 2026
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA and removed Ready for QA Dev work complete — QA can begin review labels Apr 26, 2026
@github-actions github-actions Bot added Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels 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!

@cmeans cmeans added the QA Active QA is actively reviewing; Dev should not push changes label Apr 26, 2026
@github-actions github-actions Bot removed the Ready for QA Dev work complete — QA can begin review label Apr 26, 2026
Copy link
Copy Markdown
Owner

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

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.

@cmeans
Copy link
Copy Markdown
Owner

cmeans commented Apr 26, 2026

QA audit — round 1

Branch / SHA: `docs/dogfood-downloads-badge` @ `8a9432b`

```
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"}

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+xml

curl -fsS -I https://github.com/cmeans/pypi-winnow-downloads

→ HTTP/2 200

git diff main..HEAD -- README.md # one line, line 16 only
uv run pytest # 499 passed, 96.04% coverage
uv run ruff check src/ tests/ scripts/ # clean
```

Outcome: Ready for QA Signoff. No findings. `QA Approved` remains the maintainer's call.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge and removed QA Active QA is actively reviewing; Dev should not push changes labels Apr 26, 2026
Copy link
Copy Markdown
Owner

@cmeans cmeans left a comment

Choose a reason for hiding this comment

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

LGTM

@cmeans cmeans added QA Approved Manual QA testing completed and passed and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Apr 26, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit 9769ed7 into main Apr 26, 2026
34 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the docs/dogfood-downloads-badge branch April 26, 2026 22:43
cmeans-claude-dev Bot added a commit to cmeans/mcp-clipboard that referenced this pull request Apr 27, 2026
…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>
cmeans-claude-dev Bot added a commit that referenced this pull request May 1, 2026
## 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
[![Glama](...)](https://glama.ai/mcp/servers/cmeans/mcp-synology)

+[![pip
downloads](...installer-pip-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![pipenv
downloads](...installer-pipenv-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![pipx
downloads](...installer-pipx-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![uv
downloads](...installer-uv-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![poetry
downloads](...installer-poetry-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![pdm
downloads](...installer-pdm-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+
+[![linux
downloads](...os-linux-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![macos
downloads](...os-macos-30d-non-ci.json)](https://github.com/cmeans/pypi-winnow-downloads)
+[![windows
downloads](...os-windows-30d-non-ci.json)](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>
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.

2 participants