Add a repository check that catches stray bare blog URLs in markdown post bodies and asks the author to wrap them in markdown link syntax before commit or push.
The target problem from issue #86 is this:
https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/
The accepted shape is this:
[https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/](https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/)
Version 1 should stay narrow.
_posts/*.md onlyhttps://gurupanguji.com/blog/... URLs onlyThis solves the actual bug without turning the validator into a generic markdown parser for every possible URL shape on day one.
srcThe repository already routes post policy through one shared validator:
scripts/validate_posts.pyhooks/pre-commithooks/pre-push.github/workflows/validate_posts.ymlThat shared path is the right place for this rule. Adding the rule there means:
Use a small line-oriented scanner over the markdown body after front matter has been removed.
The scanner should:
https://gurupanguji.com/blog/... URL matches.This is better than one giant regex. Markdown has enough local structure that a tiny state machine is easier to trust and easier to test.
See this:
https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/
This post explains it better: https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/
[https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/](https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/)
[older post](/2026/03/18/a-website-to-destroy-all-websites/)
`https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/`
```text
https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/
```
<iframe src="https://www.youtube.com/embed/example"></iframe>
The validator should emit an actionable error with file path and line number.
Suggested shape:
_posts/2026-03-24-example.md:42: bare blog URL found, wrap it in markdown link syntax: https://gurupanguji.com/blog/2026/03/18/a-website-to-destroy-all-websites/
This keeps the failure cheap to fix.
Add unit tests to tests/test_validate_posts.py for:
The main risk is flagging URLs in valid non-prose contexts such as code blocks or HTML embeds.
Mitigation:
A narrow first version will miss some future bare URL shapes outside gurupanguji.com/blog/....
Mitigation:
scripts/validate_posts.pytests/test_validate_posts.pyIssue #86 should be solved by extending the shared validator, not by adding a bespoke hook check. One rule, one test surface, one enforcement path.