{
  "schema_version": 1,
  "ansible_source": "fbd83e83b7ddac1a4ea2bba6895ebe55f2fc1d87",
  "pipeline_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/pipelines/29094",
  "same_candidate": true,
  "selected_acceptance_passed": true,
  "problems": [],
  "features": [
    {
      "feature": "auth",
      "behavior": "Authentication and API authorization",
      "status": "passed",
      "scope": "One operator; issuer, missing/invalid token and App Provider role checks.",
      "tests": [
        "test_fm_internal_api_is_not_public",
        "test_keycloak_issuer_is_the_public_url[federation]",
        "test_keycloak_issuer_is_the_public_url[oop]",
        "test_oeg_keeps_app_apis_to_app_providers",
        "test_oeg_keeps_federation_to_operators",
        "test_oeg_refuses_calls_without_a_valid_token"
      ],
      "observed_tests": 6,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "device-ti",
      "behavior": "Device Traffic Influence uses the deployed application endpoint",
      "status": "passed",
      "scope": "One device and observed application host IPv4; provider subscription lifecycle. No port/protocol filters, actual packet steering or automatic notification claim.",
      "tests": [
        "test_device_ti_uses_the_deployed_application_endpoint"
      ],
      "observed_tests": 1,
      "variant": "network",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261274",
      "transaction_passed": true
    },
    {
      "feature": "endpoints",
      "behavior": "OEG returns the observed application endpoint",
      "status": "passed",
      "scope": "One observed external HTTP NodePort; no Ingress, LoadBalancer or multi-interface claim.",
      "tests": [
        "test_progressive_oeg_returns_the_observed_endpoint"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "failures",
      "behavior": "Invalid and conflicting public requests are rejected",
      "status": "passed",
      "scope": "Missing name (400), unsupported QCOW2 package (501), duplicate onboarding (409), unknown app (400) and instance (404); owned catalogue cleanup verified.",
      "tests": [
        "test_duplicate_onboarding_preserves_the_registered_application",
        "test_invalid_application_is_not_registered[missing-name]",
        "test_invalid_application_is_not_registered[unsupported-package]",
        "test_unknown_application_cannot_be_instantiated",
        "test_unknown_instance_cannot_be_terminated"
      ],
      "observed_tests": 5,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "federation",
      "behavior": "federation",
      "status": "not_run",
      "scope": "Federation requires multiple operator platforms and agreed partners.",
      "tests": [],
      "observed_tests": 0,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "health",
      "behavior": "OEG and FM HTTP health",
      "status": "passed",
      "scope": "Public OEG/FM HTTP health; other API behavior has separate checks.",
      "tests": [
        "test_oeg_and_fm_answer"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "helm",
      "behavior": "HELM application lifecycle",
      "status": "passed",
      "scope": "One HTTP-served Helm archive, NodePort and termination; no CAMARA compute-to-values mapping or arbitrary chart support claim.",
      "tests": [
        "test_progressive_endpoint_reaches_the_deployed_application",
        "test_progressive_oeg_request_creates_a_ready_workload",
        "test_progressive_oeg_returns_the_application_instance",
        "test_progressive_oeg_returns_the_observed_endpoint",
        "test_progressive_oeg_termination_removes_the_workload"
      ],
      "observed_tests": 5,
      "variant": "helm",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261273",
      "transaction_passed": true
    },
    {
      "feature": "instance",
      "behavior": "OEG returns the deployed application identity",
      "status": "passed",
      "scope": "Expected app/zone identity and ready state for the selected instance.",
      "tests": [
        "test_progressive_oeg_returns_the_application_instance"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "location",
      "behavior": "Known-device location and missing-device rejection",
      "status": "passed",
      "scope": "One simulated IPv4 device, geographic area/time, missing-device rejection; no real location accuracy or handset compatibility claim.",
      "tests": [
        "test_known_device_returns_geographic_location",
        "test_location_without_device_is_rejected"
      ],
      "observed_tests": 2,
      "variant": "network",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261274",
      "transaction_passed": true
    },
    {
      "feature": "multi-cluster",
      "behavior": "multi-cluster",
      "status": "not_run",
      "scope": "Control-path isolation needs separate two-cluster execution evidence.",
      "tests": [],
      "observed_tests": 0,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "onboarding",
      "behavior": "Cloud application catalogue onboarding",
      "status": "passed",
      "scope": "Supported application manifest read/list/delete; no complete optional-field round trip.",
      "tests": [
        "test_app_provider_lists_its_apps",
        "test_app_provider_registers_reads_and_deletes_an_app"
      ],
      "observed_tests": 2,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "qod",
      "behavior": "OEG QoD profiles, provider readback, refusals and cleanup",
      "status": "passed",
      "scope": "EURECOM/CoreSim: four configured profiles, exact IPv4 flow and notification URL, SDK/backend refusal and public/provider cleanup. No real QoS enforcement or callback delivery claim.",
      "tests": [
        "test_qod_backend_refusal_retains_diagnostics",
        "test_qod_profile_lifecycle[qos-e]",
        "test_qod_profile_lifecycle[qos2]",
        "test_qod_profile_lifecycle[qos3]",
        "test_qod_profile_lifecycle[qos4]",
        "test_qod_unsupported_profile_is_rejected"
      ],
      "observed_tests": 6,
      "variant": "network",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261274",
      "transaction_passed": true
    },
    {
      "feature": "reachable",
      "behavior": "Returned endpoint reaches the deployed application",
      "status": "passed",
      "scope": "Controller-to-application HTTP with Pod identity; no WAN or data-plane policy claim.",
      "tests": [
        "test_progressive_endpoint_reaches_the_deployed_application"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "resources",
      "behavior": "Requested CPU and memory applied to Deployment and Pod",
      "status": "passed",
      "scope": "Container CPU and decimal-MB memory requests; no limits, storage or accelerators.",
      "tests": [
        "test_progressive_workload_applies_requested_resources"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "terminated",
      "behavior": "OEG termination removes the owned workload",
      "status": "passed",
      "scope": "Public instance and owned Deployment/Pod/Service removal.",
      "tests": [
        "test_progressive_oeg_termination_removes_the_workload"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "updates",
      "behavior": "updates",
      "status": "not_run",
      "scope": "Scaling, updates and recovery require their own lifecycle assertions.",
      "tests": [],
      "observed_tests": 0,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "workload",
      "behavior": "OEG request creates a ready Kubernetes workload",
      "status": "passed",
      "scope": "One application, one zone and one ready Deployment/Pod/NodePort Service.",
      "tests": [
        "test_progressive_oeg_request_creates_a_ready_workload"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    },
    {
      "feature": "zones",
      "behavior": "Configured workload zones exposed by OEG",
      "status": "passed",
      "scope": "Configured lab workload zones and public identities; no dynamic backend health claim.",
      "tests": [
        "test_cloud_zones_match_configured_workload_targets"
      ],
      "observed_tests": 1,
      "variant": "container",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "transaction_passed": true
    }
  ],
  "variants": {
    "container": {
      "checkpoint": "terminated",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261272",
      "candidate_run_passed": true,
      "lab_cleanup": "passed",
      "wrapper_cleanup_passed": true
    },
    "helm": {
      "checkpoint": "helm-terminated",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261273",
      "candidate_run_passed": true,
      "lab_cleanup": "passed",
      "wrapper_cleanup_passed": true
    },
    "network": {
      "checkpoint": "network",
      "job_url": "https://labs.etsi.org/rep/oop/deploy/ansible/-/jobs/261274",
      "candidate_run_passed": true,
      "lab_cleanup": "passed",
      "wrapper_cleanup_passed": true
    }
  },
  "artifact_selection": {
    "ref": "develop",
    "source_heads": {
      "oeg": "7434f8aef0cb8d23c560cd5015fe35051b6eec38",
      "fm": "853bb20f77f63166918944ecde32b630e95d675b",
      "srm": "8fdb12a544d8fd2e97744be819c3181f061a4548",
      "sdk": "98d193f8f555924746adc4934e3ac3bf6247dc59",
      "helm": "52a7b0d942af88d004a0781e365b0a6db7c66e2c"
    },
    "components": {
      "oeg": {
        "source_sha": "7434f8aef0cb8d23c560cd5015fe35051b6eec38",
        "pipeline_id": 28950,
        "pipeline_url": "https://labs.etsi.org/rep/oop/code/open-exposure-gateway/-/pipelines/28950",
        "build_job_id": 260104,
        "image": "labs.etsi.org:5050/oop/code/open-exposure-gateway:ci-develop-7434f8ae@sha256:7c06caf7ad6d6bf67bd40a17f33db79bcb9fddb2ab1f79e949a0d7750d4d5907"
      },
      "fm": {
        "source_sha": "853bb20f77f63166918944ecde32b630e95d675b",
        "pipeline_id": 28739,
        "pipeline_url": "https://labs.etsi.org/rep/oop/code/federation-manager/-/pipelines/28739",
        "build_job_id": 258775,
        "image": "labs.etsi.org:5050/oop/code/federation-manager:ci-develop-853bb20f@sha256:f41f2d0a972a76f49be074636bb459e1ac244471601900460c883aa5710cf998"
      },
      "srm": {
        "source_sha": "8fdb12a544d8fd2e97744be819c3181f061a4548",
        "pipeline_id": 29059,
        "pipeline_url": "https://labs.etsi.org/rep/oop/code/service-resource-manager/-/pipelines/29059",
        "build_job_id": 261042,
        "image": "labs.etsi.org:5050/oop/code/service-resource-manager:ci-develop-8fdb12a5@sha256:e8e7bd682651c6364496f8f3fd2a04282da08e4899fc3d76358a72ba6c3fffac"
      },
      "sdk": {
        "source_sha": "98d193f8f555924746adc4934e3ac3bf6247dc59",
        "pipeline_id": 29091,
        "pipeline_url": "https://labs.etsi.org/rep/oop/code/tf-sdk/-/pipelines/29091",
        "build_job_id": 261245,
        "wheel_sha256": "e60f9841e78470a68467099edd7824ffe8448a0d311896558a461ba2e1b9a4d4",
        "consumer": {
          "id": 29092,
          "iid": 258,
          "project_id": 377,
          "sha": "9607e885ab0300f7a2305e763e452c9d934fc20b",
          "ref": "test/tfsdk-consumer-qualification",
          "status": "success",
          "source": "pipeline",
          "created_at": "2026-10-23T00:13:42.517Z",
          "updated_at": "2026-10-23T00:17:07.407Z",
          "web_url": "https://labs.etsi.org/rep/oop/code/service-resource-manager/-/pipelines/29092"
        }
      }
    },
    "sdk": {
      "installed_expected": {
        "version": "2.0.0rc4",
        "files": 127,
        "sha256": "521c712371fdb5a2336c62da4e7bb3b992e01ff82ad70341ea5347bdfc5e94f8"
      },
      "locked_source": "ab436f31e8b5d88f429289c9f16fccd74d9653b1",
      "latest_build": {
        "version": "2.0.0rc5",
        "files": 127,
        "sha256": "521c712371fdb5a2336c62da4e7bb3b992e01ff82ad70341ea5347bdfc5e94f8"
      },
      "runtime_matches_current_source": true,
      "version_matches_latest_build": false
    },
    "resolved_profile": {
      "chart_revision": "52a7b0d942af88d004a0781e365b0a6db7c66e2c",
      "images": {
        "oeg": "labs.etsi.org:5050/oop/code/open-exposure-gateway:ci-develop-7434f8ae@sha256:7c06caf7ad6d6bf67bd40a17f33db79bcb9fddb2ab1f79e949a0d7750d4d5907",
        "fm": "labs.etsi.org:5050/oop/code/federation-manager:ci-develop-853bb20f@sha256:f41f2d0a972a76f49be074636bb459e1ac244471601900460c883aa5710cf998",
        "srm": "labs.etsi.org:5050/oop/code/service-resource-manager:ci-develop-8fdb12a5@sha256:e8e7bd682651c6364496f8f3fd2a04282da08e4899fc3d76358a72ba6c3fffac"
      },
      "local_images": [],
      "checkpoint": "terminated",
      "acceptance": {
        "connection_mode": "in_cluster",
        "workload_namespace": "oop-e2e-workloads",
        "application_image": "traefik/whoami@sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab",
        "http_response_contains": "Hostname:",
        "timeout_seconds": 180,
        "resource_requests": {
          "cpu": 2,
          "memory_mb": 257
        },
        "sdk": {
          "revision": "ab436f31e8b5d88f429289c9f16fccd74d9653b1",
          "version": "2.0.0rc4",
          "sha256": "521c712371fdb5a2336c62da4e7bb3b992e01ff82ad70341ea5347bdfc5e94f8"
        }
      }
    }
  },
  "compatibility": [
    {
      "provider": {
        "provider": "EURECOM open-exposure NEF + CoreSim",
        "cleanup": "passed",
        "images": {
          "openexposure/core-simulator:develop": "openexposure/core-simulator@sha256:fda2456eb123e068743841d88d4404efb5e2f08605f51c684a336f8bcd2c906b",
          "openexposure/as-session-with-qos:develop": "openexposure/as-session-with-qos@sha256:4751cac7d65f7957a4126b392fb8dc48dd7840f19757ee072311d89b52438c2d",
          "openexposure/traffic-influence:develop": "openexposure/traffic-influence@sha256:adef8616f3c4ab33a4ff1037d7701c7d4b24c267d3cd477e3f84770d2c82f21a",
          "openexposure/monitoring-event:develop": "openexposure/monitoring-event@sha256:a2e04f326a9e022ce414730469eac95d4d4c46456ded1923776d8e4c287bbab6",
          "openexposure/core-network-service:develop": "openexposure/core-network-service@sha256:8f302cadfcd090431ac796f2e3da2efbf610b9909c9c23d6e71e542e71c14ab1",
          "openexposure/ue-identity-service:develop": "openexposure/ue-identity-service@sha256:957a3cf569222f5f3754adc2334eac71b99a3aced38196fcd367579dacb3cad7",
          "openexposure/ue-profile-service:develop": "openexposure/ue-profile-service@sha256:1f08531fc7fbff11f25bd98f0ebb7e50d944e31f2c43093195f70b618be1ce9a",
          "openexposure/ue-address:develop": "openexposure/ue-address@sha256:6d0131500bf642ea02c8805a414410caa6b0080d7a64e2d0ecdb436473f4e6fe",
          "openexposure/ue-id:develop": "openexposure/ue-id@sha256:5e0e55589ff05155f7c7f8d62cc7af390da6ff79bb5e4f8be5b5d6878296b2cb",
          "redis/redis-stack-server:latest": "redis/redis-stack-server@sha256:798ab84d9f266936b034ab11c4d04a2b8e4b441884c5aa7d17ac951eefdf742a",
          "nginx:latest": "nginx@sha256:47928bf67eb62a1863cb08d9ecb52d3e704304ba614eaee17884204677702951"
        },
        "deployment_revision": "888673aa2dd32a8e3bf1357f424ebc0ca7cbfb5e",
        "source_revision_limit": "Published image digests are verified; these images expose no source revision labels. Guide/source commits are not asserted as image provenance.",
        "deployment_archive_sha256": "3068906fa57d58a5077dcbd1a0d7a302ba15c44983c9255a82ff24931fad5763",
        "instrumentation": "Ingress records method/path/status/Location only; no headers or payloads",
        "qod_collection_read": "unsupported-http501",
        "ti_initial_collection": "AF-not-created-http404",
        "startup": "passed",
        "device_ipv4": "12.1.0.1",
        "base_url": "http://172.19.0.14"
      },
      "selected_transaction_passed": true,
      "features": {
        "qod": "passed",
        "location": "passed",
        "device-ti": "passed"
      }
    }
  ]
}
