AGENTS.md@infrastructure/publishing/release · git:20260908.26754c4 · 2026-09-08 · sha256 acefc288d96c4ffc

AGENTS.md@infrastructure/publishing/release git:20260908.26754c4A

Immutable. This exact content is served forever at /api/v1/blob/acefc288d96c4ffc.

# `infrastructure/publishing/release/`

Release receipt/pairing/workflow family, subpackaged out of the flat
`infrastructure.publishing` namespace by RENDERING-LAYERING-1 phase 2b.

## Module graph

| File | Role |
| --- | --- |
| `release_receipts.py` | Versioned command, release-authority, coverage-gap, and clean-checkout receipts (the `REHEARSAL_RECEIPT_TOKEN` protocol lives here) |
| `release_pairing.py` | Structural GitHub-Zenodo pairing validation (`validate_release_pairing`, checklist formatters) |
| `release_workflow.py` | Unified GitHub + Zenodo + DOI + re-render orchestration (`run_release_workflow`, `ReleaseRequest`) |
| `release_workflow_zenodo.py` | Reserve-first DOI phase + `publish_zenodo_for_release` (leaf of the release workflow) |
| `release_cli.py` | Stable argument parser and credential-source resolution for `scripts/publish/publish_project_release.py` |

## Public API

Package-level re-exports live in `infrastructure/publishing/__init__.py`
(receipt classes and builders). The historical flat paths
(`infrastructure.publishing.release_receipts`, `.release_workflow`, ...) remain
as silent re-export shims; new code imports the nested paths.

## Invariants

- Cross-family imports are absolute: the workflow pulls metadata building
  blocks from `infrastructure.publishing.metadata.metadata_from_config`.
- Receipts are deterministic (schema-versioned; digests exclude timestamps).
- No rendering-layer imports: the layering guard
  (`tests/infra_tests/rendering/test_layering.py`) runs with an empty
  allowlist; this package must never be imported from `infrastructure/rendering`.