{
  "contract_version": "experience.plan.v1",
  "experience_id": "adaptive_home_guardian",
  "implementation_status": "ondevice_semantic_dispatch_connected_physical_e2e_pending",
  "goal": {
    "summary": "사용자 부재 중 지정 공간을 안전하게 순찰하고 의미 있는 보안 이벤트만 처리한 뒤 스테이션으로 복귀한다.",
    "success_criteria": [
      "all_admitted_patrol_areas_observed",
      "meaningful_security_events_handled",
      "security_session_stopped",
      "device_physically_docked"
    ],
    "constraints": [
      "never_bypass_deviceagent_policy",
      "never_send_raw_vision_frames_to_general_llm_context",
      "user_cancellation_always_wins",
      "normal_progress_does_not_call_cloud_llm",
      "bounded_local_retry_and_bounded_cloud_replan"
    ]
  },
  "semantic_authority": {
    "goal_and_plan_owner": "cloud_a2a_experience_supervisor",
    "grounding_and_admission_owner": "deviceagent_taskmanager",
    "domain_lifecycle_owner": "deviceagent_wss",
    "execution_source": "typed_action",
    "physical_completion_owner": "deviceagent_completion_evidence"
  },
  "admission_context": [
    "battery",
    "spatial.map.rooms",
    "spatial.location",
    "policy",
    "network",
    "security",
    "perception",
    "voice_llm",
    "task_manager"
  ],
  "condition_policy": {
    "unknown_or_stale": "block_or_refresh_never_execute_unconditionally",
    "normal_progress": "continue_locally_without_cloud_llm",
    "decision_boundary": "emit_typed_observation_and_refresh_allowlisted_context"
  },
  "resource_lease": {
    "exclusive": [
      "camera",
      "vision_pipeline",
      "security_session"
    ],
    "conditional": [
      "amr_motion"
    ],
    "shared": [
      "network",
      "voice_audio_output"
    ],
    "conflict_policy": {
      "live_view": "reject_until_security_session_stops_and_user_consents",
      "vital_sign_session": "reject_while_security_session_active",
      "voice_content": "pause_security_then_resume_or_replan"
    }
  },
  "steps": [
    {
      "step_id": "check_security_availability",
      "capability_id": "security_patrol",
      "operation_id": "check_security_availability",
      "arguments": {},
      "depends_on": [],
      "wait_for": "availability_result",
      "on_failure": "ask_or_abort",
      "implementation_status": "cloud_ondevice_mr6_contract_connected_physical_wss_preflight_verified"
    },
    {
      "step_id": "start_security",
      "capability_id": "security_patrol",
      "operation_id": "start_security_patrol",
      "arguments": {
        "security_mode": "guardian",
        "area_ids_from": "admitted_patrol_areas"
      },
      "depends_on": [
        "check_security_availability"
      ],
      "wait_for": "security.started",
      "on_failure": "abort_and_explain",
      "implementation_status": "runtime_contract_connected_physical_wss_session_blocked_by_provisioning"
    },
    {
      "step_id": "patrol_areas",
      "capability_id": "security_patrol",
      "operation_id": "continue_domain_patrol",
      "arguments": {
        "domain_owner": "DeviceAgent.WssManager"
      },
      "depends_on": [
        "start_security"
      ],
      "wait_for": "security.patrolCompleted",
      "on_failure": "local_retry_then_cloud_replan",
      "implementation_status": "domain_and_semantic_observation_connected_physical_patrol_e2e_pending"
    },
    {
      "step_id": "stop_security",
      "capability_id": "security_patrol",
      "operation_id": "stop_security_patrol",
      "arguments": {},
      "depends_on": [
        "patrol_areas"
      ],
      "wait_for": "security.stopped",
      "on_failure": "compensate_and_return",
      "implementation_status": "taskmanager_lifecycle_adapter_connected_physical_stop_e2e_pending"
    },
    {
      "step_id": "return_station",
      "capability_id": "return_to_station",
      "operation_id": "return_to_station",
      "arguments": {
        "timeout_ms": 240000
      },
      "depends_on": [
        "stop_security"
      ],
      "wait_for": "movement.stationCharging",
      "on_failure": "bounded_retry_then_user_notify",
      "implementation_status": "connected_component_not_full_scenario_verified"
    },
    {
      "step_id": "summarize",
      "capability_id": "voice_content",
      "operation_id": "summarize_semantic_events",
      "arguments": {
        "event_source": "experience_semantic_observations",
        "exclude": [
          "raw_frames",
          "bbox",
          "credentials",
          "internal_field_names"
        ]
      },
      "depends_on": [
        "return_station"
      ],
      "wait_for": "response_accepted",
      "on_failure": "persist_summary_for_next_session",
      "implementation_status": "target_contract"
    }
  ],
  "observation_contract": {
    "required_fields": [
      "event_id",
      "type",
      "source",
      "observed_at_ms",
      "freshness_ms",
      "privacy_class",
      "correlation",
      "facts"
    ],
    "forbidden_fields": [
      "raw_frame",
      "face_image",
      "bbox",
      "signed_url",
      "credential"
    ],
    "dedup_key": "event_id"
  },
  "observation_rules": [
    {
      "event": "movement.arrived",
      "local_action": "continue_domain_patrol",
      "cloud_action": "none"
    },
    {
      "event": "security.person_detected",
      "local_action": "pause_motion_and_verify",
      "cloud_action": "only_if_verification_is_uncertain_or_fails"
    },
    {
      "event": "vision.low_light_changed",
      "local_action": "mark_evidence_quality",
      "cloud_action": "choose_alternative_observation_or_notify"
    },
    {
      "event": "battery.low",
      "local_action": "pause_and_return",
      "cloud_action": "decide_resume_after_charge"
    },
    {
      "event": "network.aws_iot_session_changed",
      "local_action": "continue_local_observation_and_queue_upload",
      "cloud_action": "none_until_connectivity_recovers"
    },
    {
      "event": "voice_llm.pipeline_state_changed",
      "local_action": "pause_security_if_required",
      "cloud_action": "resume_or_replan_after_voice_session"
    }
  ],
  "replan_budget": {
    "local_retries_per_step": 1,
    "cloud_replans_total": 2,
    "user_questions_total": 1
  },
  "terminal_evidence": [
    "security.started",
    "security.patrolCompleted",
    "security.stopped",
    "movement.stationCharging"
  ],
  "current_blockers": [
    "wss_subscription_and_pin_not_provisioned_on_test_board",
    "cross_domain_resource_lease_registry_not_complete",
    "device_context_policy_streaming_maintenance_resource_sections_not_exposed",
    "durable_outbox_process_restart_replay_not_verified",
    "platform_signed_full_observation_replan_e2e_not_verified",
    "full_physical_terminal_e2e_not_verified"
  ]
}
