Quickstart: OSS Fork Packaging Hooks
Stock path (no registration)
1. Install spec-kitty-cli from public PyPI. 2. Confirm --version still labels stock CLI and upgrade checks hit public PyPI. 3. Regression tests in this mission must pass without any entry points registered.
Packager Phase 1 (identity + provider)
In the fork’s pyproject.toml:
[project]
name = "acme-spec-kitty-cli"
[project.entry-points."spec_kitty.cli_package"]
main = "acme_spec_kitty_dist:PACKAGE_NAME"
[project.entry-points."spec_kitty.upgrade_provider"]
acme = "acme_spec_kitty_dist:AcmeSimpleIndexProvider"
Thin module acme_spec_kitty_dist.py:
PACKAGE_NAME = "acme-spec-kitty-cli"
class AcmeSimpleIndexProvider(SimpleIndexProvider):
def __init__(self) -> None:
super().__init__(index_url="https://example.invalid/simple/", package_prefix="acme_spec_kitty_cli")
Build/upload as today — do not overlay src/specify_cli/**.
Packager Phase 2 (full profile)
Prefer a single profile entry point that sets package aliases, index URLs, freshness, and disable_public_pypi_notifier=True.
Validation checklist
- □ Stock tests green with no entry points
- □ With fake entry points, session-presence refresh calls provider for fork package name
- □ Remediation argv includes
--index-urlwhen profile sets it and still passes CHK028 - □ Public notifier suppressed when flag set
- □ Docs guide linked from upgrade-cli guide