IMPORTANT: Developer documentation for the current development branch. This content is unreleased, may change without notice, and must not be treated as Buildish release documentation.
Codebase Layout
Production Source Tree
Production release code lives in src/buildish_release_tooling/release/. The CLI and documented
file contracts are supported integration surfaces; Python module paths are internal.
Provider-neutral core
core/config.pydefines component identity, source policy, lifecycle, candidate policy, artifacts, signing, publication composition, and tags.core/models.py,core/state.py, andcore/naming.pyderive provider-neutral release identity and state.core/manifests.pydefines manifest references and promotion evidence.direct_release.py,candidate_release.py, andmanifests.pydefine stable lifecycle state and top-level manifests.
Foundation or hosting-provider fields must not be added to these modules merely because the first implementation needs them. Use an explicit adapter and typed extension point.
Hosting platforms and foundations
platforms/github/contains GitHub config, API models, refs, Releases, checks, text, lifecycle helpers, and commands.foundations/asf/contains ASF-named config, dist behavior, and manifests.signing/openpgp.pycontains the OpenPGP implementation independently of any foundation.
A future GitLab or Forgejo implementation belongs under platforms/. A future foundation policy
belongs under foundations/. Core orchestration may depend on an adapter interface or typed union,
but must not silently adopt one adapter’s vocabulary.
CLI orchestration
cli.pyregisters commands and normalizes arguments.commands/lifecycle.pyresolves direct, candidate, and promotion state.commands/release_publication.pyandcommands/rc_preparation.pyorchestrate bounded release steps.commands/vote_materials.pycreates optional vote packages.commands/artifact_registration.pyandartifact_registration/handle typed secondary artifacts.command_manifests.py,manifest.py, andsummary.pywrite machine and human outputs.
Commands should remain independently composable. They may create or revalidate one bounded unit of external state, but workflow policy and approval sequencing belong in component-owned workflows.
Verification
verification/ implements signed-source, secondary-artifact, reproducibility, inspection-bundle,
and report contracts. Artifact-kind implementations are split between artifact_registration/kinds/
and verification/secondary/; reproduction diagnosis lives under verification/inspection/.
Provider-specific release verification remains with its adapter. Generic manifest and promotion evidence remains in the core.
Harness
src/buildish_release_tooling/harness/ is a test-only workflow simulator. It runs synthetic scenarios
or checked-in GitHub workflows through act, using local shims and inspectable workspace state for
external mutations. It is validation evidence for workflow shape and command composition, not a
production release backend and not proof of GitHub Environment settings.
Placement rules
- Put deterministic identity and lifecycle rules in
core/. - Put GitHub, GitLab, Forgejo, or another host’s protocol and data under
platforms/<provider>/. - Put ASF or another foundation’s policy-specific fields and operations under
foundations/<foundation>/with explicit type names and discriminator values. - Put credentials in runtime integration, never authored config values.
- Add CLI flags in
cli.pyand bounded orchestration in the relevantcommands/module. - Update schemas, public contract docs, and tests together when a supported file contract changes.