Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions docs/handoffs/2026-07-13-qa-wayfinder-907-resolved-handoff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Handoff — QA wayfinder 맵 #904 (#907 resolved · frontier #908/#909/#910)

**날짜:** 2026-07-13 · **세션:** #907(반복 prod 뮤테이션 viability) grilling → codex 교차검증 REVISE → 개정 resolve · 보안 에스컬레이션
**맵:** [#904](https://github.com/decodedcorp/decoded/issues/904) 🗺️ 운영사이트(decoded.style) 에이전틱 QA

---

## 이게 뭔가 (한 줄)

decoded.style 컨슈머 사이트 QA 시나리오 매트릭스 + 반복 harness 설계 spec을 확정하는 wayfinder 맵. **계획까지**(구현은 `/to-tickets → /implement`). 이번 세션은 **frontier 티켓 #907을 resolve**하고 다음 frontier를 정리.

## 이번 세션에 완료된 것

### ✅ #907 반복 prod 뮤테이션 viability — **RESOLVED·CLOSED**

파이프라인: **AFK 백엔드 사실조사(Rust `api-server`) → HITL grilling(5분기) → codex 적대적 교차검증(REVISE) → 재-grill(2) → 개정 resolve.**

**채택 기준:** prod 반복 QA 허용 = ①모든 side-effect(sync/async DB·스토리지·인덱스·AI)에 검증된 inverse + ②비용 fail-closed + ③실사용자 노출0, **일 때만.**

- **safe core (prod 반복):** login · QA↔QA follow(직렬) · comment(QA포스트) · look-set save(사전부재확인) · **읽기(수용된 예외** — 글로벌 집계 노이즈 known-risk 문서화, 서버측 QA-제외는 후속)
- **강등(local/mock or 조건부 수동 canary):** post create/decode/try · VTON · post-like · signup · report
- **QA 계정 ≥2**(직렬 뮤테이션; 병렬은 lease pool)
- **안전 rail:** manifest 삭제(ID+owner+run_id+시각 일치) · 다신호 cleanup 검증(DB404+피드/프로필 부재+인덱스 task 완료) · R2 잔여물 gap 명시

**codex가 잡은 교훈(다음 세션도 유의):** 초안 grilling이 **3개 틀린 전제** 위에 있었음 — 실코드로 전부 확정: ①포스트 GET=`view_count`++·`view_log` INSERT(읽기≠side-effect0) ②Style DNA build=Gemini 호출(반복루프≠$0) ③`delete_post`가 R2 미정리(create→delete≠self-cleanup). **원인=조사를 5질문에 바운드→더 넓은 side-effect 표면 놓침.** 결정 티켓은 **엔드포인트별 side-effect 전수**를 얕게라도 훑고, 외부 모델 교차검증을 붙일 것.

- resolution 상세 = [#907](https://github.com/decodedcorp/decoded/issues/907) resolution 코멘트(추상). 맵 #904 Decisions-so-far 등재 완료.

## 현재 frontier (전부 OPEN·unclaimed)

#905/#906/#907 closed.

| 티켓 | type | 무엇 | 노트 |
| --- | --- | --- | --- |
| [#908](https://github.com/decodedcorp/decoded/issues/908) | grilling | harness 아키텍처(결정적/탐색적/하이브리드) | **먼저 권장** — #909 매트릭스 shape. **#907이 mechanism 입력 넘김**(run ledger·fail-closed 예산 차단기·스토리지 cleanup/TTL·account lease pool·서버측 QA 집계 제외·AI mock/격리 프로젝트) — #908 pointer 코멘트에 등재 |
| [#909](https://github.com/decodedcorp/decoded/issues/909) | grilling | 시나리오 우선순위 + 매트릭스 | C9 뮤테이션 행을 **엔드포인트별 inverse 검증표**로 재구성(#907). signup=commissioning 체크리스트. pointer 코멘트 등재 |
| [#910](https://github.com/decodedcorp/decoded/issues/910) | grilling | 세부 컴포넌트 검증 해상도(Storybook 없음) | 독립. prep 코멘트=대상집합(25 vs 74 DS배럴)·회귀자동화 vs 육안 |

**prep 코멘트:** frontier 티켓에 AFK prep 첨부됨(workflow wfllzo7kz). ⚠️ **#909 prep은 VTON auth 노출이 redact됨**(아래 보안 참조) — 나머지 매트릭스 뼈대는 유효.

## 🔒 보안 항목 (QA 범위 밖 — landed)

- **VTON 무인증·무비용상한 발견**: `/api/v1/vton`이 인증·rate-limit·비용상한 없이 원격 Vertex 호출(아이템 체이닝 증폭) → GCP 쿼터가 유일 방벽. **QA 이슈 아닌 독립 보안 이슈.**
- vault 보안노트 작성+커밋(decoded-docs `Inbox/2026-07-13-vton-unauth-uncapped-security-finding.md`, file:line 근거, 팀 triage 대상). ⚠️ **vault branch `codex/marketing-research`에 커밋됨·미push** — 팀 공유하려면 push 필요.
- **공개 노출 redaction 완료**: `decodedcorp/decoded`는 **PUBLIC**. #907·#909 prep 코멘트의 악용상세(무인증·무상한·file:line) 제거, 4개 티켓 전부 clean 확인.

## 재개 방법

- `/wayfinder #904` — **권장 #908 먼저**(아키텍처가 #909 shape + #907 mechanism 입력 수령). #910 독립.
- 병렬: frontier 3개 서로 다른 세션 동시 claim 가능(순수 결정 티켓, 브랜치 불필요). 착수 전 `gh issue edit <N> --add-assignee @me`.

## ⚠️ 규약·주의 (이 맵 특유 + 이번 세션 발견)

- **PUBLIC repo**: 민감/악용 상세(엔드포인트 auth·비용·file:line·취약점)는 **로컬·vault만**, 공개 트래커(이슈·맵)엔 **추상 결론만**. Claude auto-mode classifier가 위반 차단. 사용자에게 공개 게시 여부 명시 확인.
- **⚠️ 워크트리 공유 위험**: 메인 워크트리를 다른 세션들이 수시로 branch checkout(홈페이지 작업 등) → **untracked 파일이 sweep으로 소실**(이전 QA 핸드오프가 이렇게 사라짐). **핸드오프는 반드시 커밋**(이 파일은 격리 worktree `docs/904-qa-wayfinder-907-handoff` 브랜치에 커밋됨). #904 작업 자체는 GitHub 이슈+`docs/qa/`라 브랜치 무관.
- **grilling=HITL**: 결정은 사람. 사실은 조사. 결정 티켓 resolve는 세션당 1개.

## 남은 수동 액션

- 맵 #904를 GitHub **Project #3**에 수동 추가(gh 토큰 project scope 없음).
- vault 보안노트 **push**(팀 공유 시) — 현재 `codex/marketing-research`에 로컬 커밋만.

## 참조

- 맵: [#904](https://github.com/decodedcorp/decoded/issues/904) · 인벤토리: `docs/qa/consumer-surface-inventory.md`(dev)
- 맵 규약: `docs/agent/setup/issue-tracker.md` § Wayfinding operations · handoff 규약: `docs/agent/handoff.md`
- 제품 본질: `/CONTEXT.md` · 라우트: `docs/agent/web-routes-and-features.md`
- 겹침: 이미지 최적화 #810(perf, 중복회피) · i18n #767/#768(SEO) · Style DNA 무드 #802/#849
85 changes: 85 additions & 0 deletions docs/handoffs/2026-07-16-qa-wayfinder-904-complete-handoff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Handoff — QA wayfinder 맵 #904 · 🏁 wayfinding 완료 (spec PRD #968)

**날짜:** 2026-07-16 · **세션:** #908→#909→#910 grilling 연속 resolve → 최종 QA spec 조립(/to-prd → PRD #968)
**맵:** [#904](https://github.com/decodedcorp/decoded/issues/904) 🗺️ 운영사이트(decoded.style) 에이전틱 QA
**이전 핸드오프:** [2026-07-13 #907 resolved](./2026-07-13-qa-wayfinder-907-resolved-handoff.md) — **이 핸드오프가 supersede**(그땐 frontier #908/#909/#910 OPEN, 지금 전부 CLOSED + spec 완료)

---

## 이게 뭔가 (한 줄)

decoded.style 컨슈머 QA harness 설계를 확정하는 wayfinder 맵. **계획 단계 완주** — 모든 결정 티켓(#906~#910) resolved + 최종 spec(PRD #968) 조립 완료. 다음은 **구현 트랙**(`/to-tickets → /implement`).

## 이번 세션에 완료된 것

### ✅ #908 아키텍처 — RESOLVED·CLOSED (grilling 9-fork)

**재현성 경계 하이브리드.** 기법을 심각도 티어가 아니라 **재현성 요구**로 가름(핵심 교정: axe=결정적인데 P1 → 티어≠기법; 차단 게이트는 flaky LLM 판정 불가라 재현 가능해야 함).

- **결정적 재현 코어 → P0 차단**: read-only 기능e2e + i18n 구조가드. localhost 스위트의 **실행 레이어를 prod용 재건**(baseURL·auth·mock 로컬 전제 폐기, prod-안정 셀렉터).
- **탐색적 스윕 → P1/thin advisory**: playwright-skill(접근성 트리) + 병렬 서브에이전트 fanout + visual-verdict(LLM). thin 비주얼=픽셀 baseline 없이 LLM.
- 동시성=read 자유병렬 / 뮤테이션 lease pool 직렬. 파괴/AI=local+mock 기본, 실-AI=격리 quota canary.
- mechanism: 내구 append-only run ledger · 다신호 cleanup+TTL 백스톱 · canary 예산 fail-closed 하드캡 · 서버측 QA집계제외=백엔드 후속 defer. 리포팅=통일 구조화 verdict(P0차단/나머지advisory).

### ✅ #909 매트릭스 — RESOLVED·CLOSED (grilling 5-fork)

- **우선순위 축 = A(전환경로) 주축 + C(변경리스크) 타이브레이커.** P0=퍼널 4저니 JA1~JA4, Post detail(S3) 상승(A·C 수렴). B(트래픽)=애널리틱스 없어 미채택.
- **뼈대 = 2밴드**(저니 JA1~JA7 + surface S1~S14 완전성) × C1~C10 열(tier #906서 고정·파생) × 상태토큰(C클린/D drift/G gap/–).
- flag 셀=이중의도 + flag-state 상대 자기정합 assert(하드코딩 아님, flip 강건). Cody(JA5)=P0 제외·P2 deferred(IA 미해결).
- C9 뮤테이션=엔드포인트별 inverse 표(#907 배치 승계) + signup=commissioning 분리 + anon=문서화 저위험.

### ✅ #910 컴포넌트 해상도 — RESOLVED·CLOSED (grilling 4-fork)

- 대상=**정본 DS 배럴 포함(74) 유니버스, 선별 검증**(ui/shared/shell 25만으론 primitives 누락).
- 검증 성격=**로직 jsdom+RTL 자동화 / 외형 LLM visual-verdict 스팟, 픽셀 baseline 신설 안 함**(#908 정합, 스냅샷 0 유지).
- 격리=하이브리드(Opt3 선별 로직 jsdom + 경량 갤러리 라우트=dev 게이팅, 외형축만). 결합 컴포넌트(cody류)=갤러리 제외(vi.mock 불가)→기존 jsdom mock 유지.
- 상태 깊이=로직 전상태 자동 강제 / 외형 상태밀도 최상위만.

### ✅ 최종 QA spec 조립 — [PRD #968](https://github.com/decodedcorp/decoded/issues/968) (`ready-for-agent`)

`/to-prd`로 #906~#910 결정을 재현성 경계 하이브리드 harness spec으로 응축. 29 user story + Implementation/Testing Decisions + Out of Scope + fog.

**advisor 가이드 3가지 반영:**

1. **경로** = /to-prd(트래커 PRD), repo doc 아님 — 선례 #789→PRD #825→#838~853 to-tickets와 동형.
2. **redaction 게이트** = 소스를 이미 redact된 public resolution(#906~#910 코멘트)에서만, 로컬 scratchpad/대화맥락 민감상세 배제. publish 전 grep 스캔 통과(hit=메타라인뿐).
3. **환경 명시** = 섹션마다 실행 레인(prod read-only+safe-core / local+mock / dev 갤러리) 명시 → /to-tickets가 "prod 갤러리" 모순 슬라이스 못 만들게. #910 갤러리=dev/local surface이지 prod 아님.

### ✅ 핸드오프 공유 (이전)

#907 resolved 핸드오프 = **PR #959** (docs/904-qa-wayfinder-907-handoff, base dev). 이 완결 핸드오프가 supersede.

## 현재 상태

**맵 #904 = 계획 단계 완주.** frontier 없음. Decisions-so-far에 #906~#910 전부 등재, "Not yet specified" 전 항목 해소, "🏁 wayfinding 완료" 코멘트 등재.

## 재개 방법 — 구현 트랙

- **`/to-tickets` (PRD #968)** → vertical slice 분해 → `/implement`. 새 구현 트랙이라 신선한 세션 권장.
- **to-tickets 시 주의:**
- 환경 레인 명시 유지(prod / local+mock / dev 갤러리) — 슬라이스가 환경 섞지 않게.
- **PUBLIC repo redaction** — 악용상세·file:line·엔드포인트 auth/비용 수치는 티켓에 넣지 말 것(vault/로컬만).
- fog는 PRD가 구현 슬라이스로 흡수: 실행 cadence/CI post-deploy 훅 · 매트릭스 셀 전량채움(현재 JA1~JA4만 worked) · 갤러리 구현 · locale×viewport 조합규칙 · 러너 fidelity 스파이크(구현 첫 슬라이스 prod read-only).

## 🔒 보안 항목 (QA 범위 밖 — 기존)

- VTON 무인증·무비용상한 발견 = **독립 보안 이슈**(QA 아님). vault 보안노트(`Inbox/2026-07-13-vton-unauth-uncapped-security-finding.md`, file:line 근거) 작성됨. ⚠️ vault 브랜치 `codex/marketing-research`에 로컬 커밋만 — 팀 공유하려면 push 필요.
- **PUBLIC repo redaction 유지**: decodedcorp/decoded는 PUBLIC. 이번 세션 산출물(#908/#909/#910 resolution, PRD #968)은 전부 추상 결론만 게시(redaction 게이트 통과 확인).

## ⚠️ 규약·주의 (이 맵 특유)

- **grilling=HITL**: 결정은 사람. 사실은 조사(AFK). 이번 세션은 4개 결정 티켓을 grilling으로 연속 resolve.
- **⚠️ 워크트리 공유 위험**: 메인 워크트리를 다른 세션들이 수시로 branch checkout → **untracked 파일 sweep 소실**. **핸드오프는 반드시 커밋**(이 파일도 격리 worktree `docs/904-qa-wayfinder-907-handoff` 브랜치에 커밋, PR #959). 이번 세션 작업은 GitHub 이슈+PRD라 브랜치 무관.
- 이번 세션은 메인 워크트리가 `feat/848-home-dna-trending`(타 세션 홈 작업)에 파킹된 채 진행 — 이슈/PRD 편집만이라 안전했음. 핸드오프 커밋은 격리 브랜치로.

## 남은 수동 액션

- 맵 #904를 GitHub **Project #3**에 수동 추가(gh 토큰 project scope 없음 — kiyori 직접).
- vault 보안노트 push(팀 공유 시) — `codex/marketing-research`에 로컬 커밋만.

## 참조

- 맵: [#904](https://github.com/decodedcorp/decoded/issues/904) · spec: [PRD #968](https://github.com/decodedcorp/decoded/issues/968) · 결정: #906·#907·#908·#909·#910 resolution 코멘트
- 인벤토리: `docs/qa/consumer-surface-inventory.md`(dev) · 맵 규약: `docs/agent/setup/issue-tracker.md` · handoff 규약: `docs/agent/handoff.md`
- 제품 본질: `/CONTEXT.md` · 라우트: `docs/agent/web-routes-and-features.md`
- 겹침: 이미지 최적화 #810(perf) · i18n #767/#768(SEO) · Style DNA 무드 #802/#849 · Cody IA(#789 프론트)
1 change: 1 addition & 0 deletions docs/handoffs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ status vocab: `active`(이어가는 중) · `blocked`(외부 의존 대기) · `
| ----------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **active** | AI 하네스 표준화 | [2026-06-25-ai-harness-standardization](2026-06-25-ai-harness-standardization-handoff.md) |
| **active** | Locale / i18n | [2026-06-18-locale-i18n-harness](2026-06-18-locale-i18n-harness.md) (P2 1b-2·Phase2/3 잔여 — P3 완료) |
| **active** | QA wayfinder #904 | [2026-07-16-qa-wayfinder-904-complete](2026-07-16-qa-wayfinder-904-complete-handoff.md) (🏁 wayfinding 완료 · #906~#910 resolved · spec [PRD #968](https://github.com/decodedcorp/decoded/issues/968) → 다음 `/to-tickets`) |
| **blocked** | Entity 검색 잔여 | [2026-07-02-entity-search-remaining](2026-07-02-entity-search-remaining-handoff.md) (배포 후 확인 + 임베딩 — #759 완료) |
| **blocked** | dev→main Release | [2026-06-28-dev-main-release](2026-06-28-dev-main-release-handoff.md) (팀 승인 + prod migration 대기) |

Expand Down