7.6 KiB
7.6 KiB
Verification Mapping
Strict validation:
openspec validate cloud-control-plane-integration --strict
Change 'cloud-control-plane-integration' is valid
cloud-control-plane
- Start the cloud application:
apps/cloud-api/tests/test_app.py::test_create_app_returns_independent_cloud_applicationandtest_cloud_application_owns_database_lifecycle. - Local Runtime remains separately runnable:
tests/test_cloud_composition_safety.py::test_existing_modules_do_not_import_cloudandtests/test_rest_api.py::test_rest_start_task_and_poll_until_complete. - Queued work becomes assigned:
apps/cloud-api/tests/test_app.py::test_lifespan_runs_scheduler_and_reaper_until_shutdown. - Lifecycle iteration fails transiently:
apps/cloud-api/tests/test_app.py::test_lifecycle_workers_log_failures_and_continue. - Application shuts down:
apps/cloud-api/tests/test_app.py::test_lifespan_runs_scheduler_and_reaper_until_shutdown. - Start with PostgreSQL: PostgreSQL parameter of
tests/test_cloud_repository_contract.py::test_repository_crud_contract. - Start in local SQLite mode:
tests/test_cloud_database.py::test_sqlite_database_owns_working_repository_lifecycle. - Upgrade an existing cloud database:
tests/test_cloud_migrations.py::test_legacy_data_survives_upgrade_and_downgrade. - Schema is behind at startup:
tests/test_cloud_migrations.py::test_schema_readiness_requires_head_revision. - Restart with queued tasks:
apps/cloud-api/tests/test_app.py::test_persisted_queue_is_recovered_after_control_plane_restart. - Restart after a lease expires:
apps/cloud-api/tests/test_app.py::test_expired_lease_is_recovered_after_control_plane_restart. - Database is unavailable:
apps/cloud-api/tests/test_app.py::test_liveness_stays_up_when_database_readiness_fails. - Task lifecycle is logged:
tests/test_cloud_repository_contract.py::test_task_lifecycle_logs_structured_identifiers,tests/test_cloud_observability.py::test_sensitive_payload_fields_are_redacted_recursively, andapps/cloud-api/tests/test_app.py::test_request_correlation_id_is_propagated_without_sensitive_headers.
device-pool
- Valid remote snapshot:
tests/test_host_agent_internal_api.py::test_authenticated_heartbeat_replaces_complete_snapshot. - Invalid snapshot is rejected atomically:
tests/test_host_agent_internal_api.py::test_invalid_duplicate_snapshot_preserves_previous_devicesandtests/test_host_agent_protocol_models.py::test_device_snapshot_rejects_invalid_host_status. - Two live hosts report the same device id:
tests/test_host_agent_internal_api.py::test_live_device_owner_conflict_is_rejected_without_partial_sync. - Previous owner is stale:
tests/test_host_agent_internal_api.py::test_stale_device_owner_can_be_replaced_by_live_hostand the SQLite/PostgreSQL parameters oftests/test_cloud_repository_contract.py::test_repository_can_atomically_transfer_explicit_device_takeover.
host-agent-protocol
- Host authenticates as itself:
apps/device-host-agent/tests/test_client.py::test_client_sends_authenticated_heartbeat_and_claimandtests/test_cloud_auth.py::test_host_credential_authenticates_as_one_bound_host. - Host attempts to impersonate another host:
tests/test_host_agent_internal_api.py::test_host_token_cannot_submit_heartbeat_for_another_host. - Host reports devices:
apps/device-host-agent/tests/test_heartbeat.py::test_build_device_snapshot_copies_complete_non_secret_stateandtests/test_host_agent_internal_api.py::test_authenticated_heartbeat_replaces_complete_snapshot. - Host reports no devices:
tests/test_host_agent_internal_api.py::test_empty_heartbeat_removes_only_reporting_hosts_devices. - Assigned work is available:
tests/test_host_agent_internal_api.py::test_long_poll_claim_returns_at_most_one_owned_assignment. - No work becomes available:
tests/test_host_agent_internal_api.py::test_empty_long_poll_timeout_is_normal_response. - Lease renewal succeeds:
tests/test_host_agent_internal_api.py::test_lease_renewal_extends_active_assignmentandapps/device-host-agent/tests/test_lease.py::test_lease_renews_while_execution_is_active. - Lease is stale or foreign:
tests/test_host_agent_internal_api.py::test_stale_renewal_returns_typed_conflictandapps/device-host-agent/tests/test_lease.py::test_stale_lease_stops_later_interruptible_actions. - Execute a goal assignment:
apps/device-host-agent/tests/test_assignment.py::test_goal_assignment_executes_through_task_runnerandapps/device-host-agent/tests/test_e2e.py::test_public_sdk_reports_fake_device_success_and_runtime_failure. - Execute a workflow assignment:
apps/device-host-agent/tests/test_assignment.py::test_workflow_assignment_loads_and_executes_definition. - Report a successful result:
tests/test_host_agent_internal_api.py::test_terminal_result_is_idempotent_through_internal_apiandapps/device-host-agent/tests/test_e2e.py::test_public_sdk_reports_fake_device_success_and_runtime_failure. - Retry a result after response loss:
apps/device-host-agent/tests/test_client.py::test_result_report_retries_identical_payload_after_response_loss. - Stale attempt reports after requeue:
tests/test_host_agent_internal_api.py::test_superseded_attempt_result_cannot_overwrite_current_lease. - Host is behind NAT:
apps/device-host-agent/tests/test_e2e.py::test_nat_style_host_requires_only_outbound_requests.
platform-sdk
- Production starts without configured credentials:
apps/cloud-api/tests/test_app.py::test_production_app_rejects_missing_credentials. - Explicit local anonymous override:
tests/test_cloud_control_config.py::test_auth_provider_requires_explicit_anonymous_override. - Custom AuthProvider is honored:
tests/test_cloud_sdk_api.py::test_rejecting_auth_provider_blocks_every_route. - Submit token has task scope:
tests/test_cloud_sdk_api.py::test_every_public_route_enforces_its_scope. - Non-admin token attempts plugin registration:
tests/test_cloud_sdk_api.py::test_plugin_admin_scope_is_checked_before_registration. - Query an active remote task:
tests/test_cloud_sdk_api.py::test_task_status_exposes_distributed_metadata_without_lease_secret. - Query a failed remote task:
tests/test_cloud_sdk_api.py::test_task_status_exposes_distributed_metadata_without_lease_secretandapps/device-host-agent/tests/test_e2e.py::test_public_sdk_reports_fake_device_success_and_runtime_failure. - Client configured with bearer token:
tests/test_cloud_client.py::test_client_applies_bearer_token_to_every_public_method. - Client receives authorization failure:
tests/test_cloud_client.py::test_client_raises_typed_authorization_error_without_exposing_token.
task-scheduler
- Scheduler assigns an idle device:
tests/test_cloud_repository_contract.py::test_atomic_assignment_creates_lease_attempt_and_reservation. - Later scheduler iteration sees stale idle snapshot:
tests/test_cloud_repository_contract.py::test_active_assignment_blocks_reuse_of_stale_idle_snapshot. - Owning host claims once:
tests/test_cloud_repository_contract.py::test_owning_host_claims_one_active_assignment. - Concurrent claims race:
tests/test_cloud_repository_concurrency.py::test_postgresql_concurrent_claim_has_one_winner. - Lease expires with attempts remaining:
tests/test_cloud_repository_contract.py::test_expired_lease_requeues_with_auditable_history. - Lease expires at attempt limit:
tests/test_cloud_repository_contract.py::test_expired_lease_fails_at_attempt_limit. - Active lease reports completion:
tests/test_cloud_repository_contract.py::test_terminal_result_is_recorded_idempotently_and_releases_reservation. - Superseded lease reports completion:
tests/test_cloud_repository_contract.py::test_stale_foreign_or_expired_result_is_rejected.