From b2ef128acc90faf7cfd168cf4be6c0a70c2b1052 Mon Sep 17 00:00:00 2001 From: thxforall <113906780+thxforall@users.noreply.github.com> Date: Mon, 13 Jul 2026 18:24:27 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs(handoffs):=20QA=20wayfinder=20#907=20r?= =?UTF-8?q?esolved=20=ED=95=B8=EB=93=9C=EC=98=A4=ED=94=84=20(frontier=20#9?= =?UTF-8?q?08/#909/#910)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #907 반복 prod 뮤테이션 viability resolve (AFK 백엔드조사 → HITL grilling → codex REVISE 교차검증 → 재-grill → 개정). 채택기준(모든 side-effect 검증된 inverse+비용 fail-closed+실사용자 노출0)·플로우 배치·안전 rail 확정, mechanism→#908/per-endpoint→#909 graduate. VTON 무인증·무상한 보안발견=vault 노트+공개 prep redaction. 이전 핸드오프가 워크트리 sweep으로 소실된 문제 방지 위해 커밋. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...07-13-qa-wayfinder-907-resolved-handoff.md | 68 +++++++++++++++++++ docs/handoffs/README.md | 1 + 2 files changed, 69 insertions(+) create mode 100644 docs/handoffs/2026-07-13-qa-wayfinder-907-resolved-handoff.md diff --git a/docs/handoffs/2026-07-13-qa-wayfinder-907-resolved-handoff.md b/docs/handoffs/2026-07-13-qa-wayfinder-907-resolved-handoff.md new file mode 100644 index 000000000..e8610a573 --- /dev/null +++ b/docs/handoffs/2026-07-13-qa-wayfinder-907-resolved-handoff.md @@ -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 --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 diff --git a/docs/handoffs/README.md b/docs/handoffs/README.md index 1b184a71c..6bd276219 100644 --- a/docs/handoffs/README.md +++ b/docs/handoffs/README.md @@ -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-13-qa-wayfinder-907-resolved](2026-07-13-qa-wayfinder-907-resolved-handoff.md) (#907 resolved · frontier #908/#909/#910 — #908 먼저) | | **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 대기) | From e97c791b5a74213c11c00941a814ef95875b418b Mon Sep 17 00:00:00 2001 From: thxforall <113906780+thxforall@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:58:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs(handoffs):=20QA=20wayfinder=20#904=20w?= =?UTF-8?q?ayfinding=20=EC=99=84=EB=A3=8C=20=ED=95=B8=EB=93=9C=EC=98=A4?= =?UTF-8?q?=ED=94=84=20(spec=20PRD=20#968)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #908/#909/#910 grilling resolve + 최종 QA spec 조립(PRD #968) 완결. 이전 #907 resolved 핸드오프를 supersede. 다음=/to-tickets. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...07-16-qa-wayfinder-904-complete-handoff.md | 85 +++++++++++++++++++ docs/handoffs/README.md | 2 +- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 docs/handoffs/2026-07-16-qa-wayfinder-904-complete-handoff.md diff --git a/docs/handoffs/2026-07-16-qa-wayfinder-904-complete-handoff.md b/docs/handoffs/2026-07-16-qa-wayfinder-904-complete-handoff.md new file mode 100644 index 000000000..06c6527cc --- /dev/null +++ b/docs/handoffs/2026-07-16-qa-wayfinder-904-complete-handoff.md @@ -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 프론트) diff --git a/docs/handoffs/README.md b/docs/handoffs/README.md index 6bd276219..8e4fa286b 100644 --- a/docs/handoffs/README.md +++ b/docs/handoffs/README.md @@ -32,7 +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-13-qa-wayfinder-907-resolved](2026-07-13-qa-wayfinder-907-resolved-handoff.md) (#907 resolved · frontier #908/#909/#910 — #908 먼저) | +| **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 대기) |