Files
trex-core/docs/discovery/dcy-002_20260603_slot-core-daemon-http-api.md
T

22 KiB

0. 문서 상태

이 문서의 현재 상태와 식별 정보를 기록한다. 문서 추적과 승인 흐름에 필요한 최소 메타데이터를 적는다.

  • 상태: confirmed (transport 부분은 dcy-006/BAT-007 에서 RabbitMQ 로 대체됨; logical intent/admission 계약은 유효)
  • 문서 ID: dcy-002_20260603_slot-core-daemon-http-api
  • 이슈명: trex-core 슬롯 코어 데몬화 + HTTP intent API
  • 작성 시각(KST): 2026-06-03
  • 마지막 갱신 시각(KST): 2026-06-05 (BAT-007 transport supersede)
  • 대체됨: 본 Discovery 의 HTTP /v1 API transport 가정은 dcy-006(strategy-module-rabbitmq-transport, BAT-007)에서 RabbitMQ messaging 으로 대체됨. logical 계약(intent admission, idempotency via intent_log, 단일 writer 불변식)은 그대로 유효하며 transport 만 교체. adapters/api/ HTTP 어댑터, GET /v1/healthz, POST /v1/intents/buy|sell, GET /v1/slots, GET /v1/capacity 엔드포인트는 BAT-007 에서 제거됨.
  • 후속 Discovery 참조: dcy-006_20260605_strategy-module-rabbitmq-transport (transport 대체)
  • 생성된 REQ 참조: REQ-005, REQ-006, REQ-007, REQ-008, REQ-009

1. 계획 상태 요약

현재 Discovery가 어떤 배경에서 작성되고 있는지, 연계 문서가 있는지, 지금 시점의 해석이 무엇인지 짧게 요약한다.

  • 연계 문서 현황:
    • 관련 점수 파일: 미생성
    • 관련 TODO/메모: trex-orbit orbit-v2_plan.md(3-데몬 분리 설계안 — 슬롯 코어/매수·매도 결정 producer/ intent 핸드오프 사전 설계)
  • 해석:
    • dcy-001/BAT-001 로 trex-core 에 slot 순수 도메인(in-memory, 라이브러리)이 시드됐다. 이번 Discovery 는 그 코어를 장기 실행 데몬으로 승격하고, 매수·매도 전략이 HTTP API 엔드포인트로 intent 를 제출/조회하는 경계를 정의한다.
    • 운영자 결정: 전략↔코어 경계는 네트워크 HTTP API다(DB-only outbox 가 아니라 API 엔드포인트). 순수 도메인은 안쪽 코어로 유지하고 데몬·API·영속화를 바깥 레이어로 추가한다(onion).

2. 요구사항 판정 결과

이번 요청이 기존 요구사항과 비교해 신규인지, 유사한지, 중복인지 판단하고 그 근거를 남긴다.

  • 판정: 신규
  • 근거
    • dcy-001 은 "순수 도메인 이식(라이브러리)"이 문제 정의였고, 이번은 "데몬화 + API 경계 + 영속화"로 범위·구조가 다르다.
    • dcy-001 이 명시적으로 Out of Scope 로 둔 영속화/CLI/런타임을 정면으로 다루므로 기존 Discovery 갱신이 아니라 후속 독립 주기가 맞다.

3. 문제점의 요약

문제의 현재 상태, 기대 상태, 관련 이해관계자, 제약사항을 정리한다. Discovery의 핵심 맥락을 가장 먼저 이해할 수 있어야 한다.

  • 현재 상태
    • trex-core 는 trex_core/domain/slot/ 순수 도메인만 보유(상태탐색 결과: server/api/daemon/http/psycopg 참조 0, console_scripts 0). SlotService 는 in-memory repo 로만 구동되고 장기 실행 프로세스·외부 호출 경계가 없다.
    • 영속화 구현체(PostgreSQL SlotRepository)·브로커·API·데몬 런타임이 모두 부재(dcy-001 에서 의도적으로 범위 밖이었음, dcy-001 R-1).
    • 설계 참고자료(orbit-v2_plan.md)는 이미 슬롯 코어 단일 writer(불변식 A)·단일 브로커 세션(불변식 B)·buy/sell intent 핸드오프·safety floor 를 정리해 둔 상태다.
  • 기대 상태
    • trex-core 가 데몬 프로세스로 떠서 slot 도메인을 durable 단일 writer로 소유한다.
    • 매수·매도 전략 데몬이 HTTP API 로 intent 를 제출하고(매수/매도), holding 슬롯 스냅샷을 read-only 로 조회한다.
    • 코어가 intent 를 심사(admission)해 슬롯 전이를 단독 수행한다(전략은 "제안", 코어가 "집행").
  • 이해관계자
    • 문서 작성자/구현자(AI agent)
    • 리뷰어/승인자(운영자, genichin@gmail.com)
    • 코어 API 소비자: 매수·매도 전략 데몬(별도 프로세스)
  • 제약사항
    • 불변식 A — daily_slot 단일 writer 는 코어뿐. 전략은 슬롯을 직접 쓰지 않는다.
    • 순수 도메인 경계 유지 — trex_core.domain.slot 은 웹 프레임워크/DB 드라이버에 의존하지 않는다(의존은 API·persistence 어댑터 레이어에만).
    • dcy-001 부록 A 의 Slot 컬럼 계약을 영속화 구현이 만족해야 한다.

주요 사용자 시나리오

사용자 또는 운영자가 실제로 어떤 상황에서 이 변경을 필요로 하는지 대표 시나리오를 적는다.

  • 매수 전략 데몬이 신호 발생 시 POST /v1/intents/buy(symbol/qty/...)를 호출하면, 코어가 admission 통과 시 idle→pending_buy 로 전이하고 결과를 응답한다.
  • 매도 전략 데몬이 GET /v1/slots?status=holding 로 보유 슬롯 스냅샷을 읽어 전략을 평가한 뒤 POST /v1/intents/sell 로 청산 intent 를 제출한다.
  • 운영자가 GET /v1/capacity·GET /v1/healthz 로 코어 데몬의 슬롯 가용성과 생존을 모니터링한다.

4. 이번에 정의할 변경

이번 Discovery에서 다루는 핵심 변경 항목을 목록으로 적는다. 기능, 구조, 규칙 변경을 함께 포함해도 된다.

  • 데몬 런타임: trex-core 를 장기 실행 프로세스로 기동하는 엔트리포인트 + lifecycle(start/shutdown/healthz).
  • HTTP API 경계: intent 제출(buy/sell) + holding 슬롯 read-only 스냅샷 + capacity/health 엔드포인트.
  • 영속화: SlotRepository 의 PostgreSQL 구현(단일 writer, advisory lock 실제화) + 스키마/마이그레이션. in-memory 는 테스트용으로 잔존.
  • 멱등 intent 처리(OQ-1 결정): intent_id 기반 dedup + 수락 시 동기 슬롯 전이 커밋(불변식 A 강제). 수락된 intent 는 같은 트랜잭션에서 intent_log 에 durable 기록(dedup 저장소 + audit + 향후 outbox 전구체). 완전 비동기 outbox 는 브로커 집행 Discovery 로 Deferred.
  • baseline 갱신: docs/project-structure.md·docs/runtime-flows.md·docs/interface-contract.md 에 데몬/API/영속화 레이어 반영.

영향 범위

변경이 미칠 코드/문서/운영 범위를 명시해 REQ 정제와 batch planning에서 추정 누락을 줄인다.

  • 코드 영향:
    • 신규 레이어: trex_core/ 하위 API 어댑터(FastAPI+uvicorn, OQ-2 결정), persistence 어댑터(psycopg), 데몬 런타임/엔트리포인트.
    • pyproject.toml: FastAPI+uvicorn + psycopg 의존성 및 console_scripts 추가. 도메인 패키지는 무의존 유지.
  • 문서 영향:
    • docs/interface-contract.md 에 HTTP API 계약 추가, docs/runtime-flows.md 에 데몬/요청 흐름 추가, docs/data-model.md/docs/project-structure.md 갱신.
  • 운영 영향:
    • 신규 운영물: 장기 실행 데몬 프로세스 + PostgreSQL 의존 + API 포트/헬스체크. 배포·모니터링 절차 신설.

5. 요구사항 목록

실제로 구현과 검증으로 이어질 요구사항을 기능/비기능으로 나누어 정리하고, 범위 경계를 명확히 적는다.

기능 요구사항

  • FR-1: trex-core 를 데몬으로 기동하는 엔트리포인트와 lifecycle(기동/정상종료/GET /v1/healthz)을 제공한다. 거래일 슬롯 사전할당(preallocate)은 공개 엔드포인트가 아니라 데몬 lifecycle 내부(기동/스케줄) 책임으로 둔다(OQ-3 결정).
  • FR-2: HTTP API 로 매수 intent(POST /v1/intents/buy)와 매도 intent(POST /v1/intents/sell)를 수락하고, 코어가 admission/검증 후 슬롯 전이(idle→pending_buy / holding→pending_sell)를 단독 수행한다. API 는 /v1 버전 프리픽스를 사용한다(OQ-3 결정).
  • FR-3: HTTP API 로 holding 슬롯 스냅샷(GET /v1/slots?status=holding)과 capacity(GET /v1/capacity)를 read-only 로 제공한다.
  • FR-4: intent 는 intent_id 멱등키로 dedup 하여 동일 intent 재전송이 슬롯을 중복 전이시키지 않는다. 수락 시 admission+슬롯 전이를 동기로 커밋해 호출자에게 admit/reject 를 응답하고(OQ-1 결정), 수락된 intent 를 intent_log(intent_id, payload, decision, ts) 에 같은 트랜잭션으로 durable 기록한다. GET /v1/intents/{intent_id} 로 결정을 재조회할 수 있어(응답 유실 시) 멱등 재시도를 지원한다. 완전 비동기 outbox 는 브로커 Discovery 로 Deferred.
  • FR-5: SlotRepository 의 PostgreSQL 구현을 추가해 코어가 daily_slot 단일 writer 로 durable 하게 동작한다(advisory lock 실제화). 스키마는 trex-core 소유의 신규 마이그레이션으로 작성하되 dcy-001 부록 A 를 단일 기준으로 하고 orbit-v2 DDL 을 참조 구현으로만 쓴다(OQ-4 결정). 슬라이스 1 테이블: daily_slot(부록 A 16컬럼)·daily_symbol_entries·slot_transition_log + intent_log(OQ-1). daily_slot_archive/prune 는 범위 밖. EXPECTED_SLOT_FIELDS ↔ daily_slot 실제 컬럼(information_schema) 드리프트 테스트를 동반해 dcy-001 OQ-2 가 인계한 DB-side 검사를 실현한다.
  • FR-6: docs/interface-contract.md·docs/runtime-flows.md·docs/project-structure.md·docs/data-model.md 를 데몬/API/영속화 레이어에 맞게 갱신한다.

비기능 요구사항

성능, 운영성, 일관성, 자동화 안정성 등 기능 외 요구사항을 적는다.

  • NFR-1: 도메인 순수성 유지 — trex_core.domain.slot 은 웹 프레임워크/psycopg 에 의존하지 않는다(의존은 API·persistence 어댑터 레이어에 격리; import 스윕으로 검증).
  • NFR-2: 단일 writer 불변식 — daily_slot/SlotService.transit_slot 쓰기는 코어 경로에서만 일어난다(API 핸들러가 advisory lock 으로 직렬화).
  • NFR-3: 멱등/내구성 — 수락된 intent 의 슬롯 전이는 at-least-once 재전송에도 1회만 반영된다(intent_id dedup via intent_log). "수락 == 커밋"이라 수락-후-미처리 유실 창이 없다.

범위 경계

이번 반복에서 반드시 포함할 범위와 명시적으로 제외할 범위를 구분한다.

  • In Scope
    • 데몬 런타임 + HTTP API(intent 제출 + holding/capacity 조회 + health).
    • PostgreSQL SlotRepository 영속화(단일 writer) + 멱등 intent 처리.
    • baseline 문서 갱신.
  • Out of Scope (후속 Discovery)
    • 완전 비동기 durable outbox(intent 상태머신 + 소비 루프) — 브로커 집행 Discovery 에서 intent_log 를 승격(OQ-1 Deferred 부분).
    • 브로커 단일 세션/실제 주문 집행(불변식 B, order execution).
    • safety floor(forced_close/EOD/손절 backstop, liveness 게이팅) 및 sell_evaluation_log.
    • 매수·매도 전략 데몬 자체 구현(코어의 소비자이며 별 repo/프로세스).
    • 인증/인가 고도화, 멀티테넌시, 수평 확장.

6. 리스크/가정 목록

불확실성과 전제 조건을 분리해서 적는다. 리스크는 영향과 완화 방안을, 가정은 현재 판단의 전제를 기록한다.

리스크

  • R-1 (High): 브로커 집행 없이 코어만 만들면 intent→슬롯 전이까지만 동작해 "거래"는 미완성. 부분 가치만 실현.
    • 완화 방안: 이번 반복을 "durable 단일 writer 슬롯 코어 + API 경계"로 한정하고, 브로커/ safety floor 를 후속 Discovery 로 명시 인계(범위 경계에 박음).
  • R-2 (Medium): HTTP 는 at-least-once 를 보장하지 않아 intent 중복/유실 가능.
    • 완화 방안(OQ-1 결정): intent_id 멱등키(FR-4) + 수락 시 동기 커밋 + intent_log durable 기록. 브로커 집행이 들어오는 후속 Discovery 에서 intent_log 에 status+소비 루프를 얹어 outbox 로 점진 승격(API 계약 무변경).
  • R-3 (Medium): 웹 프레임워크/psycopg 의존이 도메인 순수성을 오염시킬 위험.
    • 완화 방안: 레이어 분리(domain/ application/ adapters) + import 스윕 가드(NFR-1, dcy-001 의 계약 테스트 패턴 확장).
  • R-4 (Medium): orbit-v2 SQL 스키마와 trex-core Slot 컬럼 계약(부록 A) 불일치 위험.
    • 완화 방안: 부록 A 를 기준으로 스키마 작성 + 드리프트 테스트(dcy-001 이 인계한 DB-side 검사 여기서 실현).

가정

아직 확정되지 않았지만 현재 문서 작성의 기반이 되는 전제를 적는다.

  • A-1: 매수·매도 전략은 별도 프로세스이며 코어 API 의 클라이언트다(코어는 전략 로직을 포함하지 않는다).
  • A-2: 단일 코어 인스턴스가 daily_slot 단일 writer 다(슬라이스 1 은 수평 확장 비대상).
  • A-3: 영속화는 PostgreSQL 을 사용하며 dcy-001 부록 A 컬럼 계약을 만족한다.

오픈 질문

답을 아직 모르는 항목을 적는다. 추정으로 덮지 말고 REQ 초안 작성 이전에 확인할 질문으로 남긴다.

  • OQ-1: intent 내구성 — 수락 시 동기 admission+커밋(슬라이스 1 기본) vs 내부 durable outbox 적재 후 비동기 소비.
    • 상태: Answered (2026-06-03)
    • 결정: 동기 커밋 + intent_id 멱등 + durable intent_log 이음매. 수락 시 admission+슬롯 전이를 동기 커밋하고 admit/reject 를 즉시 응답, 수락 intent 를 같은 트랜잭션에서 intent_log 에 기록. 완전 비동기 outbox 는 가치(느린 브로커 집행 디커플링)가 실현되는 브로커 집행 Discovery 로 Deferred 하며, 그때 intent_log 에 status+소비 루프를 얹어 API 계약 변경 없이 승격한다. 근거: 이번 범위엔 intent 뒤 느린 다운스트림이 없어 outbox 이득 미실현 + 동기 응답이 매수 admit/reject UX 에 유리 + "수락==커밋"이 유실 창 제거.
    • 반영 위치: # 4(멱등 처리 항목), # 5 FR-4·NFR-3, # 6 R-2 완화, # 5 Out of Scope(완전 outbox Deferred).
  • OQ-2: API 프레임워크/스택 — FastAPI+uvicorn(기본 권장) vs Flask vs stdlib http. Python >=3.12.
    • 상태: Answered (2026-06-03)
    • 결정: FastAPI + uvicorn 채택. 근거: 타입 기반 요청/응답 검증(pydantic), async, OpenAPI 자동 문서. Python >=3.12.
    • 반영 위치: # 4 코드 영향(API 어댑터·pyproject 의존성). REQ 단계에서 부트스트랩(REQ-A 계열)에 의존성·버전 고정.
  • OQ-3: 엔드포인트 1차 범위 — /intents/buy,/intents/sell,/slots,/capacity,/healthz 로 충분한지, admission 결과 조회/취소 엔드포인트가 필요한지.
    • 상태: Answered (2026-06-03)
    • 결정: 아래 6개로 1차 고정(/v1 버전 프리픽스). 모두 단일 코어 데몬이 노출.
      • GET /v1/healthz — liveness/readiness.
      • POST /v1/intents/buy — 매수 intent 수락, 동기 admit/reject 응답(+ slot_id).
      • POST /v1/intents/sell — 매도 intent 수락, 동기 admit/reject 응답.
      • GET /v1/intents/{intent_id} — 멱등 재조회/audit(POST 응답 유실 시 결정 재확인; FR-4 보강).
      • GET /v1/slots?status=holding — holding 슬롯 스냅샷 read-only(status/trading_date 필터).
      • GET /v1/capacity — idle/holding/pending + scarcity_ratio.
    • 제외(슬라이스 1): intent 취소/admission 취소 엔드포인트(브로커·rollback 경로와 함께 후속), 슬롯 사전할당 엔드포인트(데몬 lifecycle 내부 처리, FR-1).
    • 반영 위치: # 5 FR-1/FR-2/FR-3/FR-4, # 4 HTTP API 경계. interface-contract 초안은 REQ/Batch design 에서 고정.
  • OQ-4: 영속화 스키마 출처 — orbit-v2 의 slot SQL 을 가져와 정합 vs 부록 A 기준으로 신규 작성.
    • 상태: Answered (2026-06-03)
    • 결정: 부록 A 를 단일 기준으로 trex-core 소유의 신규 마이그레이션을 작성하고 orbit-v2 DDL 은 참조 구현으로만 사용. 슬라이스 1 테이블 = daily_slot·daily_symbol_entries·slot_transition_log·intent_log(archive/prune 제외). EXPECTED_SLOT_FIELDS↔information_schema 드리프트 테스트로 dcy-001 OQ-2 의 DB-side 검사 실현. 근거: 신규 베이스가 자기 스키마 lineage 를 소유(OQ-1 독립 결정과 일관) + 검증된 orbit DDL 재사용(재발명 회피).
    • 반영 위치: # 5 FR-5, # 6 R-4 완화.

오픈 질문 처리 기준

  • Open: 아직 답이 없고 다음 단계 진행에 영향이 있는 상태다. 문서에 유지한다.
  • Answered: 답이 확정된 상태다. 관련 본문/요구사항에 반영한 뒤 오픈 질문 목록에서는 제거하거나 resolved 기록으로 이동한다.
  • Deferred: 지금 단계에서 결정하지 않고 다음 단계 또는 후속 이슈로 넘기는 상태다. 넘길 대상과 이유를 반드시 적는다.
  • Dropped: 더 이상 유효하지 않은 질문이다. 삭제 사유를 짧게 남기고 목록에서 제거한다.
  • 처리 원칙 1: 질문만 남기지 말고 반드시 상태, 처리 방안, 종료 조건을 함께 적는다.
  • 처리 원칙 2: 답이 나온 질문은 본문 반영 없이 단순 삭제하지 않는다. 반영 위치를 먼저 갱신한다.
  • 처리 원칙 3: High 영향 질문은 Deferred 처리 후 처리 방안에 REQ 인계 추적 방식을 명시한다.

7. 초기 성공 기준

이 변경이 성공했다고 판단할 기준을 측정 가능하게 정의한다. 가능하면 데이터 출처까지 연결한다.

  • S-1: 코어 데몬을 기동하고 GET /v1/healthz 가 200 을 반환한다.
  • S-2: POST /v1/intents/buy 호출 시 idle 슬롯이 pending_buy 로 전이되고, 동일 intent_id 재전송이 중복 전이를 만들지 않는다(멱등).
  • S-3: GET /v1/slots?status=holding 가 holding 슬롯 스냅샷을 read-only 로 반환한다.
  • S-4: PostgreSQL repo 로 코어를 구동했을 때 도메인 단위테스트/통합테스트가 통과하고, daily_slot 쓰기가 코어 경로로만 발생한다(단일 writer).
  • S-5: 도메인 패키지 import 스윕에서 웹 프레임워크/psycopg 의존이 0 으로 유지된다(레이어 격리).

측정 방식 및 데이터 출처

각 성공 기준을 어떻게 측정할지와 어떤 데이터나 문서를 근거로 쓸지 적는다.

  • S-1 측정 방식: 데몬 기동 후 healthz 호출 / 데이터 출처: 통합테스트 또는 수동 curl 로그.
  • S-2 측정 방식: API 통합테스트(정상 1회 + 중복 재전송) / 데이터 출처: 테스트 결과, 슬롯 상태·transition_log.
  • S-3 측정 방식: holding 슬롯 조성 후 GET 응답 검증 / 데이터 출처: API 통합테스트.
  • S-4 측정 방식: PostgreSQL 백엔드 통합테스트(가능 시) + 쓰기 경로 정적 검토 / 데이터 출처: 테스트 결과, 코드 리뷰.
  • S-5 측정 방식: 정적 import 스윕 / 데이터 출처: trex_core/domain/slot import 목록.

8. REQ로 넘기기 전 확인 체크

REQ 초안 작성 단계로 넘기기 전에 무엇이 확정되어야 하는지 확인한다. 미완료 항목은 후속 결정이 필요함을 뜻한다.

  • 범위(In Scope/Out of Scope) 확정 — 특히 브로커/safety floor 제외
    • 기준: 운영자가 슬라이스 1 경계를 확인했다. → confirm-discovery 에서 문서대로 확정(2026-06-03).
  • 성공 지표의 측정 방식/데이터 출처 확정
    • 기준: S-1~S-5 측정 방식·출처 명시(본 문서 # 7).
  • High 영향 리스크(R-1) 처리 방침 확정
    • 기준: R-1(브로커 미포함) 을 후속 Discovery 인계로 수용. → 범위 경계 확정과 함께 수용(2026-06-03).
  • 모든 오픈 질문(OQ) Open 상태 없음 확인
    • 기준: OQ 목록에 Open 0개 또는 잔여 전부 Deferred (OQ-1~OQ-4 전부 Answered → Open 0개)
  • Freeze 확정 담당자(CONFIRMED_BY) 지정
    • 기준: 운영자가 confirm-discovery 시점에 CONFIRMED_BY 를 지정한다. → Confirmed By: Justin.

9. 파일 처리 결과

이 Discovery 문서 생성/갱신 결과와 참조 문서를 기록한다. 이후 추적과 리뷰 시 근거로 사용한다.

  • 처리 결과: 생성
  • 생성 경로: docs/discovery/dcy-002_20260603_slot-core-daemon-http-api.md
  • 참조 문서:
    • docs/discovery/dcy-001_20260603_slot-pure-domain-migration.md (순수 도메인 코어 + 부록 A 컬럼 계약)
    • docs/project-structure.md, docs/runtime-flows.md, docs/interface-contract.md, docs/data-model.md (baseline — 본 Discovery 가 갱신 요구)
    • trex-orbit orbit-v2_plan.md (3-데몬 설계 참고자료)

10. 사용자 결정 필요 항목 요약

사용자나 승인자가 결정해야 하는 항목만 모아 정리한다. 결정, 확인, 데이터 요청을 구분해서 적는다.

DECIDE

  • intent 내구성 → 결정됨: 동기 커밋 + intent_id 멱등 + durable intent_log, 완전 outbox 는 브로커 Discovery 로 Deferred (OQ-1, 2026-06-03)
  • 영속화 스키마 출처 → 결정됨: 부록 A 기준 trex-core 소유 신규 마이그레이션(orbit-v2 DDL 참조), archive 제외, 드리프트 테스트 동반 (OQ-4, 2026-06-03)

CONFIRM

  • API 프레임워크 → 결정됨: FastAPI + uvicorn (OQ-2, 2026-06-03)
  • 1차 엔드포인트 집합 → 결정됨: /v1(healthz, intents/buy, intents/sell, intents/{id}, slots, capacity); 취소·preallocate 엔드포인트 제외 (OQ-3, 2026-06-03)
  • 범위 경계(브로커 deferral) → 확정됨: 브로커 집행·safety floor·완전 outbox·전략 데몬을 후속 Discovery 로 미루고 슬라이스 1(데몬+API+영속화+멱등) 승인 (confirm-discovery, 2026-06-03)

DATA

  • 없음 (별도 외부 데이터 요청 없음)

11. Discovery Freeze

REQ 초안 작성 인계 시점의 확정 플래그와 섹션 참조만 기록한다. 내용 재작성 없이 원본 섹션을 링크로 대신한다.

섹션 참조

Freeze 플래그

  • Handoff Decision: 승인
  • Handoff Rationale: OQ-1~OQ-4 전부 Answered(내구성=동기+intent_log / 프레임워크=FastAPI / 엔드포인트=/v1 6종 / 스키마=부록 A 기준 신규). 범위 경계(브로커·safety floor·outbox·전략 데몬 후속 Deferred)와 R-1 처리 방침을 confirm-discovery 에서 확정, CONFIRMED_BY 지정 완료. REQ Drafting 으로 인계 가능.
  • Ready for REQ Drafting: true
  • Confirmed By: Justin
  • Confirmed At (KST): 2026-06-03