Repository navigation
Conversation
tests/test_prose.py fails on an em or en dash in prose Markdown and on emoji in a README heading. Repos fetch it from main with just prose-check, the way CI9 runs the ADR check. Appendix B and DEPLOYMENT.md lose their em dashes so this repo passes its own check.
This was referenced Oct 17, 2026
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.
Adds
tests/test_prose.py, a shared check that repos fetch frommainand run withjust prose-check, the same wayjust adr-checkrunstests/test_adr_citations.py(CI9). The standard gets a new CI10 for it, as a SHOULD, with the recipe byte for byte.The check fails on:
README.md(orreadme.md),CONTEXT.mdandAGENTS.md, and in any.mdunderdocs/exceptdocs/agents/It skips fenced code (backtick or tilde, indented or not), inline code, a table cell that holds only a dash, and an en dash between two digits.
Decisions
3–5,3.11–3.14) passes. A spaced en dash (3 – 5) is reported, and so is an em dash between digits (3—5). The en dash is the usual range mark, and requiring digits on both sides with no spaces keeps it from letting a pause through.:shortcode:emoji are not matched.#headings are checked. Setext headings and HTML<h1>tags are not.Also in this PR
docs/DEPLOYMENT.mdhad an em dash. This repo runs the check on itself throughuv run pytest, so it is fixed here.AGENTS.mdparagraph in Appendix B had an em dash at the end of its first line. FL2 requires that paragraph word for word, so the check would fail every repo that follows it exactly. It now has a colon, which 25 repos already use.Current violations (not fixed here)
I ran the check against
origin/mainof every repo checkout undermodern-python(31 repos, this one included). No README has an emoji heading. 28 repos are clean.release-scope:AGENTS.md:13, the old Appendix B em dash..github:docs/DEPLOYMENT.md:41, fixed in this PR.modern-di: 51 em dashes, mostly in the link lists at the bottom of docs pages.modern-di, by file and line
Rollout
CI10 is a SHOULD. A repo adds
just prose-checkto its lint job once it passes, somodern-diandrelease-scopeneed a fix first. This PR does not set a date for it to become a MUST.Test plan
uv run pytest: 187 passeduv run mkdocs build --strict: passesprose_check_sourcepointed at thefile://copy, on copies ofrelease-scope(fails onAGENTS.md:13) andfaststream-redis-timers(passes). The temporary directory is removed afterwards.