Give the project a distribution name it could actually be released under - #81
Merged
Merged
Conversation
pyproject.toml declared name = "perimeter", which on PyPI is YunoJuno's Django access-control middleware. Nothing here has been published and there is no release workflow, so nothing broke, but the declared identity was one no upload could have used and a reader who typed it got a Django package. The distribution is now perimeter-wildfire. The import name and the package directory are unchanged. The README now says there is nothing to install rather than leaving the collision to be discovered at a shell.
Owner
Author
|
Name approved: The domain qualifier over Import name unchanged; only the distribution name moves. Nothing is published and there is no release workflow — the README now says so plainly rather than implying a future Marking ready. Prepared with AI assistance; reviewed before submission. |
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.
Draft on purpose: a distribution name is a public identity, and this one is yours to approve. Nothing here publishes, tags, or registers anything, and this repository still has no release workflow.
What was wrong
pyproject.tomldeclaredname = "perimeter". That name on PyPI is YunoJuno's Django access-control middleware — "Site-wide perimeter access control for Django projects", version 0.14 — verified again today (HTTP 200, authorYunoJuno).Nothing here has ever been published and there is no publish workflow, so nothing broke. But the declared identity was one that could never have accepted an upload, and a reader who did the obvious thing with a repository called
perimetergot a Django middleware instead of a wildfire coverage measurement. The README described the served pages and the offline build and never said, in words, that there was nothing to install.What changed
Three things, and none of them touch the measurement code.
The distribution name is now
perimeter-wildfire. Free on PyPI when chosen (checked 2026-09-07, HTTP 404). The import name and the package directory are unchanged:import perimeter,src/perimeter/,python -m perimeter.acquire. There is no console script, so nothing user-visible moves at all.Why this name. Five repositories here already hit this collision and solved it the same way — keep the word, add a qualifier:
cairn-assistant,gauntlet-evals,nearmiss-safety,ledger-archive,plumbline-eval.perimeter-wildfirequalifies by domain, the waynearmiss-safetydoes, and that is the reading this repository needs specifically: the base word is the half that collides with an access-control package, so a qualifier that also reads as security (perimeter-checks,perimeter-coverage) leaves a reader on a PyPI page still unsure which project they are looking at.perimeter-wildfirecannot be mistaken for the middleware.perimeter-coveragewas also free today if you prefer it; it is one string inpyproject.tomlplusuv lock, and the comment there says so in place.uv.lockregenerated (uv lock), which is the only other place the string appears.The README says what a cold reader needs and could not previously get. A new paragraph under Status: there is nothing to install, nothing has been published to a package registry, there is no release workflow to publish it with, and
pip install perimeteris somebody else's package. The Release & Versioning conformance row records the name decision beside the gap it belongs to.Verification
make lint,make format,make typecheck --strict,make audit: green.uv run pytest: 922 passed, 25 skipped (the skips are the Node/Playwright a11y gates, which needmake node-sync/make browser-sync; CI runs those).git hash-object uv.lock=b052b32d…; edited the lock's[[package]] nameback toperimeterso it no longer matched the manifest; re-hashed and asserted the hash moved to8536e5ed…;make lock-checkwent red —error: The lockfile at uv.lock needs to be updated, but --check was provided, exit 2. Restored, re-hashed tob052b32d…exactly,make lock-checkexit 0.tests/test_provenance.py::test_the_prose_carries_no_em_dashes[README.md]failed, because my new paragraph used an em dash. Fixed in its own commit.make audit:pip-auditnow reportsperimeter-wildfire … Dependency not found on PyPI and could not be audited, where before it skipped the local project silently. Exit code is unchanged (0) and the skip is honest — the project genuinely is not on any index. It is a more accurate message, not a new failure.What is still yours alone
Nothing in this branch needs anything from you except the name itself. For completeness, if this ever is packaged, the values PyPI's Add a pending publisher form would need are:
The missing workflow is the existing recorded gap in the Release & Versioning row, and this branch does not close it. A name that is free today is not reserved; registration is what reserves it.
Deliberately not touched
#76readspackage.json's0.0.0as version drift. That isperimeter-page-checks,"private": true, never published to npm and never intended to be; it is not this collision and nothing here changes it.Prepared with AI assistance; reviewed before submission.