← Docs hub

Task Scheduling Runtime Readiness

TaskManager의 시간 실행 구조, 현재 구현, 테스트와 실기기 증거를 한 문서에서 관리한다. 제품의 반복 Schedule, Workflow 내부 지연, TaskManager의 단기 예약을 구분하고 구현됨, 자동 검증됨, 실기기 미검증, 미구현을 분리한다.

Task Scheduling Runtime Readiness

1. 2026-07-26 기준 결론

TaskManager scheduling은 단순 아이디어 단계가 아니다. 예약 저장, due admission, exact alarm opt-in, boot 이후 재등록, missed-run grace까지 소스에 들어와 있다.

단일 상대시간 예약의 등록, 재부팅 후 record 복원, 조회, 취소, request_id 멱등성은 실기기에서 확인했다. 이어서 수동 due admission으로 단일 DIRECT task가 한 번만 실행되는 것과 missed-run BLOCKED callback이 Cloud replan으로 이어지는 것도 확인했다. 하지만 다음 두 문장은 아직 증명되지 않았다.

  1. exact alarm 또는 periodic worker가 실제 due 시점에 자동으로 한 번만 실행한다.
  2. 단말 재부팅 후 exact alarm 재등록부터 due 실행까지 중복 없이 이어진다.

따라서 현재 상태는 다음과 같다.

API/저장/due admission/exact alarm source 구현
  -> JVM 회귀 테스트 통과
  -> Cloud schedule 계약 테스트 통과
  -> 실기기 등록/boot restore/query/cancel/idempotency 통과
  -> 수동 due DIRECT 실행과 scheduleId/taskId correlation 통과
  -> missed-run BLOCKED -> on-device -> Cloud replan 통과
  -> exact alarm/periodic worker 자동 due E2E는 미완료

2. 근거 소스

책임 기준 파일
schedule API, record, durable store, admission TaskManager.java
periodic/exact alarm 등록과 due runner TaskScheduledAdmissionRunner.java
exact alarm broadcast 수신 TaskScheduledAdmissionReceiver.java
boot 시 scheduler 재등록 BootReceiver.java
DeviceAgent 초기화와 receiver 연결 DeviceAgent.java
외부 System App facade TaskManagerClient.java

기준 경로:

/home/silogood/work/1.A1_SoC_new/SoC/a1-packages-mr6/apps/DeviceAgent
/home/silogood/work/1.A1_SoC_new/SoC/a1-packages-mr6/apps/TaskManagerClient

3. 구현·검증 매트릭스

기능 소스 Unit Shadow Live 판정
scheduleTask 있음 통과 계약 확인 등록 검증 부분 실기기 검증
scheduleWorkflow 있음 통과 계약 확인 미검증 구현됨
getScheduledTasks 있음 통과 query 확인 API/CLOUD 교차 source 조회 실기기 검증
cancelScheduledTask 있음 통과 계약 확인 CANCELLED event로 monitor 정리 실기기 검증
durable JSON restore 있음 통과 해당 없음 재부팅 후 같은 scheduleId 조회 실기기 검증
request idempotency 있음 통과 해당 없음 같은 requestId가 기존 scheduleId 반환 실기기 검증
runDueScheduledTasks 있음 통과 계약 확인 DIRECT 수동 due 실행 실기기 검증
fresh context admission 있음 통과 blocked contract 확인 상태변경 미검증 부분 검증
busy admission block 있음 통과 blocked contract 확인 미검증 구현됨
missed-run grace 있음 통과 reason 확인 수동 due에서 actuator 미실행 확인 실기기 검증
periodic worker opt-in 통과 해당 없음 미검증 source ready
exact alarm opt-in 통과 해당 없음 미검증 source ready
LOCKED_BOOT_COMPLETED 재등록 있음 통과 해당 없음 미검증 source ready
scheduleId/taskId correlation event 있음 통과 계약 확인 DIRECT STARTED/COMPLETED 확인 부분 실기기 검증
blocked -> Cloud replan 계약 있음 Cloud test 통과 계약 확인 missed-run 폐루프 확인 실기기 검증
scheduled/admitted/running UI 일부 해당 없음 trace 일부 미완료 UI 보강 필요

source ready는 코드가 존재한다는 뜻이지 제품 release ready라는 뜻이 아니다.

시간 실행의 세 계층

계층 소유자
제품 Schedule 매일 9시 나이트모드 기존 Schedule 도메인과 제품 UI·DB
TaskManager 예약 20분 뒤 청정 시작 durable schedule record와 due admission
Workflow 상대 지연 이동 완료 30초 후 화면 전환 선행 step dependency와 relativeDelayMs

세 계층은 같은 문장을 처리할 수 있어도 생명주기와 반복 정책이 다르다. due 시점에는 모두 fresh device context로 재검증한 뒤 기존 submitTask 또는 submitWorkflow runtime에 재진입한다.

4. 이번 턴의 fresh test evidence

2026-07-26에 아래 테스트를 새로 실행했다.

대상 명령 범위 결과
MR6 DeviceAgent 전체 testDebugUnitTest 149 tests, 0 failures
On-device MaumAi 전체 testDebugUnitTest 85 tests, 0 failures
Cloud A2A schedule/task-event/orchestrator 핵심 계약 14개 묶음 151 tests, 0 failures

Cloud 테스트 범위:

test_schedule_session_state.py
test_schedule_workflow_router.py
test_schedule_workflow_orchestrator.py
test_schedule_multiturn_sequence_flow.py
test_task_orchestration_roundtrip.py

실기기 증거:

기존 추가 저장 증거:

r31/r32는 전체 scheduling 실기기 증거가 아니다. route, 계약, read-only context 경로의 증거로만 사용한다. 2026-07-26 추가 증거는 수동 due와 missed-run replan을 포함하지만 exact alarm, periodic worker, 재부팅 후 자동 due 실행은 포함하지 않는다.

5. 실제 runtime 상태 전이

scheduleTask / scheduleWorkflow
  -> SCHEDULED
  -> durable snapshot
  -> periodic worker 또는 exact alarm
  -> runDueScheduledTasks
  -> fresh device context + policy admission
       |- 허용: submitTask / submitWorkflow -> ADMITTED
       `- 거절: BLOCKED + reason + requires_cloud_decision
  -> 기존 TaskManager runtime
  -> RUNNING / PAUSED / COMPLETED / FAILED / CANCELLED

예약 등록과 실행 runtime은 별도 엔진이 아니다. due 이후 기존 submitTask 또는 submitWorkflow로 재진입해야 queue, executor, callback, reason contract를 재사용한다.

6. 현재 opt-in 운영점

property 의미
persist.sys.deviceagent.taskmanager.scheduler.enable periodic scheduler 활성화
persist.sys.deviceagent.taskmanager.scheduler.interval_ms periodic 간격
persist.sys.deviceagent.taskmanager.scheduler.limit 한 번에 admission할 상한
persist.sys.deviceagent.taskmanager.scheduler.exact_alarm exact alarm 활성화
persist.sys.deviceagent.taskmanager.schedule_persist durable store 활성화
persist.sys.deviceagent.taskmanager.schedule_persist_path snapshot 경로 override

기본 비활성 또는 opt-in 항목은 단말 제품 정책과 배터리 영향 검토 없이 기본값을 바꾸지 않는다.

7. 남은 구현

7.1 계약 보강

7.2 Cloud 폐루프

7.3 UI

8. 다음 검증 순서

Gate A. Contract

  1. 등록 payload schema
  2. 조회/취소
  3. scheduleId/taskId correlation
  4. event/reason 필드

Gate B. Host/Unit

  1. snapshot write/read
  2. due boundary
  3. missed-run grace
  4. busy/context block
  5. duplicate alarm

Gate C. Virtual/Shadow

  1. 자연어 -> scheduleWorkflow
  2. due event -> admission
  3. blocked -> Cloud decision
  4. user clarification
  5. cancel/update

Gate D. Read-only live

  1. property 확인
  2. 등록 목록 조회
  3. alarm registration dump 확인
  4. TaskManager 상태와 monitor correlation

Gate E. State-changing live

  1. 2~5분 뒤 단일 설정 task
  2. due workflow 실행
  3. 음성 세션 중 due -> pause/resume
  4. busy block
  5. cancel before due

Gate F. Reboot

  1. 미래 schedule 등록
  2. 단말 재부팅
  3. LOCKED_BOOT_COMPLETED 수신
  4. exact alarm 재등록
  5. due admission
  6. missed-run policy 판정

9. Release evidence bundle

각 실기기 시나리오는 아래를 한 묶음으로 보관한다.

test case id
schedule request JSON
getScheduledTasks before/after
alarm/worker registration evidence
TaskManager event timeline
scheduleId -> admittedTaskId correlation
DeviceAgent logcat slice
Cloud task_event / replan trace
monitor screenshot
final verdict

APK 교체가 필요한 검증은 platform cert를 먼저 확인한다. Android debug cert APK를 /system/priv-app에 push하지 않는다.

10. Exit criteria

TaskManager scheduling을 제품 검증 완료로 표기하려면 아래가 모두 필요하다.

  1. exact alarm과 periodic worker 각각 1개 이상의 실기기 증거가 있다.
  2. 재부팅 전후 같은 scheduleId가 복원되고 중복 실행되지 않는다.
  3. missed-run grace 초과 시 actuator가 실행되지 않는다.
  4. due 시점 busy/voice-active 상태에서 policy대로 block 또는 pause된다.
  5. blocked event가 Cloud decision 또는 사용자 확인으로 이어진다.
  6. monitor가 schedule -> admission -> runtime 전체 correlation을 보여준다.
  7. 기존 즉시 task/workflow 회귀 성능과 성공률이 유지된다.

11. 이어서 볼 문서

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date