gito/agent-roadmap/phase/control-plane-foundation/milestones/repo-registry-and-workspace-lease.md

2.6 KiB

Milestone: Repo Registry and Workspace Lease

위치

  • Roadmap: agent-roadmap/ROADMAP.md
  • Phase: agent-roadmap/phase/control-plane-foundation/PHASE.md

목표

관리 대상 Git repository와 workspace slot/lease를 PostgreSQL source of truth로 저장한다. 여러 worker나 agent-shell이 같은 workspace를 동시에 잡지 않도록 lease, dirty state, credential ref 경계를 정의하고 테스트한다.

상태

[계획]

승격 조건

  • 없음

구현 잠금

  • 상태: 해제
  • 결정 필요: 없음

범위

  • repo registry model과 migration
  • workspace root, slot, lease state model
  • credential value가 아닌 credential_ref 저장 기준
  • lease acquire/release, dirty/error state 전환
  • local/worker가 같은 slot을 중복 배정받지 않도록 하는 DB 기준

기능

Epic: [registry] Repository registry

Gito가 관리할 repository와 기본 branch/workspace root/credential ref를 저장한다.

  • [repo-model] Repo model과 Postgres schema를 정리한다. 검증: migration에 remote_url, default_branch, workspace_root, credential_ref가 포함된다.
  • [repo-store] repo create/get/list/update store boundary를 만든다. 검증: storage test가 중복 id와 필수 필드 validation을 확인한다.
  • [repo-contract] proto-socket repo channel 후보 DTO와 REST bootstrap 예외를 contracts에 기록한다.

Epic: [lease] Workspace lease

작업 slot을 안전하게 예약하고 해제하는 원장을 만든다.

  • [lease-model] WorkspaceLease state를 available, leased, dirty, error 기준으로 확정한다.
  • [lease-store] DB transaction으로 하나의 available slot만 lease하는 store boundary를 만든다. 검증: 동시 lease 시 같은 slot이 중복 반환되지 않는 테스트를 둔다.
  • [lease-release] release, dirty, error 전환 기준을 operation 결과와 연결한다.

완료 리뷰

  • 상태: 없음
  • 요청일: 없음
  • 완료 근거: 없음
  • 리뷰 필요:
    • 사용자가 완료 결과를 확인했다
    • archive 이동을 승인했다
  • 리뷰 코멘트: 없음

범위 제외

  • 실제 Git command 실행
  • agent-shell 연결
  • provider adapter 구현
  • Flutter UX 구현

작업 컨텍스트

  • 관련 경로: services/core/internal/core/, services/core/internal/storage/, services/core/migrations/, packages/contracts/notes/gito-control-plane.md
  • 표준선(선택): Postgres가 lease와 audit의 source of truth다.
  • 선행 작업: Runtime Scaffold and Contract Baseline
  • 후속 작업: Platformless Git Operation Engine
  • 확인 필요: 없음