4.3 KiB
4.3 KiB
id, status, discovery, criteria
| id | status | discovery | criteria | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| req-0004 | approved | dcy-0004 |
|
포트폴리오 데몬 배정 persistence와 소유자 불변식
Objective
포트폴리오 생성·수정에서 선택한 비-null managed_by_daemon_id를 일관되게 검증·저장하고, daemon의 존재·활성·소유자 변경과 경합하더라도 승인된 오류 계약과 동일 소유자 불변식을 원자적으로 보존한다.
Scope
POST /v1/portfolios가 비-nullmanaged_by_daemon_id를 생성 persistence에 반영하고 성공 응답과 후속 조회에서 같은 값을 반환한다.- 데몬 미선택 생성은 기존처럼
managed_by_daemon_id = null인 미배정 포트폴리오를 생성한다. - 생성과 PATCH의 비-null 데몬 지정·재지정은 server-generated UUID 형식, 존재, active 상태와 target portfolio owner 기준 동일 소유자를 검증한다.
- admin이 다른 사용자를 대신해 생성·수정하는 경우 호출자가 아니라 최종 target portfolio owner를 데몬 소유권 비교 기준으로 사용한다.
- malformed UUID는
422, 미존재·foreign daemon은 존재를 숨겨404, 소유자 범위의 inactive daemon은409로 실패하고 portfolio와 관련 상태를 부분 변경하지 않는다. - 데몬 검증과 portfolio write를 하나의 원자적 transaction 및 row-lock 경계로 직렬화한다.
- 데몬 비활성화가 assignment보다 먼저 확정되면 새 assignment를 거부하고, assignment가 먼저 확정된 뒤 비활성화되면 기존 reference를 보존하면서 기존 service-token revoke 계약을 적용한다.
- 참조 중인 daemon의 owner transfer를
409로 거부하고 owner, portfolio assignment와 broker credentials를 무변경으로 보존한다. 미참조 daemon owner transfer는 기존 credential invalidation 계약을 유지한다. - 기존 portfolio mutation의 인증·소유권·strategy·asset·disabled-state 보호를 유지한다.
Constraints
managed_by_daemon_id는 기존 soft reference와 server-generated UUID identity를 유지하며 내부 식별자·테이블 구조를 변경하지 않는다.- explicit
managed_by_daemon_id: nullPATCH 해제는 이 REQ가 소유하지 않는다. - 자동 데몬 배정·해제·이전·재배정과 기존 데이터 일괄 backfill을 수행하지 않는다.
trex-web코드·타입·화면·테스트와 필수strategy_idUI 적응은 범위 밖이다.
Current Implementation Assessment
- 이 REQ와 AC는 요청자의 명시적 지시에 따라 confirmed Discovery와 이미 local
main에 반영된 구현을 사후 specification으로 포착한다.approved/active는 normative authority이며 과거 ProofLine implementation chronology, terminal lifecycle closure, 배포 또는 release satisfaction marker가 아니다. - 제품 구현은
e2102b6f2b855b7679ab67818202ef706d9848fb와 1차 QC 보완e90519ad3968b48711ced37f42fb45bd883a82af에 존재하며, evidence 포함 현재 localmain은2abd67da973d334c18d94396292bcc19bd2f81d8이다. - 2차 QC에서 집중 API/CRUD/admin daemon
62 passed, 기본 전체 suite624 passed, 18 skipped, migration head 적용 disposable PostgreSQL daemon+strategy integration12 passed, assignment/owner-transfer race 반복5/5 passed를 확인했다. - 변경 production 및 신규 line-0004 테스트 Ruff,
compileall,git diff --check,proofline validate가 통과했고 별도 read-only 독립 QC reviewer도 PASS를 기록했다. 기존 admin daemon test의 F401 6건과 deprecation warning은 기준 커밋에 존재한 비차단 debt다. - push, PR, 원격 main 반영, 운영 DB migration 실행, 배포와 release는 수행되지 않았다.
Non-Goals
trex-web또는 다른 서비스 변경- PATCH의 명시적
managed_by_daemon_id: null해제 지원 - daemon 실행·중지·재시작이나 배포 자동화
- 자동 assignment 해제·owner 이전·다른 daemon 재배정·backfill
- 내부
daemons·portfolios식별자 또는 테이블 구조 변경 - push, PR, 원격 main 반영, production migration, 배포 또는 release 승인
- 사후 specification으로 과거 구현에 ProofLine 정식 delivery chronology나 terminal closure를 소급 부여하는 행위