← Docs hub

관측 근거 저장 책임을 Evidence 서비스로 이관

목적과 실제 폴더

DeviceAgent 내부 Task 구현에 섞여 있던 관측 보관 책임을 독립 서비스로 옮긴다. 공개 API, Android 전달, 장치 실행을 한 클래스에 합치지 않는다.

책임 MR7 소유 위치 (skix-framework/base/ 기준)
관측 저장·중복 제거·조회·구독 services/core/java/com/sk/airbot/frameworkservice/server/execution/evidence/EvidenceManagerService.java
서비스 객체 생성 services/core/java/com/sk/airbot/frameworkservice/server/runtime/SkixFrameworkCompositionRoot.java
서비스 상태·의존성 감독 services/core/java/com/sk/airbot/frameworkservice/server/control/lifecycle/
원본 동작·생명주기 검증 services/tests/src/com/sk/airbot/frameworkservice/server/execution/evidence/

원본 근거와 보존한 동작

원본은 a1-packages-mr6의 task_manager 브랜치, 커밋 d1d8dfbc4c807a32990f4350cf09c49f159f5848의 apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/task/observation/SemanticObservationStore.java다. MR6 작업 폴더의 현재 체크아웃은 speaker_identification이므로 체크아웃 파일을 원본으로 간주하지 않았다. 브랜치를 바꾸지 않고 Git 객체에서 원본을 읽었다.

의도적으로 바꾼 부분

전역 싱글턴 대신 Runtime이 같은 ServiceLifecycleSupervisor를 주입하여 생성한다. 이 Evidence 단계의 기본 구성은 Runtime + State + Evidence + Policy였다. 현재는 Resource·Capability·Task까지 실제 생성하는 7개 서비스 구성으로 확장했다. 없는 서비스를 자리 채우기용으로 생성하지 않는 원칙은 유지한다. 다른 감독자를 사용하는 서비스는 등록 전에 lifecycle_mismatch로 거부한다.

저장·조회·구독 추가는 READY에서만 허용하고 나머지 상태는 not_ready로 거부한다. Runtime 장애로 Evidence가 DEGRADED가 되면 Runtime 복구만으로 자동 재개하지 않는다. Evidence 자체의 명시적 복구가 필요하다. 중지 훅은 구독자를 해제하고 관측 기록을 지우지 않는다. 구독 해제는 장애·중지 상태에서도 허용한다. 중지된 감독자에 같은 ID를 재등록하는 계약은 추가하지 않았다.

외부 판단 힌트는 requiresUpperLevelDecision으로 표현한다. 특정 제품명·프로토콜이나 클라우드 필수 실행을 의미하지 않는다. 개인정보 분류·금지 필드 비교는 Locale.ROOT를 사용한다. 터키어 기본 로케일에서 PRIVATE_KEY 검사가 누락되는 원본 동작을 회귀 테스트로 재현한 뒤 보완했다.

완료하지 않은 것 — 이 저장소를 완료 판정기로 쓰지 않는다

남은 연결 책임과 주의점
도메인 관측 입력 실제 Agent/provider 관측을 인증하고 도메인 상태와 연계할 어댑터 필요
Task 물리 완료 원본 TaskCompletionStateStore·TaskCompletionWatcher의 동작을 별도 이관해야 함. 관측 하나의 저장은 성공 증거가 아님
Android 구독 전달 원본 SemanticObservationCallbackPublisher의 Bundle 전송을 서버 core에 섞지 않고 전달 어댑터로 분리해야 함
영속성·재시작 메모리 보관이며 재시작 이후 복원하지 않음. 기본 UUID는 관측 인스턴스 식별자이지 Android 부팅 ID 보장이 아님
시간 신뢰 원본의 max(0, now-observedAt)와 freshness > TTL을 유지함. 미래 시각은 0으로 보이므로 실제 최신성 인증이 아님
개인정보·호출자 검증 금지 필드명 검사는 내용 전체 정화나 호출자 인증이 아님
동시성과 중지 준비 상태는 접수 시 검사. 실행 중 콜백 종료 대기·전역 통지 순서·중지와 모든 연산의 원자성은 보장하지 않음

다음 통합은 도메인의 실제 관측 → Task별 상관관계 확인 → 완료·실패 판정 → 상태와 근거 반환을 잇는 단계다. 단순히 장치 응답을 받았다는 이유로 Task 성공을 합성하지 않는다.

검증 범위

2026-09-08 전체 서버·SDK JVM 테스트와 release Java 컴파일을 재실행했다. 폴더·레이어 경계 검사 및 검사기 자체 회귀 테스트도 통과했다. 실기기 설치, AOSP 이미지 빌드, 물리 동작, 전체 Binder·Task·Agent 왕복 검증은 수행하지 않았다.

Connections

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