Repository navigation
Close configuration gaps left by the rumdl migration (GH-1368) - #1371
Conversation
`just docs lint` and the Docs Lint workflow skipped `.agents/skills`, so the separate `rumdl check .agents/skills` step in the development workflow was not enforced. Include the skills in `.rumdl.toml` and drop the separate step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its only file, `.markdownlint-cli2.jsonc`, was removed with markdownlint-cli2, and no tracked `.jsonc` file remains. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both rules were enabled without `names` or `headings`, so neither reported anything. MD044 now checks the spelling of PyAthena, Athena, SQLAlchemy, fsspec, Polars, PyArrow and pandas outside code, and the docs follow it: library names in prose are capitalized as their projects write them, and module paths, driver names and option values are code. rumdl also checks MyST `(label)=` targets, so the three labels with a lowercase name disable MD044 for their line. MD043 is dropped because the docs share no single heading structure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| # rumdl also checks MyST `(label)=` targets, so the labels that contain one of | ||
| # these names disable MD044 for their line. | ||
| [MD044] | ||
| names = ["PyAthena", "Athena", "SQLAlchemy", "fsspec", "Polars", "PyArrow", "pandas"] |
There was a problem hiding this comment.
Self-review round one (implementation behavior)
- Base:
2a60ecc1f2a7a6bd0d9293525a41ea0d642a0082(merge-base withmaster) - Head:
6cb01956bb79e540567632677c463c825f151cd7 - Covered: all 20 changed files —
.rumdl.toml(include, enable, MD044),AGENTS.md, the development-workflow skill,scripts/check_license_headers.pyand its test, and the 16 Markdown files changed for MD044.
Result: CLEAN
Checks:
rumdl check .lints 30 files, including the four.agents/skillsfiles, with no issues; the skills'.claude/skillslinks are not added toinclude, so they are not linted twice.- MD044 skips inline code and code blocks (checked with a scratch file), so
PyAthena[Pandas],engine="pyarrow"and import paths stay as they are;whole-words = trueexcludesAWS_ATHENA_*indocs/usage.md. - The
rumdl-disable-next-line MD044comments cover only the MyST targets(pyathena)=,(polars)=and(sqlalchemy)=. Without them,just docs format(rumdl check --fix) would rewrite the labels and break{ref}targets. A plainsphinx-buildof this head and of the base produces the same warnings apart from paths and line numbers, and the anchors inindex.html,polars.htmlandsqlalchemy.htmlare unchanged. docs/polars.mdanddocs/sqlalchemy.mdare inunheaded-files; a leading HTML comment does not affectscripts/check_license_headers.py(exit 0).- Removing the
.jsoncentry removes only behavior that has no files;pytest scripts/tests/: 111 passed. benchmarks/RESULTS.mdis maintained by hand (no generator writes it), so the PyArrow spelling will not be reverted.
Noted for round two: docs/pandas.md's H1 becomes pandas, which changes the page title in the navigation.
There was a problem hiding this comment.
Correction to round one (found after merge, db5edc9)
Round one said that, without the rumdl-disable-next-line MD044 comments, just docs format would rewrite the labels and break {ref} targets.
The rewrite does not break the references: Sphinx normalizes label names to lowercase.
Checked with a plain sphinx-build of db5edc9 after removing the comments and changing (sqlalchemy)= to (SQLAlchemy)= and (polars)= to (Polars)=. No new warnings appeared, and {ref}sqlalchemy`` in docs/introduction.md and `docs/pandas.md` still links to `sqlalchemy.html#sqlalchemy`. The anchors stay `#sqlalchemy` and `#polars`.
The disable comments are still needed to keep MD044 from reporting the labels. Without them, the auto-fix makes a label's spelling differ from its {ref} uses.
The cause, rumdl not recognizing MyST targets under the MyST flavor, is reported as rvben/rumdl#983. The comments can be removed once a fixed rumdl is pinned.
The PR description and .rumdl.toml do not contain the incorrect statement.
| ### Markdown Lint | ||
|
|
||
| `docs/**/*.md`, `benchmarks/*.md`, `scripts/**/*.md`, `cloudformation/**/*.md`, and project-root `*.md` files are linted with [rumdl](https://github.com/rvben/rumdl). The config lives at `.rumdl.toml`. CI runs lint + Sphinx build on PRs that touch docs (`.github/workflows/docs-lint.yaml`). | ||
| `docs/**/*.md`, `benchmarks/*.md`, `scripts/**/*.md`, `cloudformation/**/*.md`, `.agents/skills/**/*.md`, and project-root `*.md` files are linted with [rumdl](https://github.com/rvben/rumdl). The config lives at `.rumdl.toml`. CI runs lint + Sphinx build on PRs that touch docs (`.github/workflows/docs-lint.yaml`). |
There was a problem hiding this comment.
Self-review round two (claims, callers, operational effects)
- Base:
2a60ecc1f2a7a6bd0d9293525a41ea0d642a0082 - Head:
6cb01956bb79e540567632677c463c825f151cd7 - Covered: PR body, the three commit messages, the
.rumdl.tomlcomments,AGENTS.md's Markdown Lint section, the development-workflow skill row, and the issue premises repeated by the change.
Result: FINDINGS (PR description only; no code or docs repair)
Claims checked:
- "rumdl 0.3.2 applies MD044 to MyST target lines": reproduced. With
[per-file-flavor] docs/**/*.md = "myst",(pyathena)=and(sqlalchemy)=were reported with the four-name list. - "
whole-words = truekeeps MD044 from matchingAWS_ATHENA_S3_STAGING_DIR": without it,docs/usage.md:796/799were reported; with it, they were not. - "Inline code and code blocks are exempt": a scratch file reported only the prose
polars. The fencedimport polars as plexamples in the docs produce no reports. - "With only the first four names, MD044 reports nothing but the MyST targets": two reports, both labels.
- "
just docs buildbuilds committed refs only": its sources were read from a/tmp/.../<commit sha>/checkout, so the plainsphinx-buildcomparison was used. AGENTS.md's file list now matches.rumdl.toml'sinclude. No other doc describes the lint file set or the removedrumdl check .agents/skillsstep.- Documentation reader: the remaining lowercase
pyarrow/polarsin the docs are code, URLs or import statements. Link URLs and{ref}targets are unchanged, andheading_anchors = 0, so no heading-slug anchor depends on the# pandastext. - Contributor/operator:
just docs format(rumdl check --fix) now rewrites the listed names in new prose. The disable comments keep it from rewriting the three labels.
Corrections made to the PR body:
- It now states that
docs/pandas.md's H1 change renames the page in the navigation. - It now marks as not verified the issue's premise that the workflow's
**.mdfilter triggers on a skills-only PR. Add shared development and review skills for Codex and Claude Code #778, the only earlier skills-only change, also touchedAGENTS.md, and this PR touches root files, so its own run cannot show this either.
| "scripts/**/*.md", | ||
| "cloudformation/**/*.md", | ||
| "/*.md", | ||
| ".agents/skills/**/*.md", |
There was a problem hiding this comment.
Independent review (relayed result; static review)
- Reviewer: Codex CLI 0.166.0 (
codex exec --sandbox read-only), modelgpt-6-astra, session01a1b461-da50-7af3-8709-c02ec9404044 - Base:
2a60ecc1f2a7a6bd0d9293525a41ea0d642a0082 - Head:
6cb01956bb79e540567632677c463c825f151cd7 - Package: a detached snapshot of the head, the literal diff, and repository conventions. The prompt left out the PR number, PR description, commit messages and self-review findings.
- Constraints: read-only; no edits, builds, tests, commits, pushes or GitHub access. Read-only
rumdlchecks were allowed. - After the review, the snapshot and the PR worktree were both clean and still at the head.
Result: CLEAN
Reviewer output:
Covered all 20 changed files: rumdl configuration and file discovery; documentation meaning, identifiers, links, MyST targets, headings and tables; related instructions and CI; and license-checker behavior and remaining test coverage.
CLEAN
- rumdl 0.3.2 passes all 30 selected files with caching disabled and configuration warnings treated as errors. The include change adds exactly four canonical skill files and excludes no previously selected files.
- MD044 recognizes the configured options and preserves code spelling. Removing the three suppression comments in stdin-only lint checks produces exactly the intended lowercase-target violations. Dropping MD043 is consistent with its previously empty heading requirements.
- Documentation edits preserve identifiers, option values, link destinations and reference targets. No introduced meaning or structural defects, or stale related instructions, were found.
- No
.jsoncfiles or dangling references remain. The deleted test row covered the removed syntax; retained formats and the fallback remain represented in existing tests.
No actionable pre-existing issues were identified within scope.
Validation was read-only inspection and permitted rumdl checks. No builds, tests, edits or GitHub access occurred; rendered-output assessment was static.
WHAT
Closes the three configuration gaps left by the rumdl migration.
.rumdl.tomlincludes.agents/skills/**/*.md, sojust docs lintand the Docs Lint workflow check the agent skills. The separaterumdl check .agents/skillsstep in the development workflow skill is removed, and the list inAGENTS.md(CLAUDE.md) names the skills..jsoncentry ofscripts/check_license_headers.pyand its test row are removed; no tracked.jsoncfile remains.names = ["PyAthena", "Athena", "SQLAlchemy", "fsspec", "Polars", "PyArrow", "pandas"],code-blocks = falseandwhole-words = true, and MD043 is dropped fromenablewith a note.The docs are updated to pass MD044:
pyarrow→PyArrow,polars→Polars,Pandas→pandas);pyarrow.Table,polars.DataFrame,polars.concat),pola-rs/polars#Nreferences, SQLAlchemy dialect/driver/schema names in the dialect tables, and theengineoption values ofPandasCursorare now code;(pyathena)=,(polars)=and(sqlalchemy)=are preceded by<!-- rumdl-disable-next-line MD044 -->, because rumdl 0.3.2 applies MD044 to MyST target lines.The H1 of
docs/pandas.mdbecomespandas, so the page title in the navigation changes from "Pandas" to "pandas".whole-words = truekeeps MD044 from matching names inside identifiers such asAWS_ATHENA_S3_STAGING_DIR.Inline code and code blocks are exempt, so
pip install PyAthena[Pandas],engine="pyarrow"and import paths are unchanged.WHY
Closes #1368.
The skills were not linted by CI, the
.jsoncentry had no files, and MD043/MD044 were enabled without configuration, so they never reported anything.For item 3, the maintainer chose to configure MD044, including the package names, over dropping it.
With only the first four names, MD044 reports nothing but the MyST targets; MD043 has no heading structure shared by the docs to configure.
TEST
Tested commit: 6cb0195.
mise exec -- rumdl check .(rumdl 0.3.2): no issues in 30 files, including the four.agents/skillsfiles.just lint: passed.uv run --locked python -m pytest scripts/tests/ -q: 111 passed.uv run sphinx-build -b html docs <out>on this branch and onorigin/master(2a60ecc): the same warnings apart from paths and line numbers, andindex.html,polars.htmlandsqlalchemy.htmlkeep thepyathena,polarsandsqlalchemyanchors.just docs build(sphinx-multiversion) builds committed refs only, so it was not used to check the working tree.**.mdpath filter triggers on a PR that changes only.agents/skillsfiles, as the issue states. The only earlier skills-only change (Add shared development and review skills for Codex and Claude Code #778) also changedAGENTS.md, and this PR changes root files too.🤖 Generated with Claude Code