Public proof
Free scan first. Paid apply pack second.
The included fixture repo starts with SQLAlchemy 2.0-breaking legacy patterns. The public repo shows the fit scan and report. The paid apply pack handles the documented rewrite path after checkout.
Fixture repo
fixtures/demo_repo
select([User.name])joinedload("addresses")join("addresses")update(..., whereclause=..., values=...)session.query(User).get(...)
Run the free scan
python -m sa20_pack.cli fixtures/demo_repo --report artifacts/demo-migration-report.json
What the scan finds
Supported candidates:
- select([User.name])
- session.query(User).get(user_id)
- joinedload("addresses")
- join("addresses")
- update(..., whereclause=..., values=...)
Paid-pack artifact trail
What the purchased ZIP proves
The paid workflow is still narrow and branch-first: it previews supported rewrites, applies only documented transforms, records validation results, and leaves unsupported work in the report instead of claiming a complete SQLAlchemy 2.0 migration.
Preview diff
- user = session.query(User).get(user_id) + user = session.get(User, user_id) - stmt = select([User.name]) + stmt = select(User.name)
Apply output
paid apply run files_changed: 4 transforms_applied: query_get, select_list_syntax, string_join, string_loader, dml_kwargs manual_review_findings: 0 report_written: migration-report.json
Validation result
validation summary python -m compileall fixtures/demo_repo ... passed python -m pytest fixtures/demo_repo/tests ... passed buyer_repo_validation: required before merge
Final manager report
final manager report Supported cleanup findings: 6 Manual-review findings: 0 Changed files: 4 Next step: review branch diff and run normal CI
Exact ZIP contents
sa20-pack-edge-case-pack.zip - paid cleanup CLI - preview/apply commands - supported rewrite table - JSON report schema - rollback checklist - manager summary template - license and support terms
Why this matters
The selling point is not only that the scan finds the work. It is that a team can prove fit before buying the apply pack, instead of paying first and discovering the repo is outside scope.