Rollout hygiene: run package doctests in CI, modernize packaging metadata, add .editorconfig - #1
Merged
Merged
Conversation
wads CI runs `pytest --doctest-modules` with no path argument, so collection is driven entirely by `testpaths`. With `testpaths = ["tests"]` the package's own doctests were never collected — CI reported green while doctesting nothing in `flaskstream2py/`. Adding the package dir takes collection from 1 item to 2: the `FlaskRequestReader` class doctest is now actually executed (verified locally, passes). Claude-Session: https://claude.ai/code/session_01VipiLaG4xy7WctqY9w2475
- license: deprecated `[project.license] text = ...` table -> PEP 639 SPDX string `license = "Apache-2.0"` (matches the Apache 2.0 LICENSE file), plus `license-files = ["LICENSE"]` so the licence ships in the wheel. No `License :: OSI Approved :: ...` classifier is added: hatchling >= 1.27 rejects a licence classifier coexisting with an SPDX expression. - classifiers: added an accurate set. Development Status 3 - Alpha (README calls this a WIP library, version 0.1.6); Python 3.10-3.12 to match `requires-python` and the CI matrix (3.13 is not tested, so it is not claimed); Framework :: Flask and Topic :: Internet :: WWW/HTTP reflect what the package actually is. - keywords: derived from the README and the public API (FlaskRequestReader, a stream2py SourceReader over an incoming Flask request body). - project.urls: added Documentation (the live GitHub Pages site), Repository and Issues alongside the existing Homepage. description, requires-python and readme were already present and accurate. Validated: all 11 classifiers checked against trove-classifiers, sdist+wheel build clean, `twine check` passes both. Claude-Session: https://claude.ai/code/session_01VipiLaG4xy7WctqY9w2475
Same file the wads templates ship and the rest of the fleet uses (copied verbatim from a healthy sibling repo). No existing files are reformatted. Claude-Session: https://claude.ai/code/session_01VipiLaG4xy7WctqY9w2475
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.
Hygiene pass from the fleet-wide wads repo-improvement rollout. This repo was
already on the modern uv-stub CI and green, so nothing here migrates or
restructures anything — it closes the metadata/config gaps that
python -m wads.repo_auditflagged, one dimension per commit.What changed
1.
testpaths— the real fix in this PRwads CI runs
pytest --doctest-moduleswith no path argument, so what getscollected is decided entirely by
testpaths. Withtestpaths = ["tests"], thepackage's own doctests were never collected — CI reported green while doctesting
nothing in
flaskstream2py/. That failure mode never announces itself.testpathsnow includes the package directory as well.Doctest collection, before → after:
The newly-collected item is
flaskstream2py/flask_request_reader.py::flaskstream2py.flask_request_reader.FlaskRequestReader(the class docstring's Flask-route example). It passes — verified locally and
confirmed in this branch's CI log:
No latent bug was surfaced by turning it on.
2. Packaging metadata (
[project])[project.license] text = "Apache-2.0"tablebecame the PEP 639 SPDX string
license = "Apache-2.0", matching the repo'sactual Apache License 2.0
LICENSEfile, pluslicense-files = ["LICENSE"]so the licence ships inside the wheel. Deliberately no
License :: OSI Approved :: ...classifier: hatchling ≥ 1.27 rejects a licenceclassifier that coexists with an SPDX expression.
trove-classifiers): DevelopmentStatus
3 - Alpha— the README calls this a WIP library and the version is0.1.6, so maturity is not overstated. Python
3.10/3.11/3.12only:requires-pythonis>=3.10and the CI matrix tops out at 3.12, so 3.13 isnot claimed as supported.
Framework :: Flask,Topic :: Internet :: WWW/HTTPandTopic :: Software Development :: Libraries :: Python Modulesdescribe whatthe package actually is;
Operating System :: OS Independentis backed by CIrunning the Windows job too.
SourceReaderthat reads an incoming Flask request body in chunks.Documentation(the live GitHub Pages site, verifiedreachable),
RepositoryandIssuesnext to the existingHomepage.description,readmeandrequires-pythonwere already present andaccurate; left as-is.
authorsis still empty and was left alone on purpose —the repo has more than one contributor, so populating it is the maintainer's
call, not a mechanical fix.
Verified locally:
uv buildproduces a clean sdist + wheel andtwine checkpasses both. The resulting wheel metadata carries
License-Expression: Apache-2.0andLicense-File: LICENSE.3.
.editorconfigAdded the standard fleet file (copied verbatim from a healthy sibling repo).
No existing file was reformatted.
Untouched on purpose
[tool.ruff]was already configured and is unchanged. No new tests, nopy.typed, no CHANGELOG, no code restructuring, no wholesale reformatting —all out of scope for this pass.
Verification
priv test-dependents flaskstream2py):baseline
1 suites: 1 pass, 0 fail→ final1 suites: 1 pass, 0 fail.No regression, and the final run is strictly stronger since it now includes
the package doctest.
—
success. Read Configuration ✅, Validation 3.10 ✅, Validation 3.12 ✅,Windows Tests ✅. Publish and Publish GitHub Pages correctly
skipped(branch build, not the default branch).
ruff check flaskstream2pyandruff format --check .are both clean.Left undone
skills/,.claude/skills/,flaskstream2py/data/skills/) — that is thewads-skillifydimension and wasout of scope here.
docsrc/conf.pytrips ruffD100when linting the repo root. Harmless: CIscopes
ruff checkto the package directory, so it never sees that file.authors = [], as noted above — needs a maintainer decision.[tool.wads.ci.publish]is enabled for this repo, so merging tomasterwillrun the publish job and push a new version of
flaskstream2pyto PyPI (currentpublished version: 0.1.6). Nothing in this PR changes the package's behaviour or
its dependencies — the only functional difference is that CI now executes one
more (passing) doctest. Merge when you are happy to ship a metadata-only release.
Opened by the rollout agent and deliberately left open for maintainer review.