chore(readme): sync utm-links.csv and guard it in CI - #878
Open
oktaygoktas wants to merge 2 commits into
Open
Conversation
Swap the pr-af card image for the repo's hero chart (#1 open-source on Code-Review-Bench) and rewrite the caption to match. Normalize the link to the /github/<slug>/ form used by every other card, and add the missing pr-af row to assets/utm-links.csv. The previous image is kept at assets/examples/agentic-pr-reviewer.png. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The CSV is the manifest of every UTM-tagged link in the README, but nothing enforced that it stayed in sync, so it drifted across successive README rewrites: 8 tracked links had no row, and one row pointed at a link deleted in 859174f. Sync: - add the 8 missing rows (harness-banner, prompt-to-production, full-features, explore-features, see-all-examples, architecture, community-docs, community-examples) - drop the stale blog-iam row - normalize the one www.agentfield.ai link to the apex domain, so analytics don't fragment by host - fix the missing space in the cloudsecurity row name Guard: - scripts/check-utm-links.py fails on a README link with no row, a stale row, a target that disagrees with the README, an untagged agentfield.ai link, or a www. host. Reports the exact row to paste. Stdlib only. - .github/workflows/readme-links.yml runs it on PRs touching README.md, the manifest, or the checker. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
santoshkumarradha
previously approved these changes
Aug 5, 2026
santoshkumarradha
left a comment
Member
There was a problem hiding this comment.
Checked the manifest sync plus the new guard script/workflow. The check is stdlib-only, the failure modes are concrete, and the README/CSV normalization is sensible. This looks good once the stack is on top of main.
santoshkumarradha
approved these changes
Aug 5, 2026
santoshkumarradha
left a comment
Member
There was a problem hiding this comment.
Retargeted cleanly onto main after #877 landed. I rechecked the manifest sync and guard workflow on the new base, and this still looks good to merge.
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.
The gap
assets/utm-links.csvis the manifest of every UTM-tagged link in the README — marketing reads it to audit campaign coverage. Nothing enforced that it stayed in sync, so it drifted across successive README rewrites.Measured on
main:utm_ids in README.mdutm_ids in the CSVNo row had wrong data — for all shared IDs the CSV target matched the README exactly. The problem was purely coverage.
Sync
8 rows added (the 9th, pr-af, lands in #877):
utm_idgithub-readme-harness-banner/docs/build/intelligence/harnessgithub-readme-prompt-to-production/docs/learn/build-with-claude-codegithub-readme-full-features/docs/learn/featuresgithub-readme-explore-features/docs/learn/featuresgithub-readme-see-all-examples/examplesgithub-readme-architecture/docs/learn/architecturegithub-readme-community-docs/docs/learngithub-readme-community-examples/docs/learn/examples1 stale row dropped —
github-readme-blog-iam. The post is still live, but the link was removed from the README in859174f4("scale-first README rewrite"); the row outlived it.1 host normalized —
www.agentfield.ai/examples→agentfield.ai/examples. It was the onlywww.link among 61; the apex URL returns200, so analytics stop splitting by host.1 cosmetic fix — missing space in the
cloudsecurityrow name, so all six "Built with AF" rows read identically.Guard
scripts/check-utm-links.py— stdlib only, no dependencies. Fails on:utm_idhas no CSV rowutm_idno longer appears in the READMEagentfield.ailink carrying no UTM params (allowlisted:install.sh, which is piped into a shell)www.hostFor anything missing it prints the exact CSV row to paste, so the fix is copy-paste.
.github/workflows/readme-links.ymlruns it on PRs touchingREADME.md, the manifest, or the checker.pull_request(notpull_request_target),contents: read, no untrusted input in anyrun:step.Verification
Each failure mode was exercised against a sandbox copy:
main's state → correctly reports all 9 missing + 1 stalewww.link added → flags with file:lineutm-links check passed — 45 tracked links, all present in utm-links.csvRun locally:
python3 scripts/check-utm-links.py🤖 Generated with Claude Code