ekp/postmortem/20260728-release-governance.md
Kinneyzhang fd1210e557 fix: close repository audit findings
Complete task002 through task016 across cache correctness, editor lifecycle, C boundaries, build and release governance, dictionary provenance, performance, interactive workflows, tests, documentation, and final cleanup.
2026-07-28 22:43:10 +08:00

44 lines
1.7 KiB
Markdown

# Release Governance Has Two Boundaries
## Context
The repository described `.phrase` as its decision source of truth while
ignoring that directory. CI used mutable action refs and did not exercise
Windows, although the project documents Windows module support. Package,
C ABI, changelog, local tag, remote tag, CI, and artifacts were checked by
separate informal steps.
## Decision
Repository-local invariants belong to an executable static gate:
version pairs, dated changelog state, immutable CI action refs, platform
coverage, and tracked decision records. Remote and artifact facts belong to
an explicit release checklist because they require credentials and the exact
reviewed release commit.
The gate does not infer that a local tag was published or that remote CI ran.
Those claims must be verified against the remote during an actual release.
## Alternatives
- A large release framework was rejected: it would add a dependency and more
policy than this small package needs.
- Treating `.phrase` as disposable local state was rejected because the
repository workflow already makes task, issue, decision, and change records
authoritative.
- Floating major action tags were rejected because their executed bytes can
change without a repository diff.
## Consequences
CI updates now require an intentional SHA change with the readable upstream
tag retained in a comment. Windows gets an Elisp baseline even when the
optional C toolchain is unavailable. Actual publishing remains a distinct,
credentialed operation and is never implied by the local gate.
## Rollback
Revert the gate, workflow, release guide, and `.gitignore` decision together.
Restoring only floating refs or ignored decision records would recreate the
same split-brain process.