{
  "contract_version": "deviceagent-agentic-io-coverage.v1",
  "profile_id": "mr6_deviceagent_agentic_inventory_2026_07_30",
  "implementation_status": "source_and_contract_audited_physical_e2e_partial",
  "physical_e2e_status": "pending",
  "source_coverage": {
    "low_level_aidl_method_count": 68,
    "task_executor_object_count": 11,
    "registered_task_method_count": 60,
    "capability_card_task_method_count": 24,
    "planning_context_bundle_count": 14,
    "semantic_observation_contract_count": 9,
    "agentic_capability_card_count": 18,
    "cloud_runtime_bound_card_count": 14,
    "partial_runtime_bound_card_count": 3,
    "blocked_runtime_bound_card_count": 1
  },
  "source_refs": [
    "a1-packages-mr6/apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/task/TaskExecutorBootstrap.java",
    "a1-packages-mr6/apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/task/DevicePlanningContextProvider.java",
    "a1-packages-mr6/docs/task-manager/mr6_deviceagent_agentic_function_source_ledger_20260729.md",
    "llmwiki/docs/a2a/deviceagent-executor-closure-matrix.md",
    "llmwiki/docs/a2a/deviceagent-semantic-observation-catalog.json",
    "llmwiki/docs/a2a/deviceagent-agentic-capability-cards.json"
  ],
  "coverage_policy": {
    "act": "Only registered TaskManager methods or an explicitly documented domain bridge count as an action surface.",
    "observe": "Only bounded Planning Context fields or catalogued semantic observations count as Planner-visible evidence.",
    "evidence": "Request acceptance and physical terminal evidence are recorded separately.",
    "decide": "Planner and Supervisor choose typed capabilities; DeviceAgent owns method mapping, admission, timeout, cancellation, and physical completion.",
    "privacy": "Raw image frames, bbox, credentials, signed URLs, unrestricted logs, STT text, prompts, LLM responses, and TTS text are excluded from general planning context."
  },
  "low_level_aidl_surfaces": [
    {
      "surface_id": "amr_control",
      "source_path": "apps/DeviceAgent/app/src/main/aidl/com/sk/airbot/amrcontrol/IAMRControl.aidl",
      "planner_policy": "semantic_capability_only",
      "method_names": [
        "registerCallback",
        "unregisterCallback",
        "sendModuleCommand",
        "opMapping",
        "opDriving",
        "opSetTargetPosition",
        "opGetMap",
        "opReturnToChargingStation",
        "opControlManualVW",
        "opRobotTest",
        "opRotate",
        "opLidarOnOff",
        "opQuerySensor",
        "opAiCalibration",
        "opChargingBattery",
        "opReset",
        "opOta",
        "opSendMetaData",
        "opIsConnected",
        "opIsMapping",
        "opIsNavi",
        "opSetFactoryMode",
        "opSetBatterySleepMode",
        "opSetSensorInspectionMode",
        "opRepositioningStation",
        "opSetTargetPosition2",
        "opIsFactoryMode",
        "opCopyMap",
        "opSelfDiagnosisMotor",
        "opFollowMe",
        "opCopyMap2",
        "opSendOTAResult",
        "opGetTemperature",
        "opGetCurrentPosition",
        "opGetAMRVersion",
        "opEmergencyStop",
        "opDocking",
        "opEncMapData",
        "opInitMapData",
        "opGetMultiToFCalibarationData",
        "opGetFactoryData",
        "opSetSaveMap",
        "opSetRecoveryReturnToChargingStation",
        "opGetFollowMeStatus",
        "opGetManalModeStatus",
        "opManualMode",
        "opLocalhostMode"
      ]
    },
    {
      "surface_id": "vision_control",
      "source_path": "apps/DeviceAgent/app/src/main/aidl/com/sk/airbot/visioncontrol/IVisionControl.aidl",
      "planner_policy": "semantic_observation_only",
      "method_names": [
        "registerCallback",
        "unregisterCallback",
        "sendModuleCommand"
      ]
    },
    {
      "surface_id": "iot_control",
      "source_path": "apps/DeviceAgent/app/src/main/aidl/com/sk/airbot/iotcontrol/IIotControl.aidl",
      "planner_policy": "transport_only",
      "method_names": [
        "registerCallback",
        "unregisterCallback",
        "sendModuleCommand",
        "getIotServerType"
      ]
    },
    {
      "surface_id": "streaming_control",
      "source_path": "apps/DeviceAgent/app/src/main/aidl/com/sk/airbot/streamingcontrol/IStreamingControl.aidl",
      "planner_policy": "blocked_until_binder_security_and_terminal_contract",
      "method_names": [
        "registerStreamingCallback",
        "unregisterStreamingCallback",
        "startStreamingMode",
        "responseStartStreamingModeResult",
        "stopStreamingMode",
        "responseStopStreamingModeResult",
        "requestUploadData",
        "responseUploadDataResult",
        "uploadDataComplete",
        "changeAmrManualMode",
        "isOnStation",
        "movementControl",
        "doRotate",
        "onTerminated"
      ]
    }
  ],
  "feature_groups": [
    {
      "group_id": "mobility_map",
      "display_name": "자율주행·Map·위치",
      "agent_role": "Act + Observe + Verify",
      "readiness": "M3_MANAGED",
      "source_refs": [
        "MovementTaskExecutor",
        "MovingController",
        "MapManager",
        "StationLocationTaskExecutor",
        "DockingSignalProbeTaskExecutor",
        "ObservationTaskExecutor",
        "TaskCompletionStateStore"
      ],
      "registered_task_methods": [
        "getFollowMeStatus",
        "getStationLocationEvidence",
        "probeDockingSignal",
        "reqmap",
        "isMapFilePresent",
        "resetReturnToStationCounter",
        "setAMRMonitoring",
        "returnToStation",
        "rotateInPlace",
        "setMoveTo",
        "setMoving",
        "stopMovement"
      ],
      "planning_context_bundles": ["map", "location", "station", "movement"],
      "semantic_observation_contracts": [],
      "capability_ids": [
        "move_to_room",
        "return_to_station",
        "spatial_context_assessment"
      ],
      "act": "공간 이동, 수동 이동, 정지, 제자리 회전, 스테이션 복귀, Map 요청",
      "observe": "실제 공간 목록, 현재 공간, 스테이션 위치 증거, 수동 도킹 신호, 이동 상태",
      "evidence": "movement.arrived, movement.stationCharging, rotation_completed, docking-signal-probe.v1, task terminal event",
      "planner_gap": "physical_station_search_and_rotation_observation_e2e_pending",
      "terminal_gap": "cancel_acceptance_does_not_always_prove_physical_stop",
      "privacy_boundary": "좌표 전체를 일반 prompt에 넣지 않고 선택된 공간과 필요한 pose만 사용",
      "flagship_role": "환영 위치로 이동하고 경험 종료 후 안전 복귀"
    },
    {
      "group_id": "cleaning_environment",
      "display_name": "청정·공기질·환경",
      "agent_role": "Act + Observe + Verify",
      "readiness": "M3_MANAGED",
      "source_refs": [
        "CleaningAmpTaskExecutor",
        "CleaningTransaction",
        "AirQualityManager",
        "SourceFreshnessTracker"
      ],
      "registered_task_methods": [
        "getAirCleanerOperation",
        "getAirClearAutoStartModeEnable",
        "setAirCleanerOperation",
        "setStatusClean",
        "stopCleaning",
        "ampStop"
      ],
      "planning_context_bundles": ["air_quality", "cleaning"],
      "semantic_observation_contracts": [],
      "capability_ids": [
        "start_room_cleaning",
        "stop_cleaning",
        "air_quality_assessment"
      ],
      "act": "청정 시작·상태 변경·정지",
      "observe": "PM, TVOC, NOx, HCHO, CO2, 온습도, 통합 공기질, 청정 상태와 freshness",
      "evidence": "cleaning.started, cleaning.stopped, task terminal event",
      "planner_gap": "room_by_room_air_quality_is_not_a_first_class_managed_scan",
      "terminal_gap": "zero_dwell_configuration_can_make_cleaning_completion_ambiguous",
      "privacy_boundary": "환경 센서 의미값과 freshness만 사용",
      "flagship_role": "공기질과 배터리를 근거로 선택적 comfort action 수행"
    },
    {
      "group_id": "vision_perception",
      "display_name": "Vision·사람 존재·저조도",
      "agent_role": "Observe",
      "readiness": "M2_WSS_SCOPED",
      "source_refs": [
        "VisionAIManager",
        "WssVisionObserver",
        "WssSemanticObservationAdapter",
        "ObservationTaskExecutor"
      ],
      "registered_task_methods": [
        "observeVisionSemantics"
      ],
      "planning_context_bundles": [
        "interactions"
      ],
      "semantic_observation_contracts": [
        "security.person_detected",
        "vision.low_light_changed"
      ],
      "capability_ids": ["perception_presence_assessment"],
      "act": "원시 영상 action은 노출하지 않고 정지·관찰 자세가 보장된 의미 관찰만 TaskManager로 실행",
      "observe": "WSS의 지속 사람 감지·저조도 이벤트와 단발성 semantic-only Vision 관찰",
      "evidence": "stationary-observation.v1 privacy-filtered semantic observation",
      "planner_gap": "general_vision_summary_not_exposed",
      "live_e2e_gap": "platform_signed_stationary_vision_observation_e2e_pending",
      "terminal_gap": "non_wss_vision_consumers_have_no_shared_semantic_subscription",
      "privacy_boundary": "raw frame, bbox, 얼굴 유사도, member ID, PIN을 전송하지 않음",
      "flagship_role": "환영 경험을 계속할 사람이 있는지 최소 의미 상태로 확인"
    },
    {
      "group_id": "security_wss",
      "display_name": "WSS 보안 순찰·인증",
      "agent_role": "Act + Observe + Verify",
      "readiness": "M2_M3_MIXED",
      "source_refs": [
        "WssManager",
        "WssTransaction",
        "MainApiTaskExecutor",
        "WssTaskCompletionReporter"
      ],
      "registered_task_methods": [
        "checkSecurityBasicAvailability",
        "startSecurityMode",
        "pauseSecurityMode",
        "resumeSecurityMode",
        "stopSecurityMode"
      ],
      "planning_context_bundles": ["security"],
      "semantic_observation_contracts": [
        "security.verification_started",
        "security.verification_result",
        "security.verification_timed_out",
        "security.session_state_changed",
        "security.condition_changed"
      ],
      "capability_ids": ["security_patrol"],
      "act": "가용성 확인, 보안 시작·일시정지·재개·종료",
      "observe": "session, stage, 현재 Area, 저조도, 저전력 일시정지, 인증 결과",
      "evidence": "security.started, security.stopped, security.patrolCompleted",
      "planner_gap": "workflow_correlation_is_limited_to_taskmanager_started_security_sessions",
      "terminal_gap": "physical_wss_lifecycle_e2e_is_not_fully_verified",
      "privacy_boundary": "신원정보 없는 인증 outcome만 Cloud에 노출",
      "flagship_role": "귀가 사용자 존재를 확인하는 선택적 보안 관찰자"
    },
    {
      "group_id": "streaming_liveview",
      "display_name": "LiveView·Streaming·원격 이동",
      "agent_role": "Remote Observe",
      "readiness": "NO_GO",
      "source_refs": [
        "StreamingManager",
        "StreamingControlStub",
        "IStreamingControl.aidl"
      ],
      "registered_task_methods": [],
      "planning_context_bundles": [],
      "semantic_observation_contracts": [],
      "capability_ids": ["live_view"],
      "act": "stream, upload, manual move 기능은 별도 Binder domain에 존재",
      "observe": "중앙 Planning Context에는 상태가 없음",
      "evidence": "TaskManager terminal contract 없음",
      "planner_gap": "streaming_state_owner_and_correlation_not_exposed",
      "terminal_gap": "start_stop_and_physical_terminal_contract_missing",
      "privacy_boundary": "signature permission과 caller 검증 전 외부 Agentic 사용 금지",
      "flagship_role": "사용하지 않음"
    },
    {
      "group_id": "voice_llm_content",
      "display_name": "LLM·STT·TTS·콘텐츠",
      "agent_role": "Decide + Interact",
      "readiness": "M2_OBSERVABLE",
      "source_refs": [
        "LlmManager",
        "LlmTtsTaskExecutor",
        "LlmPipelineObservationBridge"
      ],
      "registered_task_methods": [
        "setChangeLlmStatus",
        "setLlmTts",
        "stopLlm",
        "stopTts"
      ],
      "planning_context_bundles": ["voice_llm"],
      "semantic_observation_contracts": [
        "voice_llm.pipeline_state_changed"
      ],
      "capability_ids": ["voice_content"],
      "act": "LLM 상태 변경, TTS 요청, LLM/TTS 중지",
      "observe": "내용 없는 pipeline state, busy, voice session, backend, output state",
      "evidence": "response accepted와 pipeline state observation",
      "planner_gap": "active_workflow_correlation_and_native_model_readiness_missing",
      "terminal_gap": "tts_playback_completed_is_not_a_canonical_terminal",
      "privacy_boundary": "STT text, prompt, response, TTS text를 상태 observation에 넣지 않음",
      "flagship_role": "환영·환경 브리핑과 사용자 목표 변경 처리"
    },
    {
      "group_id": "aws_iot_cloud",
      "display_name": "AWS IoT·MQTT·Cloud 연결",
      "agent_role": "Connect + Relay + Observe",
      "readiness": "M2_OBSERVABLE",
      "source_refs": [
        "AWSIoTMQTTClient",
        "CmdTopic",
        "IotTaskManagerBridge",
        "ConnectivityObservationBridge"
      ],
      "registered_task_methods": [],
      "planning_context_bundles": ["network"],
      "semantic_observation_contracts": [
        "network.aws_iot_session_changed"
      ],
      "capability_ids": ["connectivity_assessment"],
      "act": "Cloud command relay와 response publish는 IotAgent transport가 소유",
      "observe": "DeviceAgent가 callback으로 받은 cached AWS 연결 상태와 freshness",
      "evidence": "transport state observation이며 subscription ready나 publish ACK는 아님",
      "planner_gap": "subscription_publish_health_and_workflow_correlation_missing",
      "terminal_gap": "mqtt_acceptance_does_not_prove_device_physical_completion",
      "privacy_boundary": "credential, topic payload, signed URL을 일반 Planner context에 넣지 않음",
      "flagship_role": "귀가 trigger와 Cloud 브리핑 가능 여부를 판단하는 연결 상태"
    },
    {
      "group_id": "schedule_interaction",
      "display_name": "스케줄·Welcome·Interaction",
      "agent_role": "Act + Observe + Verify",
      "readiness": "M3_MANAGED",
      "source_refs": [
        "ScheduleTaskExecutor",
        "ScheduleManager",
        "TaskScheduledAdmissionRunner",
        "InterScheduleManager"
      ],
      "registered_task_methods": [
        "addSchedule",
        "editSchedule",
        "deleteSchedule",
        "scheduleiot",
        "setActiveSchedule",
        "puiEditSchedule",
        "callschedule",
        "getschedule",
        "getUpComingSchedule",
        "setScheduleExecuted",
        "getScheduleHolidays",
        "setScheduleHolidays",
        "setScheduleExecutionOnHoliday",
        "removeScheduleHoliday",
        "refreshSchedule",
        "gpsLocNearBy",
        "interSchedule"
      ],
      "planning_context_bundles": [],
      "semantic_observation_contracts": [],
      "capability_ids": [
        "schedule_workflow",
        "after_step_delay",
        "product_interaction"
      ],
      "act": "반복 일정, one-shot 예약 admission, Welcome/Wake-up/Relax interaction",
      "observe": "등록 schedule projection과 interaction lifecycle callback을 함께 관찰",
      "evidence": "interaction.started, arrived, actionStarted, actionEnded, returning, completed",
      "planner_gap": "active_interaction_stage_and_terminal_outcome_projection_pending",
      "terminal_gap": "cloud_typed_interaction_adapter_and_full_physical_e2e_partial",
      "privacy_boundary": "사용자 일정 원문 대신 실행에 필요한 최소 slot만 사용",
      "flagship_role": "Adaptive Welcome & Care의 제품 환영 lifecycle"
    },
    {
      "group_id": "app_vital_sign",
      "display_name": "Launcher 앱·VitalSign",
      "agent_role": "Human Checkpoint",
      "readiness": "M2_OBSERVABLE",
      "source_refs": [
        "FrameworkTaskExecutor",
        "AppSessionCompletionBridge",
        "setLauncherScreen"
      ],
      "registered_task_methods": ["setLauncherScreen"],
      "planning_context_bundles": [],
      "semantic_observation_contracts": [],
      "capability_ids": ["vital_sign_session"],
      "act": "Launcher 화면과 VitalSign 앱 세션 시작",
      "observe": "앱 session start/end callback",
      "evidence": "app session ended",
      "planner_gap": "active_app_session_and_user_checkpoint_state_not_exposed",
      "terminal_gap": "measurement_success_and_user_cancel_not_distinguished",
      "privacy_boundary": "측정 원시값은 별도 의료·제품 정책 없이 일반 LLM prompt에 넣지 않음",
      "flagship_role": "기본 환영 경험에는 포함하지 않고 별도 사용자 요청에서만 사용"
    },
    {
      "group_id": "settings_led_ui",
      "display_name": "기기 설정·PUI·LED",
      "agent_role": "Act",
      "readiness": "M3_MANAGED",
      "source_refs": [
        "IotTaskExecutor",
        "RoutineTaskExecutor",
        "ConfigApplierRegistry"
      ],
      "registered_task_methods": [
        "setDeviceStatus",
        "setConfig",
        "getConfig",
        "setEyeLedColor",
        "setCurrentPuiEyeLedColor",
        "startEyeLedScene"
      ],
      "planning_context_bundles": [],
      "semantic_observation_contracts": [],
      "capability_ids": ["device_setting"],
      "act": "기기 상태·설정·LED scene 변경",
      "observe": "일부 getConfig 결과 외 중앙 semantic state 없음",
      "evidence": "주로 method return 또는 request acceptance",
      "planner_gap": "effective_setting_state_and_ui_owner_not_exposed",
      "terminal_gap": "many_settings_have_ack_only_not_physical_confirmation",
      "privacy_boundary": "설정 key는 capability allowlist로 제한",
      "flagship_role": "저조도·manner 조건에서 허용된 표현만 조정"
    },
    {
      "group_id": "update_maintenance",
      "display_name": "업데이트·정비·기기 건강",
      "agent_role": "Observe + Guard",
      "readiness": "M1_M2_MIXED",
      "source_refs": [
        "UpdateTaskExecutor",
        "BatteryManager",
        "ErrorHandler",
        "TaskResourcePolicy"
      ],
      "registered_task_methods": [
        "getFirmwareVersion",
        "OTAUpdateArmResult",
        "OTAUpdateMcuResult",
        "setFirmwareUpdateStatus"
      ],
      "planning_context_bundles": [],
      "semantic_observation_contracts": [],
      "capability_ids": ["device_health_assessment"],
      "act": "업데이트 결과와 상태 반영",
      "observe": "배터리는 task_supervision bundle에 있으나 maintenance/resource 상태는 미노출",
      "evidence": "업데이트 method return과 일부 상태",
      "planner_gap": "maintenance_filter_update_and_resource_pressure_context_missing",
      "terminal_gap": "resource_monitor_has_no_confirmed_production_snapshot_producer",
      "privacy_boundary": "진단 전체 로그 대신 bounded health summary 사용",
      "flagship_role": "경험 시작 전 배터리·업데이트·자원 blocker 판정"
    },
    {
      "group_id": "task_supervision",
      "display_name": "TaskManager·상태·Supervisor 증거",
      "agent_role": "Observe + Decide + Verify",
      "readiness": "M2_M3_MIXED",
      "source_refs": [
        "FrameworkTaskExecutor",
        "TaskManager",
        "DevicePlanningContextProvider",
        "SemanticObservationStore"
      ],
      "registered_task_methods": [
        "getBatteryInfo",
        "getMainState",
        "getDeviceStatus",
        "getConfiguration"
      ],
      "planning_context_bundles": [
        "battery",
        "task_manager",
        "semantic_observations",
        "capabilities"
      ],
      "semantic_observation_contracts": [],
      "capability_ids": ["experience_supervision"],
      "act": "TaskManager admission, queue, cancellation, timeout, callback와 bounded replan 연결",
      "observe": "배터리 freshness, queue busy summary, active workflow/current step/progress, 최근 terminal과 의미 이벤트",
      "evidence": "STARTED, PROGRESS, COMPLETED, FAILED, CANCELLED와 workflow step event",
      "planner_gap": "platform_signed_runtime_snapshot_and_replan_e2e_pending",
      "terminal_gap": "platform_signed_observation_replan_to_physical_terminal_e2e_pending",
      "privacy_boundary": "bounded reason code와 typed facts만 Supervisor에 전달",
      "runtime_state_contract": {
        "contract_version": "device-task-manager-context.v1",
        "status": "code_connected_unit_verified",
        "active_task_limit": 4,
        "recent_terminal_limit": 4,
        "state_authority": "task_manager_task_record_snapshot",
        "privacy_policy": "scalar_allowlist_without_raw_input_result_message_conditions_or_reason_params"
      },
      "flagship_role": "전체 목표, 상태, decision budget, 재계획과 종료를 관리"
    }
  ],
  "flagship_experience": {
    "experience_id": "adaptive_welcome_care",
    "title": "Adaptive Welcome & Care",
    "specialist_stress_scenario": "adaptive_home_guardian",
    "reason": "Mobility, environment, Vision/WSS, AWS, LLM, interaction, TaskManager evidence, and bounded Supervisor decisions can be combined without enabling the NO_GO LiveView surface.",
    "runtime_status": "contract_connected_physical_e2e_pending"
  }
}
