refactor: Reorganize docs folder structure for clarity and version management (PR 3c)
ci / backend (push) Failing after 1s
ci / static (push) Failing after 6s
ci / frontend (push) Failing after 5s

Reorganize documentation following AGENTS.md v16.0 governance (traceability, reproducibility):

Structure changes:
- CURRENT/ (new)
  ├─ 00~08.md (v16.0 standards, renamed for clarity)
  └─ CATALOGS/ (9 CSV files: WBS, decision log, debt register, matrices, catalogs)

- LEGACY/ (new, read-only archives)
  ├─ v11/ (original baseline + hardening analysis)
  ├─ v12~v15/ (.gitkeep + README for future archiving)

- DECISIONS/ (new, ready for ADR usage)
- TEMPLATES/ (existing, unchanged)

Deletions (consolidated into CURRENT/):
- v16_0/ folder (files migrated)
- hardening/ folder (contents → LEGACY/v11/)
- Root-level v11 files (00~07.md, CSV)

Renames (for clarity):
- 00_EXECUTIVE_REFERENCE_IMPLEMENTATION.md → 00_EXECUTIVE.md
- 01_BRUTAL_ROLE_AUDIT.md → 01_ROLE_AUDIT.md
- 02_FRONTEND_ADAPTER_CRUD_STANDARD.md → 02_FE_ADAPTER.md
- 03_BACKEND_DATA_SCHEDULER_STANDARD.md → 03_BE_DATA.md
- 04_ALGORITHM_MODEL_GOVERNANCE.md → 04_ALGORITHM.md
- 05_PROCESS_VIBE_DEBT_CONTROL.md → 05_PROCESS_VIBE_DEBT.md
- 06_VALIDATION_TRUTH.md → 06_VALIDATION.md
- 07_PACKAGE_ATTACHMENT_POLICY.md → 07_PACKAGE_POLICY.md

Updates:
- docs/INDEX.md (complete rewrite with navigation)
- LEGACY/ folders with README + .gitkeep

Benefits:
 Clear version management (v16.0 is active, v11~v15 read-only)
 No version mixing in root
 CURRENT/ as single point of reference for active docs
 CATALOGS/ consolidates all data matrices
 LEGACY/ preserves history without clutter
 Traceability: decision log, tech debt, WBS all linked
 DECISIONS/ ready for ADR pattern (future use)

Sync with root:
- CLAUDE.md references: docs/CURRENT/, docs/INDEX.md 
- AGENTS.md references: docs/CURRENT/, traceability 
- README.md: Document guide links updated 

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 05:49:29 +09:00
parent 5e50ec6991
commit 5dfb8f3e12
205 changed files with 135 additions and 10178 deletions
+45
View File
@@ -0,0 +1,45 @@
# 00. 경영진·아키텍처 최종 제안
## 1. 결론
기존 v10.0의 방향은 옳다. 다만 본프로그램 착수 전에 해야 할 일은 기능을 더 추가하는 것이 아니라 **연구 코드와 생산 코드의 경계를 확실히 나누고, 데이터·알고리즘·승인·평가를 하나의 반복 가능한 Vertical Slice로 연결하는 것**이다.
실행 우선순위는 다음과 같다.
1. **연구 재현성 복구**: 원시 데이터 manifest, 환경 lock, 실행 인자, artifact hash
2. **알고리즘 상태기계 정공법 전환**: scalar position이 아닌 Lot/Cycle 단위
3. **데이터 정합성 Gate**: PIT·기업행사·총수익·비용·상폐·FX
4. **BE Walking Skeleton**: Evidence → SellDecision → ReentryWatch → Review → Outcome
5. **FE 업무화면**: Query/Error/Auth/State Matrix를 먼저 표준화
6. **Shadow 운영**: 일평가와 false-exit·재진입 포착·대사·DR 검증
## 2. 과유불급 기준
| 영역 | 해야 할 것 | 하지 말아야 할 것 |
|---|---|---|
| 아키텍처 | Modular Monolith, schema ownership, Architecture Test | 초기 Microservice 분리 |
| SOLID | Policy·Adapter·Validator 책임 분리 | Interface·Factory·Repository 남발 |
| 공통화 | 의미·상태·변경축이 2회 이상 반복될 때 승격 | 한 번 쓰는 추상화 |
| 데이터 | 정규화된 Write Model, 재생성 가능한 Read Model | 화면 편의를 위한 Source Table 직접 Join |
| 알고리즘 | 순수 결정함수, 상태기계, Golden test | 복잡한 종합점수 하나로 모든 위험 상쇄 |
| FE | TanStack Query가 서버상태 소유 | Pinia에 API 응답 복제 |
| Batch | Job은 오케스트레이션만 | Hangfire Job에 정책·SQL·HTTP 혼합 |
| AI 코딩 | Source/Assumption/Unknown + 실행 증거 | 대화만 근거로 정책·컬럼·임계값 생성 |
## 3. 운영사급 Done의 정의
기능이 화면에서 보이는 것으로 끝나지 않는다. 아래가 모두 있어야 Done이다.
- Requirement/Policy/Data/API/DB/Event/Job/UI/Test/Metric/Runbook 추적
- 같은 입력·Version Set으로 같은 결과 재현
- 부분실패·중복·재처리·만료·권한·동시성 검증
- 고객 공개 전 maker-checker와 Evidence hash 보존
- Secondary 운영자의 rollback/replay 리허설
- 기술부채 Owner와 만료일
## 4. 권고 조직 운영
- Sprint capacity의 15%를 데이터·기술부채·재현성 개선에 고정한다.
- 알고리즘 변경 PR과 구조 리팩터링 PR을 분리한다.
- Quant 승인 없는 Golden 변경, DBA 승인 없는 PIT/DDL 변경, 준법 승인 없는 공개 문구 변경을 병합하지 않는다.
- Production 승격과 투자일임형 검토는 적중률이 아니라 장기 비용후 효용과 운영 무결성의 복합 Gate로 결정한다.
@@ -0,0 +1,298 @@
# K-ArtSell Aegis v11.1 전략적 하드닝 제안
상태: `IMPLEMENTATION_DELTA / STATIC_REVIEWED_NOT_BUILD_VERIFIED`
기준선: SI 누적 통합 실행기준서 v10.0 + K-ArtSell 12.2 연구 번들 + v11 구현 가속 패키지
운영 경계: 투자자문형 우선 · 자동주문 OFF · `RESEARCH_CANDIDATE_NOT_PRODUCTION`
## 1. 결론
v10.0과 v11 패키지를 다시 쓰지 않는다. `Baseline Preservation + Delta + Supersession + Traceability` 원칙으로 v11.1 하드닝 Delta를 추가한다.
우선순위는 다음과 같다.
1. 연구 결과 재현성 복구: 원시 데이터 manifest, checksum, Python lock, 실행 이미지 digest.
2. PIT·기업행사·총수익·비용·상폐·FX 데이터 정합성.
3. Scalar position 제거와 Lot/Cycle 기반 매도·재진입 상태기계.
4. EvidenceSnapshot → SellDecision → Recommendation → Review → Publish → Outcome의 불변 추적.
5. BE/FE/Job/DB를 Slice 단위로 끝내는 Vertical Slice.
6. Shadow 일평가와 운영 무결성. 자동주문은 별도 승인 전까지 구현·활성화 금지.
## 2. 첨부 소스에서 확인한 핵심 결함
### P0
- 연구 번들에 원시 데이터와 환경 lock이 없어 제3자 clean-room 재현이 불가능하다.
- Python `v12_positions()`가 기존 Core와 신규 Tactical lot을 하나의 entry/peak/floor로 혼합한다.
- 한국 기업행사를 정수비율 추정으로 과거 전체에 소급 적용한다.
- 총수익·PIT 재무/컨센서스·상폐수익·세금·FX가 불완전하다.
- 자본바닥 비용이 함수 계약이 아니라 전역 상수에 묶여 결과 라벨과 실제 계산이 달라질 수 있다.
- v11 템플릿의 연구 평가 Endpoint가 `AllowAnonymous()`이고, Handler·Evidence 검증·DB 저장·Outbox가 없다.
- FE CI는 `pnpm-lock.yaml`을 요구하지만 패키지에 lockfile이 없다.
### P1
- 매도 정책이 Hard impairment, gap, two-close 3개만 구현되어 survival·집중/유동성·기회비용이 누락됐다.
- 매도비중의 단위가 “현재 lot 대비 비율”인지 “포트폴리오 절대비중”인지 계약이 모호하다.
- Reentry 상태기계가 `REENTERED → WATCH/OPEN` 다단계 전이를 표현하지 못한다.
- Evidence 불변 trigger는 있으나 SignalDecision 불변 trigger가 빠져 있다.
- Architecture Test가 Generic Repository 문자열 탐지만 수행한다.
- FE가 API contract를 수동 중복 정의하고, retry 시 Idempotency-Key를 새로 만들어 동일 명령의 재시도 의미를 깨뜨린다.
## 3. SOLID의 현장 적용
| 원칙 | 적용 | 과유불급 차단 |
|---|---|---|
| S | Endpoint=HTTP, Handler=유스케이스/트랜잭션, Policy=순수 결정, Adapter=외부 I/O | God Service, Job 내 정책 로직 금지 |
| O | Policy/DQ/Adapter는 명시적 registry로 추가하되 우선순위와 계약은 고정 | 임의 plugin framework, reflection 기반 자동 발견 금지 |
| L | KRX/DART/KIS Adapter 대체 시 동일 시간·단위·오류 contract test | mock 통과만으로 공급원 대체 금지 |
| I | `IMarketDataSource`, `IFilingSource`, `IEvidenceReader`, `IClock` 등 좁은 Port | 범용 Repository/IServiceProvider 노출 금지 |
| D | Domain은 Npgsql/Hangfire/HTTP를 모른다 | Infrastructure type이 Domain으로 침투하는 것 금지 |
추상화는 두 번째 실제 구현과 동일한 변경축이 확인된 뒤 승격한다. 한 번 쓰는 interface, generic repository, 범용 mediator wrapper는 만들지 않는다.
## 4. 알고리즘 고도화
### 4.1 생산 경계
생산 엔진은 점수 합산기가 아니라 순서가 고정된 결정 상태기계다.
`HARD_IMPAIRMENT → PORTFOLIO_SURVIVAL → DYNAMIC_PROFIT_FLOOR → CONCENTRATION_LIQUIDITY → OPPORTUNITY_COST → REENTRY_OPTION`
상위 사유는 하위 기대수익으로 상쇄하지 않는다. 모든 결정은 다음 Version Set을 남긴다.
- `PolicyId`, `PolicyVersion`
- `EvidenceId`, `DatasetId`, `DataHash`
- `ModelVersion`, `ConfigVersion`, `CodeSha`
- `AsOf`, `PublishedAtCutoff`, `TradableSession`
- 입력 단위, rounding, 허용오차, 반대증거
### 4.2 Lot/Cycle 모델
- `PositionLot`: 수량·원가·세금 lot·개설/종료.
- `CycleState`: entry, peak, floor, breach count, last sell/buy.
- `ProtectionState`: 보호 활성화와 단조 floor.
- `ReentryWatch`: 매도 원인, 대기, 조건, 단계, 만료.
- 재진입은 새 `CycleId`와 새 Lot을 생성한다.
- Hard impairment는 자동 재진입을 금지한다.
### 4.3 매도 수량 계약
`SellRatioOfLot``TargetPortfolioWeightAfter`를 분리한다. API/DB/UI에서 단순 `sell_fraction` 하나를 사용하지 않는다.
- `SellRatioOfLot`: 현재 lot 수량 중 매도 비율, 0~1.
- `SellQuantity`: 주문 단위 반영 후 실제 제안 수량.
- `TargetPortfolioWeightAfter`: 매도 후 목표 포트폴리오 비중.
- `StrategicCoreFloorWeight`: 포트폴리오 절대비중.
이 구분이 없으면 Core floor와 부분매도 비율을 잘못 비교하게 된다.
### 4.4 기대효용
opaque score를 금지하고 구성요소를 저장한다.
- P10/P50/P90 기대수익
- ES95
- 영구가치훼손 확률 × LGD
- marginal portfolio risk
- liquidity/slippage/tax/FX
- replacement lower-confidence edge
- reentry option loss
Opportunity sell은 순우위 신뢰하단이 0을 초과하고 IPS·유동성·세금 제약을 통과한 경우만 허용한다.
### 4.5 연구와 생산의 분리
Python 연구 코드는 생산 엔진에서 호출하지 않는다. Python과 .NET은 동일 Golden Vector와 Policy ID만 공유한다.
- Python: 대규모 탐색, walk-forward, CSCV/PBO, DSR, bootstrap.
- .NET: 승인된 순수 정책, Evidence/Decision/Audit, Shadow 운영.
- 결과 비교: manifest + deterministic seed + tolerance.
## 5. 데이터 정합성·정규화·역정규화
### 5.1 계층
1. L0 Source Manifest: 권리·schema/version·SLA·timezone·단위.
2. L1 Raw Immutable: payload/hash/event/published/ingested.
3. L2 Canonical PIT: 가격·기업행사·재무·컨센서스·비용 revision.
4. L3 Quality/Lineage: DQ·quarantine·watermark·dataset manifest.
5. L4 Feature/Evidence: feature/forecast/risk/evidence hash.
6. L5 Transaction/Audit: ledger/decision/review/publication/fill/outcome.
7. L6 Read Model: 화면·리포트 projection.
8. L7 Artifact: backtest/model card/release evidence.
### 5.2 정규화 원칙
- 원장·현금·lot: 3NF + append/reversal.
- PIT 가격/재무/공시: source + published_at + revision + hash.
- 추천/승인/공개: 현재상태와 이력 분리.
- 설정/수수료: `valid_from/to`; current flag 단독 사용 금지.
- Evidence: JSONB 원문 + 검색/제약에 필요한 핵심 컬럼 승격.
### 5.3 역정규화 허용 조건
Read Model에만 허용하며 반드시 다음을 가진다.
- Owner
- ProjectionVersion
- SourceWatermark
- RefreshedAt/StaleAt
- Rebuild command
- Lineage
- 권한 scope
Source table을 화면에서 임의 join하거나 current value를 복제하지 않는다.
### 5.4 DB 강제 규칙
- schema-qualified SQL, 명시적 column, `SELECT *` 금지.
- Evidence/Decision/Audit update/delete 차단 trigger.
- 시간 범위 overlap exclusion 또는 사전 검증.
- Idempotency unique key.
- Outbox pending index와 lease/attempt/dead-letter.
- DbUp fresh/upgrade/re-run/failure rehearsal.
## 6. BE 고도화
### 6.1 Slice 표준
```text
Features/<Slice>/
Endpoint.cs
Request.cs
Response.cs
Validator.cs
Handler.cs
Policy.cs
Sql.cs
Mapper.cs
Contracts/
Jobs/
Tests/
README.md
```
Endpoint는 `EvidenceId`, 모델버전, 정책 임계값을 클라이언트에서 그대로 신뢰하지 않는다. 요청은 업무 식별자와 as-of만 받고 Handler가 승인된 Evidence와 Version Set을 조회한다.
### 6.2 트랜잭션
동일 PostgreSQL transaction에서 다음을 처리한다.
1. Idempotency claim.
2. Evidence/lot/cycle as-of 조회.
3. 순수 Policy 평가.
4. Decision append.
5. Outbox append.
6. commit.
외부 API 호출은 transaction 밖에서 수행하고 raw result를 먼저 저장한다.
### 6.3 Outbox/Inbox
- Event payload는 최소키와 schema version만 포함.
- consumer별 Inbox unique key.
- 재처리는 동일 결과 또는 no-op.
- poison event는 dead-letter와 운영 승인 후 replay.
- 이벤트가 Job을 직접 호출하지 않고 readiness/command를 만든다.
### 6.4 Hangfire
Queue를 다음처럼 분리한다.
- `q-control`
- `q-market-data`
- `q-fundamentals`
- `q-feature-risk`
- `q-recommendation`
- `q-evaluation`
- `q-reconciliation`
- `q-research`
- `q-backfill`
모든 Job은 `JobRunId`, `ScopeKey`, `IdempotencyKey`, `Watermark`, Version Set, input/output hash를 가진다. DQ/business-hold는 transient retry와 분리한다.
### 6.5 보안
- `/internal/*` 익명 접근 금지.
- 자동주문 Capability는 코드와 설정 모두 기본 OFF.
- Swagger는 dev 또는 승인된 운영자만.
- maker-checker와 SoD를 endpoint/DB/audit에서 동시에 검증.
- secret/PII/token은 log, trace tag, fixture, prompt에 금지.
## 7. FE 고도화
### 7.1 상태 소유권
- 서버 상태: TanStack Query.
- 세션/role/UI preference: Pinia.
- form: vee-validate + Zod.
- filter/selection: router query/params.
- 대량 표: AG Grid server-side row model.
Pinia에 API 응답을 복제하지 않는다.
### 7.2 공통 상태 계약
`LOADING, EMPTY, PARTIAL, STALE, WARN, ERROR, UNAUTHORIZED, FORBIDDEN, CONFLICT, EXPIRED, READONLY`를 공통 컴포넌트로 처리한다.
### 7.3 계약과 멱등
- OpenAPI에서 DTO를 생성하거나 versioned contract를 단일 관리한다.
- submit 시 한 번 생성한 Idempotency-Key를 동일 retry에 재사용한다.
- 409는 `VersionConflictDialog`, 422는 field/summary mapping, 429/503은 retry-after를 표시한다.
- 고객 화면은 연구용 내부 evaluate endpoint를 호출하지 않는다.
### 7.4 컴포넌트화
공용 승격은 동일 업무 의미·상태·권한·접근성·테스트가 반복될 때만 한다.
공통: `QueryStateBoundary`, `PermissionGuard`, `DataGridShell`, `CrudForm`, `VersionConflictDialog`, `DataFreshnessBadge`.
도메인: `EvidencePanel`, `ProtectionFloorPanel`, `ReentryTimeline`, `ApprovalPanel`, `VersionSetPanel`, `GateChecklist`.
## 8. 바이브코딩·홀루시네이션 통제
- 채팅은 Source of Truth가 아니다.
- AI는 Policy ID, DB column, API, threshold를 발명하지 않는다.
- 모든 PR에 `Source / Assumption / Unknown / Decision Required`를 기록한다.
- 실행하지 않은 build/test/migration을 통과했다고 기록하지 않는다.
- 리팩터링 전 characterization test를 먼저 고정한다.
- 한 PR은 한 Slice 또는 한 리팩터링 목적만 가진다.
- AI 생성 migration은 fresh/upgrade/re-run과 DBA review 없이는 병합하지 않는다.
- 알고리즘 변경은 Golden/OOS/cost×2/false-exit/reentry/ES/ModelCard를 동시에 갱신한다.
## 9. 기술부채 운영
- P0는 기능 개발보다 먼저 처리한다.
- 각 Sprint 용량의 15~20%를 승인된 기술부채에 배정한다.
- Debt는 Risk, Interest, Owner, Due, Remediation, Exit Test를 가진다.
- “나중에 정리”가 아니라 해당 Slice의 Definition of Done에 포함한다.
- 무기한 예외는 금지하고 expiry와 재승인을 둔다.
## 10. 16 Sprint 개선 로드맵
기존 32주 기준은 유지하되 Release Train으로 묶는다.
| Train | Sprint | 목표 | 핵심 Gate |
|---|---|---|---|
| R0 Foundation | S0~S3 | 재현성, CI, PIT/CA/비용, ledger | build/lock/replay/lookahead 0 |
| R1 Sell/Reentry | S4~S5 | Evidence, Lot/Cycle, 매도/재진입 | Golden/state/invariant |
| R2 Advisory MVP | S6~S8 | IPS, 추천, 검토, 공개, 결과 | maker-checker/E2E/audit |
| R3 Portfolio Intelligence | S9~S11 | risk, rebalance, buy/replacement, scorecard | constraint/NO_ACTION/Shadow |
| R4 Pilot Hardening | S12~S15 | KIS capability OFF, recon, security, DR, cutover | duplicate 0/recon/DR/rollback |
Critical Path를 벗어난 대시보드·상품탐색 선행 구현은 제한한다.
## 11. 템플릿 적용 판정
첨부 v11 템플릿은 교육용 walking skeleton으로는 유효하지만 Implementation-ready 기준에는 미달한다. 다음 조건을 만족한 뒤 기준 템플릿으로 승격한다.
- 실제 .NET SDK/pnpm에서 restore/build/test green.
- lockfile과 dependency audit.
- 익명 internal endpoint 제거.
- Handler/Validator/DB/Outbox/Idempotency 구현.
- SignalDecision 불변 DB trigger.
- Architecture/Data/Integration/Replay/E2E test 추가.
- FE 11-state, auth, conflict, stable idempotency.
- Release Evidence Pack 자동 생성.
@@ -0,0 +1,24 @@
# Architecture Fitness Functions
| ID | 자동 검사 | 차단 기준 |
|---|---|---|
| AF-01 | Module project reference graph | 승인되지 않은 역방향 의존 1건 |
| AF-02 | 다른 모듈 schema 직접 SQL 참조 | 1건 |
| AF-03 | Domain project의 Npgsql/Hangfire/HTTP 참조 | 1건 |
| AF-04 | `DateTime.Now/UtcNow` 직접 사용 | 승인 예외 외 1건 |
| AF-05 | `SELECT *` | 1건 |
| AF-06 | Generic Repository/God Service 명명·크기 | 1건 또는 기준 초과 |
| AF-07 | Modules 내부 `AllowAnonymous` | 1건 |
| AF-08 | Evidence/Decision/Audit immutable trigger | 누락 1건 |
| AF-09 | DbUp fresh/upgrade/re-run | 실패 |
| AF-10 | PIT `published_at <= cutoff` contract test | 실패 |
| AF-11 | Dataset+Code+Config 동일 replay hash | 100% 미만 |
| AF-12 | command/job/order duplicate | 0 초과 |
| AF-13 | Outbox/Inbox retry and poison replay | 실패 |
| AF-14 | Algorithm Golden/boundary/property | 실패 |
| AF-15 | Reentry calendar/stage/expiry/new cycle | 실패 |
| AF-16 | FE server state duplicated in Pinia | 탐지 1건 |
| AF-17 | FE ProblemDetails/409/422/429/503 common handling | 누락 |
| AF-18 | Role/state Playwright journeys | 실패 |
| AF-19 | Secret/PII scan | Critical 1건 |
| AF-20 | Release Evidence Pack completeness | 누락 1건 |
+53
View File
@@ -0,0 +1,53 @@
# 01. 첨부 연구 소스 정량·구조 감사
## A. 즉시 조치 P0
| ID | 소스 관찰 | 영향 | 조치 |
|---|---|---|---|
| SRC-P0-01 | 원시 가격데이터와 실행환경 lock이 번들에 없음 | 제3자가 결과를 완전 재현할 수 없음 | Data Manifest, checksum, Python lock, container image digest를 Evidence Pack에 포함 |
| SRC-P0-02 | `v12_positions()`가 전체 보유를 하나의 `entry/peak/floor`로 관리하고 재진입 시 모두 reset | 기존 Core lot과 신규 tactical lot의 사이클이 다시 혼합됨 | `PositionLot`·`CycleState`별 보호선과 재진입 생성 |
| SRC-P0-03 | KR corporate action을 근사 정수비율로 과거 전체에 소급 조정 | 공식 기업행사와 다를 경우 수익·ATR·보호선 왜곡 | 공식 CA master 우선, 추정값은 QUARANTINED evidence로만 사용 |
| SRC-P0-04 | 총수익·PIT 재무·상폐·세금·FX가 없음 | 생산 매도·기대효용 판단 불가 | 가격정책 연구로 한정, 생산 승격 차단 |
| SRC-P0-05 | `portfolio_backtest()`의 overlay 비용이 전역 US 7bps로 고정 | KR 자본바닥 결과의 비용 라벨과 실제 계산 불일치 | 비용을 함수 인자로 강제하고 FeeSchedule PIT로 전환 |
## B. P1 리팩터링
| ID | 관찰 | 개선 |
|---|---|---|
| SRC-P1-01 | `v11_positions`, `v12_positions`, `positions_fast`에 정책 로직 중복 | 단일 Policy Core와 vectorized adapter 분리 |
| SRC-P1-02 | `giveback_cap_v12()`가 정의돼 있으나 실제 v12 계산은 `giveback_cap_v11()` 사용 | dead code 제거 또는 정책 ID와 Golden으로 의도 명시 |
| SRC-P1-03 | `core_floor()`와 별도 `min_pos` literal map이 중복 | YAML→typed config→single resolver |
| SRC-P1-04 | `ROOT=/mnt/data`, FILES global, import 시 output directory 생성 | CLI/config 주입, library와 runner 분리 |
| SRC-P1-05 | Data quality 함수가 global file을 재읽음 | raw input과 canonical input을 명시적으로 전달 |
| SRC-P1-06 | 거래일 결측을 calendar gap으로만 판단 | MarketCalendar 기반 expected session 검증 |
| SRC-P1-07 | backtest cost는 신호일, exposure는 다음날 lag로 반영 | OrderIntent/Fill 시점으로 비용·수량·현금 정렬 |
| SRC-P1-08 | 동적 동일가중에서 종목 시작/종료에 따른 비중 변화 비용이 명시되지 않음 | UniverseEvent와 rebalance trade를 별도 모델링 |
| SRC-P1-09 | `false_exit_rate_63d`가 단순 63일 +10% 여부 | 매도비중·benchmark·비용·재진입을 반영한 FalseExitCost 정의 |
| SRC-P1-10 | 9개 local parameter grid만으로 robustness 판단 | CSCV/PBO, Deflated Sharpe, block bootstrap, walk-forward 확대 |
## C. 유지할 요소
- 수익구간 이후 활성화되는 단조 보호선
- 갭 이탈과 2종가 이탈의 부분매도 구분
- 다음 거래가능 세션 execution lag
- 최소 10세션 재진입 대기와 50일선 상승·20일 고점 조건
- 자본바닥 개념과 비용 스트레스
## D. 연구 코드 목표 구조
```text
research/
pyproject.toml + lock
src/kartsell_research/
data/ # loader, PIT calendar, CA adjustment
domain/ # pure policy contract shared with golden vectors
simulation/ # order/fill/cost/cash/universe
evaluation/ # metrics, false-exit, PBO/DSR
cli/ # no import-time side effects
manifests/
fixtures/
tests/
artifacts/<run-id>/manifest.json
```
연구 Python과 .NET 생산 정책은 서로 호출하지 않는다. 대신 동일한 Golden input/output vector와 Policy ID를 공유해 의미 회귀를 검증한다.
+36
View File
@@ -0,0 +1,36 @@
# Sell/Reentry Algorithm Contract
## Decision Context
- PortfolioId, AccountId, LotId, CycleId
- AssetPolicyId, IPSVersion
- AsOf, PublishedAtCutoff, TradableSession
- EvidenceId, DatasetId, ModelVersion, ConfigVersion, CodeSha
- CurrentLotQuantity, CurrentPortfolioWeight, StrategicCoreFloorWeight
- Peak/Floor/Breach/Cooldown
- Hard impairment evidence grade and approval
- Risk reduction requirement, concentration excess, liquidity capacity
- Expected utility component distribution and confidence lower bound
## Decision Output
- Action: HOLD/PARTIAL_SELL/FULL_SELL
- PolicyId/Priority/ReasonCode
- SellRatioOfLot
- ProposedQuantity
- TargetPortfolioWeightAfter
- ReentryEligibility
- CounterEvidence
- ValidUntil/NextReviewSession
- DecisionHash
## Invariants
1. Hard impairment cannot be overridden.
2. Proposed quantity cannot exceed lot quantity.
3. Strategic core floor cannot be breached unless an approved higher-priority policy allows it.
4. Same input and Version Set produce the same decision hash.
5. A decision without immutable Evidence cannot be stored.
6. A reentry stage executes at most once.
7. Reentry creates a new CycleId.
8. Hard impairment cannot create an automatic ReentryWatch.
@@ -0,0 +1,96 @@
# 02. 알고리즘 리팩터링·고도화 기준
## 1. 생산 모델 경계
생산 엔진은 수익률 최대화 함수가 아니라 다음의 순서가 보존된 **결정 상태기계**다.
```text
HARD_IMPAIRMENT
→ PORTFOLIO_SURVIVAL
→ DYNAMIC_PROFIT_FLOOR
→ CONCENTRATION_LIQUIDITY
→ OPPORTUNITY_COST
→ REENTRY_OPTION
```
상위 정책이 행동을 결정하면 하위 점수는 이를 상쇄하지 못한다. 모든 정책은 `PolicyId`, 입력 `EvidenceId`, `ModelVersion`, `ConfigVersion`, 허용오차와 반대증거를 남긴다.
## 2. Scalar Position 제거
기존 `position: float` 하나로는 Core와 Tactical, 기존 lot과 재진입 lot을 분리할 수 없다. 다음 모델로 전환한다.
```text
Portfolio
└─ PositionLot (원가·수량·개설/종료·세금 lot)
└─ CycleState (Entry, Peak, Floor, BreachCount, LastSell, LastBuy)
└─ ProtectionState / ReentryWatch
```
- 부분매도는 특정 Lot/Cycle에 귀속된다.
- 재진입은 새 `CycleId`와 새 Lot을 만든다.
- Strategic Core는 정책상 보호 대상 비중과 Tactical 비중을 분리한다.
- Hard Impairment는 자동 재진입을 금지한다.
## 3. Functional Core / Imperative Shell
**Pure Core**
- `SellPolicyChain.Evaluate(input)`
- `ReentryPolicy.Evaluate(input)`
- `PortfolioConstraintPolicy.Evaluate(input)`
- `ExpectedUtilityCalculator.Calculate(input)`
**Imperative Shell**
- PIT data query
- transaction, Dapper SQL
- EvidenceSnapshot 저장
- Outbox 발행
- Hangfire schedule/retry
- SignalR/Telegram 통지
## 4. 기대효용 계산 분해
한 개의 opaque score 대신 구성요소를 별도로 저장한다.
- Hold expected return distribution P10/P50/P90
- ES95와 영구가치훼손 확률×LGD
- marginal portfolio risk
- liquidity/slippage/tax/FX
- replacement lower confidence edge
- reentry option loss
Opportunity sell은 순우위의 신뢰하단이 0을 넘고 IPS·유동성·세금 제약을 통과할 때만 허용한다.
## 5. 실행 시뮬레이션
- 결정: 시장 종가 후
- 주문의도: 다음 거래가능 세션
- Fill: open/VWAP/limit 모델 중 승인된 시나리오
- 부분체결, gap, ADV participation, spread, FX, 세금, 수수료를 별도 이벤트로 기록
- SignalDecision과 Fill은 분리해 추천 성과·실행 성과·고객 행동을 attribution한다.
## 6. 일평가
일평가는 단타 적중률이 아니다.
| 영역 | 핵심 |
|---|---|
| 운영 무결성 | duplicate, lookahead, DQ hold, 미승인 공개, reconciliation |
| 예측 | coverage, calibration, Brier/log loss |
| 매도 | ES/MDD 감소, permanent loss 회피, gain capture, false-exit cost |
| 재진입 | capture, delay cost, duplicate stage, expiry |
| 비용후 효용 | 20/63/126/252 거래일 |
| 모델리스크 | PBO, DSR, parameter stability, regime drift |
## 7. 변경 규칙
임계값·수식·우선순위를 바꾸는 PR은 반드시 다음을 포함한다.
1. Policy ID와 변경 사유
2. Characterization/Golden diff
3. Frozen OOS와 cost×2 결과
4. market/asset/regime별 영향
5. false-exit·reentry·ES 영향
6. ModelCard와 rollback 기준
7. Quant/Risk 승인
+72
View File
@@ -0,0 +1,72 @@
# 03. BE/FE 아키텍처 개선안
## 1. Modular Monolith 경계
- 단일 배포로 시작하되 module·PostgreSQL schema·namespace·API contract를 분리한다.
- 모듈은 다른 모듈의 Source Table을 직접 조회하지 않는다.
- 동기 의존은 좁은 Read Port, 비동기 결합은 Outbox/Inbox Event를 사용한다.
- Microservice 분리는 독립 SLO·배포·용량·소유팀이 실제로 필요할 때만 검토한다.
## 2. Vertical Slice 표준
```text
Features/<Slice>/
Endpoint.cs
Request.cs / Response.cs
Validator.cs
Handler.cs
Policy.cs
Sql.cs / Mapper.cs
Jobs/
Contracts/
Tests/
README.md # traceability
```
Endpoint는 HTTP, Handler는 use case/transaction, Policy는 순수 결정, Adapter는 외부 I/O만 담당한다.
## 3. Dapper·DB 원칙
- Generic Repository 금지
- schema-qualified SQL, 명시적 column, cancellation token
- Write는 3NF/append/revision, Read는 projection
- Evidence·Audit는 update/delete 차단
- DbUp migration은 module별 순번·checksum·fresh/upgrade test
- SELECT `*` 금지, PIT query는 `published_at <= cutoff`와 revision resolver 필수
## 4. Hangfire
Hangfire는 비즈니스 결정자가 아니라 승인된 Application Command의 반복 실행기다.
- JobRunId, Scope, IdempotencyKey, Watermark, Version Set, Input/Output Hash
- transient/permanent/DQ/business-hold retry class 분리
- q-research/q-backfill은 고객 SLA queue와 격리
- Job이 다른 Job을 직접 호출하지 않고 Event 또는 readiness gate로 연결
- 재처리는 overwrite가 아니라 새 Dataset/Revision 생성
## 5. FE 상태 소유권
| 상태 | 소유자 |
|---|---|
| API 서버상태·cache·stale·retry | TanStack Query |
| session·role·UI preference | Pinia |
| form | vee-validate + Zod |
| URL filter/selection | vue-router query/params |
| 대량 업무표 | AG Grid server row model |
Pinia에 API 응답을 복제하거나, 화면마다 401/409/422/429/503 처리를 다시 만들지 않는다.
## 6. FE 컴포넌트 승격 기준
공용 컴포넌트는 시각적 유사성이 아니라 동일한 업무 의미·상태·권한·접근성·테스트가 반복될 때만 만든다.
필수 공통: `QueryStateBoundary`, `PermissionGuard`, `DataGridShell`, `CrudForm`, `VersionConflictDialog`, `DataFreshnessBadge`.
도메인 공통: `EvidencePanel`, `ProtectionFloorPanel`, `ReentryTimeline`, `ApprovalPanel`, `VersionSetPanel`, `GateChecklist`.
## 7. 관측성
- HTTP/Job/SQL/Outbox를 correlationId·JobRunId·EvidenceId로 연결
- Serilog structured logging, OpenTelemetry trace/metric
- PII·token·API key는 log/tag 금지
- 운영 dashboard는 batch SLA, DQ quarantine, duplicate, recon break, model drift를 우선 표시
+77
View File
@@ -0,0 +1,77 @@
WBS_ID,Sprint,Slice,Workstream,Task,Deliverable,Acceptance,Owner,Secondary,PD,Dependency,Release_Blocker,Basis
AEG-S0-01,S0,VS-00,Governance,Baseline/Delta/Supersession matrix 확정,docs/version_coverage.csv,유효 기준 불명확 0,PM/Architect,Compliance,3,-,Y,Source
AEG-S0-02,S0,VS-00,Governance,REQ/ALG/DATA/API/DB/JOB/SCR/TEST ID Registry 동결,docs/id_registry.csv,중복/재사용 ID 0,PM,Architect,3,AEG-S0-01,Y,Source
AEG-S0-03,S0,VS-00,Research,원시 데이터 Manifest/checksum/license 계약,research/manifests,clean-room 입력 식별 100%,Data Lead,Quant,6,AEG-S0-01,Y,Source
AEG-S0-04,S0,VS-00,Research,Python pyproject/lock/container digest,research/pyproject.toml; lock; image digest,동일 환경 재실행 가능,Quant,DevOps,6,AEG-S0-03,Y,Design
AEG-S0-05,S0,VS-00,DevEx,.NET/pnpm restore lock 및 패키지 검증,global.json; packages; pnpm-lock,restore/build/test green,PL,DevOps,8,AEG-S0-01,Y,Source
AEG-S0-06,S0,VS-00,Security,Internal endpoint 익명 접근 제거,auth policy; access tests,/internal anonymous 0,Security,BE,5,AEG-S0-05,Y,Source
AEG-S0-07,S0,VS-00,Architecture,Fitness Function 20종 CI 연결,ArchitectureTests; scripts,AF-01~20 green,Architect,QA,8,AEG-S0-05,Y,Design
AEG-S0-08,S0,VS-00,Observability,HTTP→DB→Outbox correlation walking skeleton,OTel/Serilog smoke,trace link 100%,SRE,BE,5,AEG-S0-05,N,Source
AEG-S1-01,S1,VS-02,Data,SecurityMaster/listing/trading calendar canonical,migrations/security_master,상장기간·세션 invariant,Data,DBA,8,AEG-S0-03,Y,Source
AEG-S1-02,S1,VS-03,Data,Raw immutable/dataset manifest,raw_record; dataset_manifest,overwrite 0/hash 100%,Data,DBA,8,AEG-S0-03,Y,Source
AEG-S1-03,S1,VS-03,Data,PIT temporal resolver,PublishedAtPolicy; MarketCalendar,lookahead 0,Data,Quant,8,"AEG-S1-01,AEG-S1-02",Y,Source
AEG-S1-04,S1,VS-03,Data,DQ engine/quarantine/watermark,DQ-01~12 pipeline,Critical DQ release block,Data,QA,10,"AEG-S1-02,AEG-S1-03",Y,Source
AEG-S1-05,S1,VS-03,BE,Hangfire JobRun/Watermark/Retry class,job_run; job_watermark,duplicate 0/resume,BE,SRE,10,AEG-S0-05,Y,Source
AEG-S1-06,S1,VS-03,FE,Data run operational page baseline,SCR-013,processing/partial/warn/error,FE,Data,7,"AEG-S1-04,AEG-S1-05",N,Source
AEG-S2-01,S2,VS-04,Data,공식 Corporate Action master/조정,CA canonical + golden,수량·원가·수익 대사,Data,Quant/DBA,12,"AEG-S1-01,AEG-S1-02",Y,Source
AEG-S2-02,S2,VS-03,Data,Total return/FX/rate canonical,TR/FX/rate migrations,price vs total return 구분,Data,Quant,10,AEG-S1-03,Y,Source
AEG-S2-03,S2,VS-06,Data,Fee/Tax/FX PIT schedule,fee_schedule/tax/fx,기간 overlap 0,DBA,Quant,8,AEG-S1-03,Y,Source
AEG-S2-04,S2,VS-04,QA,상폐·분할·배당·증자 Golden,DataTests fixtures,공식 master diff 허용치,QA,Data,8,"AEG-S2-01,AEG-S2-02",Y,Source
AEG-S2-05,S2,VS-19,Research,기존 Python 결과 Characterization,golden/current,기존 artifact metric diff 0,Quant,QA,8,AEG-S0-04,Y,Source
AEG-S2-06,S2,VS-19,Research,비용 전역상수 제거/함수 계약화,research simulation cost contract,market/account cost 라벨 일치,Quant,QA,6,"AEG-S2-03,AEG-S2-05",Y,Source
AEG-S3-01,S3,VS-08,Data,Append ledger/cash/lot/cycle,ledger_entry; position_lot; cycle_state,debit-credit/reversal,BE/DBA,QA,14,"AEG-S2-01,AEG-S2-03",Y,Source
AEG-S3-02,S3,VS-08,Algorithm,Scalar position→Lot/Cycle migration contract,domain model + migration plan,core/tactical 혼합 0,BE,Quant,12,AEG-S3-01,Y,Source
AEG-S3-03,S3,VS-09,Data,EvidenceSnapshot Version Set,evidence schema/hash,동일 입력 hash 동일,BE/DBA,Quant,10,"AEG-S1-04,AEG-S2-02,AEG-S2-03",Y,Source
AEG-S3-04,S3,VS-08,QA,Ledger property/reconciliation tests,Unit/Data/Integration,수량·현금 invariant,QA,BE/DBA,10,AEG-S3-01,Y,Source
AEG-S3-05,S3,VS-08,FE,Portfolio lot/cycle read model,rm_portfolio_overview,stale/lineage/rebuild 표시,FE,Data,8,AEG-S3-01,N,Source
AEG-S4-01,S4,VS-10,Algorithm,Policy contract/priority registry,Policy registry,우선순위 변경 승인 강제,Quant,Risk/BE,6,AEG-S2-05,Y,Source
AEG-S4-02,S4,VS-10,Algorithm,Hard impairment policy/evidence grade,ALG-SELL-001,하위정책 상쇄 0,BE/Quant,QA,7,"AEG-S4-01,AEG-S3-03",Y,Source
AEG-S4-03,S4,VS-10,Algorithm,Portfolio survival/capital floor policy,ALG-PORT-001,risk cap property,Quant/BE,QA,9,"AEG-S3-02,AEG-S4-01",Y,Source
AEG-S4-04,S4,VS-10,Algorithm,Gap/two-close/protection floor,ALG-SELL-002/003,monotonic/boundary/cooldown,BE/Quant,QA,12,"AEG-S3-02,AEG-S4-01",Y,Source
AEG-S4-05,S4,VS-10,Algorithm,Concentration/liquidity policy,ALG-SELL-004,caps/ADV constraint,Quant/BE,QA,8,AEG-S4-01,Y,Source
AEG-S4-06,S4,VS-10,Algorithm,Expected utility/opportunity policy,ALG-SELL-005,lower CI > 0/cost×2,Quant/BE,Risk/QA,12,"AEG-S2-03,AEG-S4-01",Y,Source
AEG-S4-07,S4,VS-10,BE,Endpoint→Handler→Policy→DB→Outbox slice,VS-10 code packet,auth/idempotency/transaction,BE,SRE/QA,14,"AEG-S3-03,AEG-S4-02~06",Y,Source
AEG-S4-08,S4,VS-10,DB,Decision immutability/indexes,0011_signal_hardening.sql,update/delete 0,DBA,BE,5,AEG-S4-07,Y,Design
AEG-S5-01,S5,VS-11,Algorithm,Reentry staged state machine,ALG-REENTRY-001,wait/spacing/expiry/new cycle,BE/Quant,QA,12,"AEG-S3-02,AEG-S4-07",Y,Source
AEG-S5-02,S5,VS-11,BE,Reentry watch scan/idempotent stage,VS-11 handler/job,stage duplicate 0,BE,SRE,10,"AEG-S5-01,AEG-S1-05",Y,Source
AEG-S5-03,S5,VS-19,Research,Python/.NET Golden vector comparison,BacktestRegression,허용오차 내 의미 동일,Quant/QA,BE,10,"AEG-S4-02~06,AEG-S2-05",Y,Source
AEG-S5-04,S5,VS-19,Research,Walk-forward/PBO/DSR/bootstrap hooks,research evaluation,승격 지표 산출 가능,Quant,Risk/QA,12,"AEG-S0-04,AEG-S2-06",N,Source
AEG-S5-05,S5,VS-11,FE,Reentry timeline/state matrix,SCR-003,expired/readonly/warn/conflict,FE,UX/QA,9,AEG-S5-02,N,Source
AEG-S6-01,S6,VS-07,BE,Client/IPS versioned contract,VS-07,과거 IPS 수정 0,BE,Compliance,10,AEG-S0-06,Y,Source
AEG-S6-02,S6,VS-08,BE,Portfolio performance/risk baseline,VS-08/13,TWR/MWR/ES golden,BE/Quant,QA,12,AEG-S3-01,Y,Source
AEG-S6-03,S6,VS-07,FE,IPS wizard/conflict/validation,SCR-008,409/422/RBAC/a11y,FE,UX/QA,10,AEG-S6-01,N,Source
AEG-S6-04,S6,ReadModels,Data,Read model version/rebuild framework,projection registry,rebuild hash/staleness,Data/BE,SRE,10,AEG-S3-05,Y,Source
AEG-S7-01,S7,VS-14,BE,Recommendation aggregation,VS-14,DQ/IPS/capability hold,BE,Quant,14,"AEG-S4-07,AEG-S6-01,AEG-S6-02",Y,Source
AEG-S7-02,S7,VS-15,BE,Maker-checker review/concurrency,VS-15,self approval 0,BE,Compliance/QA,10,AEG-S7-01,Y,Source
AEG-S7-03,S7,VS-15,FE,Recommendation workbench,SCR-009,11-state/RBAC/E2E,FE,QA/UX,14,"AEG-S7-02,AEG-S6-04",N,Source
AEG-S7-04,S7,Cross,FE,Stable idempotency/ProblemDetails/ETag common,shared/api,retry same key/409/422/429/503,FE,BE/QA,8,AEG-S0-05,Y,Design
AEG-S8-01,S8,VS-16,BE,Approved advice publish/version hash,VS-16,unapproved publish 0,BE,Compliance,10,AEG-S7-02,Y,Source
AEG-S8-02,S8,VS-17,BE,Client decision attribution,VS-17,advice/execution/action 분리,BE,Quant,7,AEG-S8-01,N,Source
AEG-S8-03,S8,VS-18,BE,Outcome windows 1/5/20/63/126/252,VS-18/J10,calendar/revision/no-fill,BE/Quant,Data/QA,14,"AEG-S8-01,AEG-S2-02",Y,Source
AEG-S8-04,S8,VS-16,FE,Advice detail/evidence/counterevidence,SCR-002,approved version only,FE,UX/Compliance,10,"AEG-S8-01,AEG-S6-04",N,Source
AEG-S8-05,S8,Audit,Governance,E2E audit trace,rm_audit_trace,input→outcome trace 100%,BE,Audit/SRE,10,AEG-S8-01~03,Y,Source
AEG-S9-01,S9,VS-13,Algorithm,Portfolio ES/concentration/correlation,VS-13,numeric/property/perf,Quant/BE,QA,12,AEG-S6-02,Y,Source
AEG-S9-02,S9,VS-21,Algorithm,Rebalance deterministic baseline,VS-21,constraint 0/NO_ACTION,Quant/BE,QA,14,"AEG-S9-01,AEG-S2-03",Y,Source
AEG-S9-03,S9,VS-21,FE,Before/after risk and constraints,SCR-005,override audit/a11y,FE,QA/UX,10,AEG-S9-02,N,Source
AEG-S10-01,S10,VS-12,Algorithm,Buy candidate calibrated outputs,VS-12,P10/P50/P90 calibration,Quant,Risk/QA,14,AEG-S5-04,N,Source
AEG-S10-02,S10,VS-22,Algorithm,Replacement net-edge/ranking,VS-22,after-cost/IPS ranking,Quant/BE,QA,10,"AEG-S4-06,AEG-S10-01",N,Source
AEG-S10-03,S10,VS-12,FE,Candidate AG Grid server model,SCR-006,10k row/perf/filter/auth,FE,QA,12,"AEG-S10-01,AEG-S6-04",N,Source
AEG-S11-01,S11,VS-18,Evaluation,False-exit cost/reentry capture definition,sell_evaluation,benchmark/cost/weight 일치,Quant,Risk/QA,10,"AEG-S8-03,AEG-S5-01",Y,Source
AEG-S11-02,S11,VS-24,Evaluation,Daily scorecard/cohort/drift,J11/SCR-010,표본/창/as-of/version,Quant/BE,Data,12,AEG-S11-01,Y,Source
AEG-S11-03,S11,Shadow,Operations,Shadow next-session execution,shadow_execution,decision/fill/action 분리,Quant/BE,QA,12,"AEG-S8-03,AEG-S2-03",Y,Source
AEG-S11-04,S11,VS-24,FE,Scorecard/gate/drift dashboard,SCR-010,적중률 보조지표,FE,Quant/QA,10,AEG-S11-02,N,Source
AEG-S12-01,S12,VS-23,BE,KIS adapter capability OFF baseline,adapter/capability,prod order path disabled,BE,Security/Compliance,10,AEG-S0-06,Y,Source
AEG-S12-02,S12,VS-23,BE,OrderIntent/Fill dedupe,VS-23,duplicate fill/order 0,BE,DBA/QA,12,"AEG-S12-01,AEG-S3-01",Y,Source
AEG-S12-03,S12,VS-23,Operations,Position/cash/fee/tax/FX reconciliation,J12,unapproved break 0,BE/Ops,DBA/QA,12,AEG-S12-02,Y,Source
AEG-S12-04,S12,VS-23,FE,Reconciliation workbench,SCR-014,maker-checker/SLA,FE,Ops/QA,9,AEG-S12-03,N,Source
AEG-S13-01,S13,VS-25,Security,RBAC/MFA/SoD/access matrix,security tests,cross-client access 0,Security,BE/QA,12,"AEG-S6-01,AEG-S7-02",Y,Source
AEG-S13-02,S13,VS-25,Operations,Kill-switch/capability control,VS-25,scope block/recovery,SRE,Risk/BE,10,AEG-S12-01,Y,Source
AEG-S13-03,S13,DR,Operations,Backup/PITR/read-model rebuild drill,runbooks/dr,RPO/RTO/reconcile,SRE/DBA,Ops,12,"AEG-S6-04,AEG-S12-03",Y,Source
AEG-S13-04,S13,QA,Quality,Playwright role/state/a11y UAT,e2e evidence,critical journey green,QA,FE/Compliance,12,"AEG-S8-04,AEG-S11-04,AEG-S12-04",Y,Source
AEG-S14-01,S14,Performance,DBA,Plan/index/bloat/partition evidence,performance report,P95/lock 기준,DBA,BE,10,AEG-S11-02,N,Design
AEG-S14-02,S14,Backfill,Operations,Chunk/checkpoint/resume/replay,maintenance jobs,restart/reconcile 100%,Data/SRE,DBA,12,AEG-S13-03,Y,Source
AEG-S14-03,S14,Release,DevOps,Release Evidence Pack 자동화,CI artifacts,문서/DDL/OpenAPI/Test hash,DevOps,QA/PM,10,AEG-S0-07,Y,Source
AEG-S14-04,S14,Cutover,Operations,Cutover/rollback rehearsal,runbooks/cutover,rollback RTO 내,SRE,All,10,"AEG-S14-02,AEG-S14-03",Y,Source
AEG-S15-01,S15,GoLive,Governance,Advisory Go/No-Go,release decision,RG/AF/DQ/DR 모두 통과,Steering,All,4,AEG-S14-04,Y,Source
AEG-S15-02,S15,Hypercare,Operations,P1/P2 monitoring/on-call,dashboards/runbooks,Owner/Secondary 응답,SRE/Ops,BE/Data,10,AEG-S15-01,Y,Source
AEG-S15-03,S15,Shadow,Governance,252거래일 Shadow 누적 시작,model/evaluation manifest,자동주문 OFF 확인,Quant/Risk,Compliance,6,AEG-S15-01,Y,Source
1 WBS_ID Sprint Slice Workstream Task Deliverable Acceptance Owner Secondary PD Dependency Release_Blocker Basis
2 AEG-S0-01 S0 VS-00 Governance Baseline/Delta/Supersession matrix 확정 docs/version_coverage.csv 유효 기준 불명확 0 PM/Architect Compliance 3 - Y Source
3 AEG-S0-02 S0 VS-00 Governance REQ/ALG/DATA/API/DB/JOB/SCR/TEST ID Registry 동결 docs/id_registry.csv 중복/재사용 ID 0 PM Architect 3 AEG-S0-01 Y Source
4 AEG-S0-03 S0 VS-00 Research 원시 데이터 Manifest/checksum/license 계약 research/manifests clean-room 입력 식별 100% Data Lead Quant 6 AEG-S0-01 Y Source
5 AEG-S0-04 S0 VS-00 Research Python pyproject/lock/container digest research/pyproject.toml; lock; image digest 동일 환경 재실행 가능 Quant DevOps 6 AEG-S0-03 Y Design
6 AEG-S0-05 S0 VS-00 DevEx .NET/pnpm restore lock 및 패키지 검증 global.json; packages; pnpm-lock restore/build/test green PL DevOps 8 AEG-S0-01 Y Source
7 AEG-S0-06 S0 VS-00 Security Internal endpoint 익명 접근 제거 auth policy; access tests /internal anonymous 0 Security BE 5 AEG-S0-05 Y Source
8 AEG-S0-07 S0 VS-00 Architecture Fitness Function 20종 CI 연결 ArchitectureTests; scripts AF-01~20 green Architect QA 8 AEG-S0-05 Y Design
9 AEG-S0-08 S0 VS-00 Observability HTTP→DB→Outbox correlation walking skeleton OTel/Serilog smoke trace link 100% SRE BE 5 AEG-S0-05 N Source
10 AEG-S1-01 S1 VS-02 Data SecurityMaster/listing/trading calendar canonical migrations/security_master 상장기간·세션 invariant Data DBA 8 AEG-S0-03 Y Source
11 AEG-S1-02 S1 VS-03 Data Raw immutable/dataset manifest raw_record; dataset_manifest overwrite 0/hash 100% Data DBA 8 AEG-S0-03 Y Source
12 AEG-S1-03 S1 VS-03 Data PIT temporal resolver PublishedAtPolicy; MarketCalendar lookahead 0 Data Quant 8 AEG-S1-01,AEG-S1-02 Y Source
13 AEG-S1-04 S1 VS-03 Data DQ engine/quarantine/watermark DQ-01~12 pipeline Critical DQ release block Data QA 10 AEG-S1-02,AEG-S1-03 Y Source
14 AEG-S1-05 S1 VS-03 BE Hangfire JobRun/Watermark/Retry class job_run; job_watermark duplicate 0/resume BE SRE 10 AEG-S0-05 Y Source
15 AEG-S1-06 S1 VS-03 FE Data run operational page baseline SCR-013 processing/partial/warn/error FE Data 7 AEG-S1-04,AEG-S1-05 N Source
16 AEG-S2-01 S2 VS-04 Data 공식 Corporate Action master/조정 CA canonical + golden 수량·원가·수익 대사 Data Quant/DBA 12 AEG-S1-01,AEG-S1-02 Y Source
17 AEG-S2-02 S2 VS-03 Data Total return/FX/rate canonical TR/FX/rate migrations price vs total return 구분 Data Quant 10 AEG-S1-03 Y Source
18 AEG-S2-03 S2 VS-06 Data Fee/Tax/FX PIT schedule fee_schedule/tax/fx 기간 overlap 0 DBA Quant 8 AEG-S1-03 Y Source
19 AEG-S2-04 S2 VS-04 QA 상폐·분할·배당·증자 Golden DataTests fixtures 공식 master diff 허용치 QA Data 8 AEG-S2-01,AEG-S2-02 Y Source
20 AEG-S2-05 S2 VS-19 Research 기존 Python 결과 Characterization golden/current 기존 artifact metric diff 0 Quant QA 8 AEG-S0-04 Y Source
21 AEG-S2-06 S2 VS-19 Research 비용 전역상수 제거/함수 계약화 research simulation cost contract market/account cost 라벨 일치 Quant QA 6 AEG-S2-03,AEG-S2-05 Y Source
22 AEG-S3-01 S3 VS-08 Data Append ledger/cash/lot/cycle ledger_entry; position_lot; cycle_state debit-credit/reversal BE/DBA QA 14 AEG-S2-01,AEG-S2-03 Y Source
23 AEG-S3-02 S3 VS-08 Algorithm Scalar position→Lot/Cycle migration contract domain model + migration plan core/tactical 혼합 0 BE Quant 12 AEG-S3-01 Y Source
24 AEG-S3-03 S3 VS-09 Data EvidenceSnapshot Version Set evidence schema/hash 동일 입력 hash 동일 BE/DBA Quant 10 AEG-S1-04,AEG-S2-02,AEG-S2-03 Y Source
25 AEG-S3-04 S3 VS-08 QA Ledger property/reconciliation tests Unit/Data/Integration 수량·현금 invariant QA BE/DBA 10 AEG-S3-01 Y Source
26 AEG-S3-05 S3 VS-08 FE Portfolio lot/cycle read model rm_portfolio_overview stale/lineage/rebuild 표시 FE Data 8 AEG-S3-01 N Source
27 AEG-S4-01 S4 VS-10 Algorithm Policy contract/priority registry Policy registry 우선순위 변경 승인 강제 Quant Risk/BE 6 AEG-S2-05 Y Source
28 AEG-S4-02 S4 VS-10 Algorithm Hard impairment policy/evidence grade ALG-SELL-001 하위정책 상쇄 0 BE/Quant QA 7 AEG-S4-01,AEG-S3-03 Y Source
29 AEG-S4-03 S4 VS-10 Algorithm Portfolio survival/capital floor policy ALG-PORT-001 risk cap property Quant/BE QA 9 AEG-S3-02,AEG-S4-01 Y Source
30 AEG-S4-04 S4 VS-10 Algorithm Gap/two-close/protection floor ALG-SELL-002/003 monotonic/boundary/cooldown BE/Quant QA 12 AEG-S3-02,AEG-S4-01 Y Source
31 AEG-S4-05 S4 VS-10 Algorithm Concentration/liquidity policy ALG-SELL-004 caps/ADV constraint Quant/BE QA 8 AEG-S4-01 Y Source
32 AEG-S4-06 S4 VS-10 Algorithm Expected utility/opportunity policy ALG-SELL-005 lower CI > 0/cost×2 Quant/BE Risk/QA 12 AEG-S2-03,AEG-S4-01 Y Source
33 AEG-S4-07 S4 VS-10 BE Endpoint→Handler→Policy→DB→Outbox slice VS-10 code packet auth/idempotency/transaction BE SRE/QA 14 AEG-S3-03,AEG-S4-02~06 Y Source
34 AEG-S4-08 S4 VS-10 DB Decision immutability/indexes 0011_signal_hardening.sql update/delete 0 DBA BE 5 AEG-S4-07 Y Design
35 AEG-S5-01 S5 VS-11 Algorithm Reentry staged state machine ALG-REENTRY-001 wait/spacing/expiry/new cycle BE/Quant QA 12 AEG-S3-02,AEG-S4-07 Y Source
36 AEG-S5-02 S5 VS-11 BE Reentry watch scan/idempotent stage VS-11 handler/job stage duplicate 0 BE SRE 10 AEG-S5-01,AEG-S1-05 Y Source
37 AEG-S5-03 S5 VS-19 Research Python/.NET Golden vector comparison BacktestRegression 허용오차 내 의미 동일 Quant/QA BE 10 AEG-S4-02~06,AEG-S2-05 Y Source
38 AEG-S5-04 S5 VS-19 Research Walk-forward/PBO/DSR/bootstrap hooks research evaluation 승격 지표 산출 가능 Quant Risk/QA 12 AEG-S0-04,AEG-S2-06 N Source
39 AEG-S5-05 S5 VS-11 FE Reentry timeline/state matrix SCR-003 expired/readonly/warn/conflict FE UX/QA 9 AEG-S5-02 N Source
40 AEG-S6-01 S6 VS-07 BE Client/IPS versioned contract VS-07 과거 IPS 수정 0 BE Compliance 10 AEG-S0-06 Y Source
41 AEG-S6-02 S6 VS-08 BE Portfolio performance/risk baseline VS-08/13 TWR/MWR/ES golden BE/Quant QA 12 AEG-S3-01 Y Source
42 AEG-S6-03 S6 VS-07 FE IPS wizard/conflict/validation SCR-008 409/422/RBAC/a11y FE UX/QA 10 AEG-S6-01 N Source
43 AEG-S6-04 S6 ReadModels Data Read model version/rebuild framework projection registry rebuild hash/staleness Data/BE SRE 10 AEG-S3-05 Y Source
44 AEG-S7-01 S7 VS-14 BE Recommendation aggregation VS-14 DQ/IPS/capability hold BE Quant 14 AEG-S4-07,AEG-S6-01,AEG-S6-02 Y Source
45 AEG-S7-02 S7 VS-15 BE Maker-checker review/concurrency VS-15 self approval 0 BE Compliance/QA 10 AEG-S7-01 Y Source
46 AEG-S7-03 S7 VS-15 FE Recommendation workbench SCR-009 11-state/RBAC/E2E FE QA/UX 14 AEG-S7-02,AEG-S6-04 N Source
47 AEG-S7-04 S7 Cross FE Stable idempotency/ProblemDetails/ETag common shared/api retry same key/409/422/429/503 FE BE/QA 8 AEG-S0-05 Y Design
48 AEG-S8-01 S8 VS-16 BE Approved advice publish/version hash VS-16 unapproved publish 0 BE Compliance 10 AEG-S7-02 Y Source
49 AEG-S8-02 S8 VS-17 BE Client decision attribution VS-17 advice/execution/action 분리 BE Quant 7 AEG-S8-01 N Source
50 AEG-S8-03 S8 VS-18 BE Outcome windows 1/5/20/63/126/252 VS-18/J10 calendar/revision/no-fill BE/Quant Data/QA 14 AEG-S8-01,AEG-S2-02 Y Source
51 AEG-S8-04 S8 VS-16 FE Advice detail/evidence/counterevidence SCR-002 approved version only FE UX/Compliance 10 AEG-S8-01,AEG-S6-04 N Source
52 AEG-S8-05 S8 Audit Governance E2E audit trace rm_audit_trace input→outcome trace 100% BE Audit/SRE 10 AEG-S8-01~03 Y Source
53 AEG-S9-01 S9 VS-13 Algorithm Portfolio ES/concentration/correlation VS-13 numeric/property/perf Quant/BE QA 12 AEG-S6-02 Y Source
54 AEG-S9-02 S9 VS-21 Algorithm Rebalance deterministic baseline VS-21 constraint 0/NO_ACTION Quant/BE QA 14 AEG-S9-01,AEG-S2-03 Y Source
55 AEG-S9-03 S9 VS-21 FE Before/after risk and constraints SCR-005 override audit/a11y FE QA/UX 10 AEG-S9-02 N Source
56 AEG-S10-01 S10 VS-12 Algorithm Buy candidate calibrated outputs VS-12 P10/P50/P90 calibration Quant Risk/QA 14 AEG-S5-04 N Source
57 AEG-S10-02 S10 VS-22 Algorithm Replacement net-edge/ranking VS-22 after-cost/IPS ranking Quant/BE QA 10 AEG-S4-06,AEG-S10-01 N Source
58 AEG-S10-03 S10 VS-12 FE Candidate AG Grid server model SCR-006 10k row/perf/filter/auth FE QA 12 AEG-S10-01,AEG-S6-04 N Source
59 AEG-S11-01 S11 VS-18 Evaluation False-exit cost/reentry capture definition sell_evaluation benchmark/cost/weight 일치 Quant Risk/QA 10 AEG-S8-03,AEG-S5-01 Y Source
60 AEG-S11-02 S11 VS-24 Evaluation Daily scorecard/cohort/drift J11/SCR-010 표본/창/as-of/version Quant/BE Data 12 AEG-S11-01 Y Source
61 AEG-S11-03 S11 Shadow Operations Shadow next-session execution shadow_execution decision/fill/action 분리 Quant/BE QA 12 AEG-S8-03,AEG-S2-03 Y Source
62 AEG-S11-04 S11 VS-24 FE Scorecard/gate/drift dashboard SCR-010 적중률 보조지표 FE Quant/QA 10 AEG-S11-02 N Source
63 AEG-S12-01 S12 VS-23 BE KIS adapter capability OFF baseline adapter/capability prod order path disabled BE Security/Compliance 10 AEG-S0-06 Y Source
64 AEG-S12-02 S12 VS-23 BE OrderIntent/Fill dedupe VS-23 duplicate fill/order 0 BE DBA/QA 12 AEG-S12-01,AEG-S3-01 Y Source
65 AEG-S12-03 S12 VS-23 Operations Position/cash/fee/tax/FX reconciliation J12 unapproved break 0 BE/Ops DBA/QA 12 AEG-S12-02 Y Source
66 AEG-S12-04 S12 VS-23 FE Reconciliation workbench SCR-014 maker-checker/SLA FE Ops/QA 9 AEG-S12-03 N Source
67 AEG-S13-01 S13 VS-25 Security RBAC/MFA/SoD/access matrix security tests cross-client access 0 Security BE/QA 12 AEG-S6-01,AEG-S7-02 Y Source
68 AEG-S13-02 S13 VS-25 Operations Kill-switch/capability control VS-25 scope block/recovery SRE Risk/BE 10 AEG-S12-01 Y Source
69 AEG-S13-03 S13 DR Operations Backup/PITR/read-model rebuild drill runbooks/dr RPO/RTO/reconcile SRE/DBA Ops 12 AEG-S6-04,AEG-S12-03 Y Source
70 AEG-S13-04 S13 QA Quality Playwright role/state/a11y UAT e2e evidence critical journey green QA FE/Compliance 12 AEG-S8-04,AEG-S11-04,AEG-S12-04 Y Source
71 AEG-S14-01 S14 Performance DBA Plan/index/bloat/partition evidence performance report P95/lock 기준 DBA BE 10 AEG-S11-02 N Design
72 AEG-S14-02 S14 Backfill Operations Chunk/checkpoint/resume/replay maintenance jobs restart/reconcile 100% Data/SRE DBA 12 AEG-S13-03 Y Source
73 AEG-S14-03 S14 Release DevOps Release Evidence Pack 자동화 CI artifacts 문서/DDL/OpenAPI/Test hash DevOps QA/PM 10 AEG-S0-07 Y Source
74 AEG-S14-04 S14 Cutover Operations Cutover/rollback rehearsal runbooks/cutover rollback RTO 내 SRE All 10 AEG-S14-02,AEG-S14-03 Y Source
75 AEG-S15-01 S15 GoLive Governance Advisory Go/No-Go release decision RG/AF/DQ/DR 모두 통과 Steering All 4 AEG-S14-04 Y Source
76 AEG-S15-02 S15 Hypercare Operations P1/P2 monitoring/on-call dashboards/runbooks Owner/Secondary 응답 SRE/Ops BE/Data 10 AEG-S15-01 Y Source
77 AEG-S15-03 S15 Shadow Governance 252거래일 Shadow 누적 시작 model/evaluation manifest 자동주문 OFF 확인 Quant/Risk Compliance 6 AEG-S15-01 Y Source
@@ -0,0 +1,19 @@
DebtId,Title,RiskClass,Priority,Impact,Owner,Secondary,DueSprint,Remediation,ExitTest,Decision
TD-H-001,Raw data/환경 lock 부재,Data/Model,P0,재현 불가,Quant Lead,Data Lead,S0,manifest+checksum+lock+image digest,clean-room replay hash,Fix
TD-H-002,Scalar position이 Core/Tactical lot 혼합,Model,P0,보호선·재진입 왜곡,BE Lead,Quant Lead,S3,Lot/Cycle/Protection/Reentry model,property+golden,Fix
TD-H-003,KR 기업행사 추정 소급조정,Data,P0,가격·ATR·수익 왜곡,Data Lead,DBA,S2,공식 CA master+quarantine,CA reconciliation,Fix
TD-H-004,총수익/PIT/상폐/세금/FX 불완전,Data/Model,P0,생산 판단 불가,Data Lead,Risk,S2,canonical PIT sources,DQ/replay,Fix
TD-H-005,비용 전역상수/라벨 불일치,Model,P0,성과 왜곡,Quant Lead,QA,S2,FeeSchedule PIT contract,cost scenario diff,Fix
TD-H-006,Internal research endpoint AllowAnonymous,Security,P0,무권한 정책 실행,Security,BE Lead,S0,auth policy+access test,anonymous 0,Fix
TD-H-007,FE pnpm-lock 누락,Engineering,P0,CI 비결정/현재 CI 실패,FE Lead,DevOps,S0,lockfile commit,frozen install,Fix
TD-H-008,Handler/Validator/DB/Outbox 없는 endpoint,Architecture,P1,Vertical Slice 미완성,BE Lead,Architect,S4,full slice packet,integration/trace,Fix
TD-H-009,Survival/집중/기회비용 정책 미구현,Model,P1,정책 우선순위 불완전,Quant Lead,BE Lead,S4,ALG-PORT/SELL-004/005,golden/property,Fix
TD-H-010,sell_fraction 단위 모호,Contract,P1,core floor 계산 오류 위험,Quant Lead,Architect,S4,ratio/quantity/target weight 분리,contract tests,Fix
TD-H-011,Reentry multi-stage 상태 전이 불완전,Model,P1,단계 재진입/새 cycle 오류,BE Lead,Quant Lead,S5,explicit transition table,calendar/stage tests,Fix
TD-H-012,SignalDecision immutable trigger 누락,Data/Audit,P1,감사·재현 훼손,DBA,BE Lead,S4,DB trigger+privilege,update/delete test,Fix
TD-H-013,Architecture test가 문자열 1종만 검사,Quality,P1,경계 회귀 탐지 불가,Architect,QA,S0,AF-01~20,CI gate,Fix
TD-H-014,FE DTO 수동 중복/Idempotency retry key 변경,Frontend,P1,계약 drift/중복 명령,FE Lead,BE Lead,S7,generated/versioned contract+stable key,Vitest/E2E,Fix
TD-H-015,Outbox publisher/Inbox consumer/dead-letter 미구현,Reliability,P1,이벤트 미전달/중복,BE Lead,SRE,S4,dispatcher/inbox/replay,fault tests,Fix
TD-H-016,Read Model rebuild/staleness 미구현,Operations,P2,복구·오래된 화면,Data Lead,SRE,S6,projection registry/rebuild,DR rebuild,Fix
TD-H-017,Swagger 상시 노출,Security,P2,공격표면 증가,Security,BE Lead,S0,environment/role gate,security test,Fix
TD-H-018,No dependency vulnerability/license evidence,SupplyChain,P2,공급망 위험,DevOps,Security,S0,audit/SBOM/license report,release evidence,Fix
1 DebtId Title RiskClass Priority Impact Owner Secondary DueSprint Remediation ExitTest Decision
2 TD-H-001 Raw data/환경 lock 부재 Data/Model P0 재현 불가 Quant Lead Data Lead S0 manifest+checksum+lock+image digest clean-room replay hash Fix
3 TD-H-002 Scalar position이 Core/Tactical lot 혼합 Model P0 보호선·재진입 왜곡 BE Lead Quant Lead S3 Lot/Cycle/Protection/Reentry model property+golden Fix
4 TD-H-003 KR 기업행사 추정 소급조정 Data P0 가격·ATR·수익 왜곡 Data Lead DBA S2 공식 CA master+quarantine CA reconciliation Fix
5 TD-H-004 총수익/PIT/상폐/세금/FX 불완전 Data/Model P0 생산 판단 불가 Data Lead Risk S2 canonical PIT sources DQ/replay Fix
6 TD-H-005 비용 전역상수/라벨 불일치 Model P0 성과 왜곡 Quant Lead QA S2 FeeSchedule PIT contract cost scenario diff Fix
7 TD-H-006 Internal research endpoint AllowAnonymous Security P0 무권한 정책 실행 Security BE Lead S0 auth policy+access test anonymous 0 Fix
8 TD-H-007 FE pnpm-lock 누락 Engineering P0 CI 비결정/현재 CI 실패 FE Lead DevOps S0 lockfile commit frozen install Fix
9 TD-H-008 Handler/Validator/DB/Outbox 없는 endpoint Architecture P1 Vertical Slice 미완성 BE Lead Architect S4 full slice packet integration/trace Fix
10 TD-H-009 Survival/집중/기회비용 정책 미구현 Model P1 정책 우선순위 불완전 Quant Lead BE Lead S4 ALG-PORT/SELL-004/005 golden/property Fix
11 TD-H-010 sell_fraction 단위 모호 Contract P1 core floor 계산 오류 위험 Quant Lead Architect S4 ratio/quantity/target weight 분리 contract tests Fix
12 TD-H-011 Reentry multi-stage 상태 전이 불완전 Model P1 단계 재진입/새 cycle 오류 BE Lead Quant Lead S5 explicit transition table calendar/stage tests Fix
13 TD-H-012 SignalDecision immutable trigger 누락 Data/Audit P1 감사·재현 훼손 DBA BE Lead S4 DB trigger+privilege update/delete test Fix
14 TD-H-013 Architecture test가 문자열 1종만 검사 Quality P1 경계 회귀 탐지 불가 Architect QA S0 AF-01~20 CI gate Fix
15 TD-H-014 FE DTO 수동 중복/Idempotency retry key 변경 Frontend P1 계약 drift/중복 명령 FE Lead BE Lead S7 generated/versioned contract+stable key Vitest/E2E Fix
16 TD-H-015 Outbox publisher/Inbox consumer/dead-letter 미구현 Reliability P1 이벤트 미전달/중복 BE Lead SRE S4 dispatcher/inbox/replay fault tests Fix
17 TD-H-016 Read Model rebuild/staleness 미구현 Operations P2 복구·오래된 화면 Data Lead SRE S6 projection registry/rebuild DR rebuild Fix
18 TD-H-017 Swagger 상시 노출 Security P2 공격표면 증가 Security BE Lead S0 environment/role gate security test Fix
19 TD-H-018 No dependency vulnerability/license evidence SupplyChain P2 공급망 위험 DevOps Security S0 audit/SBOM/license report release evidence Fix
+51
View File
@@ -0,0 +1,51 @@
WBS_ID,Sprint,Workstream,Task,Deliverable,Done_Gate,Owner,PD,Dependency
R0.01,S0,Governance,Source/Assumption/Unknown registry 동결,docs/source_registry.csv,미확정 기본값 0,PM/Architect,3,-
R0.02,S0,Research,Python 환경·raw manifest·checksum 계약,research/pyproject.lock; manifests,동일 run artifact hash,Quant/Data,6,R0.01
R0.03,S0,Research,현재 결과 characterization,golden/current/*.csv,기존 CSV metric diff 0,Quant/QA,6,R0.02
R0.04,S0,Architecture,Solution/Module/Schema ownership 확정,ADR-001; module matrix,Architecture review,Architect/DBA,4,R0.01
R0.05,S0,DevEx,.NET/FE skeleton·CI·lockfile,"solution, package lock, workflow",restore/build/test green,PL/DevOps,8,R0.04
R0.06,S0,Observability,Correlation/OTel/Serilog walking skeleton,trace/log/metric smoke,HTTP→DB→Outbox trace,SRE/BE,5,R0.05
ALG.01,S1,Algorithm,Policy input/output contract와 PolicyId registry,SignalPolicyContracts,Quant/Risk 승인,Quant/BE,6,R0.03
ALG.02,S1,Algorithm,Lot/Cycle/Protection state model,"Domain/PositionLot,CycleState",invariant/property tests,BE/Quant,10,ALG.01
ALG.03,S1,Algorithm,Hard impairment policy,HardImpairmentPolicy,하위정책 상쇄 0,BE/Quant/QA,6,ALG.01
ALG.04,S1,Algorithm,Profit floor gap/two-close policy,ProfitFloorPolicies,boundary/monotonic tests,BE/Quant/QA,9,ALG.02
ALG.05,S2,Algorithm,Reentry watch state machine,ReentryStateMachine,new Cycle/duplicate0/expiry,BE/Quant/QA,10,ALG.02
ALG.06,S2,Algorithm,Expected utility components,ExpectedUtilityCalculator,decimal/CI/cost2x,Quant/BE,10,ALG.01
ALG.07,S2,Algorithm,Portfolio survival/concentration overlay,PortfolioConstraintPolicies,caps/property tests,Quant/BE,10,ALG.02
DATA.01,S1,Data,Source manifest/raw immutable schema,"raw_record,dataset_manifest",hash/revision/overwrite0,Data/DBA,8,R0.04
DATA.02,S1,Data,MarketCalendar/PIT temporal conventions,published/effective/tradable_session,lookahead0,Data/Quant/QA,8,DATA.01
DATA.03,S2,Data,Corporate Action/Total Return canonical model,CA/TR migrations+golden,official master reconcile,Data/DBA/Quant,12,DATA.01
DATA.04,S2,Data,Fee/Tax/FX temporal model,"fee_schedule,tax,fx",valid range overlap0,DBA/Quant,8,DATA.02
DATA.05,S2,Data,DQ rule engine/quarantine,DQ-01~12 pipeline,critical rule release block,Data/QA,12,DATA.01~04
DATA.06,S3,Data,Immutable ledger/lot/cycle,"ledger_entry,position_lot",debit-credit/reversal,BE/DBA/QA,12,"ALG.02,DATA.03~04"
DATA.07,S3,Data,Evidence/Decision/Watch schemas,"evidence,decision,watch",append/hash/state checks,DBA/BE,10,ALG.03~05
BE.01,S0,Backend,BuildingBlocks Result/Clock/Data/Outbox,src/KArtSell.BuildingBlocks,unit/architecture,BE,8,R0.05
BE.02,S0,Backend,FastEndpoints/ProblemDetails/Auth conventions,Host + Endpoint base,OpenAPI/error mapping,BE/Security,7,BE.01
BE.03,S0,Backend,Dapper transaction/DbUp runner,"DbSession, Migrator",fresh/upgrade/re-run,BE/DBA,8,BE.01
BE.04,S1,Backend,JobRun/Watermark/Hangfire queues,"job_run, job_watermark",duplicate0/resume,BE/SRE/DBA,10,BE.03
BE.05,S2,Backend,Evidence→SellDecision slice,VS-09/10,Golden/E2E/metric,BE/Quant/QA,14,"ALG.03~04,DATA.07"
BE.06,S2,Backend,Sell→ReentryWatch slice,VS-11,state/calendar/E2E,BE/Quant/QA,12,"ALG.05,BE.05"
BE.07,S3,Backend,Recommendation→Review→Publish slice,VS-14~16,maker-checker/hash/expiry,BE/FE/Compliance,18,BE.05~06
BE.08,S4,Backend,Outcome/Evaluation windows,VS-18,1/5/20/63/126/252,BE/Quant/Data,14,"BE.07,DATA.03~04"
BE.09,S4,Backend,Frozen backtest runner,VS-19,manifest/repro/cost2x,BE/Quant/QA,14,"R0.02,ALG.01~07"
BE.10,S5,Backend,Risk/Rebalance/Replacement,VS-13/21/22,constraints/NO_ACTION,BE/Quant/QA,18,"ALG.06~07,DATA.06"
FE.01,S0,Frontend,AppShell/router/query/api/error,app/shared,lint/type/test/build,FE,10,R0.05
FE.02,S1,Frontend,QueryState/Permission/Freshness,C-003~005,11-state/a11y,FE/QA,8,FE.01
FE.03,S1,Frontend,DataGrid/Form/Conflict primitives,C-006~010,paging/409/422,FE/QA,12,FE.01
FE.04,S2,Frontend,Evidence/Protection/Cost/Reentry components,C-016~019,boundary/table alternative,FE/Quant/UX,12,FE.02
FE.05,S3,Frontend,Recommendation review workbench,SCR-009/T05,RBAC/concurrency/E2E,FE/QA/Security,14,"BE.07,FE.03~04"
FE.06,S4,Frontend,Advice/Outcome/Scorecard pages,SCR-002/010,as-of/version/partial,FE/QA/Quant,14,"BE.08,FE.04"
FE.07,S5,Frontend,Portfolio/Rebalance/Product pages,SCR-004~006,10k grid/perf/a11y,FE/QA/Quant,16,"BE.10,FE.03"
QA.01,All,Quality,Architecture/import/schema tests,ArchitectureTests,금지 의존0,Architect/QA,8,R0.04
QA.02,All,Quality,PostgreSQL integration/Data tests,IntegrationTests/DataTests,fresh DB/PIT/replay,QA/DBA,14,"BE.03,DATA.01"
QA.03,S1~,Quality,Algorithm Golden/property/boundary,SignalEngine.Tests,same input same result,QA/Quant,14,ALG.01
QA.04,S2~,Quality,Job fault/retry/replay/concurrency,JobTests,duplicate0/resume,QA/SRE,12,BE.04
QA.05,S3~,Quality,Playwright role/state journeys,frontend/e2e,review/publish/expired,QA/FE,14,FE.05
OPS.01,S4,Operations,Metrics/alerts/runbooks,runbooks + dashboards,P1/P2 drill,SRE/Ops,10,BE.05~08
OPS.02,S5,Operations,Backfill/rebuild/reconcile,maintenance jobs,checkpoint/hash/reconcile,SRE/Data/DBA,12,DATA.01~07
OPS.03,S6,Operations,Shadow daily scorecard,J10/J11 dashboard,252일 누적 시작,Quant/Risk/Ops,12,"BE.08,OPS.01"
OPS.04,S6,Operations,Kill-switch/DR/Secondary rehearsal,Runbook evidence,RPO/RTO/rollback,SRE/Security/Ops,12,OPS.01~02
GATE.01,S0,Gate,G0 implementation-ready,Release Evidence,RG-01~10,Steering,2,R0.*
GATE.02,S2,Gate,G2 Algorithm/Data baseline,Model/Data evidence,Golden+PIT+replay,Quant/Risk/Data,3,"ALG.*,DATA.01~05"
GATE.03,S4,Gate,G3 Advisory E2E,E2E evidence,approval/publication/outcome,Compliance/QA,3,"BE.07~09,FE.05~06"
GATE.04,S6,Gate,G4 Shadow start,Ops evidence,DQ/recon/DR/kill-switch,Steering,3,OPS.01~04
1 WBS_ID Sprint Workstream Task Deliverable Done_Gate Owner PD Dependency
2 R0.01 S0 Governance Source/Assumption/Unknown registry 동결 docs/source_registry.csv 미확정 기본값 0 PM/Architect 3 -
3 R0.02 S0 Research Python 환경·raw manifest·checksum 계약 research/pyproject.lock; manifests 동일 run artifact hash Quant/Data 6 R0.01
4 R0.03 S0 Research 현재 결과 characterization golden/current/*.csv 기존 CSV metric diff 0 Quant/QA 6 R0.02
5 R0.04 S0 Architecture Solution/Module/Schema ownership 확정 ADR-001; module matrix Architecture review Architect/DBA 4 R0.01
6 R0.05 S0 DevEx .NET/FE skeleton·CI·lockfile solution, package lock, workflow restore/build/test green PL/DevOps 8 R0.04
7 R0.06 S0 Observability Correlation/OTel/Serilog walking skeleton trace/log/metric smoke HTTP→DB→Outbox trace SRE/BE 5 R0.05
8 ALG.01 S1 Algorithm Policy input/output contract와 PolicyId registry SignalPolicyContracts Quant/Risk 승인 Quant/BE 6 R0.03
9 ALG.02 S1 Algorithm Lot/Cycle/Protection state model Domain/PositionLot,CycleState invariant/property tests BE/Quant 10 ALG.01
10 ALG.03 S1 Algorithm Hard impairment policy HardImpairmentPolicy 하위정책 상쇄 0 BE/Quant/QA 6 ALG.01
11 ALG.04 S1 Algorithm Profit floor gap/two-close policy ProfitFloorPolicies boundary/monotonic tests BE/Quant/QA 9 ALG.02
12 ALG.05 S2 Algorithm Reentry watch state machine ReentryStateMachine new Cycle/duplicate0/expiry BE/Quant/QA 10 ALG.02
13 ALG.06 S2 Algorithm Expected utility components ExpectedUtilityCalculator decimal/CI/cost2x Quant/BE 10 ALG.01
14 ALG.07 S2 Algorithm Portfolio survival/concentration overlay PortfolioConstraintPolicies caps/property tests Quant/BE 10 ALG.02
15 DATA.01 S1 Data Source manifest/raw immutable schema raw_record,dataset_manifest hash/revision/overwrite0 Data/DBA 8 R0.04
16 DATA.02 S1 Data MarketCalendar/PIT temporal conventions published/effective/tradable_session lookahead0 Data/Quant/QA 8 DATA.01
17 DATA.03 S2 Data Corporate Action/Total Return canonical model CA/TR migrations+golden official master reconcile Data/DBA/Quant 12 DATA.01
18 DATA.04 S2 Data Fee/Tax/FX temporal model fee_schedule,tax,fx valid range overlap0 DBA/Quant 8 DATA.02
19 DATA.05 S2 Data DQ rule engine/quarantine DQ-01~12 pipeline critical rule release block Data/QA 12 DATA.01~04
20 DATA.06 S3 Data Immutable ledger/lot/cycle ledger_entry,position_lot debit-credit/reversal BE/DBA/QA 12 ALG.02,DATA.03~04
21 DATA.07 S3 Data Evidence/Decision/Watch schemas evidence,decision,watch append/hash/state checks DBA/BE 10 ALG.03~05
22 BE.01 S0 Backend BuildingBlocks Result/Clock/Data/Outbox src/KArtSell.BuildingBlocks unit/architecture BE 8 R0.05
23 BE.02 S0 Backend FastEndpoints/ProblemDetails/Auth conventions Host + Endpoint base OpenAPI/error mapping BE/Security 7 BE.01
24 BE.03 S0 Backend Dapper transaction/DbUp runner DbSession, Migrator fresh/upgrade/re-run BE/DBA 8 BE.01
25 BE.04 S1 Backend JobRun/Watermark/Hangfire queues job_run, job_watermark duplicate0/resume BE/SRE/DBA 10 BE.03
26 BE.05 S2 Backend Evidence→SellDecision slice VS-09/10 Golden/E2E/metric BE/Quant/QA 14 ALG.03~04,DATA.07
27 BE.06 S2 Backend Sell→ReentryWatch slice VS-11 state/calendar/E2E BE/Quant/QA 12 ALG.05,BE.05
28 BE.07 S3 Backend Recommendation→Review→Publish slice VS-14~16 maker-checker/hash/expiry BE/FE/Compliance 18 BE.05~06
29 BE.08 S4 Backend Outcome/Evaluation windows VS-18 1/5/20/63/126/252 BE/Quant/Data 14 BE.07,DATA.03~04
30 BE.09 S4 Backend Frozen backtest runner VS-19 manifest/repro/cost2x BE/Quant/QA 14 R0.02,ALG.01~07
31 BE.10 S5 Backend Risk/Rebalance/Replacement VS-13/21/22 constraints/NO_ACTION BE/Quant/QA 18 ALG.06~07,DATA.06
32 FE.01 S0 Frontend AppShell/router/query/api/error app/shared lint/type/test/build FE 10 R0.05
33 FE.02 S1 Frontend QueryState/Permission/Freshness C-003~005 11-state/a11y FE/QA 8 FE.01
34 FE.03 S1 Frontend DataGrid/Form/Conflict primitives C-006~010 paging/409/422 FE/QA 12 FE.01
35 FE.04 S2 Frontend Evidence/Protection/Cost/Reentry components C-016~019 boundary/table alternative FE/Quant/UX 12 FE.02
36 FE.05 S3 Frontend Recommendation review workbench SCR-009/T05 RBAC/concurrency/E2E FE/QA/Security 14 BE.07,FE.03~04
37 FE.06 S4 Frontend Advice/Outcome/Scorecard pages SCR-002/010 as-of/version/partial FE/QA/Quant 14 BE.08,FE.04
38 FE.07 S5 Frontend Portfolio/Rebalance/Product pages SCR-004~006 10k grid/perf/a11y FE/QA/Quant 16 BE.10,FE.03
39 QA.01 All Quality Architecture/import/schema tests ArchitectureTests 금지 의존0 Architect/QA 8 R0.04
40 QA.02 All Quality PostgreSQL integration/Data tests IntegrationTests/DataTests fresh DB/PIT/replay QA/DBA 14 BE.03,DATA.01
41 QA.03 S1~ Quality Algorithm Golden/property/boundary SignalEngine.Tests same input same result QA/Quant 14 ALG.01
42 QA.04 S2~ Quality Job fault/retry/replay/concurrency JobTests duplicate0/resume QA/SRE 12 BE.04
43 QA.05 S3~ Quality Playwright role/state journeys frontend/e2e review/publish/expired QA/FE 14 FE.05
44 OPS.01 S4 Operations Metrics/alerts/runbooks runbooks + dashboards P1/P2 drill SRE/Ops 10 BE.05~08
45 OPS.02 S5 Operations Backfill/rebuild/reconcile maintenance jobs checkpoint/hash/reconcile SRE/Data/DBA 12 DATA.01~07
46 OPS.03 S6 Operations Shadow daily scorecard J10/J11 dashboard 252일 누적 시작 Quant/Risk/Ops 12 BE.08,OPS.01
47 OPS.04 S6 Operations Kill-switch/DR/Secondary rehearsal Runbook evidence RPO/RTO/rollback SRE/Security/Ops 12 OPS.01~02
48 GATE.01 S0 Gate G0 implementation-ready Release Evidence RG-01~10 Steering 2 R0.*
49 GATE.02 S2 Gate G2 Algorithm/Data baseline Model/Data evidence Golden+PIT+replay Quant/Risk/Data 3 ALG.*,DATA.01~05
50 GATE.03 S4 Gate G3 Advisory E2E E2E evidence approval/publication/outcome Compliance/QA 3 BE.07~09,FE.05~06
51 GATE.04 S6 Gate G4 Shadow start Ops evidence DQ/recon/DR/kill-switch Steering 3 OPS.01~04
@@ -0,0 +1,8 @@
DebtId,Title,RiskClass,Evidence,Impact,Owner,Secondary,Created,Due,Remediation,ExitTest,Priority,Decision
TD-001,Python 원시데이터·환경 lock 부재,Data/Model,source manifest warning,재현성 상실,Quant Lead,Data Lead,2026-08-01,S0,manifest+lock+container,clean-room replay hash,P1,Fix
TD-002,Scalar position과 lot cycle 혼합,Model,source v12_positions,보호선·재진입 왜곡,BE Lead,Quant Lead,2026-08-01,S2,Lot/Cycle state model,property+golden,P1,Fix
TD-003,KR capital-floor overlay 비용 상수,Model/Data,portfolio_backtest global cost,KR 결과 왜곡,Quant Lead,QA Lead,2026-08-01,S0,cost parameter/FeeSchedule,cost sensitivity diff,P1,Fix
TD-004,기업행사 추정 소급조정,Data,load_kr inferred integer rescale,가격·ATR 왜곡,Data Lead,DBA,2026-08-01,S2,official CA master,CA golden reconcile,P1,Fix
TD-005,정책 코드 중복,Engineering,v11/v12/fast,의미 drift,BE Lead,Quant Lead,2026-08-01,S2,single policy core,contract/golden,P2,Fix
TD-006,FE lockfile 미생성,Engineering,template baseline,빌드 비결정성,FE Lead,DevOps,2026-08-01,G0,pnpm-lock commit,CI frozen install,P2,Fix
TD-007,Read Model rebuild 미구현,Operations,initial template,화면 stale/recovery,Data Lead,SRE,2026-08-01,S6,projection version+rebuild,disaster rebuild test,P2,Defer
1 DebtId Title RiskClass Evidence Impact Owner Secondary Created Due Remediation ExitTest Priority Decision
2 TD-001 Python 원시데이터·환경 lock 부재 Data/Model source manifest warning 재현성 상실 Quant Lead Data Lead 2026-08-01 S0 manifest+lock+container clean-room replay hash P1 Fix
3 TD-002 Scalar position과 lot cycle 혼합 Model source v12_positions 보호선·재진입 왜곡 BE Lead Quant Lead 2026-08-01 S2 Lot/Cycle state model property+golden P1 Fix
4 TD-003 KR capital-floor overlay 비용 상수 Model/Data portfolio_backtest global cost KR 결과 왜곡 Quant Lead QA Lead 2026-08-01 S0 cost parameter/FeeSchedule cost sensitivity diff P1 Fix
5 TD-004 기업행사 추정 소급조정 Data load_kr inferred integer rescale 가격·ATR 왜곡 Data Lead DBA 2026-08-01 S2 official CA master CA golden reconcile P1 Fix
6 TD-005 정책 코드 중복 Engineering v11/v12/fast 의미 drift BE Lead Quant Lead 2026-08-01 S2 single policy core contract/golden P2 Fix
7 TD-006 FE lockfile 미생성 Engineering template baseline 빌드 비결정성 FE Lead DevOps 2026-08-01 G0 pnpm-lock commit CI frozen install P2 Fix
8 TD-007 Read Model rebuild 미구현 Operations initial template 화면 stale/recovery Data Lead SRE 2026-08-01 S6 projection version+rebuild disaster rebuild test P2 Defer
@@ -0,0 +1,35 @@
# 06. 바이브코딩·홀루시네이션 통제
## AI 작업 입력 패킷
AI에게 코드를 요청하기 전에 아래 8개가 있어야 한다.
1. Source: 근거 문단/Policy ID/ADR/Data Contract
2. Slice Spec: 사용자 결과·비목표·상태·권한
3. Screen Spec: component/state/a11y
4. Contract: Endpoint/Event/Job/ProblemDetails/Idempotency/ETag
5. Data: schema/column/PIT/unit/migration/index/lineage
6. Tests: unit/integration/data/E2E/Golden/failure/replay
7. Ops: metric/alert/runbook/rollback/owner
8. Output Rule: 변경파일·명령·결과·가정·잔여위험
## 차단 규칙
- 근거 없는 Policy ID·임계값·DB 컬럼·API는 생성하지 않는다.
- 미확정은 `DECISION_REQUIRED` 또는 `DESIGN_PROPOSAL`로 표시한다.
- 한 PR은 한 Slice 또는 한 리팩터링 목적만 가진다.
- 기능 변경과 동작불변 리팩터링을 한 PR에 섞지 않는다.
- 실패·skip·실행하지 못한 테스트를 숨기지 않는다.
- AI가 생성한 SQL은 schema owner, PIT 조건, index, execution plan 검토를 받는다.
- AI가 생성한 알고리즘은 Golden/Frozen OOS diff 없이 병합하지 않는다.
- 실고객 데이터·token·API key를 프롬프트/fixture/log에 넣지 않는다.
## 리팩터링 정공법
1. Characterize: 현재 동작을 test/Golden/perf로 동결
2. Isolate: I/O와 순수 정책 seam 분리
3. Small Transform: rename/extract/move 한 종류씩
4. Verify: unit/integration/data/E2E/backtest/perf diff
5. Simplify: dead abstraction/flag/branch 삭제
6. Observe: release 후 SLO/DQ/model/recon 확인
7. Close Debt: Debt ID/ADR/Secondary 지식 이전
+31
View File
@@ -0,0 +1,31 @@
# 07. 검증·Release Gate
## RG-01~10
| Gate | 조건 |
|---|---|
| RG-01 | REQ/SCR/VS/Policy ID와 사용자 결과·비목표 승인 |
| RG-02 | PIT 필드·단위·published_at·revision·DQ·source/license 정의 |
| RG-03 | 화면 template/component/state/권한 정의 |
| RG-04 | Endpoint/Event/Job/Read Model/DbUp/오류·멱등·동시성 정의 |
| RG-05 | queue/schedule/watermark/retry/replay/kill-switch 정의 |
| RG-06 | Unit/Integration/Data/E2E/Golden/Failure/Replay 연결 |
| RG-07 | Metric/Alert/Runbook/Rollback/Owner/Secondary 정의 |
| RG-08 | AI Source/Unknown/Design Proposal 구분 |
| RG-09 | 정규화/Read Model lineage/rebuild/staleness 승인 |
| RG-10 | PR 한 목적, 선행 의존 충족 |
## Release 차단 기준
- lookahead > 0
- Evidence hash 재현 < 100%
- duplicate command/job/order > 0
- 미승인 공개 > 0
- ledger/reconciliation 미승인 break > 0
- Critical secret/PII 노출
- Model/Config/Data SHA 누락
- 자동주문 Capability ON
## 생산 승격 제외
이 템플릿은 자동주문과 투자일임형 승격을 구현하지 않는다. 최소 252거래일 Shadow와 복수 국면, 비용후 효용, calibration, ES/영구손실, false-exit·재진입, PBO/DSR, 대사·DR·준법 Gate 후 별도 승인 대상이다.
View File
+7
View File
@@ -0,0 +1,7 @@
# Legacy Documentation
This folder contains archived documentation from a previous version.
**Status:** Read-only (no longer maintained)
**Note:** For current standards and architecture, see `../../CURRENT/` or the root `CLAUDE.md`, `AGENTS.md`.
View File
+7
View File
@@ -0,0 +1,7 @@
# Legacy Documentation
This folder contains archived documentation from a previous version.
**Status:** Read-only (no longer maintained)
**Note:** For current standards and architecture, see `../../CURRENT/` or the root `CLAUDE.md`, `AGENTS.md`.
View File
+7
View File
@@ -0,0 +1,7 @@
# Legacy Documentation
This folder contains archived documentation from a previous version.
**Status:** Read-only (no longer maintained)
**Note:** For current standards and architecture, see `../../CURRENT/` or the root `CLAUDE.md`, `AGENTS.md`.
View File
+7
View File
@@ -0,0 +1,7 @@
# Legacy Documentation
This folder contains archived documentation from a previous version.
**Status:** Read-only (no longer maintained)
**Note:** For current standards and architecture, see `../../CURRENT/` or the root `CLAUDE.md`, `AGENTS.md`.