{"apiVersion": "openeyes.nails.web.v1", "boundary": "go_live_nails_web_smoke_completion_local_only", "collectionExecutionEnabled": false, "completionBoundary": {"acceptsInlineNailsWebSmokeEvidence": true, "acceptsNailsWebSmokeEvidenceUri": true, "advancesLocalGoLiveTracker": true, "collectionExecutionEnabled": false, "deployEnabled": false, "externalNetworkEvidenceRequired": true, "liveCollectionEnabled": false, "localStateMutations": false, "mode": "nails_web_cloud_run_smoke_completion_local_files_only", "network": false, "preparesReleaseCockpitReview": true, "productionMutations": false, "readsLocalFiles": true, "registersSmokeEvidence": true, "requiresExplicitStateRoot": false, "requiresExternalNailsWebSmokeEvidence": true, "requiresGoLiveReadinessConfirmedCompletion": true, "runsExternalSmoke": false, "sanitizesSmokeEvidence": true, "secretMaterialReturned": false, "submitEnabled": false, "uploadEnabled": false, "writesLocalAuditState": false, "writesLocalFiles": true}, "completionContractPath": "/api/web/v1/plugins/nails/production-cutover:nails-web-cloud-run-smoke-contract", "completionPath": "/api/web/v1/plugins/nails/production-cutover:nails-web-cloud-run-smoke", "contract": {"additionalProperties": false, "contractVersion": 1, "inputModes": ["local_path", "inline_json", "uri"], "methods": ["POST"], "nailsWebSmokeEvidenceInputModes": ["local_path", "inline_json", "uri"], "name": "nails-production-cutover-nails-web-cloud-run-smoke", "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": ["nailsWebSmokeEvidence", "nailsWebSmokeEvidenceInline", "nailsWebSmokeEvidenceUri", "objectUriMirrorRoot", "outputDir", "replace", "compactOutputFiles"], "requiredFields": ["startBundle"], "schemaDigest": "f70043ae7c99f261f755311f84137dbfbc76eb3ce44476e603a5d8aacd9e3c01", "schemaId": "https://openeyes.local/plugins/nails/web/v1/nails-web-cloud-run-smoke-completion-request.schema.json"}, "deployEnabled": false, "externalNetworkEvidenceRequired": true, "links": {"goLiveReadinessConfirmed": {"contractPath": "/api/web/v1/plugins/nails/production-cutover:go-live-readiness-confirmed-contract", "localStateMutations": true, "method": "POST", "network": false, "path": "/api/web/v1/plugins/nails/production-cutover:go-live-readiness-confirmed"}, "releaseCockpitReview": {"artifact": "<startBundle>/latest-nails-web-cloud-run-smoke-completion.json", "network": false, "nextCommand": "scripts/nails_complete_go_live_release_cockpit_review.py"}}, "liveCollectionEnabled": false, "localStateMutations": false, "localWrapper": {"collectionExecutionEnabled": false, "commandTemplate": "rtk python scripts/nails_complete_go_live_nails_web_smoke.py --start-bundle <startBundle> --nails-web-smoke-evidence <nailsWebSmokeEvidence> --output-dir <outputDir>", "deployEnabled": false, "externalNetworkEvidenceRequired": true, "externalSmokeCommandTemplate": "infra/gcp/scripts/smoke_nails_web_cloud_run.sh --output <nails-web-smoke.json>", "liveCollectionEnabled": false, "localStateMutations": false, "network": false, "productionMutations": false, "runsExternalSmoke": false, "script": "scripts/nails_complete_go_live_nails_web_smoke.py", "steps": ["load latest go-live readiness confirmed completion", "validate and sanitize external Nails Web Cloud Run smoke evidence", "register sanitized smoke evidence into the local go-live tracker", "write safety-scannable smoke completion artifacts", "advance nails_web_cloud_run_smoke", "prepare release cockpit review command"], "submitEnabled": false, "uploadEnabled": false}, "method": "GET", "network": false, "ok": true, "pluginId": "nails", "productionMutations": false, "route": "/api/web/v1/plugins/nails/production-cutover:nails-web-cloud-run-smoke-contract", "schema": {"$id": "https://openeyes.local/plugins/nails/web/v1/nails-web-cloud-run-smoke-completion-request.schema.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "oneOf": [{"not": {"anyOf": [{"required": ["nailsWebSmokeEvidenceInline"]}, {"required": ["nailsWebSmokeEvidenceUri"]}]}, "required": ["nailsWebSmokeEvidence"]}, {"not": {"anyOf": [{"required": ["nailsWebSmokeEvidence"]}, {"required": ["nailsWebSmokeEvidenceUri"]}]}, "required": ["nailsWebSmokeEvidenceInline"]}, {"not": {"anyOf": [{"required": ["nailsWebSmokeEvidence"]}, {"required": ["nailsWebSmokeEvidenceInline"]}]}, "required": ["nailsWebSmokeEvidenceUri"]}], "properties": {"compactOutputFiles": {"default": false, "description": "Write compact JSON artifacts when true.", "type": "boolean"}, "nailsWebSmokeEvidence": {"description": "Path to the redacted deployed Nails Web Cloud Run smoke report produced by the external smoke command.", "minLength": 1, "type": "string"}, "nailsWebSmokeEvidenceInline": {"description": "Inline redacted deployed Nails Web Cloud Run smoke report produced by the external smoke command. The API materializes it under the start bundle before running the local smoke registration wrapper.", "type": "object"}, "nailsWebSmokeEvidenceUri": {"description": "Stable gs:// or oss:// URI for the redacted deployed Nails Web Cloud Run smoke report. 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 smoke registration artifacts. When supplied it must resolve inside the start bundle.", "minLength": 1, "type": "string"}, "replace": {"default": false, "description": "Allow replacing the nails_web_cloud_run_smoke stage entry when advancing the local go-live tracker.", "type": "boolean"}, "startBundle": {"description": "Local go-live start bundle whose go-live readiness confirmation is complete.", "minLength": 1, "type": "string"}}, "required": ["startBundle"], "title": "Nails Web Cloud Run Smoke Completion Request v1", "type": "object"}, "sideEffects": "local_sanitized_nails_web_smoke_evidence_registration", "submitEnabled": false, "uploadEnabled": false}