fix(release): gate channel and distribution acceptance
This commit is contained in:
@@ -126,6 +126,9 @@ $releaseApprovalManifest = Get-Content -Raw -Encoding UTF8 -LiteralPath $release
|
||||
if ([string]$releaseApprovalManifest.candidateSha256 -ne $contentSha256) {
|
||||
throw "Release approval candidate hash mismatch: $($releaseApprovalManifest.candidateSha256)"
|
||||
}
|
||||
if ([string]$releaseApprovalManifest.expectedApkSignerSha256 -ne ([string]$evidence.app.signerSha256).ToLowerInvariant()) {
|
||||
throw "Release approval APK signer mismatch: $($releaseApprovalManifest.expectedApkSignerSha256)"
|
||||
}
|
||||
& node (Join-Path $projectRoot 'scripts\verify-aug1-formal-content.mjs') $releaseApprovalPath | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw 'Release approval structure audit failed.'
|
||||
@@ -134,8 +137,11 @@ $approvedScenarioCount = @($releaseApprovalManifest.scenarioApprovals.PSObject.P
|
||||
Where-Object { [string]$_.Value.status -eq 'APPROVED' }).Count
|
||||
$approvedQuestionCount = @($releaseApprovalManifest.policyQuestionApprovals.PSObject.Properties |
|
||||
Where-Object { [string]$_.Value.status -eq 'APPROVED' }).Count
|
||||
$approvedChannelCount = @($releaseApprovalManifest.channelApprovals.PSObject.Properties |
|
||||
Where-Object { [string]$_.Value.status -eq 'APPROVED' }).Count
|
||||
$approvedSignoffCount = @($releaseApprovalManifest.signoffs.PSObject.Properties |
|
||||
Where-Object { [string]$_.Value.status -eq 'APPROVED' }).Count
|
||||
$distributionApprovalStatus = [string]$releaseApprovalManifest.distributionApproval.status
|
||||
|
||||
$goNoGoCandidates = @(Get-ChildItem -LiteralPath (Join-Path $projectRoot 'docs') -File -Filter '*Android*Go-No-Go-20260728.md')
|
||||
if ($goNoGoCandidates.Count -ne 1) {
|
||||
@@ -261,7 +267,7 @@ try {
|
||||
'',
|
||||
'Recheck the bundled disabled content candidates with `node operations/verify-aug1-content-candidates.mjs aug1-life-advisor-content-candidates-v0.1.json`. Complete `operations/business-content-and-five-channel-signoff.md` before enabling content or binding handlers.',
|
||||
'',
|
||||
'Audit business evidence with `node operations/verify-aug1-formal-content.mjs aug1-release-approval.json`. The strict command and `operations/verify-aug1-release-readiness.sh --execute` must pass before the final Go decision; the latter is read-only and verifies fixed-code mode, two active handlers per channel, and immutable production scenario snapshots.',
|
||||
'Audit business evidence with `node operations/verify-aug1-formal-content.mjs aug1-release-approval.json`. The strict command and `operations/verify-aug1-release-readiness.sh --execute` must pass before the final Go decision; the latter is read-only and verifies fixed-code mode, formal content, per-channel access/reply evidence, two active handlers per channel, immutable production scenario snapshots, and controlled-distribution approval.',
|
||||
'',
|
||||
'The fixed-code authenticated smoke is bundled as `operations/verify-aug1-authenticated-production.sh`. It requires the explicit `--execute` flag, selects an existing eligible APP identity without printing it, never enables or sends real SMS, and does not submit business records.',
|
||||
'',
|
||||
@@ -281,7 +287,7 @@ try {
|
||||
'- Production schema: 64/64 and runtime schema bootstrap disabled/default.',
|
||||
'- Production GET-only route probe: 20/20 (`1x200`, `6x401`, `13x405`).',
|
||||
'- Separate fixed-code authenticated smoke passed request/login, read-only business routes, logout, old-token rejection and re-login; application logs confirmed that no real SMS was sent.',
|
||||
"- Formal approval audit: $approvedScenarioCount/5 scenarios, $approvedQuestionCount/30 policy questions, $approvedSignoffCount/5 owner sign-offs.",
|
||||
"- Formal approval audit: $approvedScenarioCount/5 scenarios, $approvedQuestionCount/30 policy questions, $approvedChannelCount/5 channel acceptances, $approvedSignoffCount/5 owner sign-offs, distribution $distributionApprovalStatus.",
|
||||
'- Strict August 1 readiness is expected to fail closed until formal evidence and real channel handlers are complete.',
|
||||
'- Backend normalized AIHR module remains mismatched until an authorized deploy.',
|
||||
'- Overall result: **No-Go** pending the manual and authorization gates in `operations/go-no-go.md`.'
|
||||
@@ -297,7 +303,9 @@ try {
|
||||
"- Policy-question candidates: $($evidence.contentCandidates.policyQuestionCandidates)",
|
||||
"- Formally approved scenarios: $approvedScenarioCount/5",
|
||||
"- Formally evidenced policy questions: $approvedQuestionCount/30",
|
||||
"- Approved direct-channel acceptances: $approvedChannelCount/5",
|
||||
"- Owner sign-offs: $approvedSignoffCount/5",
|
||||
"- Controlled-distribution approval: $distributionApprovalStatus",
|
||||
'',
|
||||
'Candidates are for business review only. Do not import, enable or count them toward August 1 acceptance until formal sources and item-level sign-off are complete.',
|
||||
'',
|
||||
@@ -363,7 +371,9 @@ try {
|
||||
formalContentVersion = [string]$releaseApprovalManifest.formalContentVersion
|
||||
approvedScenarios = $approvedScenarioCount
|
||||
approvedPolicyQuestions = $approvedQuestionCount
|
||||
approvedDirectChannels = $approvedChannelCount
|
||||
approvedOwnerSignoffs = $approvedSignoffCount
|
||||
controlledDistributionStatus = $distributionApprovalStatus
|
||||
}
|
||||
operations = @($operationSources.Keys)
|
||||
manualGatesRemaining = @($evidence.manualGatesRemaining)
|
||||
|
||||
Reference in New Issue
Block a user