프로젝트

일반

사용자정보

Actions

이슈 #453

진행중
HP HP

이슈 #448: Phase 0.8 — dKernel Agent Identity Session

Phase 0.8-4 — DKernelTaskService skeleton (dshai → dKernel routing)

이슈 #453: Phase 0.8-4 — DKernelTaskService skeleton (dshai → dKernel routing)

Henry Park이(가) 약 5시간 전에 추가함.

상태:
해결
우선순위:
보통
담당자:
목표버전:
시작일:
2026/05/19
완료일:
진척도:

0%

추정시간:

설명

범위

gap-report.md §8 #4. dshai 의 dshcore command map 을 서버 측으로 옮기면 dKernel 이 "명령·결과" 레벨의 권위가 됨. 이후 policy / lease / launch 는 이 계층 위에서 추가.

작업

  • proto DKernelTaskService.Execute(command, args_json, session_id) skeleton — 내부적으로 dshcore command map 을 재사용
  • cmd/dshai 가 드라이버를 DfsService/DeltaService 직접 호출 → DKernelTaskService.Execute 경유로 전환
  • session_id (0.8-3) 권위 고정적 적용
  • policy engine 은 이 이슈에 없음 — skeleton 만, 후속 Phase 0.9 또는 별도 이슈에서
  • audit (0.8-2) 는 계속 Execute 수준으로 기록

DoD

  • DKernelTaskService.Execute RPC + handler skeleton
  • dshai 가 이 경로로 움직이고 기존 dFS/Delta 직접 경로는 하위 호출만 남김 또는 deprecation 표시
  • error code 매핑은 기존 dshcore.Code 그대로 적용
  • regression smoke 통과

관련

  • depends on #452 (Agent session)
  • precedes #448 자식 0.8-5 (문서)

HP Henry Park이(가) 5달 전에 변경 Actions #1

  • 상태을(를) 신규에서 해결(으)로 변경되었습니다.

0.8-4 DKernelTaskService skeleton + dshai thin client 구현 완료

commit:server2|92f3a91

Phase 0.8 네 번째 슬라이스 마감. dKernel 이 dshai 명령 표면의 authoritative execution surface 가 되었고, dshai 는 thin client 로 축소.

Wire surface

DKernelTaskService.Execute(session_id, command, args_json bytes, request_id) → (result_json bytes). opaque JSON in/out — 14 command allowlist (dfs.* 8 + vega.* 6).

Server-side dispatcher (internal/dkernel/)

  • dispatcher.go: guardSessionPrincipal + 14-command allowlist routing
  • dfs_commands.go: 8 dFS 명령 — args decode + DfsHandler RPC method 직접 호출 (ConnectRPC self-call X) + dshcore JSON shape 로 일관 직렬화
  • vega_commands.go: 6 Vega 명령 — 같은 패턴, DeltaHandler
  • handler.go: DKernelTaskHandler 가 dispatcher 경유

Permission boundary 보존

  • AuthInterceptor 는 여전히 유일 permission gate
  • dispatcher 의 session check 는 추가 검증 (JWT 이후)
  • cross-principal session_id 재사용 = PermissionDenied
  • missing/revoked/expired 는 advisory (audit interceptor 의 session_status 로 관찰)
  • enforcement 는 dKernel governance 슬라이스에서

dshai thin client 화

dispatch() 가 ~270 줄의 typed switch 에서 한 줄의 client.ExecuteTask(...) forward 로 축소. handleLine 이 json.RawMessage(result_json) 으로 envelope embed — 이중 encoding 없음. command allowlist / args validation / base64 decode 모두 server-side.

변경하지 않은 항목

  • AgentSessionService 는 dshai 직접 호출 유지 (라이프사이클 control plane; Execute 경유는 순환일)
  • session 강제 (revoked/expired 거절) 는 advisory 유지 — 0.9+ 슬라이스
  • apismoke + 모바일 SDK 는 DfsService/DeltaService 직접 호출 유지 (dshai envelope 못 말함)

테스트

internal/dkernel/dispatcher_test.go (신규):

  • TestExecuteRejectsEmptySessionID
  • TestRouteCommandRejectsUnknownCommand
  • TestRouteCommandAllowlistShape (14 sub-case — list drift 자동 감지)
  • TestExecuteRejectsAnonymousSession

cmd/dshai/main_test.go slim:

  • 제거: args-level case (unknown command / dfs.write content / base64 / copy src+dst / malformed args) — server 위임
  • 유지: envelope parsing, malformed JSON, missing command

검증

go test  ./sdk ./internal/dshcore ./internal/server \
         ./internal/store ./internal/handler ./internal/dkernel \
         ./cmd/dshai ./cmd/dsh ./cmd/sdktest      — all clean
go vet   ./...                                    — clean
go build ./...                                    — clean

문서

docs/phase-0.8/decisions/2026-05-20-dkernel-task.md 신규 ADR. decision-log.md index 에 row 추가. 이전 3개 ADR 파일 (signer / command-audit / agent-session) 도 같은 commit 으로 올라감.

Actions

내보내기 PDF Atom