{"apiVersion": "openeyes.nails.web.v1", "boundary": "go_live_production_cutover_execution_completion_local_only", "collectionExecutionEnabled": false, "completionBoundary": {"acceptsExternalExecutionReceiptUri": true, "acceptsInlineExternalExecutionReceipt": true, "advancesLocalGoLiveTracker": true, "collectionExecutionEnabled": false, "deployEnabled": false, "liveCollectionEnabled": false, "localStateMutations": false, "mode": "production_cutover_execution_completion_local_files_only", "network": false, "preparesPostCutoverImportConfirmationRequest": true, "preparesPostCutoverImportPreview": true, "productionMutations": false, "readsLocalFiles": true, "requiresExternalProductionCutoverExecutionReceipt": true, "requiresOperatorReviewBeforeLocalStateWrite": true, "requiresProcessStagingEnvironment": true, "secretMaterialReturned": false, "submitEnabled": false, "uploadEnabled": false, "verifiesExternalExecutionReceipt": true, "writesLocalAuditState": false, "writesLocalFiles": true}, "completionContractPath": "/api/web/v1/plugins/nails/production-cutover:production-cutover-execution-contract", "completionPath": "/api/web/v1/plugins/nails/production-cutover:production-cutover-execution", "contract": {"additionalProperties": false, "contractVersion": 1, "externalExecutionReceiptInputModes": ["local_path", "inline_json", "uri"], "inputModes": ["local_path", "inline_json", "uri"], "methods": ["POST"], "name": "nails-production-cutover-production-cutover-execution", "objectUriReader": {"acceptedSchemes": ["gs", "oss"], "bucketAllowlistEnv": ["MALIANG_NAILS_RESOURCE_BUCKETS", "NAILS_AUDIT_EVIDENCE_BUCKET", "NAILS_SOURCE_ASSETS_BUCKET", "NAILS_DESIGN_PACKAGES_BUCKET", "NAILS_PUBLIC_ASSETS_BUCKET"], "defaultMode": "local_object_uri_mirror", "gcsModeEnv": "NAILS_WEB_GCS_URI_READ_ENABLED=1", "mirrorRootField": "objectUriMirrorRoot", "payloadKind": "json"}, "optionalFields": ["externalExecutionReceipt", "externalExecutionReceiptInline", "externalExecutionReceiptUri", "objectUriMirrorRoot", "outputDir", "productionAuthorizationReview", "envMode", "replace", "compactOutputFiles"], "requiredFields": ["startBundle"], "schemaDigest": "cd5f57f4eab101480a9d3dbda48590bbe023c66985bde956156feb710e117f64", "schemaId": "https://openeyes.local/plugins/nails/web/v1/production-cutover-execution-completion-request.schema.json"}, "deployEnabled": false, "links": {"executionReceiptVerify": {"contractPath": "/api/web/v1/plugins/nails/production-cutover:execution-receipt-verify-contract", "method": "POST", "network": false, "path": "/api/web/v1/plugins/nails/production-cutover:execution-receipt-verify"}, "postCutoverImportConfirmed": {"artifact": "<startBundle>/latest-production-cutover-execution-completion.json", "network": false, "nextCommand": "scripts/nails_complete_go_live_post_cutover_import_confirmed.py"}, "productionAuthorization": {"contractPath": "/api/web/v1/plugins/nails/production-cutover:production-authorization-contract", "method": "POST", "network": false, "path": "/api/web/v1/plugins/nails/production-cutover:production-authorization"}}, "liveCollectionEnabled": false, "localStateMutations": false, "localWrapper": {"collectionExecutionEnabled": false, "commandTemplate": "rtk python scripts/nails_complete_go_live_production_cutover_execution.py --start-bundle <startBundle> --external-execution-receipt <external-production-cutover-execution-receipt.json> --output-dir <outputDir>", "deployEnabled": false, "explicitReviewCommandTemplate": "rtk python scripts/nails_complete_go_live_production_cutover_execution.py --start-bundle <startBundle> --external-execution-receipt <external-production-cutover-execution-receipt.json> --production-authorization-review <production-authorization-review.json> --output-dir <outputDir>", "liveCollectionEnabled": false, "localStateMutations": false, "network": false, "productionMutations": false, "script": "scripts/nails_complete_go_live_production_cutover_execution.py", "steps": ["load latest production authorization completion", "verify the external production cutover execution receipt", "prepare a non-mutating post-cutover import preview", "write production cutover execution review and safety-scannable stage report", "prepare post-cutover import confirmation request", "advance production_cutover_execution_review"], "submitEnabled": false, "uploadEnabled": false}, "method": "GET", "network": false, "ok": true, "pluginId": "nails", "productionMutations": false, "route": "/api/web/v1/plugins/nails/production-cutover:production-cutover-execution-contract", "schema": {"$id": "https://openeyes.local/plugins/nails/web/v1/production-cutover-execution-completion-request.schema.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "oneOf": [{"not": {"anyOf": [{"required": ["externalExecutionReceiptInline"]}, {"required": ["externalExecutionReceiptUri"]}]}, "required": ["externalExecutionReceipt"]}, {"not": {"anyOf": [{"required": ["externalExecutionReceipt"]}, {"required": ["externalExecutionReceiptUri"]}]}, "required": ["externalExecutionReceiptInline"]}, {"not": {"anyOf": [{"required": ["externalExecutionReceipt"]}, {"required": ["externalExecutionReceiptInline"]}]}, "required": ["externalExecutionReceiptUri"]}], "properties": {"compactOutputFiles": {"default": false, "description": "Write compact JSON artifacts when true.", "type": "boolean"}, "envMode": {"default": "process", "description": "Use process-provided MALIANG_NAILS_* staging environment signals. Fixture mode is intentionally not accepted.", "enum": ["process"], "type": "string"}, "externalExecutionReceipt": {"description": "Local path to the real external production cutover execution receipt returned after the external execution.", "minLength": 1, "type": "string"}, "externalExecutionReceiptInline": {"description": "Inline real external production cutover execution receipt returned after the external execution. The API materializes it under the start bundle before running the local production cutover execution wrapper.", "type": "object"}, "externalExecutionReceiptUri": {"description": "Stable gs:// or oss:// URI for the real external production cutover execution receipt. The API reads JSON from an authorized object URI and materializes it under the start bundle before running the local wrapper.", "minLength": 1, "type": "string"}, "objectUriMirrorRoot": {"description": "Optional local object URI mirror root used when object URI reads are not using Cloud Run GCS JSON API mode. Defaults to <startBundle>/object-uri-readback.", "minLength": 1, "type": "string"}, "outputDir": {"description": "Optional empty local output directory for production cutover execution completion artifacts. When supplied it must resolve inside the start bundle.", "minLength": 1, "type": "string"}, "productionAuthorizationReview": {"description": "Optional production authorization review report path. Defaults to the latest production authorization completion output.", "minLength": 1, "type": "string"}, "replace": {"default": false, "description": "Allow replacing the production_cutover_execution_review stage entry when advancing the local go-live tracker.", "type": "boolean"}, "startBundle": {"description": "Local go-live start bundle whose production authorization completion prepared an external cutover execution request.", "minLength": 1, "type": "string"}}, "required": ["startBundle"], "title": "Nails Production Cutover Execution Completion Request v1", "type": "object"}, "sideEffects": "local_production_cutover_execution_review_and_post_cutover_import_request_files", "submitEnabled": false, "uploadEnabled": false}