Release capability readiness and go/no-go model
This document is the authoritative program-level release-readiness view for Copy GitHub Repository. It answers whether the capabilities targeted by a release are sufficiently implemented, evidenced, documented, secured, and dispositioned to ship.
It does not redefine product behavior, test semantics, security controls, support policy, or publication mechanics. Those remain authoritative in product-contract.md, product-model.md, quality-strategy.md, security-architecture.md, support-policy.md, versioning.md, and publishing.md.
A mutable main-branch matrix is planning evidence only. A real go/no-go decision must be bound to one exact immutable release candidate commit/tag/artifact identity.
Decision authority
Release-readiness authority follows governance.md. The current primary maintainer owns the project go/no-go decision unless maintainership changes are explicitly recorded.
That authority does not create independent review evidence. Adopting organizations remain responsible for their own approval and risk-acceptance process.
Scope classifications
Every capability targeted by a release uses one of these scope states:
- Required — must be release-ready or explicitly covered by an accepted limitation before go/no-go can be
GO. - Optional — may ship when ready but does not block the release when deliberately omitted.
- Deferred — intentionally moved to later work and excluded from the release contract.
- Unsupported — explicitly outside the release’s supported product scope.
A capability must never be called optional merely because its implementation or evidence is incomplete.
Evidence and readiness states
Keep these states distinct:
- Not started — no accepted implementation/evidence exists.
- Implemented — product behavior exists in source.
- Automatically tested — deterministic automated evidence protects the relevant contract.
- E2E-capable — a controlled live GitHub harness exists where external behavior requires it.
- Live-validated for RC — the exact release candidate was actually exercised and the evidence record identifies that candidate.
- Documented — applicable user/maintainer/reviewer guidance is current.
- Blocked — a required prerequisite, control, defect, or evidence item prevents release readiness.
- Accepted limitation — an incomplete expected item has an explicit release-specific rationale, residual risk, authority, and follow-up.
- Release-ready — all required evidence and dependencies for this exact release candidate are satisfied or explicitly accepted.
- Deferred / not in scope — deliberately excluded from this release.
Implemented, Automatically tested, E2E-capable, and Documented are evidence dimensions, not substitutes for Release-ready.
v0.1.0 capability scope
The stable capability IDs below come from product-model.md. This table is the current planning baseline, not a go/no-go record for a release candidate.
| Capability | v0.1.0 scope | Current repository evidence | RC live evidence | Current readiness treatment |
|---|---|---|---|---|
CAP-DISC Repository discovery/authentication |
Required | Implemented; automated discovery/auth/host contracts | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-PLAN Immutable source-state planning/preview |
Required | Implemented; automated stale-state and no-mutation contracts | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-SNAP Snapshot clean publication |
Required | Implemented; automated tests; live Snapshot E2E harness | Not yet recorded for an exact RC | Pending RC live evidence |
CAP-HIST FullHistory copy |
Required | Implemented; automated tests; live FullHistory E2E harness | Not yet recorded for an exact RC | Pending RC live evidence |
CAP-DEST Destination/archive-and-replace safety |
Required | Implemented; automated safety/recovery coverage | Not yet recorded for an exact RC | Pending RC evidence |
CAP-SAME Same-name archive-and-replace |
Required | Implemented; automated tests; live same-name E2E harnesses | Not yet recorded for an exact RC | Pending RC live evidence |
CAP-LFS Git LFS handling |
Required when approved content requires LFS | Implemented; automated tests; live LFS E2E harness | Not yet recorded for an exact RC | Pending RC live evidence when applicable |
CAP-SET Supported settings restoration |
Required | Implemented; automated tests; live settings E2E harness | Not yet recorded for an exact RC | Pending RC live evidence |
CAP-PROT Protection restoration/skipped semantics |
Required | Implemented; automated protection/status coverage | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-WIZ Guided wizard |
Required | Implemented; extensive unit/integration/presentation contracts | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-AUTO Scripted/non-interactive operation |
Required | Implemented; automated public/safety contracts | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-VERIFY Standalone/integrated verification |
Required | Implemented; automated Snapshot/FullHistory verification | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-EVID Provenance/reporting/recovery evidence |
Required | Implemented; automated report/recovery/provenance coverage | Pending exact-RC decision/evidence | Pending RC evidence |
CAP-DIST Install/update/uninstall/distribution |
Required | Implemented install/prerelease/release/uninstall/package contracts | Post-publication verification cannot exist before release | Pending release/publication evidence |
CAP-REL Packaging/publication integrity |
Required | Packaging/checksum/SPDX SBOM/GitHub attestation contracts implemented; independent signing remains #80 | Post-publication evidence pending | Pending #80 disposition and release execution |
The matrix does not claim that every Required capability needs an independent live E2E script. The release decision applies the live-evidence rules in quality-strategy.md and must explain when automated evidence is sufficient versus when real GitHub evidence is required.
v0.1.0 non-functional disposition from #115
Issue #115 coordinates release treatment of #109-#114. The disposition below is a planning-baseline decision for v0.1.0, not the final exact-release-candidate GO record. Final automated evidence still must cover the exact release candidate.
| Item | v0.1.0 disposition | Evidence / rationale | Residual limitation | Blocking treatment |
|---|---|---|---|---|
| #109 Native child-process timeout/cancellation | Required for v0.1.0 — implemented. Accepted limitation: no universal finite default timeout. | Centralized Invoke-CgrNativeCommand supports explicit finite timeout and explicit cancellation, distinct errors, captured streams, and best-effort process-tree termination. Cross-platform Quality Gate evidence was recorded on completion. |
The default remains System.Threading.Timeout::InfiniteTimeSpan; repository size, LFS volume, network, and GitHub latency did not justify an arbitrary universal duration. |
Not a release blocker provided the unbounded default is disclosed and no release material claims a universal hang-prevention SLA. |
| #110 GitHub API throttling/transient retry | Required for v0.1.0 — implemented. | Side-effect-free reads use bounded retry/backoff for recognized transient/rate-limit failures, while mutation calls remain single-attempt to avoid unsafe duplicate side effects. Deterministic adapter tests cover retry, Retry-After, exhaustion, fail-fast authorization errors, and mutation non-retry. |
External GitHub/network degradation can still exceed bounded policy; ambiguous mutation failures require state inspection rather than automatic replay. | Not a release blocker once exact-RC automated evidence passes. |
| #111 Large-repository/resource characterization | Required characterization completed; accepted limitation: no supported hard maximum or performance SLA is adopted. | Repeatable history/ref/content/LFS fixtures, local measurements, and a live GitHub baseline were recorded. The evidence established meaningful disk amplification for content/LFS workloads but did not justify a universal repository/history/ref/LFS limit. | Peak memory remains Unknown unless measurement includes the relevant PowerShell/Git/gh/Git LFS child-process tree. Characterized timings and sizes are observations, not guarantees. |
Not a release blocker. v0.1.0 must not claim arbitrary size/history/LFS maxima or completion-time SLAs. |
| #112 Local disk/temp resource preflight | Required for v0.1.0 — implemented. | A defensible known lower-bound shortage fails before GitHub mutation. Additional headroom is advisory, and unknown capacity does not become false precision. Deterministic tests protect insufficient-capacity handling. | Exact future workspace/LFS consumption cannot always be predicted from remote metadata; later local exhaustion remains possible and then normal recovery semantics apply. | Not a release blocker once exact-RC automated evidence passes. |
| #113 Repeated-invocation retry/idempotency | Required for v0.1.0 — implemented and cross-platform validated. | The retry contract distinguishes pre-mutation retry from post-mutation recovery, prevents silent reuse/overwrite of archive or replacement identities, and has deterministic integration coverage. Quality Gate run 32101312190 passed the implementation on Windows, macOS, and Ubuntu. |
Concurrent multi-writer coordination is not provided; post-mutation retry still requires inspection of recovery evidence/current GitHub state. | Not a release blocker. Blind replay after ambiguous mutation remains unsupported behavior. |
| #114 Cross-platform interruption/signal handling | Required for v0.1.0 — implementation complete; final cross-platform validation pending. Accepted limitation: raw Ctrl+C and hard process/session termination are host/OS dependent. | The contract distinguishes explicit controlled cancellation from terminal interruption and hard termination, preserves the pre-/post-mutation boundary, attempts recovery reporting when PowerShell remains capable, and adds deterministic interruption integration tests. | Signal propagation, whether catch/finally completes during shutdown, and hard-termination cleanup cannot be normalized across Windows/macOS/Linux. Absence of a recovery file after abrupt termination does not prove no mutation occurred. | Currently pending validation, not an architectural release blocker. It becomes non-blocking when the final cross-platform Quality Gate confirms the deterministic contract; a failing gate is a blocker until corrected. |
#115 release conclusion
For v0.1.0, #109-#113 do not present an undispositioned non-functional blocker. Their implemented controls and residual limitations are suitable for the planned release scope as long as the exact release candidate retains passing automated evidence and documentation does not overstate guarantees.
#114 also does not require inventing portable raw-signal behavior that the host/OS cannot guarantee. Its unavoidable low-level signal differences are an accepted limitation. However, the new deterministic interruption contract and tests still require final cross-platform Quality Gate confirmation before #114 and #115 can be considered fully complete.
The accepted limitations above do not authorize broader claims. In particular, v0.1.0 does not promise a finite universal native-command timeout, a supported hard repository-size maximum, a fixed completion-time SLA, guaranteed recovery-file creation after hard termination, or automatic rollback/replay after ambiguous mutation.
Current cross-cutting v0.1.0 readiness items
The following items must remain visible before a GO decision for v0.1.0:
| Item | Current state | Required readiness treatment |
|---|---|---|
| Repository security baseline #79 | Open; live owner-side hardening/verification remains | Must be satisfied or explicitly accepted with release-specific residual risk; the release must not claim a fully hardened repository while open. |
| Independent publisher signing #80 | Open | Must be implemented or explicitly accepted as a limitation with compensating checksum/SBOM/GitHub-attestation evidence and rationale. |
| Native timeout/cancellation #109 | Closed/completed | Required control implemented; accepted limitation is the deliberate InfiniteTimeSpan default. Carry that limitation into exact-RC review. |
| API throttling/transient retry #110 | Closed/completed | Required control implemented; exact-RC automated evidence still required. |
| Large-repository characterization #111 | Closed/completed | Characterization completed; accepted limitation is no supported hard maximum/SLA and memory remaining Unknown. |
| Disk/temp preflight #112 | Closed/completed | Required control implemented; exact-RC automated evidence still required. |
| Repeated-invocation/idempotency #113 | Closed/completed | Required control implemented and validated; exact-RC evidence still required at release time. |
| Interruption/signal handling #114 | Open; implementation complete, final cross-platform validation pending | Required deterministic contract must pass the final Quality Gate; host/OS raw-signal differences remain an accepted limitation. |
| Non-functional readiness coordination #115 | Open pending #114 final validation | Dispositions are recorded above; close after final cross-platform evidence confirms #114/#116 state. |
| Resilience traceability #116 | Open; canonical SCN-* integration implemented, final validation pending |
Final Quality Gate must confirm product-model/quality-strategy contracts. |
| Release/deployment runbook #106 | Open | Must be implemented or explicitly dispositioned before performing the stable publication workflow. |
| Exact release-candidate evidence | Not yet applicable on mutable main |
Required for the actual go/no-go record. |
An open issue is not automatically a release blocker. The purpose of this section is to prevent unresolved expected work from disappearing from the release decision.
Capability dependency rules
Readiness rolls up conservatively:
- A capability cannot be
Release-readywhile a required prerequisite isBlockedor undispositioned. CAP-SNAP,CAP-HIST,CAP-DEST, andCAP-SAMEdepend onCAP-PLAN, relevant verification, and evidence/recovery behavior.CAP-LFSis required for a release-candidate scenario only when approved content requires LFS; absence of LFS in a fixture does not validate the LFS path.CAP-SETandCAP-PROToccur only after required content verification and must not make a failed content copy appear successful.CAP-DISTdepends on the exact packaged version and distribution channel under review.CAP-RELdepends on readiness approval for the exact candidate, package/integrity evidence, and the publication controls required by the release runbook.- A dependent capability cannot become ready merely because its own row is green while a required dependency remains unresolved.
Accepted limitations and exceptions
An accepted limitation is a release-specific decision, not a permanent waiver. Record all of the following:
- exact release candidate commit/tag/artifact identity;
- affected capability/use case/scenario;
- incomplete control/evidence item;
- why release is still acceptable;
- user/security/operational consequence;
- residual risk;
- compensating control or evidence, if any;
- current decision authority;
- follow-up issue/reference;
- effect on support/security/release messaging; and
- point at which the limitation expires or must be reconsidered.
Ordinary incomplete work remains incomplete. Do not convert it into an exception simply to obtain a GO result.
Exact release-candidate go/no-go record
Before tagging/publishing, create or update a release-specific record containing at least:
| Field | Required value |
|---|---|
| Version | Exact SemVer release version |
| Candidate commit | Exact 40-character commit SHA |
| Candidate tag | Proposed/final immutable tag |
| Artifact identity | Expected package/release filename and digest once built |
| Decision | GO, NO-GO, or PENDING |
| Decision timestamp | UTC timestamp |
| Decision authority | Current authority from governance.md |
| Quality Gate evidence | Exact successful run(s) for the candidate |
| Required live E2E evidence | Exact scenarios/runs/results, or explicit rationale when not required |
| Security/readiness disposition | #79/#80 and any other material control status |
| Non-functional disposition | #115 outcome for #109-#114 and mapped #116 scenarios where required |
| Known limitations | Release-specific accepted limitations/residual risks |
| Publication prerequisites | #106/runbook and publishing environment/credential readiness |
| Final result | Why the candidate is or is not authorized for tagging/publication |
The decision applies only to the recorded candidate. A later commit requires a new readiness review; approval of an earlier SHA must never be inferred to cover mutable main.
Release decision algorithm
A v0.1.0 decision can be GO only when:
- every
Requiredcapability is implemented and documented; - automated evidence required by the quality strategy passes for the exact candidate;
- required live GitHub evidence for the exact candidate is present;
- required security, integrity, support, and non-functional items are satisfied or have explicit accepted-limitations records;
- no undispositioned release blocker remains;
- package/release metadata is internally consistent;
- publication prerequisites/runbook state are ready; and
- the current decision authority records
GOagainst the exact candidate identity.
Otherwise the correct result is PENDING or NO-GO, not an optimistic partial-ready label.
Relationship to release execution
This document owns whether a candidate is ready to release. The release/deployment runbook tracked by #106 owns how an approved candidate is tagged, packaged, published, verified, and recovered across GitHub Release, PowerShell Gallery, and documentation deployment.
versioning.md and publishing.md remain authoritative for their current detailed contracts. This readiness model must reference their evidence rather than duplicate or weaken them.
Related authorities
- Product goals/capabilities/use cases/scenarios:
product-model.md - Product behavior/invariants:
product-contract.md - Quality and live-evidence semantics:
quality-strategy.md - Non-functional gaps/limits:
non-functional-requirements.md - Project decision ownership:
governance.md - Security architecture:
security-architecture.md - Repository security baseline:
repository-security-baseline.md - Release SBOM/provenance:
release-sbom.md - Support lifecycle:
support-policy.md - Organizational assurance entry point:
software-assurance.md - Versioning/publication:
versioning.md,publishing.md