{"apiVersion": "openeyes.nails.web.v1", "authorizedPreviewEnvelopeVerification": null, "deployEnabled": false, "deploymentCutoverApprovalEvidenceRequest": {"criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "localEvidenceDigest": "4cf1a834a278032b45af706583355c8a9591308c982a97e822a0650bc45a7d14", "network": false, "productionMutations": false, "referenceUriTemplate": "oss://nails-reviews/deployment_cutover_rollback_review/{evidenceId}.json", "requiredEvidence": [{"criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "evidenceId": "cloud_run_package_review", "localEvidenceDigest": "4cf1a834a278032b45af706583355c8a9591308c982a97e822a0650bc45a7d14", "localStatus": "block", "network": false, "productionMutations": false, "referenceUri": "oss://nails-reviews/deployment_cutover_rollback_review/cloud_run_package_review.json", "reviewerRole": "deployment-reviewer", "sourceCheck": "cloudRunPackageReview", "statusToSubmit": "approved"}, {"criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "evidenceId": "state_archive_plan", "localEvidenceDigest": "4cf1a834a278032b45af706583355c8a9591308c982a97e822a0650bc45a7d14", "localStatus": "block", "network": false, "productionMutations": false, "referenceUri": "oss://nails-reviews/deployment_cutover_rollback_review/state_archive_plan.json", "reviewerRole": "deployment-reviewer", "sourceCheck": "stateArchivePlan", "statusToSubmit": "approved"}, {"criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "evidenceId": "route_cutover_and_rollback_review", "localEvidenceDigest": "4cf1a834a278032b45af706583355c8a9591308c982a97e822a0650bc45a7d14", "localStatus": "external_authorization_required", "network": false, "productionMutations": false, "referenceUri": "oss://nails-reviews/deployment_cutover_rollback_review/route_cutover_and_rollback_review.json", "reviewerRole": "deployment-reviewer", "sourceCheck": "routeCutoverAndRollbackReview", "statusToSubmit": "approved"}], "reviewerRole": "deployment-reviewer", "statusToSubmit": "approved"}, "deploymentCutoverAuthorizationDossier": {"authorizationStatus": "external_authorization_required", "criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "dossierVersion": 1, "externalReviewChecks": ["activePointerReview", "routeCutoverAndRollbackReview"], "kind": "nails.deployment_cutover.authorization_dossier", "localArtifactReviewChecks": ["productionNoopBoundary"], "localArtifacts": {"cloudRunPackage": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "productionNoopBoundary": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "stateArchivePlan": []}, "localReviewReady": false, "network": false, "productionMutations": false, "requiredEvidence": ["cloud_run_package_review", "state_archive_plan", "route_cutover_and_rollback_review"], "reviewBoundary": "external_authorization_required_before_traffic_cutover", "reviewChecks": {"activePointerReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["active_pointer_review", "state_archive_plan", "rollback_checklist"]}, "status": "external_authorization_required", "story": "Active pointer changes must be reviewed with rollback/withdraw evidence before cutover."}, "cloudRunPackageReview": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job"], "presentArtifacts": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "requiredArtifacts": ["Dockerfile.public-web", "archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job", "infra/gcp/scripts/preflight_public_cloud_run.sh"]}, "status": "block", "story": "Cloud Run packaging and preflight scaffolds are present for deployment review."}, "productionNoopBoundary": {"evidence": {"missingArtifacts": [], "presentArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "requiredArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"]}, "status": "pass", "story": "Local deploy scaffold tests exist; this report itself performs no production mutation."}, "routeCutoverAndRollbackReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["route_cutover_and_rollback_review", "cloud_run_package_review"]}, "status": "external_authorization_required", "story": "Route cutover and rollback plan must be approved before production traffic changes."}, "stateArchivePlan": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"], "presentArtifacts": [], "requiredArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"]}, "status": "block", "story": "State archive and upload scaffolds are present for deployment review."}}}, "deploymentCutoverAuthorizationDossierDigest": "8b0459692a391cc5a3a2bd94b4a38703ec6228e0a9dde351fa4022dbf555c43a", "deploymentCutoverReviewEvidence": {"criterionId": "deployment_cutover_rollback_review", "deployEnabled": false, "deploymentCutoverAuthorizationDossierDigest": "8b0459692a391cc5a3a2bd94b4a38703ec6228e0a9dde351fa4022dbf555c43a", "evidenceVersion": 1, "kind": "nails.deployment_cutover.review_evidence", "localArtifacts": {"cloudRunPackage": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "productionNoopBoundary": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "stateArchivePlan": []}, "localReviewReady": false, "network": false, "productionMutations": false, "reportPath": "/api/web/v1/plugins/nails/deployment-cutover:review-report", "requiredEvidence": ["cloud_run_package_review", "state_archive_plan", "route_cutover_and_rollback_review"], "reviewChecks": {"activePointerReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["active_pointer_review", "state_archive_plan", "rollback_checklist"]}, "status": "external_authorization_required", "story": "Active pointer changes must be reviewed with rollback/withdraw evidence before cutover."}, "cloudRunPackageReview": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job"], "presentArtifacts": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "requiredArtifacts": ["Dockerfile.public-web", "archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job", "infra/gcp/scripts/preflight_public_cloud_run.sh"]}, "status": "block", "story": "Cloud Run packaging and preflight scaffolds are present for deployment review."}, "productionNoopBoundary": {"evidence": {"missingArtifacts": [], "presentArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "requiredArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"]}, "status": "pass", "story": "Local deploy scaffold tests exist; this report itself performs no production mutation."}, "routeCutoverAndRollbackReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["route_cutover_and_rollback_review", "cloud_run_package_review"]}, "status": "external_authorization_required", "story": "Route cutover and rollback plan must be approved before production traffic changes."}, "stateArchivePlan": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"], "presentArtifacts": [], "requiredArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"]}, "status": "block", "story": "State archive and upload scaffolds are present for deployment review."}}}, "deploymentCutoverReviewEvidenceDigest": "4cf1a834a278032b45af706583355c8a9591308c982a97e822a0650bc45a7d14", "kind": "nails.deployment_cutover_review", "links": {"deploymentCutoverApprovalLedgerConfirmedWrite": {"bodyFields": ["stateRoot", "deploymentCutoverReviewReport", "deploymentCutoverReviewReportDigest", "confirmationRecord"], "bodyTemplate": {"confirmationRecord": "<deployment cutover reviewer confirmation record>", "deploymentCutoverReviewReport": "<deployment-cutover:review-report response>", "deploymentCutoverReviewReportDigest": "<canonical_sha256_of_submitted_deployment_cutover_review_report>", "stateRoot": "<stateRoot>"}, "contractPath": "/api/web/v1/plugins/nails/deployment-cutover:approval-ledger-confirmed-write-contract", "deployEnabled": false, "method": "POST", "network": false, "path": "/api/web/v1/plugins/nails/deployment-cutover:approval-ledger-confirmed-write", "productionMutations": false, "requiresExternalReviewerConfirmation": true, "writesLocalState": true}, "onlinePilotLaunchClearance": {"bodyFields": ["deploymentCutoverReviewReport", "deploymentCutoverReviewReportDigest"], "bodyTemplate": {"deploymentCutoverReviewReport": "<deployment-cutover:review-report response>", "deploymentCutoverReviewReportDigest": "<canonical_sha256_of_submitted_deployment_cutover_review_report>"}, "contractPath": "/api/web/v1/plugins/nails/online-pilot:launch-clearance-contract", "deployEnabled": false, "method": "POST", "network": false, "path": "/api/web/v1/plugins/nails/online-pilot:launch-clearance", "productionMutations": false}, "onlinePilotReadinessContract": {"method": "GET", "network": false, "path": "/api/web/v1/plugins/nails/online-pilot:readiness-contract"}}, "localArtifacts": {"cloudRunPackage": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "productionNoopBoundary": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "stateArchivePlan": []}, "localReviewReady": false, "method": "GET", "network": false, "ok": true, "onlinePilotEvidence": {"evidenceType": "deployment_cutover_rollback_review", "externalAuthorizationStillRequired": true, "readinessContractPath": "/api/web/v1/plugins/nails/online-pilot:readiness-contract", "status": "local_deployment_scaffold_only"}, "pluginId": "nails", "productionMutations": false, "ready": false, "reviewChecks": {"activePointerReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["active_pointer_review", "state_archive_plan", "rollback_checklist"]}, "status": "external_authorization_required", "story": "Active pointer changes must be reviewed with rollback/withdraw evidence before cutover."}, "cloudRunPackageReview": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job"], "presentArtifacts": ["Dockerfile.public-web", "infra/gcp/scripts/preflight_public_cloud_run.sh"], "requiredArtifacts": ["Dockerfile.public-web", "archive/crochet_trend/runtime/infra/Dockerfile.pipeline-job", "infra/gcp/scripts/preflight_public_cloud_run.sh"]}, "status": "block", "story": "Cloud Run packaging and preflight scaffolds are present for deployment review."}, "productionNoopBoundary": {"evidence": {"missingArtifacts": [], "presentArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"], "requiredArtifacts": ["tests/test_public_cloud_deploy_scaffold.py", "tests/test_gcp_public_site_infra_scaffold.py"]}, "status": "pass", "story": "Local deploy scaffold tests exist; this report itself performs no production mutation."}, "routeCutoverAndRollbackReview": {"evidence": {"deployEnabled": false, "network": false, "requiredEvidence": ["route_cutover_and_rollback_review", "cloud_run_package_review"]}, "status": "external_authorization_required", "story": "Route cutover and rollback plan must be approved before production traffic changes."}, "stateArchivePlan": {"evidence": {"missingArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"], "presentArtifacts": [], "requiredArtifacts": ["archive/crochet_trend/runtime/pipeline_cloud_state.py", "archive/crochet_trend/runtime/infra/gcp/scripts/upload_pipeline_state.sh"]}, "status": "block", "story": "State archive and upload scaffolds are present for deployment review."}}, "route": "/api/web/v1/plugins/nails/deployment-cutover:review-report", "summary": {"authorizedPreviewEnvelopeVerified": false, "deployEnabled": false, "externalAuthorizationRequired": 2, "localArtifactChecks": 3, "localArtifactPass": 1, "localCutoverHandoffReady": false, "productionMutations": false}}