Skip to content

Freeze legacy into _legacy.py, reorganize tests, ship 9.1.0 - #198

Merged
un33k merged 5 commits into
masterfrom
refactor/split-legacy-frozen
Sep 18, 2026
Merged

un33k merged 5 commits into
masterfrom
refactor/split-legacy-frozen

Conversation

@un33k

@un33k un33k commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Summary

Architecturally freezes the legacy algorithm into a dedicated module, reorganizes the test suite, and ships the reviewed contributor fixes as 9.1.0. Legacy output is verified byte-for-byte unchanged against the pre-split baseline.

Structure

  • slugify/_legacy.py (new): the legacy pipeline moved into a dedicated frozen module. Public slugify() is a thin dispatcher — algorithm='legacy' (default) calls the frozen implementation; algorithm='modern' runs the modern pipeline.
  • tests/: the original upstream legacy suite is preserved unchanged as tests/test_legacy.py (byte-identical to pre-Reject bool max_length and non-str separator #196 upstream), alongside tests/test_release.py. pyproject/MANIFEST.in/tox.ini updated to the tests/ layout.
  • DOJO.md/README: document the legacy-frozen policy; ask contributors not to open PRs that change legacy output.

Shipping in 9.1.0 (modern-only unless noted)

Verification

  • pytest tests: 116 passed, 1 skipped, 105 subtests
  • Frozen 2,688-case legacy differential passes; pre-split test.py passes against current code
  • mypy clean; configured pycodestyle and flake8 pass

🚀 Generated with Dojo ⛩️

Move the legacy slug pipeline into a dedicated frozen module and make the
public slugify() a thin dispatcher: algorithm='legacy' (default) calls the
frozen _legacy implementation, algorithm='modern' runs the modern pipeline.
Relocate the existing up-front TypeError validation for bool/non-int
max_length and non-str separator (from #196) into the modern path only, so
legacy output is unchanged while modern keeps rejecting invalid types.

🚀 Generated with [Dojo](https://heydojo.ai) ⛩️
Move the test suite into tests/: the original upstream legacy suite becomes
the frozen tests/test_legacy.py (contents unchanged), mirroring the _legacy.py
code split, alongside tests/test_release.py and the add_uppercase test. The
modern-only bool/separator validation test moves to the modern suite. Update
pyproject testpaths, MANIFEST.in, and tox commands to the tests/ layout.

🚀 Generated with [Dojo](https://heydojo.ai) ⛩️
Record that legacy is architecturally frozen (slugify/_legacy.py and
tests/test_legacy.py) and that all new work targets algorithm='modern'.
Add a contributor note in the README not to open PRs that change legacy
output.

🚀 Generated with [Dojo](https://heydojo.ai) ⛩️
Bump to 9.1.0. Modern-only: decode uppercase &#X..; hex references
(Rupayon Haldar, #195); preserve fitting post-replacement output during
truncation (emme1t, #193); relocate up-front argument type validation to
the modern path (Jon Bailey, #196). Fix add_uppercase_char atomicity
(Cristian Ramirez, #194). Legacy output unchanged.

🚀 Generated with [Dojo](https://heydojo.ai) ⛩️
Update tools/check_dist.py to assert version 9.1.0 and the tests/ sdist
layout (tests/test_legacy.py, tests/test_release.py). Add coverage for
reachable branches in the split modules via the public API, restoring the
97% coverage gate without changing legacy behavior.

🚀 Generated with [Dojo](https://heydojo.ai) ⛩️
@un33k
un33k merged commit 3f9e9b7 into master Sep 18, 2026
1 check passed
@coveralls

Copy link
Copy Markdown

Coverage Status

Coverage is 98.758%refactor/split-legacy-frozen into master. No base build found for master.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants