init: company-haness 설계

This commit is contained in:
DongHyeonka
2026-07-23 17:49:00 +09:00
parent 57d1bab894
commit f668d6a158
962 changed files with 98989 additions and 1 deletions
@@ -0,0 +1,50 @@
report-type: workflow-artifact
artifact-kind: decision-brief
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260718T105646Z
workflow-id: hyeonworks-company-bootstrap-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260718T105646Z
attempt-id: 1
payload:
mode: divergent
tier: standard
candidate-families: [FAM-STRATEGY, FAM-CEO, FAM-CPO, FAM-CTO, FAM-COO]
objective: >-
Hyeonworks를 기술의 작동 원리를 깊게 학습하는 mechanism-first Technology Atlas로 다시
설계하되, Concept Debugger를 별도 제품이 아니라 초기 증상 기반 진입 방식으로 결합한
회사·제품 전략을 새 증거 계보로 확정한다.
strategy-delta:
previous: "Concept Debugger를 초기 독립 제품 전략에서 보류"
new: >-
Technology Atlas를 제품 뼈대로 유지하고 Transaction Isolation 안의 제한된 증상 카드가
동일한 Predict → Observe → Compare → Explain → Transfer 실습으로 연결되게 한다.
scope-boundary:
in:
- "개념 기반 진입과 증상 기반 진입이 하나의 학습 모델로 합쳐지는 초기 전략"
- "Transaction Isolation 한 주제 안의 3~5개 대표 증상"
- "1인 운영·depth-before-breadth·self-serve 제약"
- "회사 전략, 제품 전략, 시장·학습 가설의 분리"
out:
- "여러 기술 도메인을 가로지르는 범용 장애 진단 엔진"
- "실제 운영 시스템 로그 수집·원격 DB 연결·AI 자동 진단"
- "검증 전 가격·매출·수요를 확정 사실로 취급하는 것"
report-header:
bottom-line: >-
CEO intake는 Technology Atlas와 제한된 Concept Debugger 진입을 결합한 하이브리드 전략을
표준 등급으로 처음부터 재검증하고, 이후 제품 cascade가 사용할 새 company context를 만든다.
decision-needed: { needed: false, approver: HUMAN-001 }
confidence: { value: Med, derived-from: founder-confirmed-strategy-and-explicit-scope }
risks:
- "증상 진입이 별도 제품 엔진으로 팽창하면 1인 운영성과 첫 주제 완성도가 무너질 수 있다."
- "학습 효과·수요·WTP는 아직 실측되지 않았으므로 제품 전략과 사업 성과를 혼동하면 안 된다."
- "기존 Hyeonworks는 초기화됐으므로 과거 제품 산출물을 새 구현 증거로 재사용하지 않는다."
evidence:
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
note: "확정된 mechanism-first·active-learning·solo-operable 제약"
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: "기존 전략 기준선과 이번 debugger 결합 결정의 변경 대상"
@@ -0,0 +1,146 @@
report-type: workflow-artifact
artifact-kind: venture-validation
artifact-version: 1
tier: standard
identity:
artifact-id: EXEC-CEO-20260718T105950Z
workflow-id: hyeonworks-company-bootstrap-v2
stage: venture-validation
producer-role-id: EXEC-CEO
created-at: 20260718T105950Z
attempt-id: 2
payload:
source-artifact-refs:
- artifact-id: STR-ANALYST-20260718T105747Z
artifact-sha256: a7cb2ae28351c2f157fd4b7c4f5abbf565e6ba94aac2b607c160681f8b64c530
- artifact-id: STR-ANALYST-20260718T105748Z
artifact-sha256: 95ebb4e2a73b5c1d9464c1131b7577fb3fb9b7e31c61deec228cd33ac7074515
hypotheses:
- id: HYP-HYBRID-ENTRY
statement: "증상 기반 진입은 개념 기반 진입을 대체하지 않고 동일 실습으로 연결될 때 시작 동기와 관련성을 높인다"
- id: HYP-SHARED-CORE
statement: "두 진입이 동일 scenario와 상태 엔진을 공유하면 별도 Debugger 제품 없이 1인 운영성을 유지할 수 있다"
- id: HYP-LEARNING-TRANSFER
statement: "Predict → Observe → Compare → Explain → Transfer가 Lost Update의 인과 설명과 새 사례 전이를 높인다"
experiments:
- "처음 보는 사용자 5명에게 홈을 10초 보여주고 사이트 목적과 두 진입의 차이를 설명하게 한다"
- "개념 진입과 증상 진입 각각에서 동일 Lost Update scenario까지 완주 가능한지 관찰한다"
- "학습 후 재고 갱신 사례에서 동일 메커니즘을 판별하고 이유를 설명하게 한다"
- "두 진입의 콘텐츠·상태 엔진 중복 여부를 정적 검사한다"
evidence:
- "HUMAN-001은 기술의 작동 원리를 깊게 학습하는 사이트와 Debugger 방식의 초기 결합을 명시했다"
- "founder context는 solo-operable·depth-before-breadth·honest mechanics를 하드 제약으로 둔다"
- "새 제품 구현과 실제 사용자 결과는 아직 없으므로 기술·시장 결과는 unknown으로 유지한다"
option-evaluations:
- id: VOPT-ATLAS-ONLY
customer: "기술 개념명을 알고 내부 작동 원리를 체계적으로 이해하려는 개발자"
painful-job: "정적 설명을 실제 상태 변화와 인과관계로 연결하기 어렵다"
current-alternative: "문서·강의·블로그·개별 실험을 따로 소비한다"
wedge: "개념 지도에서 시작하는 단일 Transaction Isolation guided lab"
monetization: "unknown — 초기에는 학습·평판 자산 우선"
expected-price: "unknown"
reachable-customers: "unknown — 보유 채널 미확정"
rough-revenue-ceiling: "unknown"
acquisition-channel: "self-serve/organic 후보, 미검증"
build-cost: "세 안 중 가장 작지만 증상 기반 진입 요구를 반영하지 못한다"
operation-cost: "낮음 — 단일 콘텐츠 모델과 단일 실험"
founder-fit: "운영성은 높지만 최신 확정 전략과 부분 불일치"
defensibility: "깊은 교습 설계와 개념 연결의 누적"
kill-criteria:
- "사용자가 개념명을 몰라 첫 학습 경로를 찾지 못한다"
- "최신 founder 결정인 증상 진입 결합을 충족하지 못한다"
unresolved-assumptions: ["개념명 기반 탐색만으로 충분한가", "학습 효과", "수요와 WTP"]
validation-results:
- {option-id: VOPT-ATLAS-ONLY, gate: problem-intensity, verdict: unknown, evidence: ["직접 사용자 조사 없음"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: competition-alternatives, verdict: unknown, evidence: ["문서·강의·AI가 강한 대안"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: willingness-to-pay, verdict: unknown, evidence: ["결제 증거 없음"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: revenue-unit-economics, verdict: unknown, evidence: ["가격·CAC·전환 미확정"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: tech-feasibility-moat, verdict: unknown, evidence: ["초기화 후 새 구현 증거 없음"], dissent: ["일반 React 구현 가능성과 제품 해자는 다르다"]}
- {option-id: VOPT-ATLAS-ONLY, gate: operability, verdict: pass, evidence: ["한 주제·한 실험·한 콘텐츠 모델"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: distribution, verdict: unknown, evidence: ["채널 미확정"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: founder-fit, verdict: fail, evidence: ["Debugger 초기 결합이라는 최신 확정 방향을 누락"], dissent: []}
- {option-id: VOPT-ATLAS-ONLY, gate: kill-criteria, verdict: pass, evidence: ["진입 실패·학습 실패 기준 명시"], dissent: []}
- id: VOPT-DEBUGGER-FIRST
customer: "실제 동시성 이상 현상을 겪고 빠르게 원인 후보를 좁히려는 실무 개발자"
painful-job: "검색과 로그만으로 어떤 메커니즘이 결과를 만들었는지 재현하기 어렵다"
current-alternative: "검색·AI 답변·incident 문서·임시 재현 코드를 조합한다"
wedge: "여러 증상에서 시작하는 독립 Concept Debugger와 진단 흐름"
monetization: "unknown — 팀 진단/교육 가능성 미검증"
expected-price: "unknown"
reachable-customers: "unknown"
rough-revenue-ceiling: "unknown"
acquisition-channel: "증상 검색 유입 후보, 미검증"
build-cost: "높음 — 증상 taxonomy·다중 사례·별도 진단 UI와 설명 유지 필요"
operation-cost: "높음 — 기술·버전·사례별 지속 갱신과 오진 방지 필요"
founder-fit: "깊이 학습에는 맞지만 solo-operable·depth-before-breadth와 충돌"
defensibility: "사례 데이터가 쌓이면 가능하나 초기에는 없음"
kill-criteria:
- "별도 실험 엔진이나 중복 콘텐츠가 필요하다"
- "사용자가 실제 장애 확정 도구로 오인한다"
- "증상 분류 유지가 founder timebox를 넘는다"
unresolved-assumptions: ["증상 기반 수요", "실제 진단 오인", "다중 도메인 운영비", "WTP"]
validation-results:
- {option-id: VOPT-DEBUGGER-FIRST, gate: problem-intensity, verdict: unknown, evidence: ["직접 incident 사용자 조사 없음"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: competition-alternatives, verdict: unknown, evidence: ["검색·관측도구·AI가 강한 대안"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: willingness-to-pay, verdict: unknown, evidence: ["결제 증거 없음"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: revenue-unit-economics, verdict: unknown, evidence: ["높은 콘텐츠 유지비와 미확정 가격"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: tech-feasibility-moat, verdict: unknown, evidence: ["새 구현·사례 데이터 없음"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: operability, verdict: fail, evidence: ["범용 증상·버전·사례 운영이 1인 범위를 초과"], dissent: ["한 사례로 제한하면 hybrid option으로 전환 가능"]}
- {option-id: VOPT-DEBUGGER-FIRST, gate: distribution, verdict: unknown, evidence: ["검색 유입 가설만 존재"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: founder-fit, verdict: fail, evidence: ["solo-operable 하드 제약과 충돌"], dissent: []}
- {option-id: VOPT-DEBUGGER-FIRST, gate: kill-criteria, verdict: pass, evidence: ["오인·중복 엔진·운영비 중단 기준 명시"], dissent: []}
- id: VOPT-HYBRID-SHARED-CORE
customer: "개념명에서 시작하거나 실제 증상에서 시작해도 메커니즘을 설명 가능한 수준까지 배우려는 개발자"
painful-job: "체계적 개념과 실제 이상 현상을 하나의 재현 가능한 인과 모델로 연결하기 어렵다"
current-alternative: "개념 학습과 장애 검색을 서로 다른 도구·문서에서 수행한다"
wedge: "Atlas 뼈대 안에서 Lost Update 증상 카드가 동일 Transaction Isolation 학습 코어로 연결되는 이중 진입"
monetization: "unknown — 초기에는 학습·성장·평판 우선"
expected-price: "unknown"
reachable-customers: "unknown — self-serve organic 후보"
rough-revenue-ceiling: "unknown"
acquisition-channel: "개념 탐색과 증상 검색의 두 organic 경로 후보, 미검증"
build-cost: "중간 — 홈과 symptom triage는 추가되지만 scenario·상태 엔진·설명은 공유"
operation-cost: "낮음~중간 — Transaction Isolation/Lost Update 한 사례로 제한하고 중복 콘텐츠 금지"
founder-fit: "최신 전략과 solo/depth/self-serve 제약을 동시에 충족"
defensibility: "증상→관찰→메커니즘→전이의 정직한 교습 모델과 누적된 연결 구조"
kill-criteria:
- "두 진입이 별도 엔진이나 중복 설명을 요구한다"
- "사용자 5명 중 3명 이상이 실제 진단 도구로 오인한다"
- "사용자 5명 중 3명 이상이 Lost Update 인과를 설명하지 못한다"
- "모바일·키보드에서 어느 한 진입도 완주할 수 없다"
unresolved-assumptions: ["두 진입의 이해도", "학습 전이", "시작률·완주율", "운영비", "수요·WTP"]
validation-results:
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: problem-intensity, verdict: unknown, evidence: ["founder 문제 확정, 직접 사용자 조사 없음"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: competition-alternatives, verdict: unknown, evidence: ["문서·강의·AI·검색이 대안"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: willingness-to-pay, verdict: unknown, evidence: ["결제 증거 없음"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: revenue-unit-economics, verdict: unknown, evidence: ["가격·전환 미확정, 공유 코어로 비용만 제한"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: tech-feasibility-moat, verdict: unknown, evidence: ["아키텍처 가설은 명확하지만 새 구현 전"], dissent: ["구현 가능성과 학습 차별성은 별도 검증 필요"]}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: operability, verdict: pass, evidence: ["한 주제·한 scenario·공유 엔진·증상 카드 1개로 제한"], dissent: ["후속 증상 확장은 timebox가 필요"]}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: distribution, verdict: unknown, evidence: ["두 organic 진입 가설, 채널 실측 없음"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: founder-fit, verdict: pass, evidence: ["최신 승인 방향과 solo/depth/self-serve 제약 일치"], dissent: []}
- {option-id: VOPT-HYBRID-SHARED-CORE, gate: kill-criteria, verdict: pass, evidence: ["오인·학습·중복 엔진·접근성 중단 기준 명시"], dissent: []}
kill-criteria:
- "Hybrid가 동일 콘텐츠·실험 엔진을 공유하지 못하면 Debugger 진입을 제거한다"
- "사용자 5명 중 3명 이상이 제품을 실제 장애 확정 도구로 오인하면 표현과 범위를 축소한다"
- "학습 후 3명 이상이 동일 값 읽기→독립 계산→마지막 쓰기 덮어쓰기 인과를 설명하지 못하면 출시하지 않는다"
- "첫 사례가 모바일 또는 키보드로 완주되지 않으면 다음 단계로 진행하지 않는다"
recommendation: >-
VOPT-HYBRID-SHARED-CORE를 선택 후보로 유지한다. Atlas-only는 최신 founder 결정을 누락하고,
독립 Debugger-first는 operability와 founder-fit에서 실패한다. Hybrid는 Transaction Isolation/Lost Update
한 사례와 공유 학습 코어로 제한할 때만 진행하며, 학습 효과·수요·WTP는 계속 unknown으로 둔다.
report-header:
bottom-line: >-
3안×9-gate 결과, Atlas 뼈대와 제한된 symptom-first 진입을 같은 학습 코어로 결합한 안만 최신 전략과
1인 운영성을 함께 충족한다. 단 시장·학습 효과는 미검증이므로 제품 방향만 GO 후보로 둔다.
decision-needed: { needed: true, approver: EXEC-CPO }
confidence: { value: Med, derived-from: two-trusted-opportunity-clusters-and-explicit-unknowns }
risks:
- "사용자 증거 없이 symptom entry의 효용을 과대평가할 수 있다."
- "구현 중 공유 코어 원칙이 깨지면 사실상 두 제품이 되어 범위가 폭증한다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/STR-ANALYST-20260718T105747Z.report.yaml
grade: E2
note: "deep mechanism learning opportunity"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/STR-ANALYST-20260718T105748Z.report.yaml
grade: E2
note: "symptom-to-mechanism opportunity"
@@ -0,0 +1,101 @@
report-type: workflow-artifact
artifact-kind: venture-decision
artifact-version: 1
tier: standard
identity:
artifact-id: EXEC-CEO-20260718T110148Z
workflow-id: hyeonworks-company-bootstrap-v2
stage: venture-decision
producer-role-id: EXEC-CEO
created-at: 20260718T110148Z
attempt-id: 3
payload:
basis-artifact-id: EXEC-CEO-20260718T105950Z
basis-artifact-sha256: 4771fc627a0cfa20458dfe84662dfe258a99a190300a1b08dd7e8e0f1bff8634
recommendation: >-
GO — Hyeonworks vNext는 mechanism-first Technology Atlas를 제품 뼈대로 유지하면서 symptom-first
Concept Debugger를 초기 진입 레이어로 결합한다. 첫 공개 범위는 Transaction Isolation / Lost Update
한 scenario이며, 개념 진입과 증상 진입은 동일 콘텐츠 모델·실험 상태 엔진·Predict → Observe →
Compare → Explain → Transfer 루프를 공유한다. 범용 진단·다중 도메인 Debugger는 제외한다.
selected-option-id: VOPT-HYBRID-SHARED-CORE
evaluation-criteria:
- "최신 founder 승인 방향과의 정합성"
- "깊이 있는 학습 가치와 증상 기반 관련성의 결합"
- "1인 운영·depth-before-breadth 범위 지속 가능성"
- "실제 진단 도구로 오인시키지 않는 증거 정직성"
- "하나의 콘텐츠·상태 엔진을 재사용하는 구현 가능성"
option-evaluations:
- option-id: VOPT-ATLAS-ONLY
scores: {strategy-fit: 2, learning-depth: 5, operability: 5, honesty: 5, shared-core: 5}
evidence-refs:
- "EXEC-CEO-20260718T105950Z@4771fc627a0cfa20458dfe84662dfe258a99a190300a1b08dd7e8e0f1bff8634"
- option-id: VOPT-DEBUGGER-FIRST
scores: {strategy-fit: 3, learning-depth: 3, operability: 1, honesty: 2, shared-core: 1}
evidence-refs:
- "EXEC-CEO-20260718T105950Z@4771fc627a0cfa20458dfe84662dfe258a99a190300a1b08dd7e8e0f1bff8634"
- option-id: VOPT-HYBRID-SHARED-CORE
scores: {strategy-fit: 5, learning-depth: 5, operability: 4, honesty: 5, shared-core: 5}
evidence-refs:
- "EXEC-CEO-20260718T105950Z@4771fc627a0cfa20458dfe84662dfe258a99a190300a1b08dd7e8e0f1bff8634"
- "org-os/01-company/founder-context.yaml"
tradeoffs:
- "홈에 두 진입을 제공하되 활성 학습 콘텐츠는 Transaction Isolation/Lost Update 하나로 제한한다."
- "Debugger의 기억 가능성을 취하되 실제 장애 확정·로그 분석·자동 수정 기능은 명시적으로 포기한다."
- "증상 triage UI는 추가하지만 scenario·상태 전이·설명·mitigation·transfer 콘텐츠는 복제하지 않는다."
- "제품 방향은 확정하지만 학습 효과·수요·WTP·유통은 검증 전 가설로 유지한다."
dissent:
- "두 진입은 첫 화면의 선택 복잡도를 높여 오히려 시작률을 낮출 수 있다."
- "Lost Update 한 사례만으로 Technology Atlas 정체성이 충분히 전달되지 않을 수 있다."
- "정적 시뮬레이션은 실제 데이터베이스 스케줄과 격리 구현의 모든 차이를 대표하지 않는다."
kill-criteria:
- "개념 경로와 증상 경로가 동일 scenario ID와 상태 엔진을 공유하지 못한다."
- "사용자 5명 중 3명 이상이 실제 장애를 확정 진단하는 도구로 오인한다."
- "학습 후 3명 이상이 동일 초기값 읽기 → 독립 계산 → 마지막 쓰기 덮어쓰기 인과를 설명하지 못한다."
- "360px 또는 키보드 전용 경로에서 Transfer까지 완주할 수 없다."
- "두 번째 사례 추가가 founder가 나중에 확정할 authoring timebox를 초과한다."
revisit-conditions:
- "실사용자가 증상 기반 진입을 반복 선택하고 완주율·설명 정확도가 유지되면 두 번째 증상을 검토한다."
- "완성형 딥다이브가 3개 이상이면 Atlas 탐색·검색·연결 지도를 재평가한다."
- "실제 팀 교육·결제 요청이 관찰되면 별도 revenue decision을 연다."
- "founder 시간·자본·유통·운영 내성이 확인되면 확장 속도와 사업 모델을 다시 채점한다."
evidence-refs:
- "EXEC-CEO-20260718T105950Z@4771fc627a0cfa20458dfe84662dfe258a99a190300a1b08dd7e8e0f1bff8634"
- "STR-ANALYST-20260718T105747Z@a7cb2ae28351c2f157fd4b7c4f5abbf565e6ba94aac2b607c160681f8b64c530"
- "STR-ANALYST-20260718T105748Z@95ebb4e2a73b5c1d9464c1131b7577fb3fb9b7e31c61deec228cd33ac7074515"
- "org-os/01-company/founder-context.yaml"
method-execution:
role-id: EXEC-CEO
method-id: decide-direction
contract-sha256: b5d36495b0e7e9a82fab77979a91c0144b1c51dbe1e6153352b6162272bb0d46
step-results:
- {step-id: read-evidence, status: completed, output-binding: current-artifact}
- {step-id: evaluate-options, status: completed, output-binding: current-artifact}
- {step-id: converge-decision, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: converge-decision
gate-id: single-direction
verdict: Passed
evidence-refs: ["payload.selected-option-id", "payload.option-evaluations", "payload.dissent"]
decisions:
- decision-id: HWCB2-VENTURE-DECISION-001
selected-option-id: VOPT-HYBRID-SHARED-CORE
alternatives:
- {option-id: VOPT-ATLAS-ONLY}
- {option-id: VOPT-DEBUGGER-FIRST}
- {option-id: VOPT-HYBRID-SHARED-CORE}
report-header:
bottom-line: >-
GO — Atlas와 제한된 symptom-first 진입을 하나의 공유 학습 코어로 결합한다. 독립 Debugger가 아니라
Transaction Isolation/Lost Update의 두 진입이며, 실제 사용자 효과와 시장성은 아직 가설이다.
decision-needed: { needed: true, approver: HUMAN-001 }
confidence: { value: Med, derived-from: standard-three-option-nine-gate-validation }
risks:
- "공유 코어 제약이 구현 중 느슨해지면 범위가 두 제품으로 갈라질 수 있다."
- "사용자 검증 없이 symptom-first가 더 낫다고 단정할 수 없다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E2
note: "세 옵션의 정확한 9-gate 검증과 explicit unknowns"
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
note: "founder hard constraints and confirmed preferences"
@@ -0,0 +1,40 @@
report-type: workflow-artifact
artifact-kind: opportunity-cluster
artifact-version: 1
identity:
artifact-id: STR-ANALYST-20260718T105747Z
workflow-id: hyeonworks-company-bootstrap-v2
stage: opportunity-discovery
producer-role-id: STR-ANALYST
created-at: 20260718T105747Z
attempt-id: 1
payload:
source-artifact-refs:
- artifact-id: EXEC-CEO-20260718T105646Z
artifact-sha256: 132a9767f2cd7b8d7e1a07329bc2b18a42d85b5ce24025030fd2569dd004908f
id: OC-DEEP-MECHANISM-LEARNING
problem-domain: "복잡한 기술의 내부 상태 변화와 인과관계를 설명 가능한 수준으로 학습하기"
target-user: "문서·강의·AI 답변을 소비했지만 새로운 상황에서 결과를 예측하고 원인을 설명하기 어려운 개발자"
triggering-event: "면접·설계·장애 분석에서 외운 정의가 아니라 실제 상태 전이를 설명해야 할 때"
current-alternative: "공식 문서, 블로그, 영상, 정적 다이어그램, 임시 실험 코드를 서로 분리해 소비한다"
why-now: "답과 코드를 빠르게 생성할수록 그 결과를 검증하고 내부 메커니즘을 설명하는 능력이 더 중요해진다"
founder-fit: >-
mechanism-first·active-learning·depth-before-breadth·solo-operable 선호와 직접 부합한다.
실제 주당 시간과 자본은 미확정이므로 첫 주제 하나로 범위를 제한해야 한다.
evidence:
- "창업자가 기술을 깊이 학습하는 사이트와 Transaction Isolation 첫 주제를 확정했다"
unresolved-questions:
- "능동 실습이 실제 설명 정확도와 전이 능력을 높이는가"
- "두 번째 기술 주제에도 같은 콘텐츠 모델이 재사용되는가"
report-header:
bottom-line: >-
첫 기회는 설명 자료를 더 쌓는 것이 아니라 학습자가 기술 결과를 먼저 예측하고 상태 변화를
관찰한 뒤 자기 언어로 원인을 설명하게 만드는 통제된 학습 경험이다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: founder-confirmed-problem-and-untested-user-outcomes }
risks:
- "직접 사용자 학습 효과와 반복 방문은 아직 실측되지 않았다."
evidence:
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
note: "확정된 mechanism-first와 active-learning 전략 선호"
@@ -0,0 +1,40 @@
report-type: workflow-artifact
artifact-kind: opportunity-cluster
artifact-version: 1
identity:
artifact-id: STR-ANALYST-20260718T105748Z
workflow-id: hyeonworks-company-bootstrap-v2
stage: opportunity-discovery
producer-role-id: STR-ANALYST
created-at: 20260718T105748Z
attempt-id: 2
payload:
source-artifact-refs:
- artifact-id: EXEC-CEO-20260718T105646Z
artifact-sha256: 132a9767f2cd7b8d7e1a07329bc2b18a42d85b5ce24025030fd2569dd004908f
id: OC-SYMPTOM-TO-MECHANISM
problem-domain: "개념명을 모르는 실무자가 관찰한 증상에서 관련 메커니즘과 통제된 실험으로 역추적하기"
target-user: "lost update·stale state처럼 결과는 보았지만 어떤 규칙과 상태 상호작용이 원인인지 모르는 개발자"
triggering-event: "예상과 다른 값·순서·상태가 나타나 빠른 처방보다 재현 가능한 원인 이해가 필요할 때"
current-alternative: "검색·로그·AI 답변을 오가며 증상별 해결책을 복사한 뒤 원리를 사후 추정한다"
why-now: "생성형 답변을 안전하게 적용하려면 증상과 관찰 증거를 메커니즘에 연결해 검증하는 과정이 필요하다"
founder-fit: >-
깊이 학습 전략과 맞고 기억 가능한 진입점을 제공한다. 다만 범용 진단 엔진은 1인 운영 범위를
넘으므로 Transaction Isolation 안의 제한된 증상 카드가 기존 학습 코어를 재사용해야 한다.
evidence:
- "창업자가 debugger 방식을 초기 전략에 포함하되 Atlas와 결합하는 방향을 승인했다"
unresolved-questions:
- "증상 기반 진입이 개념 기반 진입보다 시작률을 높이는가"
- "동일 학습 코어를 재사용하면서도 사용자가 실제 진단 도구로 오해하지 않는가"
report-header:
bottom-line: >-
두 번째 기회는 증상에서 메커니즘으로 역추적하는 진입이다. 독립 제품보다 Atlas의 제한된
진입 레이어로 설계할 때 차별성과 1인 운영성을 함께 보존할 수 있다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: founder-confirmed-direction-and-untested-user-behavior }
risks:
- "증상 카탈로그가 여러 도메인으로 확장되면 별도 제품 엔진과 높은 콘텐츠 유지비가 생긴다."
evidence:
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
note: "solo-operable·depth-before-breadth 제약"
@@ -0,0 +1,199 @@
schema-version: 2
status: provisional
candidate-status: bootstrap
company:
facts:
- id: FACT-HW2-RESET-001
statement: >-
Hyeonworks의 기존 활성 제품·설계·workflow 산출물은 2026-07-18에 active workspace에서 제거됐고,
새 workspace는 제품 구현이 없는 초기 상태에서 시작한다. 과거 구현은 새 제품의 완료 증거로 사용하지 않는다.
category: workspace-state
provenance:
- source-uri: hyeonworks/state/hyeonworks-company-bootstrap-v2/workflow.yaml
grade: E3
verified-at: "2026-07-18"
status: active
- id: FACT-HW2-STRATEGY-001
statement: >-
표준 3안×9-gate 검증과 HUMAN-001 exact-revision 승인을 거쳐 Atlas + 제한된 symptom-first
shared-core 전략이 선택됐다.
category: accepted-strategy-process
provenance:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E3
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
verified-at: "2026-07-18"
status: active
- id: FACT-FOUNDER-UNKNOWN-002
statement: >-
창업자의 실제 주당 가용시간, 자본·런웨이, 목표 사업 규모, 보유 유통채널, 운영·리스크 내성은
아직 확인되지 않았으며 확장 속도·예산·매출 판단에서 추론하면 안 된다.
category: founder-information-gap
provenance:
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
verified-at: "2026-07-18"
status: active
strategic-decisions:
- id: DEC-HW2-HYBRID-001
statement: >-
Hyeonworks는 mechanism-first Technology Atlas를 제품 뼈대로 유지하면서 symptom-first
Concept Debugger를 초기 진입 레이어로 결합한 하나의 제품으로 추진한다.
decision-type: company-product-strategy
accepted-by: HUMAN-001
accepted-at: "2026-07-18T11:03:01Z"
source-decision-id: EXEC-CEO-20260718T110148Z
supporting-evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
status: active
- id: DEC-HW2-SCOPE-001
statement: >-
첫 공개 범위는 Transaction Isolation / Lost Update 한 scenario다. 개념으로 시작하기와
증상에서 시작하기는 동일 콘텐츠 모델·scenario ID·실험 상태 엔진을 공유한다.
decision-type: initial-product-scope
accepted-by: HUMAN-001
accepted-at: "2026-07-18T11:03:01Z"
source-decision-id: EXEC-CEO-20260718T110148Z
supporting-evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
status: active
- id: DEC-HW2-LEARNING-001
statement: >-
핵심 학습 루프는 Predict → Observe → Compare → Explain → Transfer다. 증상 진입도 정답을
즉시 제시하지 않고 단서를 좁힌 뒤 같은 실습과 전이 과제로 연결한다.
decision-type: learning-product-model
accepted-by: HUMAN-001
accepted-at: "2026-07-18T11:03:01Z"
source-decision-id: EXEC-CEO-20260718T110148Z
supporting-evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
status: active
- id: DEC-HW2-BOUNDARY-001
statement: >-
초기 제품은 실제 장애 확정·로그 분석·원격 DB 연결·AI 자동 진단·다중 도메인 증상 taxonomy를
제공하지 않는다. 시뮬레이션과 원인 후보의 한계를 화면에서 명확하게 표시한다.
decision-type: trust-and-scope-boundary
accepted-by: HUMAN-001
accepted-at: "2026-07-18T11:03:01Z"
source-decision-id: EXEC-CEO-20260718T110148Z
supporting-evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
status: active
- id: DEC-HW2-OPERATING-001
statement: >-
depth-before-breadth·solo-operable·self-serve를 유지한다. 학습·성장·평판을 우선하고
실제 수요와 결제 행동 전에는 가격·매출을 확정 전략으로 다루지 않는다.
decision-type: operating-principle
accepted-by: HUMAN-001
accepted-at: "2026-07-18T11:03:01Z"
source-decision-id: EXEC-CEO-20260718T110148Z
supporting-evidence:
- source-uri: org-os/01-company/founder-context.yaml
grade: E2
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
status: active
hypotheses:
- id: HYP-HW2-ENTRY-001
statement: >-
제한된 symptom-first 진입은 실제 진단 도구로 오인시키지 않으면서 개념명만 제시하는 진입보다
사용자의 시작 동기와 문제 관련성을 높인다.
hypothesis-type: entry-value
confidence: Low
validation-status: untested
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E2
promotion-criteria:
- "사용자 5명 중 4명 이상이 홈 10초 노출 후 두 진입의 차이와 사이트 목적을 설명한다"
falsification-criteria:
- "사용자 5명 중 3명 이상이 실제 장애 확정 도구로 오인하거나 두 진입의 차이를 설명하지 못한다"
- id: HYP-HW2-LEARNING-001
statement: >-
공유 학습 루프를 완주한 사용자는 Lost Update의 인과관계를 자기 언어로 설명하고 새로운 재고 사례에 전이할 수 있다.
hypothesis-type: learning-outcome
confidence: Low
validation-status: untested
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E2
promotion-criteria:
- "사용자 5명 중 4명 이상이 인과관계를 설명하고 3명 이상이 새 사례를 정확히 판별한다"
falsification-criteria:
- "학습 후에도 3명 이상이 동일 값 읽기와 마지막 쓰기 덮어쓰기를 연결하지 못한다"
- id: HYP-HW2-SHARED-CORE-001
statement: >-
개념 진입과 증상 진입은 하나의 콘텐츠·scenario·상태 엔진을 공유해 별도 제품 수준의 운영비 없이 유지될 수 있다.
hypothesis-type: solo-operability
confidence: Med
validation-status: untested
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E2
promotion-criteria:
- "정적 계약 검사에서 두 진입이 동일 scenario ID와 reducer/state engine을 사용하고 설명 중복이 없다"
falsification-criteria:
- "Debugger 진입을 위해 별도 실험 엔진이나 중복 콘텐츠가 필요하다"
- id: HYP-HW2-DEMAND-001
statement: >-
깊이 있는 양방향 기술 학습 경험에는 반복 방문과 향후 유료 옵션을 시험할 수 있는 organic 수요가 있다.
hypothesis-type: demand-and-willingness-to-pay
confidence: Low
validation-status: untested
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E2
promotion-criteria:
- "공개 전 정한 유입·시작·완료·재방문 기준과 별도 가격 행동 기준을 실제 데이터가 충족한다"
falsification-criteria:
- "정한 관찰 기간에 최소 수요·재방문 또는 가격 행동 기준을 충족하지 못한다"
validation-state:
stage: pre-product
validated:
- "founder strategy direction and initial scope decision"
open:
- HYP-HW2-ENTRY-001
- HYP-HW2-LEARNING-001
- HYP-HW2-SHARED-CORE-001
- HYP-HW2-DEMAND-001
- "새 제품 구현·접근성·반응형·결정론적 학습 흐름 검증"
- "founder 실제 시간·자본·사업규모·유통·운영/리스크 내성"
refuted:
- "초기 독립 다중 도메인 Concept Debugger"
- "준비 중 콘텐츠를 완성 카탈로그처럼 보이는 전략"
projects:
- id: hyeonworks
product-purpose: >-
개념명 또는 실제 증상에서 시작해 기술 상태 변화를 예측·관찰·비교·설명하고 새 상황에 전이한다.
project-root: hyeonworks
application-root: hyeonworks/app
stage: reset-planning
stack:
- "미결정 — architecture/design 단계에서 재선정"
build: "cd app && npm run build"
test: "cd app && npm run verify"
lint: "cd app && npm run lint"
run: "cd app && npm run dev -- --host 127.0.0.1"
preview-out-dir: dist
users:
- "기술 정의를 읽었지만 내부 상태 변화와 인과관계를 설명하기 어려운 개발자"
- "동시성 이상 현상을 겪었지만 증상을 메커니즘에 연결하기 어려운 실무 개발자"
constraints:
- "활성 콘텐츠는 Transaction Isolation/Lost Update 한 scenario"
- "개념·증상 진입은 같은 콘텐츠와 상태 엔진을 사용"
- "실제 장애 진단·원격 DB·AI 자동 진단으로 표현하지 않음"
- "키보드·모바일·WCAG AA 품질선을 설계 단계부터 적용"
code-conventions:
- "scenario와 content data를 UI에서 분리하고 두 진입이 동일 ID를 참조"
- "상태 전이는 결정론적이며 Reset 시 같은 초기 상태로 복귀"
- "준비 중 주제는 비활성이고 완성 기능처럼 링크하지 않음"
sensitivity: public
recent-decisions:
- date: "2026-07-18"
decision: "Technology Atlas + limited symptom-first entry on one shared learning core"
evidence: EXEC-CEO-20260718T110148Z
@@ -0,0 +1,75 @@
report-type: workflow-artifact
artifact-kind: divergence-charter
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T111440Z-1
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-discovery
producer-role-id: DES-DIRECTOR
created-at: 20260718T111440Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
representative-screen:
id: dual-entry-shared-lab
kind: first-entry
description: >-
두 출발점과 하나의 Lost Update Lab, 짧은 Atlas path, 학습 루프, guided-scenario 경계를 한 화면에서
이해하고 어느 출발점으로든 실제 학습을 시작할 수 있는 첫 화면.
directions:
- id: ledger-studio
design-question: "기술 인과를 전문 저널의 검증 가능한 실험 기록처럼 읽게 하면 깊이와 신뢰를 전달하는가?"
layout-topology: "비대칭 editorial spread; 왼쪽 큰 논제와 두 entry, 오른쪽 shared lab ledger 및 하단 causal path"
navigation-model: "두 entry anchor에서 공통 Lab Brief로 부드럽게 합류하는 세로 읽기; 명시적 skip link"
typography-voice: "humanist serif display + neutral grotesk body + mono evidence annotations"
imagery-strategy: "값 변화가 적힌 ledger lines, margin note, read/compute/write의 인쇄 도식"
motion-model: "합류선을 짧게 그리며 evidence row만 순차 강조; reduced motion에서는 정적 표시"
dominant-primitives: [entry-column, causal-ledger, evidence-margin]
exclusive-primitives: [merge-rule, ledger-folio, annotated-value]
forbidden-primitives: [node-canvas, terminal-window, glass-card-grid]
- id: signal-trace
design-question: "두 세션의 신호와 값 흐름을 계측 rail처럼 추적하면 Lost Update의 시간적 인과를 더 빨리 이해하는가?"
layout-topology: "상단 dual input bands가 중앙 merge bus로 수렴하고 아래 full-width transaction trace로 이어지는 rail topology"
navigation-model: "entry band 선택→공통 trace focus; 단계는 좌우가 아닌 위아래 rail과 native next controls로 이동"
typography-voice: "precise sans + tabular numeric + compact uppercase signal labels"
imagery-strategy: "solid signal rails, stamped state nodes, striped conflict region; 색 외 session labels 반복"
motion-model: "실행 단계에서 현재 rail segment만 pulse; reduced motion은 굵기·패턴 전환"
dominant-primitives: [entry-band, merge-bus, trace-rail]
exclusive-primitives: [signal-stamp, conflict-hatch, value-probe]
forbidden-primitives: [editorial-marginalia, detective-file, orbit-map]
- id: field-manual
design-question: "굵은 단계·규칙·체크포인트의 현장 매뉴얼처럼 구성하면 두 진입과 학습 행동을 가장 실행 가능하게 만드는가?"
layout-topology: "모듈형 poster stack; 상단 선언, 2-up entry panels, numbered common protocol, compact scenario preview"
navigation-model: "명시적 numbered checkpoints와 sticky progress; entry 후 공통 Protocol 01로 합류"
typography-voice: "condensed display labels + warm humanist sans instructions + mono commands"
imagery-strategy: "번호판·규칙 블록·값 토큰·인과 화살표를 사용한 field diagram"
motion-model: "checkpoint 완료 시 stamp 전환만 사용; reduced motion과 동일 정보 구조"
dominant-primitives: [protocol-panel, numbered-checkpoint, rule-block]
exclusive-primitives: [field-stamp, procedure-strip, transfer-ticket]
forbidden-primitives: [serif-folio, signal-oscilloscope, dashboard-metric-grid]
pairwise-separation:
- directions: [ledger-studio, signal-trace]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
allowed-overlap: "제품 카피·두 entry·shared scenario·접근성·학습 루프만 공유"
- directions: [ledger-studio, field-manual]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
allowed-overlap: "제품 카피·두 entry·shared scenario·접근성·학습 루프만 공유"
- directions: [signal-trace, field-manual]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
allowed-overlap: "제품 카피·두 entry·shared scenario·접근성·학습 루프만 공유"
report-header:
bottom-line: >-
Ledger Studio·Signal Trace·Field Manual은 동일 요구를 각각 편집 기록, 계측 rail, 실행 프로토콜이라는
상반된 정신 모델로 구현한다. 최소 여섯 축이 달라 표면적 변주가 아니다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: accepted-preframing-and-discovery }
risks:
- "Signal Trace가 terminal/hacker 미학으로 기울 수 있어 밝고 정밀한 계측 언어로 제한해야 한다."
- "Field Manual의 굵은 모듈이 교육 도구보다 marketing poster로 보일 수 있다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T111439Z.report.yaml
grade: E3
note: "pre-direction framing"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T111440Z.report.yaml
grade: E3
note: "direction discovery constraints"
@@ -0,0 +1,59 @@
report-type: workflow-artifact
artifact-kind: direction-discovery
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T111440Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-discovery
producer-role-id: DES-DIRECTOR
created-at: 20260718T111440Z
attempt-id: 1
payload:
direction-input-brief-sha256: 975a7713b1837576173aee1d9a349bb68afd652ed9d1166fd9d5efc39059d9b4
findings:
- id: F-TWO-ENTRIES-ONE-PRODUCT
observation: "제품 결정은 두 출발점을 요구하지만 합류 후 모든 학습 상태와 콘텐츠는 하나여야 한다."
implication: "대표 화면은 두 portal 사이에 공통 목적과 합류 지점을 시각적으로 먼저 보여줘야 한다."
evidence-ref: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
- id: F-HONEST-DEBUGGER
observation: "증상 기반 진입은 실제 로그나 사용자 환경을 분석하지 않는 고정 교육 시나리오다."
implication: "경고·incident 콘솔보다 관찰→후보→검증의 언어와 guided-scenario 라벨을 사용한다."
evidence-ref: org-os/01-company/company-context.yaml
- id: F-DEPTH-PROOF
observation: "활성 콘텐츠가 하나뿐이므로 카탈로그 규모가 아니라 한 사례의 인과 깊이로 가치를 증명해야 한다."
implication: "첫 화면에 100→150/70 값 변화와 read/compute/write 순서를 의미 있는 미리보기로 노출한다."
evidence-ref: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
- id: F-ATLAS-HONESTY
observation: "완성 딥다이브가 하나뿐인 상태에서 큰 node map은 제품 규모를 과장한다."
implication: "Atlas는 Concurrency → Transaction Isolation → Lost Update의 짧은 breadcrumb로 제한한다."
evidence-ref: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
- id: F-ACCESSIBLE-DENSITY
observation: "timeline과 두 세션 비교는 시각적으로 유용하지만 모바일·스크린리더에서는 선형 대안이 필요하다."
implication: "모든 방향은 DOM 읽기 순서, 표/목록 대안, native button, 가시적 focus를 기본으로 설계한다."
evidence-ref: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
constraints-restated:
- "대표 화면 id는 dual-entry-shared-lab으로 고정한다."
- "두 entry는 동일 tx-lost-update-01을 참조하고 합류 후 state 분기 금지."
- "360/768/1280px, 키보드, reduced-motion, WCAG AA를 모두 지원한다."
- "실제 장애 확정·원격 DB·AI 진단으로 오인되는 카피와 시각 언어를 금지한다."
- "세 방향은 layout·navigation·type·imagery·motion·primitive 중 최소 네 축이 다르다."
- "보라 SaaS gradient, neon hacker terminal, glass card grid, 과장된 atlas map을 금지한다."
opportunity-notes:
- "shared-core는 합류 rail·공통 lab seal·단일 progress 구조로 시각화할 수 있다."
- "Case File의 단서 전개는 교육용 hypothesis ledger로 번역하면 진단 오인을 피하면서 기억성을 얻는다."
report-header:
bottom-line: >-
디자인 핵심은 portal 두 개의 외형이 아니라 '다른 단서에서 시작해 같은 인과 실험으로 합류'하는 구조를
이해시키는 것이다. 세 방향은 이 합류를 편집 기록·신호 rail·현장 매뉴얼로 각각 다르게 푼다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: accepted-decision-and-frozen-brief }
risks:
- "세 방향이 결국 카드 색상 변형으로 수렴할 위험이 있다."
- "시각적 개성이 학습 상태의 정밀성을 가릴 수 있다."
evidence:
- source-uri: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
grade: E3
note: "frozen design input"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: "accepted product direction"
@@ -0,0 +1,83 @@
report-type: workflow-artifact
artifact-kind: selected-direction
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T115933Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-decision
producer-role-id: DES-DIRECTOR
created-at: 20260718T115933Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
direction-set-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T113705Z.report.yaml
direction-set-sha256: ff7384a6a4977cd0bff7f0a19e4a5b0611010c287a80f9a230cca9566c7613d5
selected-direction-id: ledger-studio
parent-workflow-id: hyeonworks-vnext-v1
product-decision-id: EXEC-CEO-20260718T111108Z
direction-input-brief-sha256: 975a7713b1837576173aee1d9a349bb68afd652ed9d1166fd9d5efc39059d9b4
selection-acceptance-receipt: HUMAN-001-session-full-flow-authorization-20260718
rationale: >-
Hyeonworks의 최우선 약속은 많은 주제를 나열하는 것이 아니라 하나의 기술 메커니즘을 전문가 수준으로
깊게 이해시키는 것이다. Ledger Studio는 큰 기술 질문, 검증할 값, 실행 순서, 두 출발점과 공통 Lab을
한 편집 기록 구조로 묶어 이 약속을 가장 직접적으로 보여준다. 증상 진입도 monitoring/incident 제품처럼
보이지 않고 관찰값을 causal ledger에서 검증하게 하므로 Concept Debugger를 교육적 입구로 유지한다.
selection-criteria:
product-fit: "깊이 학습·mechanism-first backbone·symptom-first entry를 동시에 가장 정확히 표현"
trust: "실제 진단 도구가 아닌 guided learning scenario로 읽히는 정도가 가장 높음"
learning-flow: "Predict 이전의 질문과 Observe 이후의 evidence를 한 기록 위계로 연결"
accessibility: "DOM 순서·native anchors·mobile single column이 정신 모델을 거의 잃지 않음"
implementation-fit: "범용 diagram/runtime 없이 React와 CSS로 실제 reducer 상태를 명료하게 표현 가능"
rejected-directions:
- id: signal-trace
reason: >-
시간적 인과 판독은 빠르지만 channel·probe·online 상태 언어가 교육 도구보다 monitoring/debug console로
오인될 위험이 있다. 사용자가 요청한 debugger 입구는 제품 전체의 표면이 아니라 증상→후보→검증
흐름이어야 하므로 Signal의 계측 은유를 지배 방향으로 채택하지 않는다.
- id: field-manual
reason: >-
번호형 프로토콜은 행동 순서를 강하게 만들지만 대형 Module 01 cover가 실제 학습 control보다 먼저
보이며 marketing poster로 읽힐 위험이 있다. 또한 long-form 인과 설명과 evidence 비교를 수용하는
확장성이 Ledger보다 낮다.
locked-invariants:
- id: LI-EDITORIAL-EVIDENCE
invariant: >-
비대칭 editorial spread, serif 논제, mono evidence annotation, causal ledger가 화면 위계를 지배하며
일반 SaaS 카드 grid·dashboard·terminal shell로 후퇴하지 않는다.
- id: LI-DUAL-ENTRY-SHARED-CORE
invariant: >-
‘개념을 알고 있어요’와 ‘증상만 알고 있어요’는 orientation만 다르고 같은 tx-lost-update-01,
같은 reducer, 콘텐츠, 진행 상태로 합류한다.
- id: LI-EVIDENCE-LEARNING-LOOP
invariant: >-
정답을 먼저 설명하지 않고 Predict → Observe → Compare → Explain → Transfer 순서를 유지하며
100·120·150·70의 인과를 같은 ledger 안에서 대조한다.
- id: LI-HONEST-BOUNDARY
invariant: >-
증상 경로와 Lab은 고정 guided scenario 및 후보 메커니즘 검증이라고 명시하고 실제 로그 분석,
원격 DB 연결, 장애 원인 확정으로 표현하지 않는다.
- id: LI-ACCESSIBLE-READING
invariant: >-
360/768/1280에서 DOM 읽기 순서와 합류 의미를 보존하고 모든 활성 control은 키보드로 도달하며
값·세션·상태를 색 외 텍스트와 형태로 표시한다.
flexible-elements:
- "serif fallback과 세부 type scale은 한국어 렌더 품질에 맞게 조정 가능"
- "ledger 내부 행 간격과 section 길이는 실제 학습 상태 밀도에 맞게 조정 가능"
- "observed coral의 정확한 명도는 WCAG AA를 지키는 범위에서 조정 가능"
adopted-elements: []
report-header:
bottom-line: >-
Ledger Studio를 유일한 지배 방향으로 선택한다. 전문 저널의 질문과 causal ledger가 깊이 학습을
가장 잘 표현하며, debugger 방식은 증상 입구→후보 메커니즘→동일 Lab 검증 흐름으로 포함한다.
decision-needed: { needed: true, approver: HUMAN-001 }
confidence: { value: Med, derived-from: independent-coded-directions-and-hash-bound-comparison }
risks:
- "첫 화면의 편집 읽기량이 실행 진입을 늦출 수 있어 실제 앱에서는 두 entry를 첫 유효 viewport 가까이에 유지해야 한다."
- "사용자 이해도 비교는 아직 없으므로 선택의 학습 효과는 자동 검증 통과로 주장하지 않는다."
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/comparison.png
grade: E3
note: "세 방향의 1280/390 실제 Chrome 비교 렌더"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T113705Z-1.report.yaml
grade: E3
note: "모든 pair 6축 분리와 primitive collision 부재를 확인한 accepted audit"
@@ -0,0 +1,160 @@
report-type: workflow-artifact
artifact-kind: design-review-panel
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T124159Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-DIRECTOR
created-at: 20260718T124159Z
attempt-id: 4
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviews:
- report-id: DES-PROD-20260718T121036Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T121036Z.report.yaml
report-sha256: f24b3a407ed6c5fca0c6b769c929b61185df88bb3eed6e8efb63691ce0ef388b
lens: product-fit
reviewer-role-id: DES-PROD
reviewer-run-id: hyeonworks-vnext-v1-direction-review-product-fit-20260718T1211Z
verdict: revise
- report-id: UX-RESEARCHER-20260718T121036Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T121036Z.report.yaml
report-sha256: 544fe3dc7ed6d97f5aec5abd4125b8d1bb815876ed989ae734ef1f807779335d
lens: usability
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: hyeonworks-vnext-v1-direction-review-usability-20260718T1211Z
verdict: revise
- report-id: DES-VISUAL-20260718T121036Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T121036Z.report.yaml
report-sha256: 67ab93d09890b049958e9ac3e44a2b9be8d65162ed827585e421be3e848d3910
lens: distinctiveness
reviewer-role-id: DES-VISUAL
reviewer-run-id: 2453b69fee7004f95eef43556a488b8f1230e84a2c9fe92cb7c6706e7bd515c1
verdict: pass
- report-id: DES-VISUAL-20260718T121851Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T121851Z.report.yaml
report-sha256: ed7411ada1c9023222710a3fe3107c2a3e572a9eea47fc66d6e311affc01b61a
lens: visual-craft
reviewer-role-id: DES-VISUAL
reviewer-run-id: hyeonworks-vnext-v1-direction-review-visual-craft-20260718T121347Z
verdict: revise
- report-id: DES-PLATFORM-20260718T121851Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T121851Z.report.yaml
report-sha256: 98e9a52f4603557be6a2750e7d8bbb31f0acfdc3022225a421cd776e2fc071a5
lens: systematizability
reviewer-role-id: DES-PLATFORM
reviewer-run-id: cac14c7f6f176f94508730de72c5558f89165715d287f89229474ac6cc12eccd
verdict: revise
- report-id: GTM-PMM-20260718T121851Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T121851Z.report.yaml
report-sha256: d14c9cb1ff10f36d64d20e49ba7ffe2bc00f41d0ff57ebb7181bd4329224afe6
lens: market-memorability
reviewer-role-id: GTM-PMM
reviewer-run-id: a891c7a54da7771de16bb84cff76ab3c40f3c85b09374285a6656915211bddea
verdict: revise
- report-id: ENG-FE-20260718T121851Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T121851Z.report.yaml
report-sha256: a65a2f5a6ea2436566df5378acfebcc25842be24170c8802ac2aebcaeb477f49
lens: implementability
reviewer-role-id: ENG-FE
reviewer-run-id: 4b99a5f4d221f1fcf996194fa0c3e799311b102da9e544e518fb0b83693f5375
verdict: revise
synthesis:
verdict: minor-revision
role-id: DES-DIRECTOR
unresolved-dissent: []
rule-application: >-
7개 lens가 정확히 한 번씩 존재하고 blocking verdict는 없다. distinctiveness는 pass지만 veto lens인
visual-craft를 포함한 나머지 6개 lens가 revise이므로, 개별 판정을 낮추지 않고 panel verdict를
minor-revision으로 보존한다.
direction-decision: >-
Ledger Studio의 선택과 editorial-evidence, dual-entry/shared-core, evidence learning loop,
honest boundary, accessible reading의 잠긴 불변식은 유지한다. 발견사항은 방향 재선택이 아니라
학습 게이트, 접근성·조판, 메시지, 재사용 경계를 교정하는 범위다.
preserved-strengths:
- >-
distinctiveness review가 확인한 비대칭 editorial spread, mono evidence annotation,
100·120·70 causal ledger와 두 entry의 Same Lab 합류는 유지한다.
- >-
정적·결정론적 reducer와 network/storage/randomness 없는 guided-scenario 경계는 수정의 안전한 기반이다.
required-revisions:
- priority: P0
theme: learning-evidence-integrity
source-lenses: [product-fit, market-memorability]
scope: >-
Home/Predict에서 결과와 write trace를 선공개해 예측을 회상 문제로 만드는 구조를 고치고,
Explain은 제공 문장 선택만으로 인과 설명 능력을 주장하지 않도록 constructed causal task를 요구한다.
headline은 실제 Predict → Observe → Explain 순서와 일치시키되 100·120·70 회상 단서는 보존한다.
- priority: P0
theme: interaction-accessibility-and-legibility
source-lenses: [usability, visual-craft, implementability]
scope: >-
라디오 변경과 Observe 6/6 이후 focus target, live error feedback, 수정 답 재제출 상태를 명시하고
trace에 native/완전한 table semantics를 준다. Shared Lab boundary 대비와 한국어 display 어절 줄바꿈을
360/768/1280에서 교정하고 실제 keyboard state-flow E2E로 검증한다.
- priority: P1
theme: responsive-and-market-hierarchy
source-lenses: [usability, visual-craft, market-memorability]
scope: >-
360/768에서 entry 접근 거리를 줄이고 tablet 전용 hero/progress 밀도를 조정한다. 단일 public-facing
name과 개발자용 interactive mechanism Lab이라는 category descriptor를 정해 Atlas·Field note·Lab의
위계를 명료하게 한다.
- priority: P1
theme: production-system-boundaries
source-lenses: [systematizability, implementability]
scope: >-
다음 주제 추가 전에 id 기반 scenario registry/schema와 pure reducer, route/view를 분리하고,
spacing/type/stroke/elevation/breakpoint token 및 ledger-row/sheet/progress/value-comparison recipe를
추출한다. backend나 불필요한 상태 라이브러리는 추가하지 않는다.
exit-criteria:
- "6개 revise 원본의 required action이 수정 receipt에 trace되고 재리뷰에서 7개 lens가 모두 pass한다."
- "visual-craft veto finding의 Lab 대비·한국어 조판·tablet density가 실제 상태별 render로 재검수된다."
- "키보드 focus, live feedback, trace semantics와 전체 learning loop가 실제 Chrome E2E로 통과한다."
report-header:
bottom-line: >-
MINOR-REVISION — exact winner의 Ledger Studio 방향과 고유성은 유지하되, 7개 독립 lens 중
distinctiveness만 pass하고 visual-craft를 포함한 6개가 revise이므로 학습 증거, 접근성·조판,
시장 메시지, 재사용·production 경계를 수정한 뒤 전체 panel을 다시 통과해야 한다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-winner-and-seven-live-sha-bound-independent-review-originals
risks:
- >-
100·120·70과 full trace의 선공개를 고칠 때 distinctiveness가 확인한 숫자 기반 회상 단서까지 제거하면
학습 무결성을 회복하면서 브랜드 고유성을 잃을 수 있다.
- >-
focus·feedback·trace semantics와 Lab 대비는 실제 상태 상호작용에서 드러난 문제이므로 정적 preview만
다시 생성해서는 수정 완료를 증명할 수 없다.
- >-
scenario/component 경계 추출은 다음 주제 확장 전 필요하지만, 이번 minor revision에서 backend나
범용 runtime까지 도입하면 방향 검증보다 플랫폼화 범위가 커질 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "exact winner ENG-FE-20260718T120840Z, live SHA 1cfa4ff4… 결속"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T121036Z.report.yaml
grade: E3
note: "product-fit revise 원본, live SHA f24b3a40…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T121036Z.report.yaml
grade: E3
note: "usability revise 원본, live SHA 544fe3dc…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T121036Z.report.yaml
grade: E3
note: "distinctiveness pass 원본, live SHA 67ab93d0…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T121851Z.report.yaml
grade: E3
note: "visual-craft revise 원본, live SHA ed7411ad…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T121851Z.report.yaml
grade: E3
note: "systematizability revise 원본, live SHA 98e9a52f…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T121851Z.report.yaml
grade: E3
note: "market-memorability revise 원본, live SHA d14c9cb1…"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T121851Z.report.yaml
grade: E3
note: "implementability revise 원본, live SHA a65a2f5a…"
@@ -0,0 +1,132 @@
report-type: workflow-artifact
artifact-kind: design-review-panel
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T133900Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-DIRECTOR
created-at: 20260718T133900Z
attempt-id: 5
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviews:
- report-id: DES-PROD-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T131443Z.report.yaml
report-sha256: 6fd00e37a7ab68569f5ead21e68ea8ad6b70e47aea9fae92c97d876915995c50
lens: product-fit
reviewer-role-id: DES-PROD
reviewer-run-id: db69cd61af060c50804e694ae541d0106551b2025eb654b6947428de4e983bce
verdict: pass
- report-id: UX-RESEARCHER-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T131443Z.report.yaml
report-sha256: 08f434f9f1f4afca2cb3192fe566b846e9a803ca9c5dc788d33c848a6d6a948e
lens: usability
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: b08974977a3f60b7b0ca23bb23d853bb5b2476387bd71a011e20ba145dd35d79
verdict: revise
- report-id: DES-VISUAL-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T131443Z.report.yaml
report-sha256: 516867f7240a4e3abe2b778d9282d6fb98137c0f60e78a69c0693f60f6168199
lens: distinctiveness
reviewer-role-id: DES-VISUAL
reviewer-run-id: 44640b239eaefd6fe05ba540d1fda7cfa90498fef66a896228a1a91d9caa370a
verdict: pass
- report-id: DES-VISUAL-20260718T131448Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T131448Z.report.yaml
report-sha256: 9ebc7a2dc4bbef084614902c8afbde24451727828b6bce0f402e5f2903474477
lens: visual-craft
reviewer-role-id: DES-VISUAL
reviewer-run-id: d388e8cde4d3a732a077962455b842667dd4c7f2ee00b8222873f86d4790fe9e
verdict: revise
- report-id: DES-PLATFORM-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T131443Z.report.yaml
report-sha256: 02529b7e441b2d514e8ef8923b986e2ceb6348c73577d739606dc7f0352c2e46
lens: systematizability
reviewer-role-id: DES-PLATFORM
reviewer-run-id: 2336d0c343a10e89d7b2b419a9803c49a182646f7716ebf8dda1170857f0dc68
verdict: revise
- report-id: GTM-PMM-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T131443Z.report.yaml
report-sha256: a2b1d4e457f0e14d149cd77aea76656802224d1a1fd54a8a64cec20699009b06
lens: market-memorability
reviewer-role-id: GTM-PMM
reviewer-run-id: a3aa4278f9c46ba6656fec6102f29d0cf2992dce7bd7fe1f1fb8c9c206c9addc
verdict: pass
- report-id: ENG-FE-20260718T131443Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131443Z.report.yaml
report-sha256: 70f5a4db69565bb75f004d01fb47f2f716a97ac5317dbbe421869a3aa164484c
lens: implementability
reviewer-role-id: ENG-FE
reviewer-run-id: eab69987ab88f740e4c80ed8b5e1cbb0b9cfdbb61bb29e7535d1e42c368e49f3
verdict: pass
synthesis:
verdict: minor-revision
role-id: DES-DIRECTOR
unresolved-dissent: []
rule-application: >-
exact winner에 7개 lens가 정확히 한 번씩 결속되고 blocking은 없다. product-fit,
distinctiveness, market-memorability, implementability는 pass지만 usability, visual-craft,
systematizability가 revise이므로 개별 판정을 낮추지 않고 panel을 minor-revision으로 보존한다.
direction-decision: >-
Ledger Studio, Technology Atlas 공개명, 두 입구와 하나의 causal Lab, Predict→Observe→Compare→Explain→Transfer,
guided-scenario 경계는 그대로 유지한다. 발견사항은 반응형 containment, focus anchor, 한국어 조판,
registry-to-render 결속을 교정하는 국소 수정이며 방향 재선택 사유가 아니다.
preserved-strengths:
- 제품 약속과 constructed Explain·Transfer·정직한 completion은 product-fit pass 근거로 유지한다.
- 비대칭 editorial ledger와 100·120·70 회상 묶음은 distinctiveness·market pass 근거로 유지한다.
- 순수 reducer, native controls/table, deterministic static boundary는 implementability pass 근거로 유지한다.
required-revisions:
- priority: P0
theme: mobile-containment-and-entry-focus
source-lenses: [usability]
scope: >-
360px Observe에서 workbench를 viewport 안에 제한하고 table만 trace-scroll 내부에서 스크롤되게 한다.
entry shortcut은 router 재렌더 없이 entry-title에 실제 focus와 scroll을 주며 360/768 keyboard·pointer로 검증한다.
- priority: P1
theme: korean-responsive-typography
source-lenses: [visual-craft]
scope: >-
Lab body, lead, choices, boundary, principles에 한국어 keep-all을 적용하되 긴 Latin id에는 안전한
overflow fallback을 둔다. 5개 360 state render에서 조판과 zero document overflow를 다시 확인한다.
- priority: P0
theme: active-scenario-content-binding
source-lenses: [systematizability]
scope: >-
route/labState의 scenarioId에서 activeScenario를 해석해 render, dispatch, announcement에 전달한다.
최소 두 번째 fixture의 id·atlas·value·schedule·hypothesis·explanation·transfer·feedback을 DOM으로 검증하되
범용 plugin/runtime이나 backend는 추가하지 않는다.
exit-criteria:
- 360px Observe에서 document scrollWidth가 clientWidth와 같고 trace-scroll 자체는 내부 overflow를 가진다.
- entry shortcut 활성화 뒤 entry-title이 activeElement이고 목표가 viewport 상단 근처에 위치한다.
- 모든 Lab body copy가 Korean keep-all과 Latin overflow fallback을 사용하며 360 state renders를 갱신한다.
- 두 scenario fixture가 같은 reducer/view에서 각 record의 id, copy, values, schedule, answers, announcement를 렌더한다.
- 수정본에 대해 7개 독립 lens를 새 context-package와 run-id로 모두 다시 실행하여 전부 pass한다.
report-header:
bottom-line: >-
MINOR-REVISION — revision 2는 제품 적합성·차별성·시장성·구현 가능성을 통과했지만,
실제 360px overflow와 entry focus, 한국어 본문 조판, active scenario render 결속을 고친 뒤
7-lens 전체 pass가 필요하다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-winner-and-seven-sha-bound-independent-review-originals
risks:
- active scenario 결속을 고칠 때 범용 schema/runtime로 확대하면 단일 주제 방향 검증을 넘어 과설계가 된다.
- CSS만 보고 통과시키면 Observe live overflow와 anchor focus 결함을 재현하지 못하므로 Chrome state assertions가 필요하다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: exact revision-2 winner SHA bcc557fc…
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T131443Z.report.yaml
grade: E3
note: live 360 overflow와 anchor focus revise 원본
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T131448Z.report.yaml
grade: E3
note: 360 Korean body typography revise 원본
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T131443Z.report.yaml
grade: E3
note: registry-to-render/content binding revise 원본
@@ -0,0 +1,125 @@
report-type: workflow-artifact
artifact-kind: design-review-panel
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T142500Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-DIRECTOR
created-at: 20260718T142500Z
attempt-id: 6
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
reviews:
- report-id: DES-PROD-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T140000Z.report.yaml
report-sha256: 65b079dff892848ca42d29796000146fc6ee741c77335bd99ea01bc3bb0783b6
lens: product-fit
reviewer-role-id: DES-PROD
reviewer-run-id: 1b92e14079e2752bac1d8c62f6d1ab73ee8d33aef646f22c0c76fe134f27c988
verdict: pass
- report-id: UX-RESEARCHER-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T140000Z.report.yaml
report-sha256: 4a1fbbe7f6ea61dc9ce9f8dc0523468aef9c4d893e075503946a2f867455ff69
lens: usability
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: d304420508e13d58140002ade85a20b5ba65f76807bcb3e1ffb58b53fc944d89
verdict: pass
- report-id: DES-VISUAL-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T140000Z.report.yaml
report-sha256: cfce4f2f395dc6fabf785b381b1af3366c3335a206c0f5450e5972965a838948
lens: distinctiveness
reviewer-role-id: DES-VISUAL
reviewer-run-id: 5164a2f325b97d437c17cff56ba421620b35ad25d4bde2bf00fb63b896b5db1c
verdict: pass
- report-id: DES-VISUAL-20260718T140005Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T140005Z.report.yaml
report-sha256: 28bf4a9a8eb12766f2430d394ed2086111f9983433fbeb664f2a2462cce94688
lens: visual-craft
reviewer-role-id: DES-VISUAL
reviewer-run-id: f5394225114da0620b2ba325651b249910844e048a2c55f1da9e1f8b4406f012
verdict: revise
- report-id: DES-PLATFORM-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T140000Z.report.yaml
report-sha256: db8253d62a742f8af2c03160ed979d54854df333309f72d50bfb9444f08b28a8
lens: systematizability
reviewer-role-id: DES-PLATFORM
reviewer-run-id: 4a130950494abd2e560e3ab7b5a591b9ab6b501e61da3604373623d3e6baf5bd
verdict: pass
- report-id: GTM-PMM-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T140000Z.report.yaml
report-sha256: bfeef8eda24fdc4741ec8c5ceea8e19bdf2af00748b6060436bdb3fe8c792179
lens: market-memorability
reviewer-role-id: GTM-PMM
reviewer-run-id: ea3b9ab06b3aa423358b9d2966daed0ad18331593eefea8836521e0eb712342b
verdict: pass
- report-id: ENG-FE-20260718T140000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T140000Z.report.yaml
report-sha256: b02f9c89fb797411d16633b4112db2cbd91e783fbcfbcd90c21423cf079b2d61
lens: implementability
reviewer-role-id: ENG-FE
reviewer-run-id: 3f768a15887862e2de9227f5e84c43b61c4133909ae49b96f7dcb5d3aabd010a
verdict: revise
synthesis:
verdict: minor-revision
role-id: DES-DIRECTOR
unresolved-dissent: []
rule-application: >-
exact revision-3 winner에 7개 lens가 정확히 한 번씩 결속되고 blocking은 없다. product-fit,
usability, distinctiveness, systematizability, market-memorability는 pass지만 visual-craft와
implementability가 revise이므로 두 판정을 낮추지 않고 panel을 minor-revision으로 보존한다.
direction-decision: >-
Ledger Studio의 editorial evidence visual thesis, dual-entry shared core, 동일한 causal Lab,
Predict→Observe→Compare→Explain→Transfer, guided-scenario 경계는 유지한다. 발견사항은 작은 텍스트와
필수 조작 경계의 대비, 그리고 router와 충돌하는 skip-link를 교정하는 국소 수정이며 방향 재선택 사유가 아니다.
preserved-strengths:
- 두 입구가 같은 scenario와 reducer로 수렴하고 정직한 완료 경계를 지키는 product-fit은 유지한다.
- 360/768/1280 containment, 한국어 단어 무결성, keyboard flow와 native semantics는 유지한다.
- 비대칭 ledger composition과 100·120·70 회상 묶음은 distinctiveness와 market memorability 근거로 유지한다.
- scenario registry와 explicit activeScenario 결속은 확장 가능한 최소 구현 경계로 유지한다.
required-revisions:
- priority: P0
theme: small-text-and-control-contrast
source-lenses: [visual-craft]
scope: >-
deep surface용 별도 accent token을 추가해 lab-id와 boundary 강조 텍스트가 각 실제 배경에서 4.5:1 이상이 되게 한다.
pending trace text도 실제 배경에서 4.5:1 이상, choice와 textarea의 필수 control border는 sheet 배경에서
3:1 이상이 되게 하되 decorative rule token과 분리한다.
- priority: P0
theme: route-safe-skip-link
source-lenses: [implementability]
scope: >-
skip link를 router hash navigation으로 보내지 않고 현재 렌더된 main에 local focus와 scroll을 적용한다.
home, concept, symptom, 기본 Lab, fixture Lab과 진행 중 phase에서 hash, scenario, phase, cursor를 보존하며
360/768/1280 keyboard activation으로 검증한다.
exit-criteria:
- lab-id와 boundary emphasis의 computed foreground/background 대비가 각각 4.5:1 이상이다.
- pending trace text의 computed 대비가 4.5:1 이상이고 choice 및 textarea border 대비가 각각 3:1 이상이다.
- 모든 공개 route와 두 Lab scenario에서 skip link 활성화 후 activeElement가 현재 main이고 location hash가 바뀌지 않는다.
- 진행 중 기본·fixture Lab에서 skip link 활성화 전후 scenario id, phase, cursor가 정확히 보존된다.
- 360/768/1280에서 위 동작과 zero document overflow를 Chrome assertion으로 재검증한다.
- 수정본에 대해 7개 독립 lens를 새 context-package와 run-id로 모두 다시 실행하여 전부 pass한다.
report-header:
bottom-line: >-
MINOR-REVISION — revision 3는 제품 적합성·사용성·차별성·시스템화·시장성을 통과했지만,
작은 텍스트·필수 control 대비와 route-safe skip link를 고친 뒤 7-lens 전체 pass가 필요하다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-r3-and-seven-sha-bound-independent-review-originals
risks:
- 기존 accent와 rule token을 전역 교체하면 의도한 시각 위계까지 흔들 수 있으므로 surface/control 전용 token으로 국소화해야 한다.
- skip link가 hashchange를 거치면 화면만 이동하는 것이 아니라 route와 Lab 진행 상태까지 초기화할 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: exact revision-3 winner SHA 735d588b…
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T140005Z.report.yaml
grade: E3
note: computed small-text and essential-control contrast findings
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T140000Z.report.yaml
grade: E3
note: live skip-link router/state reset finding
@@ -0,0 +1,110 @@
report-type: workflow-artifact
artifact-kind: design-review-panel
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T150500Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-DIRECTOR
created-at: 20260718T150500Z
attempt-id: 7
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviews:
- report-id: DES-PROD-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T145000Z.report.yaml
report-sha256: c83628e9a033e06dd3f3f2c5bbc052f5f6da9540c8de08bdd720cebf02ce5350
lens: product-fit
reviewer-role-id: DES-PROD
reviewer-run-id: 0cf87e457984c59af5b263a50024f493fa9caaf0fcf630273503befaf4033dd4
verdict: pass
- report-id: UX-RESEARCHER-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T145000Z.report.yaml
report-sha256: 6e8fb3055431769c1f4055ad9890cf906df3a0343f81ccc0539d85d50d0d52e9
lens: usability
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: e821d474bc30c9a4d4b16925e1d596cfd8901397bb9d24b59b30f17ac0bd826c
verdict: pass
- report-id: DES-VISUAL-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T145000Z.report.yaml
report-sha256: 5ba2fd228e1c7107dcaf2fcf8fc615adce137e7646efca302649a59de63e29aa
lens: distinctiveness
reviewer-role-id: DES-VISUAL
reviewer-run-id: aaa1e28340e08054588d1e93f3774136fe9ffe6f350b48afb3d060229f98447a
verdict: pass
- report-id: DES-VISUAL-20260718T145005Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T145005Z.report.yaml
report-sha256: a08a33d02a3821bc4fd5edf0a015793570f24c2adbe583cf8a9bcccc9a04d0ee
lens: visual-craft
reviewer-role-id: DES-VISUAL
reviewer-run-id: b81c982521b4fbc7e8acf73d84502d1dd84b4d081cfa5be74863decbb0d6ae61
verdict: pass
- report-id: DES-PLATFORM-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T145000Z.report.yaml
report-sha256: 11e1af20b2447d6143ef47b3da1916a5ffb038d43dcb5c9a4b1606fe05abceee
lens: systematizability
reviewer-role-id: DES-PLATFORM
reviewer-run-id: a21e644695cb706bb53b50622673bf1ac856552145a4bbb5948072a918d32da6
verdict: pass
- report-id: GTM-PMM-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T145000Z.report.yaml
report-sha256: 53ce596ce8c15fb322286ab79c44d93ba54931742db5fec1e3032f36ca0e8657
lens: market-memorability
reviewer-role-id: GTM-PMM
reviewer-run-id: 82488e67545d8401fa217e7e28fc1f600dcbb378af719354f74a58a530c55388
verdict: pass
- report-id: ENG-FE-20260718T145000Z
report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T145000Z.report.yaml
report-sha256: f84a3fdc5803b6ba8a9ecc4586e3c13307addff66492e7c342dda920f3d0d6c6
lens: implementability
reviewer-role-id: ENG-FE
reviewer-run-id: cfcfc3f64722c9f7ec5712bab3b38faa00026ef4e146f3f52829d37d410ac2ac
verdict: pass
synthesis:
verdict: pass
role-id: DES-DIRECTOR
unresolved-dissent: []
rule-application: >-
exact revision-4 winner에 필수 7개 lens가 고유한 reviewer run과 immutable SHA로 정확히 한 번씩
결속됐고 일곱 verdict가 모두 pass다. 따라서 개별 판정을 낮추거나 덮어쓰지 않고 panel을 pass로 확정한다.
direction-decision: >-
Ledger Studio의 editorial evidence thesis, dual-entry shared core, 동일 causal Lab,
Predict→Observe→Compare→Explain→Transfer 학습 루프와 guided-scenario 경계를 최종 방향으로 승인한다.
resolved-revisions:
- deep surface 작은 텍스트와 pending trace가 4.5:1 이상, 필수 control border가 3:1 이상으로 보정됐다.
- skip link가 hash router를 우회해 모든 공개 route와 진행 중 Lab에서 현재 main에 focus하면서 상태를 보존한다.
- 360/768/1280과 기본·fixture scenario를 포함한 독립 Chrome 재실행이 통과했다.
preserved-strengths:
- 개념 입구와 증상 디버거 입구가 같은 reducer와 인과 증거로 수렴한다.
- 100·120·70의 evidence sequence와 비대칭 ledger composition이 기억 단서를 만든다.
- 실제 로그·원격 DB·AI 진단을 가장하지 않고 guided simulation 경계를 명시한다.
- 한국어 단어 무결성, keyboard flow, responsive containment와 native semantics를 유지한다.
advisory:
- 세 번째 공개 주제를 추가할 때 scenario registry와 단일 app.js의 파일·schema 분리를 재검토한다.
exit-criteria:
- exact winner 및 7개 review SHA 결속 검증 통과
- 모든 lens pass와 unresolved dissent 없음
- 대비·skip-link·상태 보존의 브라우저 regression 통과
report-header:
bottom-line: >-
PASS — revision 4는 대비와 route-safe skip-link를 교정했고, exact winner에 결속된 7개 독립 lens가
실제 렌더·브라우저 재실행 근거로 모두 통과했다.
decision-needed: {needed: false, approver: null}
confidence:
value: High
derived-from: exact-r4-winner-seven-immutable-independent-pass-reviews
risks:
- 세 번째 주제 도입 시점에는 현재의 단일-file registry가 편집 병목이 될 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: exact revision-4 winner and bound browser/CSS/preview receipts
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T145005Z.report.yaml
grade: E3
note: independent computed contrast and responsive visual-craft pass
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T145000Z.report.yaml
grade: E3
note: isolated-copy browser and source-integrity implementability pass
@@ -0,0 +1,79 @@
report-type: workflow-artifact
artifact-kind: approved-direction
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T151000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-finalize
producer-role-id: DES-DIRECTOR
created-at: 20260718T151000Z
attempt-id: 1
payload:
parent-workflow-id: hyeonworks-vnext-v1
child-workflow-id: hyeonworks-vnext-v1-direction
product-decision-id: EXEC-CEO-20260718T111108Z
direction-input-brief-sha256: 975a7713b1837576173aee1d9a349bb68afd652ed9d1166fd9d5efc39059d9b4
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
winner-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
winner-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
visual-thesis: >-
Ledger Studio는 전문 기술 저널의 질문, causal ledger의 수치 증거, 비대칭 editorial spread를
하나의 읽기 위계로 묶는다. 일반 SaaS dashboard나 terminal을 흉내 내지 않고, 예측과 관찰의
불일치를 종이에 표시하듯 드러내 사용자가 메커니즘을 스스로 설명하게 한다.
interaction-model:
entries:
concept: 개념을 알고 있는 사용자가 격리 수준의 약속에서 시작한다.
symptom-debugger: 결과가 120이 아니라 70이 된 증상에서 후보 메커니즘을 좁힌다.
shared-core:
scenario-id: tx-lost-update-01
reducer: 두 입구가 같은 시나리오·상태·증거 순서로 합류한다.
learning-loop: [Predict, Observe, Compare, Explain, Transfer]
evidence-sequence: [100, 120, 150, 70]
state-contract:
- 각 단계는 앞 단계 완료 후에만 열린다.
- 관찰 trace와 사용자의 예측·설명은 색뿐 아니라 텍스트와 형태로 구분한다.
- skip link는 route hash와 진행 상태를 변경하지 않고 현재 main으로 이동한다.
honest-boundary: 고정 guided simulation이며 실제 로그 분석·원격 DB 연결·AI 장애 진단을 주장하지 않는다.
design-token-contract:
typography:
thesis: Korean-capable serif editorial heading
evidence: monospace numeric and causal annotations
body: readable Korean sans-serif system stack
color:
paper: '#f3efe4'
ink: '#1b201e'
deep: '#202724'
coral-observed: '#ad4031'
accent-on-deep: '#ff8873'
pending-on-deep: '#535c58'
control-border: '#88877e'
contrast-floor:
normal-text: '4.5:1'
essential-control-boundary: '3:1'
layout:
desktop: asymmetric editorial spread with causal ledger
mobile: single-column DOM reading order preserved at 360px
verified-viewports: [360, 768, 1280]
invariant-ids: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
acceptance-receipt-ref: exact-review-artifact:DES-DIRECTOR-20260718T151000Z:EXEC-CPO
approval-basis:
panel-id: DES-DIRECTOR-20260718T150500Z
panel-sha256: 0f5ae0e571d35c44392e18d1d07430167b950d94ad59973819458768867dad16
verdict: pass
report-header:
bottom-line: >-
Ledger Studio 방향과 revision-4 prototype을 최종 승인한다. 개념·증상 디버거의 두 입구는 동일한
Lost Update 인과 Lab으로 합류하며, 다섯 단계 학습 루프와 정직한 guided-simulation 경계를 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: selected-direction-exact-r4-and-seven-lens-pass-panel}
risks:
- 세 번째 공개 주제를 추가할 때 scenario schema와 콘텐츠 파일 분리를 다시 검토해야 한다.
- 실제 사용자 학습효과는 제품 분석 전까지 자동 검증 결과로 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T150500Z.report.yaml
grade: E3
note: exact seven-lens pass synthesis
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: revision-4 manifest and bound verification receipts
@@ -0,0 +1,64 @@
report-type: workflow-artifact
artifact-kind: approved-direction
artifact-version: 1
identity:
artifact-id: DES-DIRECTOR-20260718T151100Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-finalize
producer-role-id: DES-DIRECTOR
created-at: 20260718T151100Z
attempt-id: 2
supersedes-report-id: DES-DIRECTOR-20260718T151000Z
payload:
parent-workflow-id: hyeonworks-vnext-v1
child-workflow-id: hyeonworks-vnext-v1-direction
product-decision-id: EXEC-CEO-20260718T111108Z
direction-input-brief-sha256: 975a7713b1837576173aee1d9a349bb68afd652ed9d1166fd9d5efc39059d9b4
selected-direction-ref: completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
winner-prototype-ref: completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
winner-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
visual-thesis: >-
Ledger Studio는 전문 기술 저널의 질문, causal ledger의 수치 증거, 비대칭 editorial spread를
하나의 읽기 위계로 묶는다. dashboard나 terminal을 흉내 내지 않고 예측과 관찰의 불일치를
종이에 표시하듯 드러내 사용자가 메커니즘을 스스로 설명하게 한다.
interaction-model:
entries:
concept: 격리 수준의 약속에서 시작한다.
symptom-debugger: 결과 70이라는 증상에서 후보 메커니즘을 좁힌다.
shared-core: {scenario-id: tx-lost-update-01, reducer: 두 입구가 같은 상태와 증거 순서로 합류한다.}
learning-loop: [Predict, Observe, Compare, Explain, Transfer]
evidence-sequence: [100, 120, 150, 70]
state-contract:
- 각 단계는 앞 단계 완료 후에만 열린다.
- 상태는 색뿐 아니라 텍스트와 형태로 구분한다.
- skip link는 route와 진행 상태를 바꾸지 않고 현재 main으로 이동한다.
honest-boundary: 고정 guided simulation이며 실제 로그·원격 DB·AI 장애 진단을 주장하지 않는다.
design-token-contract:
typography: {thesis: Korean-capable serif, evidence: monospace numeric annotation, body: Korean sans-serif system stack}
color: {paper: '#f3efe4', ink: '#1b201e', deep: '#202724', coral-observed: '#ad4031', accent-on-deep: '#ff8873', pending-on-deep: '#535c58', control-border: '#88877e'}
contrast-floor: {normal-text: '4.5:1', essential-control-boundary: '3:1'}
layout: {desktop: asymmetric editorial spread, mobile: single-column DOM order at 360px, verified-viewports: [360, 768, 1280]}
invariant-ids: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
acceptance-receipt-ref: exact-review-artifact:DES-DIRECTOR-20260718T151100Z:EXEC-CPO
approval-basis:
panel-id: DES-DIRECTOR-20260718T150500Z
panel-sha256: 0f5ae0e571d35c44392e18d1d07430167b950d94ad59973819458768867dad16
verdict: pass
revision-note: approved-direction 전용 resolver에 맞춰 selected/winner 참조를 hyeonworks 워크스페이스 상대경로로 정규화했다.
report-header:
bottom-line: >-
Ledger Studio revision 4를 최종 승인한다. 두 입구는 동일 Lost Update Lab으로 합류하며,
Predict→Observe→Compare→Explain→Transfer와 정직한 guided-simulation 경계를 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-r4-seven-lens-pass-and-normalized-immutable-refs}
risks:
- 세 번째 공개 주제 도입 시 scenario schema와 콘텐츠 파일 분리를 재검토한다.
- 실제 사용자 학습효과는 별도 제품 분석 전까지 주장하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T150500Z.report.yaml
grade: E3
note: exact seven-lens pass synthesis
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: revision-4 manifest and bound verification receipts
@@ -0,0 +1,90 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PLATFORM-20260718T121851Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PLATFORM
created-at: 20260718T121851Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: DES-PLATFORM
reviewer-run-id: cac14c7f6f176f94508730de72c5558f89165715d287f89229474ac6cc12eccd
lens: systematizability
verdict: revise
findings:
- finding-id: SYS-01
severity: major
area: "dist/app.js — scenario/state/router와 phase render 경계"
finding: >-
단일 scenario 객체와 pure reducer는 좋은 출발점이지만 다음 주제를 데이터만 바꿔 재사용할 수 있는
시스템은 아직 아니다. route는 어떤 #/lab/* 값도 동일 Lab으로 보내고, phase/action 집합은 Lost
Update에 고정되어 있다. 또한 100·120·70과 transfer 값, 선택지, 설명 문구가 scenario 객체와
renderHome·previewFolio·labBrief·compareView·transferView에 중복되어 있어 새 주제를 추가하면 상태,
라우팅, 템플릿, 콘텐츠를 함께 복제·수정해야 한다.
evidence: >-
app.js:1-72의 scenario/learningReducer, 78-88의 route, 103-178의 화면 함수가 동일 사실을 서로 다른
위치에 보유한다. scenario.transfer도 선언되어 있으나 transferView는 30·36·40과 정답을 다시
하드코딩한다.
required-revision: >-
다음 활성 주제를 만들기 전에 topic/scenario schema와 id 기반 registry를 정의하고, 공통 학습-loop
engine이 phase 콘텐츠·선택지·trace·비교값을 그 계약에서 읽도록 분리한다. orientation별 로컬 상태도
동일한 명시적 state 경계 안에 둔다.
- finding-id: SYS-02
severity: major
area: "dist/styles.css — token foundation과 반복 composite"
finding: >-
:root에는 역할 기반 색상과 최대 폭이 마련되어 있지만 spacing, type scale, line-height, stroke,
elevation, layout breakpoint는 대부분 raw literal이다. folio/note-ledger, 여러 mono label,
relations/clues/cause-row, loop-strip/progress가 같은 편집·ledger 문법을 별도 선언으로 반복하므로
후속 주제에서 조정이 분기될 가능성이 높다.
evidence: >-
styles.css:1-47에서 semantic color token은 일관되게 소비되지만 동일한 border, shadow, mono label,
row grid, 간격 값과 850px/480px breakpoint가 개별 selector에 결합되어 있다.
required-revision: >-
잠긴 editorial-evidence 인상은 유지하면서 spacing/type/stroke/elevation/breakpoint 토큰과
ledger-row, evidence-label, sheet, progress, value-comparison의 공통 recipe를 명명해 한 곳에서
변형 가능하게 만든다.
- finding-id: SYS-03
severity: strength
area: "core-flow.yaml, dist/app.js, dist/styles.css, 360/768/1280 previews"
finding: >-
재구성의 기반은 충분하다. paper/ink/muted/coral/focus 등 의미 기반 색상, 명시적 action guard를 가진
결정론적 reducer, 공통 values/button/boundary/comparison 패턴, 두 breakpoint의 단일-column 전환이
존재하며 세 preview에서 동일한 editorial/ledger 문법이 유지된다.
evidence: >-
core-flow.yaml의 deterministic-boundary와 파일 hash, app.js:1-69의 state transition,
styles.css:1-47의 semantic tokens/responsive rules, SHA가 결속된 360/768/1280 실제 렌더를 대조했다.
implication: >-
결함은 방향의 개념적 재선택이 아니라 데이터·상태·토큰 경계의 추출로 해결 가능하므로 blocking이
아닌 revise가 적절하다.
report-header:
bottom-line: >-
REVISE — Ledger Studio는 semantic color와 결정론적 학습 reducer라는 재사용 기반을 갖췄지만,
단일 Lost Update의 값·phase·콘텐츠·layout recipe가 코드에 결합되어 다음 주제를 일관되게 추가하기
전에 scenario registry와 공통 token/component 경계를 추출해야 한다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-winner-hash-source-and-three-viewport-render-inspection }
risks:
- "현재 구조로 MVCC·Deadlock·Cache stampede를 추가하면 route/reducer/render 복제와 콘텐츠 값 drift가 생길 수 있다."
- "색상 외 foundation token과 ledger composite가 추출되지 않으면 후속 화면의 type·spacing·border 규칙이 분기될 수 있다."
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "SHA 75f55418… source inspection: scenario, reducer, router, 모든 phase render의 재사용 경계 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "SHA 93f14936… source inspection: semantic color token과 반복되는 raw foundation/composite 규칙 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360px 실제 렌더에서 동일 editorial/ledger 패턴과 responsive collapse 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768px 실제 렌더에서 동일 pattern hierarchy 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280px 실제 렌더에서 shared sheet/value/entry/loop 문법 확인"
@@ -0,0 +1,149 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PLATFORM-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PLATFORM
created-at: 20260718T131443Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
target-prototype-manifest-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
target-prototype-manifest-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
reviewer-role-id: DES-PLATFORM
reviewer-run-id: 2336d0c343a10e89d7b2b419a9803c49a182646f7716ebf8dda1170857f0dc68
lens: systematizability
verdict: revise
system-assessment:
- boundary: deterministic-learning-reducer
verdict: pass
rationale: >-
learningReducer는 scenarioId로 registry를 조회하고 고정 action/phase 전이만 수행해 현재 5단계
학습 루프를 불필요한 runtime이나 범용 플랫폼 없이 재사용할 수 있다.
- boundary: scenario-registry-to-render-binding
verdict: revise
rationale: >-
route와 reducer는 id를 받지만 render, announcement, orientation은 module-level 기본 scenario를
사용하므로 registry에 다음 시나리오를 추가하는 것만으로는 해당 콘텐츠와 상태가 결속되지 않는다.
- boundary: foundation-tokens
verdict: pass
rationale: >-
paper/ink/state color, spacing, stroke, shadow, max-width와 evidence label 크기가 root token으로
모여 있고 360/768/1280 및 단계별 렌더에서 같은 기반을 유지한다.
- boundary: editorial-recipes
verdict: pass
rationale: >-
sheet, ledger-row, values, comparison, progress, choice, boundary가 반복 recipe로 실제 화면 전반에
재사용되며 다음 주제를 위해 별도 범용 컴포넌트 플랫폼을 먼저 만들 필요가 없다.
- boundary: abstraction-level
verdict: pass
rationale: >-
단일 registry와 순수 reducer라는 현재 추상화 수준은 적절하다. 수정은 active scenario 결속과
최소 콘텐츠 계약 완성에 한정할 수 있다.
findings:
- finding-id: SYS-R2-01
severity: High
blocking: false
area: scenario registry / active scenario resolution
summary: >-
registry와 reducer 사이에는 확장 seam이 생겼지만 render 계층이 default scenario에 고정되어
다음 scenario id를 실제 화면으로 끝까지 전달하지 못한다.
evidence:
- >-
dist/app.js:78-79는 scenario를 scenarioRegistry[defaultScenarioId]로 한 번 고정한다.
- >-
dist/app.js:155-161과 268-273은 registry의 다른 lab id를 인식하고 labState를 교체하지만,
dist/app.js:168-260의 atlas/home/orientation/phase render와 287-308의 announcement/orientation은
계속 기본 scenario를 읽는다.
- >-
dist/app.js:109-144의 reducer만 state.scenarioId의 active registry record를 사용한다. 따라서
다음 scenario의 state transition과 기본 Lost Update 화면이 서로 다른 record를 참조한다.
- >-
core-flow.yaml:46의 "registry-driven values/copy/choices" closure 주장과 실제 source가 일치하지 않는다.
impact: >-
다음 주제를 registry에 등록해 #/lab/<next-id>로 진입하면 data-scenario-id, atlas, 값, 선택지,
schedule 표와 피드백은 Lost Update를 표시하면서 reducer는 새 record로 전이한다. schedule 길이가
다르면 화면 cursor와 announcement가 어긋날 수도 있어 한 주제 추가가 안전한 데이터 작업이 아니다.
required-revision: >-
route/labState의 scenarioId에서 activeScenario를 한 번 해석해 모든 render helper, dispatch,
announcement에 명시적으로 전달한다. orientation state도 시나리오를 노출하는 경우 id별로 결속한다.
phase/reducer 계약은 유지하고 범용 plugin/runtime은 추가하지 않는다.
acceptance: >-
두 번째 최소 fixture id로 직접 lab route에 진입했을 때 id, atlas, values, schedule, hypotheses,
explanation, transfer와 announcement가 모두 그 fixture에서 나오고 기본 Lost Update flow가 그대로
통과하는 hash-bound browser test receipt를 남긴다.
- finding-id: SYS-R2-02
severity: Medium
blocking: false
area: scenario content contract / editorial templates
summary: >-
registry에 주요 값과 choices는 모였지만 shared templates 안에 Lost Update 전용 숫자·명칭·인과 문장이
남아 있어 다음 주제는 registry edit만으로 완성되지 않는다.
evidence:
- >-
dist/app.js:164-199는 Field note, Transaction Isolation/Lost Update, concept orientation과 홈 범위를
template literal에 직접 쓴다.
- >-
dist/app.js:224-248은 WRITE A=150, Delta +50, 설명 feedback, 재고 transfer feedback과 completion
principles를 직접 쓴다. registry 값으로 렌더하는 인접 영역과 경계가 섞여 있다.
- >-
preview.w360.png, preview.w768.png, preview.w1280.png와 state-previews는 sheet/ledger/value/progress
recipe의 시각 일관성은 증명하지만 모두 tx-lost-update-01 한 record뿐이라 콘텐츠 계약 확장을 증명하지 않는다.
impact: >-
다음 주제 추가 시 공통 view 함수를 여러 곳 수정해야 하며, 일부 숫자나 피드백만 기존 주제에서 남는
partial migration 위험이 있다.
required-revision: >-
실제 두 번째 fixture가 요구하는 최소 범위에서 header/atlas/orientation/compare evidence/feedback/
completion copy를 scenario record 또는 값에서 파생되는 formatter로 옮긴다. 모든 주제를 포괄하는
범용 schema를 선설계하지 않는다.
acceptance: >-
shared template의 Lost Update 전용 literal이 default record 밖에 남지 않고, 두 fixture의 phase별
snapshot 또는 DOM assertion이 서로 다른 copy/value를 검증한다.
receipt-bindings:
preview:
receipt-id: vr-1784380367-51a78e23c06f
receipt-sha256: 6e996418f85040bcf48a9354ad7488d9106e8b094a5f7ce8672a3aa30376b776
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
assertion-status: passed
interaction:
receipt-id: vr-1784380160-b25beb2fef58
receipt-sha256: b5dae4455e6a73ee5801fedc3034bf0b23628bb5e59c1e47576b7ba32d5285fa
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
assertion-status: passed
report-header:
bottom-line: >-
revise — exact winner ENG-FE-20260718T131305Z / bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674의
reducer와 token/editorial recipe는 적정 수준이지만 default scenario에 고정된 render·copy 경계 때문에
registry만으로 다음 주제를 안전하게 추가할 수 없다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-hash-bound-source-manifest-renders-and-receipts }
risks:
- >-
실제 두 번째 scenario fixture가 없으므로 실패의 정확한 런타임 모양은 source-level 경로 분석이며,
다음 주제의 콘텐츠 구조에 따라 필요한 최소 record 필드는 달라질 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: "winner id/SHA, manifest, preview·interaction receipt와 render refs의 정본"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "sha256 40876a12...; source/render hash manifest와 systematizability closure 주장"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "sha256 bbc82f68...; registry/reducer/render/announcement의 실제 active-scenario 경계"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "sha256 62fd9ea7...; root tokens와 shared editorial recipes"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "sha256 315eaa89...; sheet/ledger/value/progress recipe의 wide render"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/transfer.w360.png
grade: E3
note: "mobile phase render에서 동일 recipe의 재사용 확인"
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "preview vr-1784380367-51a78e23c06f와 interaction vr-1784380160-b25beb2fef58의 passed hash-bound receipts"
@@ -0,0 +1,129 @@
report-header:
bottom-line: >-
PASS — exact revision-3 target ENG-FE-20260718T135811Z에서 default 6-step record와
direct-route-only 4-step inventory fixture의 id·atlas·copy·value·schedule·hypothesis·
explanation answer·transfer·feedback·announcement가 하나의 active scenario를 통해
shared reducer/view에 끝까지 결속된다. 고정 5-phase 학습 계약만 공유하고 콘텐츠 차이는
두 registry record에 남긴 현재 추상화는 이 정적 prototype 범위에 비례하며 과하지 않다.
decision-needed: {needed: false, approver: null}
confidence:
value: Med
derived-from: exact-hash-must-read-source-inspection-plus-isolated-local-chrome-replay
risks:
- >-
scenario record shape는 정적 코드의 암묵 계약이다. 세 번째 record가 phase 수, actor 수,
explanation part 키를 바꾸는 시점에는 별도 schema validation이나 contract 확장이 필요하지만,
현재 두 bounded record의 통과를 막는 결함은 아니다.
- >-
inventory fixture는 registry 결속을 검증하는 direct-route-only test record다. 공개 콘텐츠의
확장성이나 실제 사용자 학습효과까지 입증하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: >-
sha256 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0;
exact target identity와 revision 3, browser receipt refs를 확인했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: >-
sha256 4bd59d70b8470263a84c3605db8f61bc88d86eef297dd0643f57365f300ace1b;
registry, scenarioId state, reducer, explicit render arguments, correctness lookup,
dispatch announcement binding을 직접 검사했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
command: node scripts/verify_flow.cjs
exit-code: 0
grade: E3
note: >-
prototype 임시 복제본에서 Chrome flow를 재실행해 default full loop와 별도 4-step fixture의
row count, 50/60/40 values, fixture-only ids/copy/answers, feedback, live announcement와 reset을 통과했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-fixture.png
grade: E3
note: >-
sha256 918b375e1bb8f4fb1b50e6f4eaa3d24b23609a9d004236d172f100c25312aa94;
fixture id·Inventory atlas·50/60/50 predict state·fixture copy가 한 화면에서 일치한다.
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PLATFORM-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PLATFORM
created-at: 20260718T140000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
reviewer-role-id: DES-PLATFORM
reviewer-run-id: 4a130950494abd2e560e3ab7b5a591b9ab6b501e61da3604373623d3e6baf5bd
lens: systematizability
verdict: pass
findings: []
review-basis:
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-PLATFORM-20260718T135944Z.pkg.yaml
context-package-sha256: 4a130950494abd2e560e3ab7b5a591b9ab6b501e61da3604373623d3e6baf5bd
independence: >-
지정 context package와 그 must-read만 판단 근거로 사용했으며 다른 lens review는 열람하거나
재사용하지 않았다.
binding-assessment:
- area: id-atlas-copy
result: pass
source-observation: >-
route가 유효 registry id를 labState.scenarioId로 초기화하고 renderLab/header/atlas/labBrief에
같은 scenario argument를 전달한다. 두 record의 atlas와 copy는 record 내부에 분리돼 있다.
browser-observation: >-
default는 tx-lost-update-01·Lost Update 문장·100/120/100을, fixture는
tx-lost-update-inventory-fixture·Inventory fixture 문장·50/60/50을 렌더했다.
- area: values-schedule-hypothesis
result: pass
source-observation: >-
initialLabState는 active record initial을 사용하고 ADVANCE_TRACE는 active.schedule 길이와
WRITE value를 사용한다. Predict choices와 Compare의 선택 label도 active.hypotheses에서 나온다.
browser-observation: >-
default 6 rows와 fixture 4 rows가 각각 끝까지 진행됐고 fixture에서는 fixture-shared-50,
A=70 다음 B=40, 기대 60/관찰 40만 나타나며 default A=150 증거가 섞이지 않았다.
- area: explanation-answer-transfer
result: pass
source-observation: >-
explanationField/transferView는 active record choices를 렌더하고 explanationCorrect와
transferCorrect는 state.scenarioId의 answer를 조회한다.
browser-observation: >-
default same-100/b-70/a-plus-50 및 lost-reservation과 fixture
same-50/b-40/a-plus-20 및 lost-use가 각각 해당 성공 feedback을 열고 complete로 전이했다.
- area: feedback-announcement
result: pass
source-observation: >-
dispatch는 reducer 전이 뒤 currentScenario를 다시 구하고 schedule event 및 active copy의
explain/transfer feedback으로 announcer를 갱신한다. 선택 변경은 submitted feedback을 reset한다.
browser-observation: >-
fixture 첫 advance는 실행 1/4와 A가 재고 50을 발화했고, fixture explanation/transfer 성공
문구가 status feedback과 announcer 양쪽에 나타났다. default 오류→수정 성공 flow도 통과했다.
- area: route-reset-isolation
result: pass
source-observation: >-
scenario route 변경 시 state를 해당 id로 재초기화하고 RESET은 현 scenarioId를 보존한다.
browser-observation: >-
fixture complete 뒤 reset이 Current 50과 fixture data-scenario-id를 유지했다.
abstraction-assessment:
verdict: proportionate-not-excessive
rationale: >-
두 frozen data records, 하나의 reducer, 하나의 phase별 view 집합이라는 최소 분리다. 별도
plugin/runtime/schema engine이나 범용 component hierarchy를 도입하지 않았고, 공통인 학습 loop만
공유했다. CSS도 spacing·color·stroke·type tokens와 sheet/value/progress/ledger recipes까지만 재사용한다.
deliberately-fixed-contract:
- Predict → Observe → Compare → Explain → Transfer의 5 phases
- A/B 두 actor와 세 explanation parts
- 공개 home/orientation은 default scenario, fixture는 direct-route-only
expansion-trigger: >-
향후 콘텐츠가 다른 phase 구조, actor cardinality 또는 explanation key set을 요구할 때만
record schema와 renderer contract를 확장한다.
browser-replay:
isolation: prototype 전체를 /tmp의 임시 디렉터리로 복제해 screenshot write가 원본에 닿지 않게 실행
command: node scripts/verify_flow.cjs
result: pass
output: >-
PASS prototype E2E: dual-entry, contained Observe, entry focus, Korean type,
scenario binding, causal loop, semantics and contrast
prototype-modified: false
residual-dissent: []
@@ -0,0 +1,89 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
tier: standard
identity:
artifact-id: DES-PLATFORM-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PLATFORM
created-at: 20260718T145000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviewer-role-id: DES-PLATFORM
reviewer-run-id: a21e644695cb706bb53b50622673bf1ac856552145a4bbb5948072a918d32da6
lens: systematizability
verdict: pass
findings:
- finding-id: SYS-R4-P01
severity: pass
area: bounded-repeatability
observation: >-
scenarioRegistry가 값·문구·선택지 ID·정답·전이 사례·실행 schedule을 record 단위로 묶고,
route에서 고른 scenarioId를 state와 명시적 render/dispatch 인자로 전달한다.
evidence:
- "기본 시나리오는 initial 100과 6단계 schedule, fixture는 initial 50과 4단계 schedule을 사용한다."
- "verify_flow.cjs는 두 시나리오의 Predict부터 Complete와 Reset까지 각 record의 값·문구·정답이 유지되는지 검사한다."
assessment: >-
공통 reducer와 view recipe를 재사용하면서 두 번째 record의 다른 schedule 길이와 답 집합까지
독립적으로 결속하므로, 단순 복제보다 반복 가능하고 현재 두-scenario 증거 범위 안에서 충분하다.
required-revision: null
- finding-id: SYS-R4-P02
severity: pass
area: token-and-recipe-reuse
observation: >-
색상·간격·stroke·shadow·label 크기는 CSS custom properties로 제한하고 sheet, values,
ledger row, progress, choice, boundary 같은 화면 recipe를 두 경로와 두 시나리오가 공유한다.
evidence:
- "styles.css의 root token은 시각 기반과 R4 contrast 경계를 분리하며 같은 selector recipe가 모든 Lab phase에 적용된다."
- "app.js는 phase별 view만 두고 별도 component framework나 범용 theme engine을 만들지 않는다."
assessment: >-
변경점이 token 또는 좁은 recipe에 모이지만 제품 전체 design system이나 추상 component 계층을
선행 구축하지 않아, 디자인 방향 prototype에 맞는 최소 시스템 경계다.
required-revision: null
- finding-id: SYS-R4-A01
severity: advisory
area: expansion-threshold
observation: >-
scenario record의 필수 필드는 런타임 schema가 아니라 현재 두 record의 구조로 암묵적으로 정의되고,
registry·reducer·render 함수는 하나의 app.js에 함께 있다.
evidence:
- "initialLabState와 여러 view가 scenario.copy 및 answer 필드의 존재를 직접 전제한다."
- "현재 제품 범위는 하나의 활성 딥다이브와 direct-route-only 결속 fixture로 명시돼 있다."
assessment: >-
현재 범위에서는 오히려 검증 schema, plugin loader, backend, generic content runtime을 추가하는 편이
과설계다. 세 번째 공개 주제 또는 Lost Update와 다른 학습 구조를 넣을 때 누락 필드나 반복 수정이
실제로 나타나면 그때 schema 검증과 파일 분리를 도입하는 것이 적절하다.
trigger-for-revisit: "세 번째 production scenario, 다른 phase 구조, 또는 동일 변경의 2회 이상 중복 수정"
required-revision: null
report-header:
bottom-line: >-
PASS — R4는 registry + shared reducer/view + 제한된 CSS token/recipe로 두 시나리오의 반복 가능성을
증명했고, 범용 runtime·backend·framework를 선행하지 않아 현재 단일 활성 딥다이브 범위에 비례한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-winner-source-inspection-and-bounded-two-scenario-E3-evidence}
risks:
- >-
두 record의 통과는 현재 구조의 결속을 보여주지만, 다른 학습 단계가 필요한 세 번째 실제 주제까지
일반화됐음을 증명하지는 않는다.
- >-
app.js 단일 파일은 현재 prototype에는 단순하지만 공개 주제가 늘면 변경 충돌점이 될 수 있으므로
SYS-R4-A01의 확장 임계점에서 다시 판단해야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: "exact winner SHA와 revision-4 browser/receipt 결속"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "revision 4 shared-core, fixture, closure, verification 범위"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "registry, reducer, explicit scenario binding과 제한된 runtime 경계의 직접 검사"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "token 및 shared visual recipe의 직접 검사"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
grade: E3
note: "기본 6단계와 독립 4단계 fixture의 full-flow assertion 직접 검사"
@@ -0,0 +1,65 @@
report-type: workflow-artifact
artifact-kind: pre-direction-framing
artifact-version: 1
tier: standard
identity:
artifact-id: DES-PROD-20260718T111439Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-discovery
producer-role-id: DES-PROD
created-at: 20260718T111439Z
attempt-id: 1
payload:
brief:
problem: >-
개념 기반과 증상 기반 두 출발점을 명확히 보여주면서도 두 제품이 아니라 하나의 Lost Update
학습 코어로 합류한다는 사실을 첫 화면과 실험 흐름에서 증명해야 한다.
audience: "기술 개념을 부분적으로 알거나 실제 이상 현상만 알고 있는 개발자"
success: >-
첫 방문자가 10초 안에 사이트 목적·두 출발점의 차이·같은 Lab으로 합류한다는 사실을 이해하고,
키보드와 360px 환경에서도 Transfer까지 완주한다.
representative-screen: dual-entry-shared-lab
experience-constraints:
- "두 portal은 orientation만 다르고 tx-lost-update-01과 reducer를 공유한다."
- "홈에 '두 입구, 하나의 Lost Update Lab'을 명시한다."
- "증상 경로는 진단·원인 확정이 아니라 가능한 메커니즘을 좁히는 교육용 단서다."
- "Atlas 정체성은 짧은 관계 경로로만 표현하고 큰 가짜 지도를 만들지 않는다."
- "대표 화면에서 실제 학습 깊이의 증거인 값·순서·예측·인과를 미리 보여준다."
- "두 세션과 충돌은 색뿐 아니라 이름·패턴·형태로 구분한다."
direction-input-brief:
path: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
sha256: 975a7713b1837576173aee1d9a349bb68afd652ed9d1166fd9d5efc39059d9b4
frozen: true
divergence-axes:
- "전문 기술 저널처럼 읽는 편집형 흐름 vs 신호를 추적하는 계측형 흐름"
- "차분한 인과 기록 vs 실시간 상태 추적 vs 단계별 현장 매뉴얼"
- "여백 중심 세로 리듬 vs 고밀도 rail topology vs 굵은 모듈형 블록"
- "세리프+모노 편집 음성 vs 산세리프+numeric 계측 음성 vs 압축 display+humanist 안내 음성"
method-execution:
role-id: DES-PROD
method-id: pre-direction
contract-sha256: 1c62d7fb64879275e5610d65d29eeb88d3e841042ef5f6f991ff725442c614f3
step-results:
- {step-id: frame-brief, status: completed, output-binding: current-artifact}
- {step-id: discover, status: completed, output-binding: current-artifact}
- {step-id: author-input-brief, status: completed, output-binding: current-artifact}
decisions:
- decision-id: representative-surface
selected: dual-entry-shared-lab
alternatives: [dual-entry-shared-lab, merged-lab-only]
report-header:
bottom-line: >-
발산 대상은 단순 홈 색상 변형이 아니라 두 출발점과 공통 Lab의 관계를 표현하는 전체 시각·상호작용
문법이다. 세 방향은 같은 제품 계약을 서로 다른 정신 모델로 실제 구현한다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: accepted-product-decision-and-frozen-brief }
risks:
- "두 portal을 강하게 분리하면 shared-core 메시지가 약해질 수 있다."
- "실험 미리보기의 데이터 밀도가 첫 방문자에게 과부하가 될 수 있다."
evidence:
- source-uri: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
grade: E3
note: "accepted decision을 사용자·접근성·플랫폼 제약으로 동결한 brief"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: "HUMAN-001 accepted Dual Portal product decision"
@@ -0,0 +1,78 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PROD-20260718T121036Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PROD
created-at: 20260718T121036Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: DES-PROD
reviewer-run-id: hyeonworks-vnext-v1-direction-review-product-fit-20260718T1211Z
lens: product-fit
verdict: revise
findings:
- severity: major
area: "Home preview and shared Lab / Predict"
evidence: >-
The home preview exposes Observed 70 and the write order "A writes 150 / B writes 70" before either
entry is chosen. The shared Lab then repeats that both sessions read the same initial value and write
in A-then-B order before Predict asks for the final value. This makes 70 available by recall rather
than prediction, and is especially tautological for the symptom entry whose starting clue is already
"expected 120, observed 70."
action: >-
Preserve one shared Lab but change Predict to a causal hypothesis that remains unresolved after both
orientations—for example, which read/write relationship could make a successful update disappear.
Keep the full write trace and resulting 70 behind Observe, or reduce the home folio to the question
and input facts needed to form that hypothesis.
- severity: major
area: "Shared Lab / Explain and completion claim"
evidence: >-
Compare supplies the full same-read → independent-compute → last-write-overwrite explanation. Explain
can then be passed by selecting that same prewritten sentence; the learner's one-sentence explanation
is optional and is neither required nor used by the reducer. Nevertheless completion states that the
learner can now explain 70 causally. The implemented gate therefore demonstrates recognition, not the
product's promised ability to articulate the mechanism.
action: >-
Require a compact constructed explanation before completion, such as ordering the three causal links
or filling explicit read-basis, overwritten-write, and lost-change fields. Base completion wording on
that observable task, while keeping the free-form reflection optional if it cannot be evaluated
honestly in this browser-local prototype.
report-header:
bottom-line: >-
REVISE — the prototype clearly delivers two orientations into one deterministic Lost Update Lab and
represents all five named stages, but it reveals the predicted result before Predict and treats recognition
of a supplied explanation as proof of causal articulation; those gaps weaken the core deep-mechanism
learning promise without requiring a direction change.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-hash-bound-source-and-render-inspection-without-learner-outcome-evidence
risks:
- >-
Learners may complete Predict by recalling the already displayed 70, so completion data could be mistaken
for evidence of a formed causal hypothesis.
- >-
The completion statement may overstate what the prototype has observed because the required Explain
interaction only verifies selection of a supplied answer.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "Exact winner artifact ENG-FE-20260718T120840Z; live SHA-256 matched the assigned target hash."
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
grade: E3
note: "Selected Ledger Studio rationale and locked product invariants used as the comparison contract."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "Direct source inspection of both orientations, shared reducer state, and all five Lab phase gates."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "Direct desktop render inspection of the product promise, two entries, shared-Lab marker, and exposed folio trace."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "Direct mobile render inspection confirming the same promise and pre-entry result/trace disclosure."
@@ -0,0 +1,54 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PROD-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PROD
created-at: 20260718T131443Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: DES-PROD
reviewer-run-id: db69cd61af060c50804e694ae541d0106551b2025eb654b6947428de4e983bce
lens: product-fit
verdict: pass
findings: []
report-header:
bottom-line: >-
PASS — revision 2 turns Predict into an unresolved causal hypothesis before Observe, requires learners to
construct the three causal elements before Transfer, blocks incorrect constructions in the live flow, and
limits completion to exactly those observed tasks; the two orientations still converge on one five-stage Lab.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-winner-source-state-renders-and-live-browser-flow-without-learner-outcome-evidence
risks:
- >-
This verdict confirms product-promise-to-interaction alignment, not learning efficacy; comprehension,
retention, and transfer with actual developers remain unmeasured.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: "Exact revision-2 winner ENG-FE-20260718T131305Z; live SHA-256 matched the assigned target hash."
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
grade: E3
note: "Selected Ledger Studio product rationale and five locked invariants used as the review contract."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "Hash-bound revision-2 manifest defining the shared causal-hypothesis learning loop and completion boundary."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "Direct source inspection confirmed shared scenario state, causal Predict, three-part Explain gate, Transfer gate, and scoped completion copy."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "Direct inspection of Predict, Compare, Explain, Transfer, and Complete renders at 360 and 1280."
- command: node scripts/verify_flow.cjs
exit-code: 0
grade: E3
note: >-
Re-run from an exact /tmp copy to avoid modifying the prototype; verified both entries, shared core,
wrong-answer blocking, correct constructed explanation, transfer, scoped completion, and reset.
@@ -0,0 +1,164 @@
report-header:
bottom-line: >-
PASS — exact Revision 3 winner ENG-FE-20260718T135811Z는 개념·증상 두 진입을 같은
Lost Update Lab에 합류시키고, 구체 write 순서를 Predict 뒤에 공개한 다음
Predict → Observe → Compare → 세 요소 Explain → 새 사례 Transfer를 실제 상태 gate로
강제한다. Complete가 구성·전이 통과만 기록하도록 한계를 명시하므로, 한 메커니즘을
증거로 이해시키려는 제품 약속과 prototype이 관찰하는 학습 신호가 정합한다.
decision-needed: {needed: false, approver: null}
confidence:
value: Med
derived-from: exact-target-hash-bound-source-and-360-1280-state-render-inspection
risks:
- >-
must-read에는 실사용자 연구·행동 데이터·학습 전후 평가가 없으므로, 이 pass는 실제
학습효과나 전문가 수준 도달을 인증하지 않고 prototype 내부의 약속-흐름-완료조건
정합만 판정한다.
- >-
tx-lost-update-inventory-fixture는 shared engine 결속을 확인하는 direct-route fixture이며,
두 번째 공개 딥다이브나 콘텐츠 폭의 증거로 보지 않았다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: >-
live file SHA-256 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0;
exact Revision 3 winner identity, core-flow/app hashes, state-preview set과 검증 범위를 결속한다.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
grade: E3
note: >-
Ledger Studio의 deep-mechanism 제품 논리와 LI-DUAL-ENTRY-SHARED-CORE,
LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY를 판정 기준으로 제공한다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: >-
Revision 3의 route, shared state, five-phase learning-evidence와 제한된 completion
claim을 명세한다(SHA-256 bd2bf67bddde92ae4fa0d329bd21e078625aa343ba59b78fec75f248111d22a1).
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: >-
reducer transition, hidden/pending Observe rows, three-part explanation correctness,
transfer correctness와 bounded Complete copy의 실제 구현을 확인했다
(SHA-256 4bd59d70b8470263a84c3605db8f61bc88d86eef297dd0643f57365f300ace1b).
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: >-
predict, observe, compare, explain, transfer, complete의 360px·1280px 총 12개 렌더를
직접 대조해 단계 위계와 사용자에게 노출되는 주장 범위를 확인했다.
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PROD-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PROD
created-at: 20260718T140000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
reviewer-role-id: DES-PROD
reviewer-run-id: 1b92e14079e2752bac1d8c62f6d1ab73ee8d33aef646f22c0c76fe134f27c988
lens: product-fit
verdict: pass
assessment-scope: >-
고객 문제가 이해 가능한 흐름으로 해결되는지와 deep-mechanism 약속이 observable
learning gates에 결속되는지만 평가했다. 사용성·시각완성도·시스템화·시장성·구현성의
독립 verdict는 내리지 않았다.
product-fit-checks:
- check-id: PF-R3-C01
criterion: 두 출발점이 orientation만 달리하고 동일한 메커니즘 학습으로 합류하는가
result: pass
evidence:
- >-
app.js renderConcept/renderSymptom은 모두 #/lab/tx-lost-update-01로 이동하고,
render()는 route scenario id와 initialLabState를 동일 shared reducer에 결속한다.
- >-
core-flow.yaml shared-core.entry-invariant가 두 orientation의 동일 id 기반 Lab 합류를
명시한다.
- check-id: PF-R3-C02
criterion: 관찰 전에 원인 가설을 고정하고 이후 증거로 검증하는가
result: pass
evidence:
- >-
app.js previewFolio는 write order를 hidden으로 두고 predictView는 read/write 관계
가설만 먼저 고정하며, COMMIT_PREDICTION 뒤에만 Observe로 전이한다.
- >-
observeView는 미래 행을 대기/다음 단계로 숨기고 schedule을 한 단계씩 공개한 뒤에만
Compare 진입을 허용한다.
- check-id: PF-R3-C03
criterion: deep-mechanism 약속을 뒷받침하는 관찰 가능한 Explain·Transfer gate가 있는가
result: pass
evidence:
- >-
Compare가 same read basis, final write order, lost delta를 노출한 뒤 Explain은
read basis·final write·lost change 세 요소를 별도로 제출하게 하고 정확한 세 id가
모두 맞아야 Transfer로 진행시킨다(app.js explanationCorrect/CONTINUE_TO_TRANSFER).
- >-
Transfer는 30→expected 36/observed 40의 새 재고 사례에서 사라진 변화를 다시
식별해야 하고, transferCorrect를 통과해야만 Complete가 된다.
- >-
360px·1280px state-previews에서 Compare → Explain → Transfer → Complete의 동일
학습 위계와 과제 내용이 확인된다.
- check-id: PF-R3-C04
criterion: 완료 기록이 실제로 관찰한 신호보다 넓은 능력을 주장하지 않는가
result: pass
evidence:
- >-
completeView와 complete state renders는 자유 서술 능력·실제 장애 진단을 증명하지
않는다고 명시하고, 통제된 시나리오의 세 인과 요소 구성과 전이 통과만 기록한다.
- >-
guided scenario boundary는 특정 DB 동작이나 실제 장애 원인 확정을 반복해서 배제한다.
findings:
- finding-id: PF-R3-01
severity: informational
blocking: false
status: satisfied
area: end-to-end learning journey
summary: >-
두 entry가 orientation 차이를 보존하면서 같은 scenario와 reducer로 합류해,
concept-first와 symptom-first 사용자가 하나의 causal evidence loop를 완주한다.
evidence-refs:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml#shared-core
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js#renderConcept-renderSymptom-render
product-impact: >-
고객이 가진 출발 단서와 무관하게 제품의 핵심 가치인 메커니즘 이해로 빠지지 않고
연결된다.
- finding-id: PF-R3-02
severity: informational
blocking: false
status: satisfied
area: Predict-to-Complete learning gates
summary: >-
구체 실행 순서를 미리 노출하지 않은 Predict, 단계별 Observe, evidence Compare,
세 요소 Explain, 새 수치 Transfer가 순차 correctness gate로 결속돼 있다.
evidence-refs:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js#learningReducer
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js#compareView-explainView-transferView
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
product-impact: >-
단순 결과 회상보다 read basis → final write → lost change 관계를 관찰·대조·재적용하는
행동을 완료조건으로 삼아 deep-mechanism 약속을 화면 흐름으로 만든다.
- finding-id: PF-R3-03
severity: informational
blocking: false
status: satisfied-with-evidence-boundary
area: completion claim
summary: >-
완료 문구가 자동 검증된 구성·전이 신호만 말하고 자유 서술·실제 장애 진단·특정 DB
보장을 제외해, prototype 증거보다 큰 학습효과를 주장하지 않는다.
evidence-refs:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml#learning-evidence
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js#completeView
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/complete.w360.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/complete.w1280.png
product-impact: >-
guided learning product와 실제 진단 도구의 경계를 지켜 신뢰를 해치지 않으면서도,
현재 핵심 흐름이 증명한 가치를 정확히 전달한다.
required-revisions: []
residual-evidence-gap: >-
실제 사용자 학습효과와 전문가 수준 도달은 이 prototype audit의 근거 범위 밖이며 후속
사용자 연구가 필요하다. 현재 UI도 그 결과를 주장하지 않으므로 product-fit revision
사유로 승격하지 않았다.
@@ -0,0 +1,89 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-PROD-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-PROD
created-at: 20260718T145000Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
lens: product-fit
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-PROD-20260718T144800Z.pkg.yaml
context-package-sha256: b0a5758b357ea46d16d64ed700b44c3ec365c18979c93a4b0c257db83575081c
reviewer-role-id: DES-PROD
reviewer-run-id: 0cf87e457984c59af5b263a50024f493fa9caaf0fcf630273503befaf4033dd4
verdict: pass
findings: []
assessment:
promise-fit: >-
활성 범위를 Lost Update 한 메커니즘으로 명시적으로 제한하고, 정의 열람이 아니라
Predict → Observe → Compare → Explain → Transfer를 완주하게 하므로 “기술을 깊이
학습한다”는 현재 제품 약속과 직접 맞는다.
dual-entry-fit: >-
concept 경로는 개념 관계를, symptom 경로는 기대 120/관찰 70과 단서를 출발점으로
제공하지만 둘 다 같은 tx-lost-update-01과 같은 reducer 상태의 Lab으로 합류한다.
debugger 방식은 실제 진단 도구로 확장되지 않고 후보 메커니즘을 통제 실행으로
검증하는 교육적 입구로 유지된다.
observable-learning-gates: >-
관찰 전에 read/write 원인 가설을 고정하고, 6단계 실행에서 공유값 변화를 직접
진행한 뒤 READ/WRITE/Delta 증거와 대조한다. Explain은 read 기준·마지막 write·사라진
변화를 세 부분으로 구성해 제출하게 하며, Transfer는 30→36 기대/40 관찰의 새 재고
사례에서 사라진 −4를 식별하게 하므로 단순 결과 회상보다 강한 메커니즘 게이트다.
boundary-fit: >-
orientation, Lab brief, completion 모두 고정 guided scenario임을 반복해 밝히고 실제
로그 분석·특정 DB 보장·장애 원인 확정·자유 서술 능력·사용자 학습효과를 주장하지
않는다. 따라서 debugger 진입의 매력과 현재 증거 범위 사이의 신뢰 경계가 유지된다.
revision-4-impact: >-
R4의 대비 보정과 skip-link 상태 보존은 학습 모델을 바꾸지 않으면서 작은 evidence
label과 선택 경계의 판독성, 진행 중 Lab 상태의 연속성을 보강한다. exact winner에
결속된 browser receipt는 두 scenario와 전 상태 흐름이 실행 가능함을 뒷받침한다.
non-blocking-limitations:
- >-
Predict 선택지는 개념·증상 orientation의 단서와 가까워 평가 변별력은 제한적이다.
그러나 이후의 단계별 실행, 세 부분 인과 구성, 새로운 수치 사례 전이가 보완하므로
현재 core-flow 승인 차단 사유는 아니다.
- >-
자동 통과 기록은 실제 사용자의 장기 기억, 자유 서술, 현업 장애 진단 능력을
입증하지 않는다. 해당 효과를 주장하려면 별도의 사용자 연구가 필요하다.
evidence-assessment:
- claim: dual-entry가 하나의 메커니즘 학습 core로 합류한다.
grade: E3
source-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
basis: scenarioRegistry, route, initialLabState, learningReducer와 두 orientation의 동일 Lab 링크
- claim: 깊이 학습 약속이 관찰 가능한 다섯 단계 게이트로 구현됐다.
grade: E3
source-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
basis: learning-evidence와 exact R4 browser-e2e coverage
- claim: Predict부터 Complete까지 360/1280에서 동일한 causal ledger 위계가 유지된다.
grade: E3
source-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
basis: 열두 상태 렌더의 독립 육안 대조
report-header:
bottom-line: >-
PASS — R4는 concept-first와 symptom-first debugger 입구를 같은 Lost Update Lab에
합류시키고, 가설·실행·증거 대조·인과 구성·새 사례 전이로 깊이 학습 약속을 실제
상호작용에 결속한다. 제품 효과를 과장하지 않는 guided-scenario 경계도 일관된다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-r4-source-state-renders-and-bound-browser-receipt }
risks:
- Predict 선택의 평가 변별력은 orientation 단서 때문에 제한적이다.
- 실제 사용자 학습효과와 현업 진단 전이는 아직 검증되지 않았다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: exact R4 winner와 hash-bound preview/browser/CSS receipts
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: dual-entry shared core, five-step learning evidence, honest completion boundary
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: scenario registry, reducer, orientation 합류와 실제 gate 구현
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: Predict·Observe·Compare·Explain·Transfer·Complete의 360/1280 렌더 확인
@@ -0,0 +1,83 @@
report-type: workflow-artifact
artifact-kind: comparative-divergence-audit
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T113705Z-1
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-divergence
producer-role-id: DES-VISUAL
created-at: 20260718T113705Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
divergence-charter-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T111440Z-1.report.yaml
divergence-charter-sha256: 24e3f75377c8a255664a7487e81269aa3639819b00685756f26fecb60a5b8e78
direction-set-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T113705Z.report.yaml
direction-set-sha256: ff7384a6a4977cd0bff7f0a19e4a5b0611010c287a80f9a230cca9566c7613d5
reviewer-role-id: DES-VISUAL
reviewer-run-id: hyeonworks-vnext-v1-direction-comparison-audit-20260718T1152Z
verdict: pass
pairwise-comparisons:
- directions: [ledger-studio, signal-trace]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
primitive-collisions: []
observed-separation: >-
Ledger는 큰 serif 논제와 오른쪽 folio에서 아래 2열 entry로 읽는 인쇄형 spread이고,
Signal은 두 input band가 merge bus와 full-width trace rail로 수렴하는 계측 구조다.
색을 제거해도 folio/rule/marginalia와 band/bus/probe/hatch가 겹치지 않는다.
- directions: [ledger-studio, field-manual]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
primitive-collisions: []
observed-separation: >-
Ledger는 자율적인 편집 읽기와 causal folio를 중심에 두지만 Manual은 Module 01 cover,
vertical instruction rail, A/B 번호판과 0105 procedure strip으로 행동 순서를 지시한다.
serif folio와 condensed-numbered protocol은 시선 경로·위계·조작 기대가 다르다.
- directions: [signal-trace, field-manual]
differing-axes: [layout-topology, navigation-model, typography-voice, imagery-strategy, motion-model, dominant-primitives]
primitive-collisions: []
observed-separation: >-
Signal은 입력 채널과 실행 시간을 연속 rail로 추적하고 current segment 강조를 전제로 한다.
Manual은 불연속 numbered checkpoint와 rule block을 순서대로 완료한다. channel geometry,
tabular trace, hatch와 module plate, procedure cell, field stamp가 구조적으로 분리된다.
full-size-previews:
- direction-id: ledger-studio
ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/ledger-desktop.png
sha256: 8b898b688836f325d40a204ae241989c09672d33e683596b56963fdb487f226c
- direction-id: signal-trace
ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/signal-desktop.png
sha256: 072e4402128ea6043037a20bc6ab4a5a1dc9e0f6629547401f1ca1c5c2b1d0f5
- direction-id: field-manual
ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/manual-desktop.png
sha256: 861270acfbfcd3bdc5b541e6a8613d13c20658d933666e761a45e53a4dcbe854
responsive-previews:
- {direction-id: ledger-studio, ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/ledger-mobile.png, sha256: 70ce29b23854d9811605cf547d1878fe21d9d02a78623847a1cbb543603c0760}
- {direction-id: signal-trace, ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/signal-mobile.png, sha256: 00bab0cbb8b13bc716c9358efadee7e5490941ceb8734241b9ae8af945002ac7}
- {direction-id: field-manual, ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/manual-mobile.png, sha256: 0459010168f0098958eddae74448c877c022fa980263bc8c37052647b1dac575}
shared-product-invariants:
- "개념·증상 두 entry"
- "하나의 tx-lost-update-01 Lab"
- "Predict→Observe→Compare→Explain→Transfer"
- "guided-scenario 경계"
reference-overlap-audit:
result: pass
maximum-name-overlap-per-pair: 0
blocking-findings: []
tradeoffs:
ledger-studio: "전문성과 인과 기록이 가장 강하지만 첫 실행 전 텍스트가 가장 많다."
signal-trace: "시간적 인과 판독이 가장 빠르지만 교육 도구보다 monitoring UI로 읽힐 위험이 있다."
field-manual: "절차 실행 가능성이 가장 강하지만 cover의 시각 비중이 marketing poster로 오인될 수 있다."
report-header:
bottom-line: >-
PASS — 세 방향은 모든 pair에서 6개 조형 축이 실제 1280/390 렌더로 분리되며 exclusive primitive
충돌과 reference name 중복이 없다. 공통 요소는 제품 불변식뿐이므로 단일 방향 선택이 가능하다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-hash-bound-source-and-browser-renders }
risks:
- "스크린샷 비교는 사용자 이해도·학습 효과를 증명하지 않으므로 선택 효과 확신은 Med로 제한한다."
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/comparison.png
grade: E3
note: "세 방향 desktop/mobile contact sheet"
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784375368-f87086d0b444: preview 크기와 source/concept/PNG hash verification"
@@ -0,0 +1,154 @@
report-type: workflow-artifact
artifact-kind: direction-set
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T113705Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-divergence
producer-role-id: DES-VISUAL
created-at: 20260718T113705Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
divergence-charter-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T111440Z-1.report.yaml
divergence-charter-sha256: 24e3f75377c8a255664a7487e81269aa3639819b00685756f26fecb60a5b8e78
representative-screen:
id: dual-entry-shared-lab
kind: first-entry
description: >-
개념·증상 두 출발점, 하나의 tx-lost-update-01 Lab, 짧은 Atlas path, 공통 학습 루프와
guided-scenario 경계를 첫 화면에서 이해하고 어느 경로로든 학습을 시작하는 화면.
comparison-preview:
receipt-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/comparison.png
receipt-sha256: da8d10b579e97e17a087ca1490531e1b3f8de7a7a327919ebeb9d6d16426f8cd
verification-receipt-id: vr-1784375368-f87086d0b444
gallery-path: hyeonworks/design-direction/hyeonworks-vnext-v1/previews
representative-screen-id: dual-entry-shared-lab
viewports: [390, 1280]
shots:
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/ledger-desktop.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/ledger-mobile.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/signal-desktop.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/signal-mobile.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/manual-desktop.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/previews/manual-mobile.png
directions:
- id: ledger-studio
producer-role-id: DES-VISUAL
producer-run-id: hyeonworks-vnext-v1-direction-divergence-ledger-20260718T1135Z
context-package-id: 52ef4f1c5e433157bc23eb801d3fb122923d7f50d667af41019be3b4b1489c83
concept-artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/ledger-studio/concept.yaml
reference-cluster:
- name: Scientific lab notebook
signal: "가설·관찰·결과가 rule과 여백 주석으로 이어지고 사실과 해석이 분리된다."
why-relevant: "Predict부터 Explain까지를 수동 독서가 아닌 검증 기록으로 만든다."
- name: Long-form technical journal
signal: "큰 serif 논제, 짧은 dek, 넓은 여백과 folio가 한 주제의 읽기 깊이를 만든다."
why-relevant: "콘텐츠 수를 과장하지 않고 활성 딥다이브 하나의 전문성을 먼저 전달한다."
- name: Double-entry ledger
signal: "Initial·Expected·Observed 숫자가 고정 열과 기준선 위에 정렬된다."
why-relevant: "100·120·70과 두 세션의 쓰기를 같은 장부에서 감사하게 한다."
visual-thesis: >-
Lost Update를 장애 콘솔이나 카드 모음이 아니라 가설과 관찰값을 대조하는 편집형 기술 저널로
보여준다. 두 entry는 orientation에서만 분리되고 merge rule 아래 같은 causal ledger로 합류한다.
layout-grammar: >-
비대칭 editorial spread, 오른쪽 ledger folio, 두 개의 orientation column, 하나의 merge rule과
단일 학습 loop. 모바일은 DOM 순서를 유지한 한 열로 재배치한다.
interaction-grammar: >-
native anchor 두 개가 같은 #shared-lab으로 이동한다. skip link, focus-visible, reduced-motion을
제공하고 이후 실행은 키보드 가능한 단일 Predict→Transfer 흐름으로 확장한다.
typography-token-direction: >-
논제는 Georgia 계열 serif, 본문은 neutral system sans, id·값·evidence는 mono. paper/ink 바탕에서
coral은 observed 결과에만 제한하고 rule은 인과·비교 경계에만 쓴다.
primitive-inventory: [entry-column, causal-ledger, evidence-margin, merge-rule, ledger-folio, annotated-value]
reference-board-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/ledger-studio/concept.yaml
reference-board-sha256: d402206b77e2e1af6642c74a453a34fd107d1e91d10bf247802129a71f04f0dd
full-size-preview-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/ledger-desktop.png
full-size-preview-sha256: 8b898b688836f325d40a204ae241989c09672d33e683596b56963fdb487f226c
coded-slice: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/ledger-studio/index.html
coded-slice-sha256: ad92b3c6676292267ea590d1d96e789a4d978e42d640e97c779c8846b314b5da
- id: signal-trace
producer-role-id: DES-VISUAL
producer-run-id: hyeonworks-vnext-v1-direction-divergence-signal-20260718T1135Z
context-package-id: f2a89ef290b57ed34610b08e30b2a23d07e7244fec0991de81d61ca157d8ccf6
concept-artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/signal-trace/concept.yaml
reference-cluster:
- name: Railway junction schematic
signal: "두 입력선이 이름 붙은 junction에서 하나의 선로로 합류한다."
why-relevant: "개념·증상 진입의 차이와 합류 후 하나의 Lab이라는 구조를 직접 설명한다."
- name: Logic analyzer timing sheet
signal: "공통 시간축에 채널별 read·compute·write 상태를 행으로 정렬한다."
why-relevant: "동시 실행의 선후 관계와 마지막 쓰기의 overwrite를 빠르게 비교하게 한다."
- name: Calibration instrument panel
signal: "숫자 probe와 짧은 역할 label이 장식 없이 값을 비교한다."
why-relevant: "Initial 100·Expected 120·Observed 70의 차이를 계측값처럼 판독하게 한다."
visual-thesis: >-
두 입력 단서를 밝은 계측 band로 분리하고 merge bus에서 하나의 Lab으로 수렴시킨 뒤,
동일 초기값을 읽고 150과 70을 쓰는 과정을 단일 transaction trace로 판독하게 한다.
layout-grammar: >-
dual input bands→center merge bus→full-width shared Lab→trace rail→common loop 구조.
모바일은 step→A→B 순서로 선형화하고 DOM 읽기 순서를 보존한다.
interaction-grammar: >-
두 native entry가 같은 shared target을 참조하며 합류 후 하나의 trace만 존재한다. 세션은
circle/diamond·label·hatch로 중복 부호화하고 reduced-motion에서는 굵기와 패턴으로 대체한다.
typography-token-direction: >-
precise grotesk sans와 tabular mono 숫자/신호 label. 밝은 계측 바탕에서 blue=A,
red+hatch=B/overwrite, green=merge로 제한하며 색 단독 의미 전달을 금지한다.
primitive-inventory: [entry-band, merge-bus, trace-rail, signal-stamp, conflict-hatch, value-probe]
reference-board-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/signal-trace/concept.yaml
reference-board-sha256: 91373c402d4708774f5385647b84a8393e440796ba1add1b8242b2686bbcaf44
full-size-preview-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/signal-desktop.png
full-size-preview-sha256: 072e4402128ea6043037a20bc6ab4a5a1dc9e0f6629547401f1ca1c5c2b1d0f5
coded-slice: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/signal-trace/index.html
coded-slice-sha256: 0e588d75ae7e4615021d20f65802a4d2b2743c072c9f40c4a301be28b5de8771
- id: field-manual
producer-role-id: DES-VISUAL
producer-run-id: hyeonworks-vnext-v1-direction-divergence-manual-20260718T1145Z
context-package-id: eedcf6c839f69f3df7a30e7ea18b52ed5be3136c2699a2f7fe183eb27e877b30
concept-artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/field-manual/concept.yaml
reference-cluster:
- name: Aircraft quick-reference procedure
signal: "행동 순서와 경계 조건을 굵은 단계 번호와 짧은 imperative로 분리한다."
why-relevant: "공통 학습 루프를 읽는 설명이 아니라 실행할 프로토콜로 만든다."
- name: Industrial field service manual
signal: "module 번호·revision·적용 범위를 좁은 metadata rail과 rule block으로 구분한다."
why-relevant: "활성 딥다이브 하나를 Module 01로 정직하게 표현하고 교육 범위를 명시한다."
- name: Swiss instructional poster
signal: "비대칭 대형 숫자와 고정 grid가 읽기·행동 주행 방향을 만든다."
why-relevant: "Entry A/B와 합류 Protocol 01의 위계를 색보다 크기·위치·선으로 설명한다."
visual-thesis: >-
두 단서를 한 장의 현장 매뉴얼에서 Entry A/B와 하나의 Protocol 01로 편성한다. 굵은 번호는
장식이 아니라 다음 학습 행동을 지시하고 큰 선언 뒤에는 즉시 검증 가능한 값과 절차가 따른다.
layout-grammar: >-
modular poster stack, Module 01 cover, 2-up entry panels, full-width numbered procedure strip,
compact schedule과 boundary rule. 모바일은 같은 순서를 한 열로 재배치한다.
interaction-grammar: >-
두 native entry가 같은 protocol로 이동한다. 0105 단계는 번호·verb·state marker를 함께 쓰고
Tab/Enter/Space와 aria-live를 전제로 하며 drag-only 조작을 금지한다.
typography-token-direction: >-
condensed display는 module·step 번호에만, warm humanist sans는 한국어 지시에, mono는 scenario id와
값에만 사용한다. yellow=active module, green=instruction, orange=symptom evidence로 제한한다.
primitive-inventory: [protocol-panel, numbered-checkpoint, rule-block, field-stamp, procedure-strip, transfer-ticket]
reference-board-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/field-manual/concept.yaml
reference-board-sha256: f3fa0b0d1c89a87b89d2c924a1cd1875b822ced954fa1a428c6c4210fb8ccd3b
full-size-preview-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/manual-desktop.png
full-size-preview-sha256: 861270acfbfcd3bdc5b541e6a8613d13c20658d933666e761a45e53a4dcbe854
coded-slice: hyeonworks/design-direction/hyeonworks-vnext-v1/directions/field-manual/index.html
coded-slice-sha256: 2b408325b9e1e8faaf7cd6062af5d69300ce83c9660d200d1b162e2cadf6dbce
report-header:
bottom-line: >-
세 방향은 같은 카드 shell의 색상 변형이 아니다. Ledger는 편집 기록, Signal은 계측 rail,
Manual은 번호형 실행 프로토콜이라는 서로 다른 정신 모델을 독립 context와 실제 렌더로 증명했다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: evidence }
risks:
- "Ledger는 첫 Lab 실행 전 읽기량이 가장 많다."
- "Signal은 밝은 계측 언어를 유지하지 않으면 모니터링 제품처럼 오인될 수 있다."
- "Manual은 큰 cover가 학습 도구보다 marketing poster로 보일 위험이 있다."
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/previews/comparison.png
grade: E3
note: "세 방향의 동일 1280/390 viewport 비교 렌더"
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784375368-f87086d0b444: coded slice, concept, PNG dimension/hash 검증"
@@ -0,0 +1,110 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T121036Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T121036Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: DES-VISUAL
reviewer-run-id: 2453b69fee7004f95eef43556a488b8f1230e84a2c9fe92cb7c6706e7bd515c1
lens: distinctiveness
verdict: pass
assessment:
visual-thesis: >-
기술 학습을 강의 목록이나 진단 dashboard가 아니라, 큰 편집 질문과 수치·실행 순서를 대조하는
field note / causal ledger로 다룬다.
internet-average-separation: >-
rounded-card grid, hero illustration, gradient, KPI dashboard, terminal chrome 없이 비대칭 editorial spread,
한국어 serif 논제, mono evidence ID, hard rule, 100·120·70 trace가 화면 위계를 만든다.
brand-recall: >-
Hyeonworks / Technology Atlas, Field Note, Same Lab, scenario ID와 causal values의 반복 결속으로
"한 메커니즘을 증거 기록처럼 끝까지 해부하는 곳"이라는 회상 단서가 생긴다.
cliche-pressure: >-
paper·serif·mono·offset shadow만 떼면 익숙한 editorial/brutalist web 관습이다. 현재는 Lost Update의
구체 값, 두 입구의 합류, 실행 trace와 causal ledger가 장식을 제품 고유 문법으로 바꾸므로 수정 게이트는 아니다.
inspected-surfaces:
- {viewport: 360, route: "#/", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png}
- {viewport: 768, route: "#/", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png}
- {viewport: 1280, route: "#/", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png}
- {viewport: 1280, route: "#/orient/concept", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist}
- {viewport: 1280, route: "#/orient/symptom", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist}
- {viewport: 1280, route: "#/lab/tx-lost-update-01", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist}
- {viewport: 360, route: "#/lab/tx-lost-update-01", artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist}
findings:
- finding-id: DIST-01
severity: info
screen-area: "home · 1280 hero와 우측 scenario folio, entry 합류부"
evidence: >-
preview.w1280.png에서 초대형 serif 질문과 작은 mono atlas가 좌측 논제를 만들고, 우측 folio의
Initial 100 / Expected 120 / Observed 70 및 4행 trace가 즉시 검증 대상을 만든다. 아래 두 entry는
독립 카드 모음이 아니라 한 외곽선 안에서 Same Lab label로 다시 합쳐진다.
judgment: >-
편집 외형과 인과 증거가 같은 첫 화면에 결속되어 일반 기술교육 landing page나 SaaS grid와 구별된다.
- finding-id: DIST-02
severity: info
screen-area: "home · 768 및 360 responsive render"
evidence: >-
preview.w768.png에서는 논제→folio→entry가 단일 독서 흐름으로 재배치되고, preview.w360.png에서는
세 값이 행형 ledger로 바뀌어도 serif 질문, mono 번호, hard rule, coral observed 값과 offset sheet가 남는다.
judgment: >-
좁은 화면에서 단순 카드 stack으로 익명화되지 않고 동일한 field-note/ledger 인상을 보존한다.
- finding-id: DIST-03
severity: info
screen-area: "concept·symptom orientation과 shared Lab의 Predict 화면"
evidence: >-
dist를 실제 Chrome으로 렌더한 결과 concept는 3행 relation note, symptom은 순차 clue ledger로 같은
sheet 문법을 변주한다. Lab은 1280에서 dark scenario brief와 light workbench의 비대칭 split,
360에서 scenario ID·100/120/current ledger 뒤 작업대를 잇는 순서로 유지된다.
judgment: >-
signature가 home의 일회성 art direction에 머물지 않고 서로 다른 entry와 핵심 학습 화면까지 확장된다.
- finding-id: DIST-04
severity: minor
screen-area: "shared Lab · 5단계 progress와 radio choice rows"
evidence: >-
progress strip과 bordered radio rows 자체는 범용 courseware/form 관습이다. 다만 현재 화면에서는
scenario ID, dark evidence brief, explicit values, phase label과 이후 cause rows가 더 강한 상위 문법으로 묶는다.
judgment: >-
현재 winner의 고유성을 무너뜨리지는 않지만, 후속 확장에서 generic control이 커지고 ledger 증거가
줄면 가장 먼저 인터넷 평균으로 퇴행할 지점이다.
report-header:
bottom-line: >-
PASS — ENG-FE-20260718T120840Z@1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267는
360/768/1280과 orientation/Lab에서 editorial evidence와 causal ledger를 제품 고유 문법으로 유지하며,
일반 SaaS 카드 grid나 평균적 기술교육 화면으로 퇴행하지 않았다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-winner-sha-dist-source-three-bound-preview-and-live-route-renders
risks:
- >-
paper·serif·mono·hard rule·offset shadow 조합 자체는 널리 쓰이는 editorial/brutalist 관습이므로,
구체 scenario ID·값·trace·cause row를 약화하면 브랜드 회상성이 빠르게 평준화될 수 있다.
- >-
Lab의 progress와 radio rows는 범용 UI다. 후속 콘텐츠에서도 evidence brief와 causal ledger가
지배 위계를 유지해야 현재의 pass가 보존된다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "exact target winner id/SHA 및 dist·preview binding"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "desktop 비대칭 hero/folio, dual-entry merge, five-step ledger strip 실제 render"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "tablet single-reading-flow에서도 field-note/ledger signature 유지"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "mobile에서 값 행·trace·serif/mono hierarchy가 보존된 실제 render"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "concept relation, symptom clue, shared Lab phase와 causal row의 화면별 구현"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "editorial spread, folio/note-ledger, evidence typography 및 responsive 변환 구현"
@@ -0,0 +1,113 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T121851Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T121851Z
attempt-id: 4
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 5df1bc1ff6ab253fa35d3d0f9c6a373f206d03e59fe4c4c2dbb0cbd2d9494c7c
selected-direction-id: ledger-studio
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
reviewer-role-id: DES-VISUAL
reviewer-run-id: hyeonworks-vnext-v1-direction-review-visual-craft-20260718T121347Z
lens: visual-craft
verdict: revise
strengths:
- >-
1280 홈의 비대칭 hero와 ledger folio, 얇은 rule, paper/ink/coral 제한 팔레트는
선택 방향의 편집형 evidence 위계를 선명하게 유지한다.
- >-
360에서 folio의 값·행 정렬은 가로 넘침 없이 보존되고 100·120·70의 숫자 위계도
색에만 의존하지 않고 label과 함께 읽힌다.
findings:
- id: VC-01-lab-boundary-contrast
severity: high
scope: [360, 768, 1280, shared-lab]
finding: >-
Shared Lab의 어두운 brief 안에 놓인 Guided scenario 블록에서 본문이 밝은 베이지
바탕과 거의 같은 명도로 렌더되어 세 viewport 모두 육안 판독이 어렵다.
evidence:
- >-
실제 #/lab/tx-lost-update-01 Chrome 렌더에서 label은 보이지만 경계 설명은
360·768·1280 모두 희미하게 소실된다.
- >-
dist/styles.css의 .lab-brief p { color:#dbe1df }가 밝은
.boundary { background:#e9e2d4 } 내부 p에도 상속되고 .boundary p는 color를
다시 지정하지 않는다.
required-revision: >-
boundary 본문에 명시적인 dark text token을 적용하거나 dark-panel 전용 boundary
변형을 만들고 세 viewport의 실제 Lab 렌더로 다시 확인한다.
- id: VC-02-korean-display-line-breaks
severity: high
scope: [360, 768, 1280, home, shared-lab]
finding: >-
display headline의 폭과 줄바꿈이 한국어 어절을 고려하지 않아 홈에서는 '먼/저'와
'예/측합니다'가, Lab에서는 핵심 구문이 음절 중간에서 끊긴다. 큰 serif 논제가
지배하는 방향인 만큼 이 rag는 의도적 편집 조형보다 미완성 조판으로 보인다.
evidence:
- >-
preview.w360.png, preview.w768.png, preview.w1280.png 모두 홈 제목의 동일한
어절 중간 분리를 보여준다.
- >-
dist/styles.css가 h1에 max-width:10ch와 line-height:.88을, .lab-brief h1에
max-width:9ch를 적용하지만 한국어 keep-all 또는 제어된 line break를 두지 않는다.
required-revision: >-
의미 단위 span/br 또는 word-break:keep-all과 viewport별 폭·크기 조합으로 headline
rag를 직접 설계하고 홈·orientation·Lab 제목을 360/768/1280에서 재검수한다.
- id: VC-03-tablet-density-collapse
severity: medium
scope: [768, home, shared-lab]
finding: >-
850px breakpoint 하나가 hero, learning loop, Lab progress를 모두 단일 열로 바꾸어
768에서는 넓은 빈 가로 공간과 과도하게 긴 5행 progress가 생긴다. 360의 안전한
reflow와 1280의 편집 밀도 사이에 tablet 전용 조정이 없다.
evidence:
- >-
preview.w768.png에서 hero thesis와 folio가 긴 단일 흐름으로 분리되고 entry까지의
vertical rhythm이 급격히 늘어난다.
- >-
실제 768 Lab 렌더에서 5단계 progress가 각 한 줄 전체 폭을 점유하지만 동일 요소는
1280에서 압축된 5열 strip으로 읽힌다.
required-revision: >-
home hero와 loop, Lab progress에 서로 다른 tablet breakpoint/column 규칙을 두어
768의 가로 면적과 scan rhythm을 회복한다.
report-header:
bottom-line: >-
revise — Ledger Studio의 1280 편집 위계와 제한 팔레트는 강하지만, Shared Lab 경계문이
세 viewport에서 사실상 사라지고 한국어 display가 어절 중간에서 끊기며 768 구성이 너무 일찍
단일 열로 붕괴한다. 방향 재선택 없이 조판·색 cascade·tablet breakpoint 수정이 필요하다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: evidence }
risks:
- >-
기존 render-health의 css-contrast pass가 Lab 내부 상속 cascade로 생긴 실제 저대비를
포착하지 못했으므로 수정 후 상태별 픽셀 검수가 필요하다.
- >-
저장된 세 preview는 홈만 보여주므로 이후 Observe·Compare·Explain·Transfer 상태의
시각 밀도는 별도 상태 렌더 전까지 미검수 위험으로 남는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "winner artifact id/SHA와 prototype·preview exact binding"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360 홈 실제 Chrome 렌더의 hierarchy, type rag, spacing"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768 홈 실제 Chrome 렌더의 tablet reflow와 density"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280 홈 실제 Chrome 렌더의 editorial hierarchy와 palette"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "Lab boundary color inheritance, headline width, 850px breakpoint의 직접 근거"
@@ -0,0 +1,132 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T131443Z
attempt-id: 5
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: DES-VISUAL
reviewer-run-id: 44640b239eaefd6fe05ba540d1fda7cfa90498fef66a896228a1a91d9caa370a
lens: distinctiveness
verdict: pass
assessment:
visual-thesis: >-
Technology Atlas는 시스템 메커니즘 학습을 일반 course catalog나 진단 dashboard가 아니라,
큰 편집 질문에서 가설을 고정하고 scenario ID·수치·실행·인과 증거를 한 ledger로 축적하는 기록물로 표현한다.
internet-average-separation: >-
rounded card grid, gradient hero, icon dashboard, terminal shell 없이 paper/ink/coral 팔레트,
한국어 serif 논제, mono atlas·phase·evidence label, hard rule과 dark scenario brief가 지배 위계를 만든다.
특히 100·120·70, Same Lab, READ/WRITE/Delta evidence가 인쇄물풍 표면을 Lost Update 학습에 결속한다.
recognizable-signature: >-
Technology Atlas by Hyeonworks → topic breadcrumb → Shared Lab scenario ID → Predict/Observe/Compare/Explain/Transfer의
반복 순서가 home, 두 orientation, 다섯 상태에서 같은 회상 구조를 만든다.
cliche-pressure: >-
paper·serif·mono·offset sheet 조합만 보면 익숙한 editorial/brutalist web 관습이다. 현재 화면은 구체적인
causal values와 ledger row, 가설/증거/인과의 상태별 변주가 관습을 제품 고유 문법으로 바꾸므로 수정 게이트는 아니다.
inspected-surfaces:
home:
- {viewport: 360, artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png}
- {viewport: 768, artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png}
- {viewport: 1280, artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png}
orientations:
- {route: "#/orient/concept", inspected-viewports: [360, 768, 800], bound-artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-concept.png}
- {route: "#/orient/symptom", inspected-viewports: [360, 768, 800], bound-artifact: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-symptom.png}
lab-states:
- {state: predict, viewports: [360, 1280]}
- {state: compare, viewports: [360, 1280]}
- {state: explain, viewports: [360, 1280]}
- {state: transfer, viewports: [360, 1280]}
- {state: complete, viewports: [360, 1280]}
- {artifact-directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews}
findings:
- finding-id: R2-DIST-01
severity: info
screen-area: "home · 360/768/1280 hero, scenario folio, dual-entry merge"
evidence: >-
1280은 초대형 serif 가설 문장과 우측 evidence folio의 비대칭 spread를 만들고, 768은 이를 두 열로
압축하면서도 논제/증거 관계를 보존한다. 360은 Technology Atlas, coral category descriptor,
mono folio와 Initial 100 / Expected 120 / Observed 70을 단일 독서 흐름으로 유지한다.
judgment: >-
첫 화면이 범용 교육 hero나 SaaS 카드 모음으로 읽히지 않고 "가설을 세우고 증거로 설명하는 atlas entry"로 식별된다.
- finding-id: R2-DIST-02
severity: info
screen-area: "concept·symptom orientation · 360/768/800"
evidence: >-
concept는 세 개의 relation ledger row와 학습 질문을, symptom은 흐림 처리된 순차 clue ledger와 현재 판단을
같은 offset sheet 문법으로 변주한다. 실제 360/768 Chrome render에서도 큰 serif 질문→guided boundary→ledger
순서와 Technology Atlas header가 남고, 768에서는 비대칭 두 열을 유지한다.
judgment: >-
두 입구가 단순히 문구만 바꾼 동일 카드가 아니라 관계 정렬과 단서 공개라는 서로 다른 evidence 행위로 구분되면서
동일 브랜드 문법에 합류한다.
- finding-id: R2-DIST-03
severity: info
screen-area: "Shared Lab · predict/compare/explain/transfer/complete, 360 및 1280"
evidence: >-
모든 상태가 dark scenario brief, mono phase rail, serif task headline과 light workbench의 split을 유지한다.
Compare는 hypothesis/value/cause ledger, Explain은 세 evidence 조각 builder, Transfer는 새 수치 대조,
Complete는 core-loop record와 원칙 sheet로 같은 문법을 상태 의미에 맞게 바꾼다. 360에서도 dark ledger가
먼저 앵커가 되고 각 workbench가 이어져 장문의 form stack만으로 익명화되지 않는다.
judgment: >-
고유성이 home art direction에 머물지 않고 핵심 상호작용의 시작·대조·구성·전이·완료까지 제품 문법으로 작동한다.
- finding-id: R2-DIST-04
severity: minor
screen-area: "Shared Lab · Explain/Transfer의 bordered choice rows"
evidence: >-
radio choice와 textarea 자체는 범용 form/courseware primitive이며 360 Explain에서는 긴 세로 비중을 차지한다.
그러나 phase ID, persistent dark evidence brief, explicit read/write/value vocabulary와 causal grouping이
상위 구조를 계속 지배한다.
judgment: >-
현재 exact winner의 고유성을 무너뜨리지는 않는다. 후속 scenario에서 ledger anchor를 줄이고 choice row만
늘리면 인터넷 평균으로 가장 먼저 퇴행할 지점이므로 비차단 위험으로 추적한다.
report-header:
bottom-line: >-
PASS — ENG-FE-20260718T131305Z@bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674는
home 360/768/1280, 두 orientation, 다섯 Lab 상태 360/1280에서 Technology Atlas의
editorial-evidence/causal-ledger 문법을 일관되게 유지하며 일반 SaaS·courseware 화면으로 퇴행하지 않았다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-r2-winner-sha-dist-source-home-orientation-and-ten-bound-state-renders
risks:
- >-
paper·serif·mono·hard rule 조합만 남고 scenario ID·수치·READ/WRITE/Delta row가 약화되면
현재의 고유성은 익숙한 editorial/brutalist template로 평준화될 수 있다.
- >-
360 Explain/Transfer에서 generic choice rows의 세로 비중이 크므로 후속 주제도 dark evidence brief,
phase label과 causal grouping을 지배 위계로 유지해야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: "exact revision-2 winner id/SHA와 home, route, state preview binding"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360 home의 Technology Atlas hierarchy, causal folio, single-column signature"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768 home의 비대칭 editorial spread와 entry/loop hierarchy"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280 home의 hero/folio, dual-entry merge와 five-phase strip"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-concept.png
grade: E3
note: "concept orientation의 relation note 실제 render; dist는 360/768에서도 직접 렌더 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-symptom.png
grade: E3
note: "symptom orientation의 sequential clue ledger 실제 render; dist는 360/768에서도 직접 렌더 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "predict/compare/explain/transfer/complete 각 360·1280, 총 10개 exact state render"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "Technology Atlas, scenario registry, orientation variants와 state별 evidence vocabulary 구현"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "editorial/ledger recipes와 360/768/1280 responsive hierarchy 구현"
@@ -0,0 +1,131 @@
report-header:
bottom-line: >-
REVISE — exact winner ENG-FE-20260718T131305Z / sha256
bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674는 편집형 위계,
AA 색 경계, 768px 2열 밀도와 단계별 상태 구분은 출시 방향 수준이지만, 360px Lab 본문에서
한국어 단어가 음절 중간에 반복 절단되어 선언된 Korean keep-all 마감이 아직 닫히지 않았다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: hash-bound-winner-files-render-previews-and-verification-receipts
risks:
- >-
렌더 판정은 receipt에 결속된 Chrome 환경의 캡처 기준이며, 배포 환경의 한국어 fallback font가
달라지면 줄바꿈 위치는 추가로 변할 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: >-
exact reviewed winner ENG-FE-20260718T131305Z; file sha256
bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: >-
revision 2 manifest sha256 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c;
declared Korean keep-all, Lab contrast and tablet-density closure
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: >-
exact predict/compare/explain/transfer/complete renders at 360 and 1280 inspected; 360 body copy
exposes repeated intra-word Korean breaks while hierarchy, spacing and state distinction remain coherent
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: >-
sha256 62fd9ea7af1fb2710d8497f814502eec1271aff9eeace7214e6d246266967cd6;
keep-all is scoped to heading/serif selectors and loop labels, not Lab body, lead, choice or principle copy
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: >-
preview receipt vr-1784380367-51a78e23c06f sha256
6e996418f85040bcf48a9354ad7488d9106e8b094a5f7ce8672a3aa30376b776 and interaction receipt
vr-1784380160-b25beb2fef58 sha256
b5dae4455e6a73ee5801fedc3034bf0b23628bb5e59c1e47576b7ba32d5285fa both passed against source revision
40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T131448Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T131448Z
attempt-id: 6
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: DES-VISUAL
reviewer-run-id: d388e8cde4d3a732a077962455b842667dd4c7f2ee00b8222873f86d4790fe9e
lens: visual-craft
verdict: revise
review-context:
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T131418Z.pkg.yaml
context-package-sha256: d388e8cde4d3a732a077962455b842667dd4c7f2ee00b8222873f86d4790fe9e
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-prototype-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
source-prototype-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
audit-summary:
hierarchy-and-art-direction:
result: pass
basis: >-
360/768/1280 home and 800 route renders preserve the asymmetric editorial spread, serif thesis,
mono evidence annotations and single causal-ledger visual grammar without dashboard or terminal-shell drift.
color-and-boundary:
result: pass
basis: >-
paper/ink/coral/violet/mint roles remain consistent; the dark Lab brief is a clear single boundary,
the static CSS check reports on-deep/deep 11.66:1 and the E2E receipt enforces its runtime ratio at 4.5:1 or higher.
spacing-and-responsive-density:
result: pass
basis: >-
1280 spacing sustains the editorial asymmetry, 768 retains the intended two-column hero and Lab density,
and 360 stacks values, comparisons and controls without horizontal overflow.
interactive-state-polish:
result: pass
basis: >-
current/done progress, disabled controls, selected choices, alert comparisons, success/error feedback and
completion treatment use distinct text, form and color roles; the full interaction receipt passed.
korean-responsive-typography:
result: revise
basis: >-
heading keep-all works, but 360 Lab body, lead, choice and completion copy repeatedly breaks Korean words
inside the word, contradicting the revision-closure claim for Korean typography.
findings:
- id: VC-R2-01
severity: minor-revision
status: open
area: korean-responsive-typography
observation: >-
Exact 360 state renders show repeated intra-word breaks: predict.w360.png breaks “구체/적인” and
“확/인합니다” in the dark Lab brief and “변/화를” in a hypothesis; complete.w360.png breaks
“장/애”, “시나리/오”, “변/화” and “뜻입/니다” in completion copy. Comparable breaks recur in
compare, explain and transfer states.
file-cause: >-
styles.css applies `word-break: keep-all; overflow-wrap: normal` to h1/h2/h3/.serif and keep-all to
.loop-item span, while .lab-brief > p, .workbench .lead, .choice span, .boundary p and .principle p
inherit the browser's Korean intra-word breaking behavior.
impact: >-
The direction remains structurally sound, but narrow-screen reading rhythm and typographic finish fall
below the declared revision-2 closure; this requires a bounded type-rule correction, not a direction redraw.
required-change: >-
Apply a Korean-aware keep-all rule to semantic body copy with a safe fallback for long Latin tokens/IDs,
then regenerate all five 360 Lab state renders and verify zero intra-word Korean breaks and zero horizontal overflow.
evidence:
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/predict.w360.png
sha256: 49e393591fb9d492638715da495538ba2b566ae55e0cb29aad4e582122bd5674
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/compare.w360.png
sha256: 421d991301f0ccc8f7234ee45747ac920e21ab16b83085f57aa201f2e3017160
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/explain.w360.png
sha256: c1d98a5337ba14d89d7e447f45aaaec6535763a7fa8b073eb91330830f467792
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/transfer.w360.png
sha256: a9f747ba9ad76fe170544da647092abd4fb5a8cdd3c899381d7a4578f7552893
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/complete.w360.png
sha256: 5e9b9f9a1852b9506768e0b56480e8edd822f65c5e328335fd187c1ca46c0374
- path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
sha256: 62fd9ea7af1fb2710d8497f814502eec1271aff9eeace7214e6d246266967cd6
scope-note: >-
This report judges visual-craft only; it does not issue product-fit, usability, distinctiveness,
market, system or implementation verdicts.
@@ -0,0 +1,96 @@
report-header:
bottom-line: >-
PASS — exact Revision 3는 비대칭 editorial thesis, field-note annotation, causal ledger와
persistent evidence folio를 360/768/1280 및 Predict→Complete 전 상태에서 지배 문법으로 유지한다.
conventional stepper·radio form은 이 문법에 종속되어 있어 generic dashboard나 terminal shell로의
회귀를 만들지 않으며, 두 진입점은 SAME LAB 표식과 동일 shared-core ledger로 명시적으로 수렴한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-hash-bound-renders-and-independent-distinctiveness-review}
risks:
- >-
Lab의 progress strip과 radio/form controls 자체는 관습적이다. 향후 persistent dark ledger,
serif 논제, mono evidence annotation 중 하나라도 제거되면 학습 wizard나 dashboard로 희석될 수 있다.
- >-
이 판정은 제공된 exact render와 구조에 대한 distinctiveness 감사이며 외부 시장 비교나
사용자 기억 효과를 주장하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: >-
live SHA256 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0;
revision 3 manifest가 core-flow와 360/768/1280 render를 exact hash로 결속한다.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
grade: E3
note: >-
live SHA256 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65;
editorial evidence와 dual-entry shared core를 distinctiveness 기준으로 잠근 selected direction이다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: >-
live SHA256 bd2bf67bddde92ae4fa0d329bd21e078625aa343ba59b78fec75f248111d22a1;
SAME LAB convergence와 Predict→Observe→Compare→Explain→Transfer shared-core 구조를 명시한다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: >-
large serif thesis, asymmetric ledger specimen, twin entry spread와 SAME LAB bridge가
dashboard card grid보다 editorial evidence hierarchy를 우선한다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: >-
tablet에서도 thesis/ledger 비대칭과 two-entry convergence가 유지된다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: >-
mobile stack에서도 serif thesis, receipt-like ledger와 entry framing이 보존되어 generic card feed로 평탄화되지 않는다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: >-
Predict·Observe·Compare·Explain·Transfer·Complete의 360/1280 12개 render 모두에서
dark evidence folio, serif task thesis, mono labels/numerals와 rule-based ledger가 지속된다.
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T140000Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
reviewer-role-id: DES-VISUAL
reviewer-run-id: 5164a2f325b97d437c17cff56ba421620b35ad25d4bde2bf00fb63b896b5db1c
lens: distinctiveness
verdict: pass
review-context:
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T135945Z.pkg.yaml
context-package-sha256: 5164a2f325b97d437c17cff56ba421620b35ad25d4bde2bf00fb63b896b5db1c
previous-lens-reviews-read: false
findings:
- finding-id: DIST-R3-01
severity: pass
claim: "editorial evidence grammar remains dominant"
evidence: >-
Landing renders pair the oversized Korean serif question with an asymmetric receipt-like causal ledger,
mono field-note labels, sparse rules and a single coral observed-value accent; no navigation rail,
metric-card grid, chart chrome or terminal prompt becomes the organizing shell.
disposition: pass
- finding-id: DIST-R3-02
severity: pass
claim: "two-entry convergence is visually explicit"
evidence: >-
Concept and Symptom are framed as parallel starts, joined by the SAME LAB · TX-LOST-UPDATE-01 bridge;
every Lab state repeats SHARED CORE/SHARED LAB and the same ledger identity rather than branching into
visually separate products.
disposition: pass
- finding-id: DIST-R3-03
severity: watch
claim: "conventional interaction controls stay subordinate"
evidence: >-
The progress strip, native table and radio choices use familiar patterns, but across all twelve state renders
they sit under the persistent dark evidence folio, serif task thesis, mono evidence labels and ledger rules.
Their presence does not currently overturn the selected visual grammar.
disposition: no-revision-required
@@ -0,0 +1,143 @@
report-header:
bottom-line: >-
revise — exact R3 target ENG-FE-20260718T135811Z는 360px Lab의 한국어 어절 보존과
내부 스크롤 containment, 768/1280의 편집 위계와 상태 구분을 실제 렌더에서 유지한다.
그러나 dark Lab의 소형 coral 라벨이 3.18:1 및 2.50:1, Observe의 pending 텍스트가
4.24:1, 입력 경계가 2.33:1에 머물러 inherited AA boundary를 닫지 못했으므로
token-level contrast 보정 후 재확인이 필요하다.
decision-needed: {needed: false, approver: null}
confidence:
value: Med
derived-from: exact-sha-bound-css-and-360-768-1280-state-render-inspection
risks:
- >-
정적 state previews는 hover·focus·error 조합을 모두 포착하지 않는다. focus-visible 규칙은
CSS에서 확인했지만 제품별 실제 브라우저/디스플레이의 시각 편차까지 주장하지 않는다.
- >-
fixture는 긴 Latin token의 안전한 줄바꿈과 shared visual recipe 경계 확인용이며,
공개 콘텐츠 품질이나 사용자 학습 효과의 근거로 사용하지 않았다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: >-
exact target SHA 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0와
hash-bound 360/768/1280 preview 및 route/state manifest를 대조했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: >-
Predict·Observe·Compare·Explain·Transfer·Complete의 360/1280 실제 렌더에서
위계, 한국어 어절, active/done/current/disabled 상태와 overflow를 독립 시각 검토했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: >-
실제 렌더에 적용된 type, breakpoint, min-width/overflow, deep/on-deep, focus 및
state selector를 확인하고 선언 색상으로 대비비를 계산했다.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-fixture.png
grade: E3
note: >-
별도 fixture 렌더에서 Lab recipe 유지와 unbroken Latin token containment를 확인했다.
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T140005Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T140005Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
exact-target:
artifact-id: ENG-FE-20260718T135811Z
artifact-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
reviewer-role-id: DES-VISUAL
reviewer-run-id: f5394225114da0620b2ba325651b249910844e048a2c55f1da9e1f8b4406f012
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T135952Z.pkg.yaml
context-package-sha256: f5394225114da0620b2ba325651b249910844e048a2c55f1da9e1f8b4406f012
lens: visual-craft
verdict: revise
scope-boundary: >-
visual-craft만 판정했다. 이전 lens review와 다른 lens 결론은 읽거나 재사용하지 않았고,
prototype은 수정하지 않았다.
acceptance-assessment:
- criterion: 360px Lab Korean word integrity
result: pass
evidence: >-
여섯 state의 semantic heading, lead, choice, causal row, feedback 및 boundary 문구가
어절 단위로 줄바꿈된다. 긴 Latin fixture token만 overflow-wrap:anywhere fallback으로
안전하게 감싸며 한국어 음절 중간 분할은 관찰되지 않았다.
- criterion: 360px contained layout
result: pass
evidence: >-
lab-grid/workbench/trace-scroll의 min-width:0 및 max-width:100% 경계가 유지되고,
560px native trace table은 문서 폭을 넓히지 않은 채 trace-scroll 내부에서만 잘린다.
360 state renders에도 우측 clip이나 document-level overflow 징후가 없다.
- criterion: 768/1280 hierarchy
result: pass
evidence: >-
768은 editorial hero·folio와 두 entry를 두 열로 유지하고, 701900px Lab은 brief/workbench와
5-column progress를 보존한다. 1280에서는 논제→evidence sheet→entry/loop 및
Lab brief→workbench의 읽기 우선순위가 크기·여백·stroke로 명료하다.
- criterion: contrast and state polish
result: revise
evidence: >-
current/done/observed/feedback/focus의 형태·텍스트 중복 표시는 명료하지만,
아래 두 contrast finding이 AA boundary와 state legibility를 충족하지 못한다.
strengths:
- >-
360의 단일 열 전환은 dark brief와 light workbench를 명확히 분리하면서 모든 state에서
동일한 인과 ledger 시각 문법을 유지한다.
- >-
768/1280은 serif 논제, mono evidence annotation, 얇은 rule과 비대칭 여백의 위계가
일반 카드 dashboard로 무너지지 않고 선택된 editorial-evidence 방향을 보존한다.
- >-
active progress는 dark fill, 완료 단계는 check+success color, 관찰값은 coral+숫자로
중복 부호화되어 색만으로 상태를 전달하지 않는다.
findings:
- id: VC-R3-01
severity: major
status: open
title: Dark Lab의 소형 coral 라벨 대비가 AA boundary 아래다
observation: >-
.lab-id는 0.68rem/800의 #b94735를 .lab-brief #17201f 위에 사용해 3.18:1이고,
.lab-brief .boundary b는 같은 #b94735를 #283330 위에 사용해 2.50:1이다.
두 라벨은 360/1280 모든 Lab state의 scenario identity와 guided boundary를 표시하지만
small text 기준 4.5:1에 미달하고 실제 dark render에서도 주변 on-deep copy보다 현저히 흐리다.
evidence:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/predict.w360.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/complete.w1280.png
required-change: >-
coral의 의미는 유지하되 dark surface 전용 accent token을 도입해 두 조합을 4.5:1 이상으로
올리고, 360/1280의 predict와 complete에서 scenario id 및 GUIDED SCENARIO 라벨을 재확인한다.
acceptance-test: >-
computed foreground/background contrast >= 4.5:1 for .lab-id on .lab-brief and
.lab-brief .boundary b on .lab-brief .boundary in the exact rerender.
- id: VC-R3-02
severity: moderate
status: open
title: Pending trace와 form boundary의 저대비가 상태 판독을 약화한다
observation: >-
.trace-event.pending의 #737c78은 sheet #fffdfa 위에서 4.24:1로 4.5:1에 못 미친다.
또한 choice/textarea에 공통 사용된 1px --rule #aaa99f는 #fffdfa 위에서 2.33:1이라
Explain의 입력 영역과 Observe의 아직 실행되지 않은 행을 빠르게 구분하기 어렵다.
disabled CTA의 의도적 약화와 달리 pending 설명과 textarea 경계는 내용을 읽고 입력 위치를
식별하는 데 필요한 활성 정보다.
evidence:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/observe.w360.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews/explain.w360.png
required-change: >-
pending text를 4.5:1 이상으로 조정하고, 입력/선택 control의 식별 경계는 주변 sheet와
3:1 이상이 되도록 별도 control-border token을 사용한다. decorative rule은 기존 명도를 유지해도 된다.
acceptance-test: >-
pending text contrast >= 4.5:1 and essential choice/textarea boundary contrast >= 3:1
in Observe and Explain at 360 and 1280, without collapsing pending/current distinction.
release-condition: >-
VC-R3-01과 VC-R3-02의 token-level contrast를 보정하고 exact target의 360/1280 Lab state를
다시 렌더해 비율과 상태 위계를 확인하면 visual-craft 재검토 가능하다.
@@ -0,0 +1,80 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T145000Z
attempt-id: 8
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
review-lens: distinctiveness
target-artifact-id: ENG-FE-20260718T144700Z
target-artifact-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviewer-role-id: DES-VISUAL
lens: distinctiveness
reviewer-run-id: aaa1e28340e08054588d1e93f3774136fe9ffe6f350b48afb3d060229f98447a
verdict: pass
summary: >-
R4는 일반 강의 카드·코스 목차·터미널 또는 대시보드의 문법이 아니라, 편집 논제와
dark shared Lab, mono causal ledger, coral observed value를 하나의 반복 가능한 시각 문법으로
결속한다. 홈의 100·120·70 증거 표지부터 PredictComplete의 모든 상태까지 같은 문법이
역할을 바꾸며 이어져 Technology Atlas만의 식별 가능한 학습 표면을 만든다.
distinctive-signals:
- id: DST-R4-01
signal: "대형 한국어 serif 논제와 좁은 mono evidence annotation의 의도적인 대비"
evidence: "preview.w1280.png와 preview.w360.png에서 브랜드 약속과 100·120·70 ledger가 첫 인상을 공동 소유한다."
judgment: ownable
- id: DST-R4-02
signal: "dark shared Lab을 고정 증거 척추로 두고 밝은 작업지를 상태별로 교체하는 구조"
evidence: "predict/observe/compare/explain/transfer/complete의 360·1280 이미지 모두 같은 Lab 표지를 유지한다."
judgment: ownable
- id: DST-R4-03
signal: "관찰값 coral, 인과 단계의 번호, native-looking ledger rule이 만드는 evidence grammar"
evidence: "Observe의 실행 ledger, Compare의 세 증거 행, Complete의 전이 제안이 같은 시각 어휘로 연결된다."
judgment: ownable
- id: DST-R4-04
signal: "두 진입점을 하나의 scenario/Lab으로 수렴시키는 editorial spread"
evidence: "홈 1280에서 양분된 두 entry가 SAME LAB 띠와 5단계 evidence loop로 수렴하며 일반 course catalog와 구분된다."
judgment: ownable
generic-template-collision-check:
course-card-grid: absent
video-lesson-shell: absent
terminal-pastiche: absent
monitoring-dashboard: absent
generic-saas-card-stack: absent
residual-convention: >-
단계 탭, radio 선택지, 사각 작업지는 익숙한 control이지만 dark Lab과 causal ledger의
종속 요소로 쓰여 지배 문법을 일반 학습 템플릿으로 되돌리지 않는다.
responsive-recall-check:
wide: "1280에서는 editorial thesis와 evidence sheet의 비대칭 spread가 즉시 인식된다."
narrow: "360에서는 동일한 serif/mono/coral/dark-Lab 어휘를 단일 열로 재배열해 식별성이 보존된다."
state-continuity: "6개 학습 상태 모두 증거 척추와 단계 표식을 유지해 화면별 브랜드 단절이 없다."
findings: []
report-header:
bottom-line: >-
PASS — R4의 editorial-evidence grammar는 360·1280과 여섯 학습 상태에서 일관되게 회상되며,
generic learning template와 구분되는 ownable한 Technology Atlas 표면이다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: independent-exact-r4-responsive-and-six-state-image-inspection}
risks:
- >-
후속 주제에서 dark shared Lab, serif thesis, mono ledger, coral observed value 중 일부만
선택적으로 사용하면 현재의 식별성이 일반 editorial template로 희석될 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: "exact winner SHA 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "wide home SHA f1b3918774289e2a2353ba4fc2d5deb6d6001777fef30ea83da7126df45cabd7"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "narrow home SHA db1af7ce77da4a9780a08ef4ad812485476f8ba5a6e3f3820a7c5d188356528a"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "predict, observe, compare, explain, transfer, complete at 360 and 1280 independently inspected"
@@ -0,0 +1,76 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: DES-VISUAL-20260718T145005Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: DES-VISUAL
created-at: 20260718T145005Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviewer-role-id: DES-VISUAL
reviewer-run-id: b81c982521b4fbc7e8acf73d84502d1dd84b4d081cfa5be74863decbb0d6ae61
lens: visual-craft
verdict: pass
findings:
- finding-id: VC-R4-P01
severity: informational
blocking: false
status: passed
summary: >-
실제 배경을 따라 계산한 작은 텍스트 대비가 모두 AA를 충족한다. Lab ID는
#ff8873/#17201f에서 7.14:1, dark boundary label은 #ff8873/#283330에서
5.62:1, 현재 peach 행까지 포함한 pending text 최솟값은 5.44:1이다.
light coral도 paper에서 5.24:1, sheet에서 5.82:1로 작은 라벨 기준을 넘는다.
evidence:
- "Chrome computed style 재측정: labId 7.1437, boundaryLabel 5.6157, pendingMin 5.4403"
- "CSS 토큰 대조: --coral #ad4031, --accent-on-deep #ff8873, --pending #535c58"
- finding-id: VC-R4-P02
severity: informational
blocking: false
status: passed
summary: >-
필수 입력 경계가 장식용 rule과 분리되어 있다. choice와 textarea의
#88877e/#fffdfa 계산 대비는 각각 3.56:1로 비텍스트 UI 경계 3:1 기준을 넘고,
focus-visible은 별도의 3px focus token으로 식별된다.
evidence:
- "Chrome computed style 재측정: choiceMin 3.5575, textareaMin 3.5575"
- "styles.css: --control-border와 :focus-visible의 독립 계약"
- finding-id: VC-R4-P03
severity: informational
blocking: false
status: passed
summary: >-
360·768·1280 실제 렌더에서 cream/ink/coral/violet 팔레트와 serif display,
mono evidence label, sans body의 계층이 일관된다. 360은 명료한 단일 열,
768과 1280은 Lab brief/workbench의 편집적 2열 밀도를 유지하며, Predict부터
Complete까지 상태 강조·완료 표식·증거 표의 리듬에 충돌이나 문서 폭 넘침이 없다.
evidence:
- "preview.w360.png, preview.w768.png, preview.w1280.png 육안 대조"
- "state-previews의 Predict/Observe/Compare/Explain/Transfer/Complete 360·1280 전수 대조"
- "임시 복제본 Chrome 재실행: tablet two-column, Korean word integrity, internal table scroll, document overflow 단언 통과"
report-header:
bottom-line: >-
PASS. R4는 실제 배경 기준의 작은 텍스트·필수 컨트롤 대비를 수치로 충족하고,
360·768·1280 및 여섯 학습 상태에서 편집적 위계와 반응형 완성도를 안정적으로 유지한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-winner-hash-static-token-audit-full-state-image-review-and-fresh-chrome-rerun}
risks:
- Linux Chrome과 현재 serif fallback에서 검토했으므로 Safari·Windows의 다른 한글 font metrics는 후속 production QA에서 재확인해야 한다.
- 상태 스냅샷은 360·1280 전수를 보존하고 768은 실제 Lab 렌더와 브라우저 단언으로 확인했지만, 모든 hover·오답 feedback 조합의 별도 시각 스냅샷까지 보존한 것은 아니다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: "exact winner SHA 8b208279…와 revision-4 receipt/closure 결속 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "exact CSS SHA 71e51b90…; computed color/control-token audit"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
grade: E3
note: "exact script SHA a0910543…를 임시 복제본에서 재실행해 computed contrast와 responsive browser assertions 통과"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "Predict부터 Complete까지 360·1280 상태 이미지 전수 육안 검토"
@@ -0,0 +1,59 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T120840Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T120840Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- artifact-id: DES-DIRECTOR-20260718T115933Z
artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 5df1bc1ff6ab253fa35d3d0f9c6a373f206d03e59fe4c4c2dbb0cbd2d9494c7c
preview-receipt-ref: vr-1784376508-cab84b212040
preview-receipt-sha256: 7e30d89efcc4798134d23976b321d591a79f540a9689a8a677785618862ff996
revision: 1
preview-shots:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: ee18b5109276328285b606bbdcc27f6dcbbe970187a69e6f07d1e0cf2502900e}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: fa19f6b9677a5203c7539555287201a825f82a71572a8a61fe8f8065601b6f4c}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 68e20861bfe87f34ed3da17d9a1da47a593d9d2391478cd2c06ce12668c7bf00}
core-flow:
- "홈에서 두 입구와 하나의 Lost Update Lab, 활성 범위와 교육 경계를 이해한다."
- "개념 entry에서 Concurrency→Isolation→Lost Update 관계를 정리한다."
- "증상 entry에서 기대 120·관찰 70·동시 실행·같은 100 read 단서를 순차 공개한다."
- "두 entry가 동일 #/lab/tx-lost-update-01과 동일 initialLabState로 합류한다."
- "Predict→6-step Observe→Compare→Explain→Transfer를 하나의 pure reducer로 완주한다."
- "Reset으로 어느 상태에서든 결정론적 초기 상태로 돌아간다."
implemented-invariants:
- LI-EDITORIAL-EVIDENCE
- LI-DUAL-ENTRY-SHARED-CORE
- LI-EVIDENCE-LEARNING-LOOP
- LI-HONEST-BOUNDARY
- LI-ACCESSIBLE-READING
implementation-boundary:
- "교육용 고정 시나리오이며 실제 DB·로그·네트워크에 연결하지 않음"
- "React 생산 구현 전의 browser-local coded prototype"
- "학습 효과·사용자 이해도를 자동 검증했다고 주장하지 않음"
report-header:
bottom-line: >-
Ledger Studio의 잠긴 불변식을 홈·두 orientation·단일 Lost Update Lab·5단계 완주 흐름으로 확장했다.
실제 DOM과 360/768/1280 Chrome 렌더, CSS 대비와 focus-visible 게이트를 통과했다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: selected-direction-hash-and-live-render-receipt }
risks:
- "프로토타입 상호작용은 실제 브라우저 전체 키보드 E2E와 screen-reader 수동 검토 전이다."
- "최종 React 구현은 부모 spec의 acceptance criteria와 다시 결속해야 한다."
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "선택된 방향의 실제 데스크톱 렌더"
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784376508-cab84b212040: DOM 및 360/768/1280 render-health pass"
@@ -0,0 +1,76 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T121851Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: ENG-FE
created-at: 20260718T121851Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: ENG-FE
reviewer-run-id: 4b99a5f4d221f1fcf996194fa0c3e799311b102da9e544e518fb0b83693f5375
lens: implementability
verdict: revise
findings:
- finding-id: IMP-01
severity: major
area: "dist/app.js — production handoff boundary"
finding: >-
브라우저 로컬·무의존 prototype으로는 구현 가능성이 높지만, scenario data, reducer, hash router,
HTML template, focus management가 단일 app.js에 결합되어 product code로 그대로 이관하면 변경 영향과
회귀 지점을 격리하기 어렵다.
evidence: >-
app.js는 pure learningReducer와 네 hash route를 제공해 서버/API 없이 실행되지만, 모든 phase view와
event binding을 같은 파일의 전역 labState·innerHTML re-render에 연결한다.
required-revision: >-
production handoff 전에 scenario registry, pure reducer, route/view layer를 최소 모듈로 분리하고 reducer
transition 및 두 entry의 same-core 합류를 자동 테스트한다. 상태 라이브러리나 backend는 추가하지 않는다.
- finding-id: IMP-02
severity: major
area: "interactive verification and accessibility behavior"
finding: >-
preview receipt는 build·DOM·세 viewport·정적 focus/contrast를 확인하지만 실제 라디오 선택, 6단계 trace,
오답 수정, reset의 keyboard focus와 live feedback을 자동 검증하지 않는다. 현재 전체 re-render 방식은
구현은 단순하나 상태별 접근성 회귀를 만들 수 있다.
evidence: >-
app.js의 dispatch는 selection에도 전체 render를 실행하고 preserveFocus는 advance 버튼 하나만 찾는다.
feedback div에는 live-region semantic이 없고 submitted flag는 선택 변경 때 초기화되지 않는다.
required-revision: >-
action별 focus target과 live feedback contract를 구현하고, causal Predict→6-step Observe→Compare→constructed
Explain→Transfer→Complete 및 reset을 실제 Chrome E2E로 검증한다.
- finding-id: IMP-03
severity: strength
area: "delivery complexity and runtime boundary"
finding: >-
정적 index/CSS/ES module, 결정론적 reducer, network·storage·randomness 부재, 명시적 guided-scenario 경계는
초기 릴리스의 빌드·호스팅·디버깅 복잡성을 낮춘다. 수정은 방향 재선택이나 backend 도입 없이 가능하다.
evidence: >-
prototype은 dist 세 파일로 실행되고 scenario schedule과 guarded actions만으로 결과를 재현하며
360/768/1280 preview receipt가 존재한다.
report-header:
bottom-line: >-
REVISE — 정적·결정론적 구조라 구현 자체는 단순하지만, product code 이관 전 scenario/reducer/view 경계를
최소 모듈로 분리하고 실제 상호작용·키보드 E2E를 추가해야 품질을 증명할 수 있다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-winner-source-receipt-and-three-viewport-inspection }
risks:
- "단일 innerHTML re-render 구조를 그대로 확장하면 focus와 submitted state 회귀가 phase 추가 때 반복될 수 있다."
- "이 평가는 구현 가능성 감사이며 실제 학습 효과나 production 배포 성능을 주장하지 않는다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "exact winner id/SHA, prototype and preview receipt binding"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "scenario, reducer, route, render, focus and feedback implementation inspected"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "deterministic boundary and declared shared-core contract"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "mobile render evidence; 768 and 1280 bound previews also inspected"
@@ -0,0 +1,65 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T131048Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T131048Z
attempt-id: 3
supersedes-report-id: ENG-FE-20260718T120840Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- artifact-id: DES-DIRECTOR-20260718T115933Z
artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
- artifact-id: DES-DIRECTOR-20260718T124159Z
artifact-sha256: cfdf252bcf10777a79558fa261bc4ecef9cd4d3f007fb2702ead2b1aea18a141
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
preview-receipt-ref: vr-1784380200-287125ca8f22
preview-receipt-sha256: 177fce3fe9079da9a5a705ac0fb089330be554862687c36a26833297cfcd1ada
interaction-receipt-ref: vr-1784380160-b25beb2fef58
interaction-receipt-sha256: b5dae4455e6a73ee5801fedc3034bf0b23628bb5e59c1e47576b7ba32d5285fa
revision: 2
preview-shots:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b}
state-preview-directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
revision-closure:
learning-evidence: "causal hypothesis Predict and three-part constructed Explain"
accessibility: "focus restoration, role=status feedback, native trace table, AA Lab boundary"
responsive-craft: "Korean keep-all typography, mobile entry jump, tablet two-column density"
market-hierarchy: "Technology Atlas canonical name and developer mechanism Lab descriptor"
system-boundary: "scenario registry, registry-driven copy/state, tokenized editorial recipes"
verification: "full Chrome E2E plus home/route/state renders"
implemented-invariants:
- LI-EDITORIAL-EVIDENCE
- LI-DUAL-ENTRY-SHARED-CORE
- LI-EVIDENCE-LEARNING-LOOP
- LI-HONEST-BOUNDARY
- LI-ACCESSIBLE-READING
report-header:
bottom-line: >-
Ledger Studio revision 2가 1차 panel의 minor-revision 항목을 원인 가설 Predict, 구성형 Explain,
접근성 focus/feedback/table, 한국어·tablet craft, Technology Atlas hierarchy, registry/token 경계로 닫았다.
실제 Chrome에서 전체 학습 흐름과 360/768/1280·상태별 렌더를 통과했다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: hash-bound-panel-closure-live-render-and-browser-e2e }
risks:
- "전문가·자동 검증 결과이며 실제 학습자 효과나 screen-reader별 발화 차이는 아직 주장하지 않는다."
- "현재 registry에는 의도적으로 활성 주제 하나만 있으며 두 번째 주제 추가 전 schema compatibility를 다시 확인한다."
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784380160-b25beb2fef58 full browser flow pass; vr-1784380200-287125ca8f22 DOM and responsive route render pass"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "Predict, Compare, Explain, Transfer, Complete at 360 and 1280"
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T124159Z.report.yaml
grade: E3
note: "exact minor-revision panel and required-revision trace"
@@ -0,0 +1,51 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T131305Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T131305Z
attempt-id: 4
supersedes-report-id: ENG-FE-20260718T131048Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- {artifact-id: DES-DIRECTOR-20260718T115933Z, artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65}
- {artifact-id: DES-DIRECTOR-20260718T124159Z, artifact-sha256: cfdf252bcf10777a79558fa261bc4ecef9cd4d3f007fb2702ead2b1aea18a141}
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
preview-receipt-ref: vr-1784380367-51a78e23c06f
preview-receipt-sha256: 6e996418f85040bcf48a9354ad7488d9106e8b094a5f7ce8672a3aa30376b776
interaction-receipt-ref: vr-1784380160-b25beb2fef58
interaction-receipt-sha256: b5dae4455e6a73ee5801fedc3034bf0b23628bb5e59c1e47576b7ba32d5285fa
revision: 2
preview-shots:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b}
state-preview-directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
revision-closure:
learning-evidence: "causal hypothesis Predict and three-part constructed Explain"
accessibility: "focus restoration, live status feedback, native trace table, AA Lab boundary"
responsive-craft: "Korean keep-all typography, mobile entry jump, tablet two-column density"
system-boundary: "Technology Atlas hierarchy, scenario registry, tokenized editorial recipes"
implemented-invariants: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
report-header:
bottom-line: >-
Revision 2가 minor-revision 항목을 닫고 exact prototype directory에 결속된 DOM·360/768/1280·route
preview receipt와 전체 Chrome interaction receipt를 모두 통과했다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: hash-bound-panel-closure-live-render-and-browser-e2e }
risks:
- "전문가·자동 검증 결과이며 실제 학습자 효과나 screen-reader별 발화 차이는 아직 주장하지 않는다."
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784380367-51a78e23c06f bound render receipt and vr-1784380160-b25beb2fef58 full browser flow receipt"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "five interactive states at 360 and 1280"
@@ -0,0 +1,172 @@
report-header:
bottom-line: >-
PASS — exact winner ENG-FE-20260718T131305Z / bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674는
단일 scenario registry와 reducer, known-id hash route, native control/table semantics, 명시적 focus/live feedback,
360/768/1280 responsive contract 및 전체 Chrome flow 검증으로 production 구현 handoff가 가능하다.
두 번째 scenario를 추가할 때 active-scenario alias를 state에서 유도하고 CI에서 browser harness를 pin하는 일은
구현 단계의 국소 handoff note이며 방향 수정 사유는 아니다.
decision-needed:
needed: false
approver: null
confidence:
value: Med
derived-from: exact-hash-bound-source-render-receipts-and-independent-temp-clone-browser-run
risks:
- >-
현재 화면 renderer는 module-level default scenario alias를 사용하므로 두 번째 registry 항목을 추가할 때는
labState.scenarioId에서 active scenario를 유도해야 한다. 현재 명시된 단일 활성 scenario에서는 오동작하지 않는다.
- >-
E2E harness는 puppeteer-core와 Chrome이 실행 환경에 있다고 가정한다. production CI에서는 devDependency와
CHROME_BIN/PUPPETEER_CORE_PATH를 pin해야 재현 가능한 bootstrap이 된다.
- >-
자동 검증은 keyboard focus, live status, native table, contrast와 overflow를 다루지만 실제 screen reader별
발화와 장기 학습 성과를 증명하지 않는다.
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: >-
SHA-256 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c에 결속된
route/state/reducer/accessibility/test contract와 dist 파일 해시 manifest.
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: >-
source revision 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c에 결속된
vr-1784380367-51a78e23c06f render-health pass와 vr-1784380160-b25beb2fef58 browser-flow pass.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: >-
SHA-256 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444;
mobile single-column render와 first-viewport entry jump의 실제 Chrome 결과.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: >-
SHA-256 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83;
tablet two-column density가 보존된 실제 Chrome 결과.
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: >-
SHA-256 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b;
desktop editorial/Lab composition의 실제 Chrome 결과.
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: ENG-FE
created-at: 20260718T131443Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: ENG-FE
reviewer-run-id: eab69987ab88f740e4c80ed8b5e1cbb0b9cfdbb61bb29e7535d1e42c368e49f3
lens: implementability
verdict: pass
findings:
- finding-id: IMP-R2-STATE-ROUTE
severity: info
blocking: false
status: satisfied
area: state-and-route-boundary
finding: >-
한 개의 immutable scenarioRegistry, 명시적 initialLabState, action-guarded learningReducer와 known-id
hash route가 Predict→Observe→Compare→Explain→Transfer 전이를 network/storage/time 의존 없이 결정적으로
표현한다. concept와 symptom 입구는 동일 tx-lost-update-01 route와 동일 reducer state로 합류하므로 React
reducer/component로 옮길 때 별도 runtime이나 backend가 필요 없다.
evidence:
- kind: code
source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
sha256: bbc82f68ffbba2b4ff41e9188ad0fa6c197de7a09a8872de6a9501c10802bded
detail: >-
scenarioRegistry, initialLabState, learningReducer, known-id route parser와 data-scenario-id boundary가
한 파일에서 추적 가능하며 reflection은 escapeHtml로 DOM 삽입 전에 escaping된다.
- kind: contract
source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
detail: routes, shared-core, fixed learning loop와 deterministic boundary가 코드 해시에 결속된다.
- kind: browser-receipt
source-uri: hyeonworks/evidence/ledger.jsonl
receipt-id: vr-1784380160-b25beb2fef58
assertion-status: passed
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
detail: dual entry, shared core, full causal loop, reset과 runtime-error-free flow를 Chrome에서 검증했다.
handoff-note: >-
두 번째 scenario를 등록하기 전 module-level `scenario` alias를 labState.scenarioId 기반 selector로 바꾼다.
현재 product scope는 활성 deep dive 한 개라고 명시되어 있어 이번 winner의 실행 가능성을 낮추지 않는다.
- finding-id: IMP-R2-A11Y-RESPONSIVE
severity: info
blocking: false
status: satisfied
area: accessibility-and-responsive-boundary
finding: >-
native anchors/buttons/radios/fieldset/textarea와 caption·thead·scope를 갖춘 table, skip link, polite live region,
phase/feedback focus restoration이 상호작용 상태에 포함된다. CSS는 360 single-column, 701900 two-column,
desktop grid를 명시하고 focus-visible·reduced-motion·dark-boundary tokens를 제공하므로 구현 복잡도가 낮다.
evidence:
- kind: code
source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/index.html
sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861
detail: lang=ko, skip link와 aria-live announcer가 정적 DOM boundary에 존재한다.
- kind: code
source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
sha256: 62fd9ea7af1fb2710d8497f814502eec1271aff9eeace7214e6d246266967cd6
detail: focus-visible, semantic breakpoints, overflow-safe trace region과 reduced-motion contract가 명시된다.
- kind: browser-receipt
source-uri: hyeonworks/evidence/ledger.jsonl
receipt-id: vr-1784380160-b25beb2fef58
assertion-status: passed
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
detail: >-
Space radio selection, focus retention/handoff, live feedback, native table headers, AA Lab boundary,
360 no-overflow/entry jump와 768 two-column density를 실제 Chrome에서 검증했다.
- kind: render-receipt
source-uri: hyeonworks/evidence/ledger.jsonl
receipt-id: vr-1784380367-51a78e23c06f
assertion-status: passed
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
detail: concept, symptom, Lab routes를 360/768/1280에서 hash-bound render했다.
- finding-id: IMP-R2-TEST-HANDOFF
severity: low
blocking: false
status: handoff-note
area: verification-and-performance-boundary
finding: >-
189-line browser harness 하나가 happy path뿐 아니라 wrong-answer feedback/reset, keyboard focus, table semantics,
runtime contrast, mobile overflow와 tablet density를 검증한다. 앱은 외부 network, storage, runtime dependency가
없고 작은 static registry/reducer/CSS로 구성되어 이 방향을 production stack으로 옮길 성능·운영 복잡성은 낮다.
다만 clean CI bootstrap을 위해 browser test dependency와 executable path를 production repository에서 pin해야 한다.
evidence:
- kind: test-code
source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
sha256: 5b28470c7c1a5ab40a81386a3e29eac9fd0d6baca88f221cc9dda392cf52713f
detail: >-
local static server와 headless Chrome assertions만 사용하며 complete/reset 및 두 entry를 한 flow에서 다룬다.
- kind: browser-receipt
source-uri: hyeonworks/evidence/ledger.jsonl
receipt-id: vr-1784380160-b25beb2fef58
assertion-status: passed
exit-code: 0
source-revision-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
detail: exact script hash와 source revision에 결속된 full Chrome interaction pass이다.
handoff-note: >-
package.json의 test:e2e contract는 유지하되 puppeteer-core/Chrome version 및 CI environment variable을 pin한다.
review-basis:
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131418Z.pkg.yaml
context-package-sha256: eab69987ab88f740e4c80ed8b5e1cbb0b9cfdbb61bb29e7535d1e42c368e49f3
winner-report-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
winner-report-id: ENG-FE-20260718T131305Z
winner-report-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
prototype-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c
preview-receipt-id: vr-1784380367-51a78e23c06f
interaction-receipt-id: vr-1784380160-b25beb2fef58
independent-check: >-
원본을 수정하지 않고 /tmp 복제본에서 node --check와 scripts/verify_flow.cjs를 재실행했으며 Chrome E2E가 PASS했다.
@@ -0,0 +1,60 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T135811Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T135811Z
attempt-id: 5
supersedes-report-id: ENG-FE-20260718T131305Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- {artifact-id: DES-DIRECTOR-20260718T115933Z, artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65}
- {artifact-id: DES-DIRECTOR-20260718T133900Z, artifact-sha256: 3bda81f80df43de009c67fbaa79a69df4129bc157f69750bc6af7faa2e94aa76}
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: bd2bf67bddde92ae4fa0d329bd21e078625aa343ba59b78fec75f248111d22a1
preview-receipt-ref: vr-1784383017-9ca3005d47a5
preview-receipt-sha256: aa79aff403326e006fb642188a250562d4066c94695b31b628b3b407d1122ee4
interaction-receipt-ref: vr-1784382985-e736dc497b11
interaction-receipt-sha256: 36e44523cba5c655388abef8ca07068b64070b761bb8b60c3cc7e14474a6f7e0
css-receipt-ref: vr-1784383046-099953298097
css-receipt-sha256: 3cafd505cf3acb25a1d21719dd9c92bacc4b31630e0e0b669b413b59a60adaf4
revision: 3
preview-shots:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b}
route-previews:
- {state: concept, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-concept.png, sha256: b4e48f6165ef72f5594132a64cee20b3f9a8745c340b8fc0bea989f907d6f9ed}
- {state: symptom, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-symptom.png, sha256: a622e4e2b9ac4b0a9397c183afeaa6dad06d3ed0a42f459e524c6486b827cc5c}
- {state: lab, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-lab.png, sha256: b6ac8332fac2549f857cf339cfaa6860d5b85c21cca36e9b44cce9ad34bfdbf8}
- {state: fixture, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-fixture.png, sha256: 918b375e1bb8f4fb1b50e6f4eaa3d24b23609a9d004236d172f100c25312aa94}
state-preview-directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
revision-closure:
mobile-containment: "360 Observe keeps document width at 360 while the 560px native table scrolls inside trace-scroll"
entry-focus: "360 keyboard and 768 pointer shortcut focus/scroll entry-title without hash route rerender"
korean-craft: "Range-based Chrome assertions prove no Korean word splits; long Latin fixture token wraps safely"
system-boundary: "active scenario is passed to render/dispatch/announcement; an independent four-step 50/60/40 fixture completes through the shared reducer"
implemented-invariants: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
report-header:
bottom-line: >-
Revision 3가 실제 360px containment·entry focus·한국어 단어 조판과 scenario-to-render 결속 결함을 닫았다.
기본 6-step Lab과 독립 4-step fixture가 같은 reducer/view에서 전체 Chrome flow를 통과했고,
360/768/1280·route render와 CSS 대비/focus receipt도 exact manifest SHA에 결속됐다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: hash-bound-panel-closure-live-render-browser-e2e-and-css-receipts }
risks:
- "두 번째 record는 확장 경계 검증용 fixture이지 공개 학습 콘텐츠나 실제 사용자 학습효과의 증거가 아니다."
- "screen-reader 제품별 수동 발화는 아직 수행하지 않았으며 native semantics와 keyboard/focus 자동 검증까지만 주장한다."
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784382985-e736dc497b11 full browser flow, vr-1784383017-9ca3005d47a5 bound render, vr-1784383046-099953298097 CSS health"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "predict·observe·compare·explain·transfer·complete at 360 and 1280"
@@ -0,0 +1,103 @@
report-header:
bottom-line: >-
Revision 3의 source hash 결속, deterministic reducer, 360 containment, 768 editorial density,
기본 6-step flow와 독립 4-step fixture는 production port에 충분히 구체적이고 재현 검증도 통과했다.
다만 현재 skip link가 Lab에서 `#main`으로 hash route를 덮어 홈을 재렌더하며 scenario와 진행 상태를
잃으므로 접근 가능한 production handoff 전 수정과 회귀 검증이 필요하다. Verdict는 revise다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-source-hash-review-and-local-browser-reproduction}
risks:
- "skip link 활성화가 non-home route와 진행 중 Lab state를 버리는 접근성·routing 결함이 열려 있다."
- "768px 검증은 route render와 home density를 덮지만 모든 Lab phase의 phase-by-phase E2E는 아니다."
- "native semantics, keyboard focus와 live feedback은 자동 검증됐지만 screen-reader 제품별 수동 발화는 범위 밖이다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: "exact target SHA 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0; preview/interaction/CSS receipt refs와 각 SHA가 명시됨"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "core-flow SHA bd2bf67bddde92ae4fa0d329bd21e078625aa343ba59b78fec75f248111d22a1 및 네 source file manifest SHA가 실제 파일과 일치"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "registry/state/action 기반 reducer와 active-scenario render/dispatch 결속; hashchange fallback이 #main을 home으로 해석하는 결함 근거"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/index.html
grade: E3
note: "skip link href=#main과 hash-router 충돌의 시작점"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
grade: E3
note: "전체 Chrome E2E 재실행 exit 0; dual-entry, 360 containment, focus/live feedback, native table, Korean wrapping, 기본/fixture 완주를 검증하지만 skip link는 미포함"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "CSS contrast/focus-visible health 재실행 exit 0; 360/701-900/desktop containment recipes 확인"
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: ENG-FE
created-at: 20260718T140000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135945Z.pkg.yaml
context-package-sha256: 3f768a15887862e2de9227f5e84c43b61c4133909ae49b96f7dcb5d3aabd010a
reviewer-role-id: ENG-FE
reviewer-run-id: 3f768a15887862e2de9227f5e84c43b61c4133909ae49b96f7dcb5d3aabd010a
lens: implementability
verdict: revise
review-results:
source-and-exact-receipts:
status: pass
basis: >-
Package와 exact target SHA가 지정값과 일치하고 core-flow manifest의 index/app/styles/harness SHA도
모두 실제 source와 일치한다. Target가 명시한 preview, interaction, CSS receipt ref/SHA와 동일한
source에서 JS check, Chrome E2E, CSS health를 재현했다.
deterministic-reducer:
status: pass
basis: >-
learningReducer는 phase guard와 registry record, state, action만으로 새 state를 만들며
Date.now, Math.random, network, storage가 없다. schedule length와 answers는 active scenario에서 읽는다.
accessibility:
status: revise
basis: >-
fieldset/legend, native table headers, scroll-region tabindex, focus restoration, role=status,
live announcer, reduced motion, focus-visible과 runtime contrast는 구현·검증됐다. 그러나 skip link가
hash router와 충돌해 non-home context를 파괴한다.
responsive:
status: pass-with-risk
basis: >-
minmax(0,1fr), contained trace overflow와 360 document-width assertions가 전 phase에서 통과했고
701-900px two-column rules와 768 home density assertion도 존재한다. 768 전체 Lab phase E2E는 후속
회귀 묶음에 추가하는 편이 안전하다.
second-fixture:
status: pass
basis: >-
direct route가 inventory record를 선택하고 50/60/40 values, fixture copy/choice ids, 4-row schedule,
explanation, 100/110/115 transfer, completion과 reset까지 같은 reducer/view로 완주한다.
findings:
- finding-id: IMP-R3-01
severity: high
blocking: false
area: accessibility-routing
title: "Skip link activation destroys the current hash route and Lab state"
evidence:
- "index.html의 `.skip-link`는 `href=#main`이다."
- "app.js route()는 #/ prefix가 아닌 #main을 home fallback으로 반환하고 hashchange는 render()를 호출한다."
- "Chrome에서 fixture Lab의 skip link를 keyboard Enter로 활성화하자 hash=#main, data-scenario-id=null, home h1 상태로 재현됐다."
impact: >-
키보드·screen-reader 사용자가 반복 navigation을 건너뛰려 할 때 현재 route, scenario와 학습 진행을
잃는다. bypass mechanism이 오히려 task context를 파괴하므로 production accessibility contract로
넘길 수 없다.
required-revision: >-
skip link를 local focus/scroll 동작으로 처리해 route hash를 바꾸지 않고 현재 main을 focusable하게
만든다. home, concept, symptom, default Lab, fixture Lab과 진행 중 phase에서 route/scenario/reducer
state가 보존되는 keyboard 회귀 검증을 추가한다.
acceptance-checks:
- "Enter로 skip link 활성화 후 document.activeElement가 현재 main(또는 그 시작 heading)이다."
- "location.hash, main[data-scenario-id], phase와 cursor가 활성화 전후 동일하다."
- "default와 fixture, 360/768/1280에서 검증하며 document overflow가 없다."
@@ -0,0 +1,66 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T144500Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T144500Z
attempt-id: 6
supersedes-report-id: ENG-FE-20260718T135811Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- {artifact-id: DES-DIRECTOR-20260718T115933Z, artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65}
- {artifact-id: DES-DIRECTOR-20260718T142500Z, artifact-sha256: b381e71bfe662dd5b342e708131440c435a7a2fc82ff33a7fa20b5fbb220bc89}
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77
preview-receipt-ref: vr-1784385861-b369f346f270
preview-receipt-sha256: bfc0154becad9a91b74ea403a2bac8f19a70f01051c5cf796acc508564b3bc07
interaction-receipt-ref: vr-1784385837-b85a6b1f7d4f
interaction-receipt-sha256: 1f52f11aee0efed720c0e1d4b87d67eaa6f17c6d6e49da04c9981dec33a7c71d
css-receipt-ref: vr-1784385869-42e22f004643
css-receipt-sha256: 1c9105e466be0829fa807d27b0d9e38a0be0758c0ac6b4ac5ac796b950700612
revision: 4
preview-shots:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: db1af7ce77da4a9780a08ef4ad812485476f8ba5a6e3f3820a7c5d188356528a}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: 51ce61cff0ba2ddc9fd5dcd661f7c51e624f3d6ff3db000de0d4e6b57dfa5aee}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: f1b3918774289e2a2353ba4fc2d5deb6d6001777fef30ea83da7126df45cabd7}
route-previews:
- {state: concept, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-concept.png, sha256: 778688488272718c02ae528f9be358f5a97fc7a0f2034487d992d9e4bd03c2c9}
- {state: symptom, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-symptom.png, sha256: 08069f9de4f2e3290bf2643c55c9fcf24e54d0aa241732889b494f28328f8569}
- {state: lab, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-lab.png, sha256: 530cdd1e9393e5374269e127c61b5882633b623791b713bdb5a592647d704007}
- {state: fixture, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-fixture.png, sha256: afd27057f15a1b7ec6a57b6143f3cb355efe52880a736209ab2315a528bc7739}
state-preview-directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
revision-closure:
accessible-contrast: >-
dark Lab id 7.14:1, dark boundary label 5.62:1, pending trace minimum 5.44:1,
choice and textarea borders 3.56:1을 actual computed foreground/background로 검증했다.
route-safe-skip-link: >-
persistent skip link가 hash를 바꾸거나 router를 재실행하지 않고 현재 main을 focus/scroll한다.
home, concept, revealed symptom, 기본 Observe cursor 1, fixture Observe cursor 1을 360/768/1280에서 검증했다.
state-preservation: >-
skip link 전후 main node identity, location hash, scenario id, phase, cursor, trace와 clue state가 동일하다.
proportionate-system-boundary: >-
기존 static scenario registry와 reducer를 유지하고 backend, storage, framework 또는 범용 runtime을 추가하지 않았다.
implemented-invariants: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
report-header:
bottom-line: >-
Revision 4가 R3 panel의 dark-surface·pending·control 대비와 skip-link route/state 손실을 국소적으로 닫았다.
두 Lab의 진행 중 state와 세 공개 route가 360/768/1280 Chrome matrix에서 hash·scenario·phase·cursor를 보존했고,
exact manifest SHA에 interaction·render·CSS 영수증이 결속됐다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-panel-closure-live-browser-matrix-computed-contrast-and-hash-bound-receipts }
risks:
- screen-reader 제품별 수동 발화는 아직 수행하지 않았으며 native semantics, keyboard focus와 route-safe skip 동작까지만 주장한다.
- 검증 fixture는 구현 결속을 증명할 뿐 공개 학습 콘텐츠의 완성도나 실제 사용자 학습효과의 증거가 아니다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784385837-b85a6b1f7d4f browser matrix, vr-1784385861-b369f346f270 responsive routes, vr-1784385869-42e22f004643 CSS health"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "revision 4 exact manifest SHA 287bc732…"
@@ -0,0 +1,49 @@
report-type: workflow-artifact
artifact-kind: winner-prototype
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T144700Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-prototype
producer-role-id: ENG-FE
created-at: 20260718T144700Z
attempt-id: 7
supersedes-report-id: ENG-FE-20260718T144500Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
selected-direction-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
selected-direction-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
source-artifact-refs:
- {artifact-id: DES-DIRECTOR-20260718T115933Z, artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65}
- {artifact-id: DES-DIRECTOR-20260718T142500Z, artifact-sha256: b381e71bfe662dd5b342e708131440c435a7a2fc82ff33a7fa20b5fbb220bc89}
prototype-path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77
preview-receipt-ref: vr-1784385993-ed403209d073
preview-receipt-sha256: 31d74e201403280a6f3ff855e2e77a3ba64ffc026f396e4569a9351f7a56e60f
interaction-receipt-ref: vr-1784385837-b85a6b1f7d4f
interaction-receipt-sha256: 1f52f11aee0efed720c0e1d4b87d67eaa6f17c6d6e49da04c9981dec33a7c71d
css-receipt-ref: vr-1784385869-42e22f004643
css-receipt-sha256: 1c9105e466be0829fa807d27b0d9e38a0be0758c0ac6b4ac5ac796b950700612
revision: 4
revision-closure:
- "dark Lab id 7.14:1, dark boundary label 5.62:1, pending minimum 5.44:1"
- "choice and textarea essential borders 3.56:1; decorative rule remains separate"
- "home, concept, revealed symptom, default/fixture Observe cursor 1에서 360/768/1280 skip-link state preservation"
- "main node, hash, scenario, phase, cursor, trace/clue state unchanged; current main focused and scrolled"
implemented-invariants: [LI-EDITORIAL-EVIDENCE, LI-DUAL-ENTRY-SHARED-CORE, LI-EVIDENCE-LEARNING-LOOP, LI-HONEST-BOUNDARY, LI-ACCESSIBLE-READING]
report-header:
bottom-line: >-
Revision 4 exact manifest가 절대 prototype 경로를 포함한 실제 preview receipt에 다시 결속됐다.
R3의 두 required revision은 computed contrast와 5-route×3-viewport Chrome state matrix로 닫혔다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-panel-closure-live-browser-matrix-and-three-hash-bound-receipts }
risks:
- screen-reader 제품별 수동 발화와 실제 사용자 학습효과는 아직 검증 범위가 아니다.
- direct-route fixture는 registry 결속 검증용이며 공개 콘텐츠로 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "absolute-path preview vr-1784385993-ed403209d073, browser vr-1784385837-b85a6b1f7d4f, CSS vr-1784385869-42e22f004643"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "exact revision 4 manifest SHA 287bc732…"
@@ -0,0 +1,80 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: ENG-FE-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: ENG-FE
created-at: 20260718T145000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
lens: implementability
reviewer-run-id: cfcfc3f64722c9f7ec5712bab3b38faa00026ef4e146f3f52829d37d410ac2ac
reviewer-role-id: ENG-FE
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
target-artifact-id: ENG-FE-20260718T144700Z
target-artifact-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
verdict: pass
findings: []
strengths:
- >-
scenarioRegistry record, scenario-id state, deterministic learningReducer, and explicit scenario arguments
separate content binding from the shared learning engine without a backend, network, storage, time, or randomness dependency.
- >-
The default six-step and independent four-step fixture both traverse Predict, Observe, Compare, Explain,
Transfer, Complete, and Reset, reducing the risk that production extraction silently retains default-scenario constants.
- >-
The persistent skip handler prevents hash routing, targets the current tabindex=-1 main, and the browser matrix
verifies node identity, route, scenario, phase, cursor, trace, and revealed-clue preservation at 360, 768, and 1280.
- >-
Native controls/table semantics, deterministic focus restoration, live status feedback, responsive containment,
Korean word integrity, long-token fallback, and runtime contrast assertions are encoded as executable handoff contracts.
portability-assessment:
production-portable: true
bounded-scope: >-
A zero-dependency static production shell can port the registry, reducer, render contract, and browser suite directly.
Broader content authoring, persistence, analytics, authentication, and remote diagnosis remain intentionally outside this prototype.
extraction-seams:
- scenario record schema and registry lookup
- pure reducer and initial state factory
- phase-specific views and explicit active scenario binding
- local route/focus handlers
- browser acceptance matrix and CSS health gate
residual-risks:
- app.js is a single prototype module; production growth should split scenario data, reducer, route shell, and phase views while preserving behavior.
- Browser automation depends on a locally available Chrome and puppeteer-core harness, so CI must provision and pin those runner prerequisites.
- Manual assistive-technology behavior and actual learning outcomes are not established by the automated suite.
evidence-reviewed:
- {ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml, sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76}
- {ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml, sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77}
- {ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/index.html, sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861}
- {ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js, sha256: b148057f4d25ba6afb4170c82f5c832263563feaf99a345a0d79e350d83fbed3}
- {ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css, sha256: 71e51b907f5b01c480eb348df35db17995fc45269db36ed6a1afd113e3f29f58}
- {ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs, sha256: a0910543e412b73cd5c7c87fefe3a871feb0c0308fac45fcefab42357218cfc8}
receipt-checks:
- {receipt-id: vr-1784385837-b85a6b1f7d4f, line-sha256: 1f52f11aee0efed720c0e1d4b87d67eaa6f17c6d6e49da04c9981dec33a7c71d, source-revision-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77, status: passed}
- {receipt-id: vr-1784385869-42e22f004643, line-sha256: 1c9105e466be0829fa807d27b0d9e38a0be0758c0ac6b4ac5ac796b950700612, source-revision-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77, status: passed}
- {receipt-id: vr-1784385993-ed403209d073, line-sha256: 31d74e201403280a6f3ff855e2e77a3ba64ffc026f396e4569a9351f7a56e60f, source-revision-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77, status: passed}
independent-checks:
- {command: "node --check dist/app.js", result: pass}
- {command: "preview_ui.py --contrast-only dist/styles.css", result: pass}
- {command: "node scripts/verify_flow.cjs (isolated temporary copy)", result: pass}
report-header:
bottom-line: >-
PASS. Revision 4 is production-portable within its declared static learning-Lab boundary: its scenario seam,
deterministic reducer, route-safe focus behavior, full dual-scenario flow, responsive/accessibility contracts,
and manifest-bound receipts are coherent and independently reproducible.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-source-hashes-receipt-binding-code-inspection-and-independent-browser-replay}
risks:
- Production expansion still needs module extraction and a pinned browser-test runner, but neither blocks this bounded handoff.
- Manual screen-reader behavior and real learner outcomes remain future validation, not implementation defects in this prototype.
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "Exact manifest 287bc732… binds source files and three passing receipts."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
grade: E3
note: "Independent temporary-copy replay passed full default/fixture flow, skip-state matrix, semantics, responsive containment, and runtime contrast."
@@ -0,0 +1,112 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: GTM-PMM-20260718T121851Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: GTM-PMM
created-at: 20260718T121851Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: GTM-PMM
reviewer-run-id: a891c7a54da7771de16bb84cff76ab3c40f3c85b09374285a6656915211bddea
lens: market-memorability
selected-direction:
id: ledger-studio
artifact-id: DES-DIRECTOR-20260718T115933Z
artifact-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T115933Z.report.yaml
artifact-sha256: 90b64c99493f1789a134459813207291dfa4beafa794e3f861b4f28d23286a65
reviewed-winner:
artifact-id: ENG-FE-20260718T120840Z
artifact-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
artifact-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
prototype-id: hyeonworks-ledger-core-flow-r1
prototype-ref: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
prototype-sha256: 5df1bc1ff6ab253fa35d3d0f9c6a373f206d03e59fe4c4c2dbb0cbd2d9494c7c
render-refs:
- { viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: ee18b5109276328285b606bbdcc27f6dcbbe970187a69e6f07d1e0cf2502900e }
- { viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: fa19f6b9677a5203c7539555287201a825f82a71572a8a61fe8f8065601b6f4c }
- { viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 68e20861bfe87f34ed3da17d9a1da47a593d9d2391478cd2c06ce12668c7bf00 }
reviewer:
role-id: GTM-PMM
run-id: a891c7a54da7771de16bb84cff76ab3c40f3c85b09374285a6656915211bddea
lens: market-memorability
verdict: revise
review-boundary: >-
exact winner source와 제공된 360/768/1280 렌더의 메시지·범주 단서·이름·첫인상만 감사했다.
제품 적합성, 사용성, 시각 craft, 구현성, 실제 사용자 회상이나 시장 반응은 판정하지 않았다.
findings:
- id: MM-01
severity: high
area: public-name-salience-and-brand-hierarchy
evidence: >-
세 렌더의 최상단에는 “Hyeonworks / Technology Atlas”, “Field note 001”, “Lost Update Lab”,
“Shared scenario”가 함께 노출되고, index title도 “Hyeonworks · Lost Update Lab”이다. 반면 선택된
방향의 고유명 “Ledger Studio”는 app.js, index.html, 세 렌더 어디에도 노출되지 않는다. 따라서
100·120·70 미스터리를 다시 떠올릴 단서는 있어도 어느 고유명과 결속해 기억해야 하는지는 정해지지 않는다.
action: >-
public-facing 고유명을 하나 정한다. Ledger Studio를 공개 이름으로 쓸 경우 header, document title,
hero 또는 lab return point에 반복 노출하고 Technology Atlas는 범주 설명자로 종속한다. Ledger Studio가
내부 이름이라면 동일 위치에 대체 공개 이름을 일관되게 두고 “두 요청은 성공했는데 왜 70일까?”와 결속한다.
- id: MM-02
severity: high
area: headline-to-product-mechanic-alignment
evidence: >-
모든 렌더에서 가장 큰 headline은 “결과보다 먼저, 원인을 예측합니다.”라고 약속한다. 그러나 같은 화면의
loop와 app.js의 실제 순서는 결과를 Predict한 뒤 Observe·Compare하고 네 번째 단계에서 원인을 Explain한다.
Lab의 첫 질문도 “최종값은 무엇일까요?”이고 원인 선택은 04 Explain에 있다. 첫인상으로 기억될 문장이
대표 동작의 순서를 반대로 압축한다.
action: >-
headline을 실제 고유 동작과 같은 순서로 고친다. 예를 들어 “결과를 먼저 예측하고, 원인을 끝까지
설명합니다.”처럼 Predict → evidence → Explain을 한 문장에 담고, hero·loop·Lab 완료 문구에서 같은
핵심 동사를 반복한다.
- id: MM-03
severity: medium
area: category-coding
evidence: >-
Concurrency / Transaction Isolation / Lost Update breadcrumb, “Mechanism-first learning”, 단계형 Lab,
Guided scenario 경계 덕분에 개발자 교육이라는 범주는 추론할 수 있고 실제 진단 제품으로 과장하지도 않는다.
다만 첫 화면은 Atlas·Field note·Lab·scenario라는 네 가지 은유를 병렬 사용하며, 누구를 위한 어떤 형태의
제품인지 한 번에 재진술할 수 있는 고정 category descriptor는 없다. 360 렌더에서도 topic과 Lab은 보이지만
대상과 형식은 “기술 개념”이라는 넓은 표현에 머문다.
action: >-
brand 바로 아래에 “개발자를 위한 인터랙티브 시스템 메커니즘 Lab”처럼 대상·형식·가치를 묶은 한 줄을
고정하고, Atlas·Field note·scenario는 그 아래 콘텐츠 체계 용어로만 사용한다. Guided scenario 경계와
Lost Update breadcrumb은 신뢰를 주는 범주 단서로 유지한다.
- id: MM-04
severity: low
area: distinctive-recall-anchor-to-preserve
evidence: >-
세 viewport 모두 “두 요청은 성공했는데, 왜 70일까요?”와 Initial 100 / Expected 120 / Observed 70을
첫 주요 구획에 배치한다. app.js는 같은 수치를 hero preview, symptom entry, Compare에 반복하고
“두 입구, 하나의 Lost Update Lab”으로 두 출발점을 하나의 구조에 묶는다. 정적 artifact 기준으로는
이 구체적 숫자 대비와 질문이 가장 고유하고 압축 가능한 회상 단서다.
action: >-
이름과 headline을 수정할 때도 100·120·70 질문과 “두 입구, 하나의 Lab”을 보존하고, 선택한 단일
public-facing 이름 가까이 반복해 제품명·문제·학습 동작이 하나의 기억 묶음이 되게 한다.
report-header:
bottom-line: >-
REVISE — 100·120·70의 Lost Update 미스터리는 강한 회상 단서지만, 사용자에게 보이는 단일 고유명이 없고
첫 headline이 실제 학습 순서를 다르게 약속해 현재 상태로는 명확하고 기억 가능한 시장 메시지로 통과시키기 어렵다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-winner-source-and-three-static-renders }
risks:
- "이 평가는 exact source와 360/768/1280 정적 렌더에 대한 전문가 감사이며 사용자 회상 테스트나 실제 시장 반응을 포함하지 않는다."
- "Ledger Studio가 내부 direction 이름일 가능성은 있으나, 그 경우에도 현재 표면에는 대신 기억시킬 단일 public-facing 고유명이 없다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "exact winner ENG-FE-20260718T120840Z (artifact SHA-256 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267)와 prototype/render refs"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: "exact prototype hyeonworks-ledger-core-flow-r1, SHA-256 5df1bc1ff6ab253fa35d3d0f9c6a373f206d03e59fe4c4c2dbb0cbd2d9494c7c"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "user-facing name, headline, category cues, dual-entry promise, and five-step loop inspected at declared SHA-256 75f55418ba5c232856878f6a537a1ae56682c1a0b06321badeed5b7b8e495c38"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280 render directly inspected together with declared 768 and 360 renders; numeric mystery, brand hierarchy, headline, entry promise, and visible boundary compared"
@@ -0,0 +1,109 @@
report-header:
bottom-line: >-
Revision 2의 Technology Atlas는 단일 공개 이름, 개발자용 시스템 메커니즘 Lab descriptor,
행동 중심 headline, 100/120/70 수치 대비를 하나의 반복 가능한 회상 묶음으로 결속하므로
market-memorability verdict는 pass다.
decision-needed: {needed: false, approver: null}
confidence:
value: Med
derived-from: hash-bound-source-three-home-renders-and-preview-receipt
risks:
- >-
이 판정은 코드와 360/768/1280 렌더에서 메시지의 명료성·반복성·수치 anchor를 감사한 결과이며,
실제 시장의 비보조 회상률이나 선호도를 측정한 주장은 아니다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: "exact winner ENG-FE-20260718T131305Z / bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674와 prototype·preview hash binding"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "단일 public name, category descriptor, headline, 100/120/70 home anchor의 exact source"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360px home에서 name→descriptor→headline→100/120/70→entry 순서 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768px home에서 동일 회상 묶음 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280px home에서 동일 회상 묶음 확인"
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: "vr-1784380367-51a78e23c06f가 세 viewport render를 core-flow SHA 40876a12d2ab842568a76b3c2e2e50f6cd32614914805ecf3c6a00745266958c에 결속"
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: GTM-PMM-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: GTM-PMM
created-at: 20260718T131443Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: GTM-PMM
reviewer-run-id: a3aa4278f9c46ba6656fec6102f29d0cf2992dce7bd7fe1f1fb8c9c206c9addc
lens: market-memorability
verdict: pass
findings:
- finding-id: MM-R2-01
severity: info
blocking: false
disposition: pass
screen-area: global-header-and-home-hero
observation: >-
Technology Atlas가 header, document title, footer와 Lab breadcrumb에서 같은 공개 이름으로 반복되고,
내부 방향명 Ledger Studio는 공개 UI에 노출되지 않는다. by Hyeonworks는 제작자 표기로 분리되어
이름 경쟁 없이 단일 회상 대상을 만든다.
code-evidence:
- "dist/index.html:6-7 — meta description과 title이 Technology Atlas로 고정"
- "dist/app.js:165,177,190,261 — header·footer·home·Lab에서 Technology Atlas 반복"
render-evidence:
- {viewport: 360, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png, sha256: 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444}
- {viewport: 768, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png, sha256: 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83}
- {viewport: 1280, path: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png, sha256: 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b}
- finding-id: MM-R2-02
severity: info
blocking: false
disposition: pass
screen-area: home-hero-copy
observation: >-
“개발자를 위한 인터랙티브 시스템 메커니즘 Lab”이 대상·형식·학습 대상을 한 줄에 규정하고,
바로 이어지는 “실행 전에 원인 가설을 세우고, 증거로 설명합니다.”가 사용자가 기억할 행동과
결과를 제시한다. “두 입구, 하나의 Lost Update Lab”이 이를 구체적 mechanic으로 다시 묶는다.
code-evidence:
- "dist/app.js:190 — descriptor, headline, supporting promise가 같은 hero source에 인접"
render-evidence:
- "360/768/1280 home 모두 descriptor→headline→Lost Update promise 순서를 보존"
- finding-id: MM-R2-03
severity: info
blocking: false
disposition: pass
screen-area: shared-scenario-folio
observation: >-
“두 요청은 성공했는데, 왜 70일까요?”라는 질문과 Initial 100 / Expected 120 / Observed 70의
세 칸 대비가 추상적인 메커니즘을 구체적인 숫자 이야기로 압축한다. 홈에서는 다른 계산값을
전면에 섞지 않아 100→120≠70 anchor가 단일하게 유지된다.
code-evidence:
- "dist/app.js:12-14,181 — scenario 값과 folio의 Initial/Expected/Observed mapping"
render-evidence:
- "세 viewport 모두 headline 근처의 Shared scenario folio에서 100/120/70을 같은 label로 노출"
- finding-id: MM-R2-04
severity: info
blocking: false
disposition: pass
screen-area: responsive-home-message-sequence
observation: >-
768/1280에서는 headline과 수치 folio가 한 시야에 결합되고, 360에서는 같은 요소가 headline 다음,
entry 선택 이전에 순차 배치된다. 따라서 viewport에 따라 카피가 바뀌거나 핵심 수치가 entry 뒤로
분리되지 않아 회상 묶음의 순서와 의미가 유지된다.
code-evidence:
- "dist/app.js:190 — 모든 viewport가 같은 home message source를 사용"
render-evidence:
- "preview.w360.png / preview.w768.png / preview.w1280.png의 hash-bound home 비교"
limitation: >-
외부 네트워크·경쟁 비교·사용자 회상 테스트 없이 artifact 내부의 명료성, 반복성, mechanic-aligned
anchor만 판정했다.
@@ -0,0 +1,124 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: GTM-PMM-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: GTM-PMM
created-at: 20260718T140000Z
attempt-id: 1
verdict: pass
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
target-prototype-ref: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
reviewer-role-id: GTM-PMM
reviewer-run-id: ea3b9ab06b3aa423358b9d2966daed0ad18331593eefea8836521e0eb712342b
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/GTM-PMM-20260718T135945Z.pkg.yaml
context-package-sha256: ea3b9ab06b3aa423358b9d2966daed0ad18331593eefea8836521e0eb712342b
lens: market-memorability
verdict: pass
review-scope:
surface: public-home
viewports: [360, 768, 1280]
excluded-from-message-judgment:
- tx-lost-update-inventory-fixture
claim-boundary: >-
렌더에 나타난 메시지 위계와 반복 단서로 구조적 회상 가능성만 판정하며,
실제 사용자 회상률이나 학습 효과는 주장하지 않는다.
public-message-bundle:
name: Technology Atlas
byline: by Hyeonworks
category: 개발자를 위한 인터랙티브 시스템 메커니즘 Lab
headline: 실행 전에 원인 가설을 세우고, 증거로 설명합니다.
mechanic-question: 두 요청은 성공했는데, 왜 70일까요?
mechanic-anchor:
initial: 100
expected: 120
observed: 70
reinforcement:
- 두 입구, 하나의 Lost Update Lab
- Same Lab · tx-lost-update-01
- Predict → Observe → Compare → Explain → Transfer
viewport-assessment:
- viewport: 360
verdict: pass
observation: >-
Technology Atlas, 카테고리, 헤드라인, Lost Update 설명, 두 입구·하나의 Lab 약속,
100/120/70 folio가 같은 순서로 온전히 보인다. folio는 세로 적층되지만 입구 선택 영역보다
먼저 배치되어 메시지와 수치 단서의 결속을 유지한다.
- viewport: 768
verdict: pass
observation: >-
이름과 카테고리·헤드라인이 왼쪽, 100/120/70 질문 folio가 오른쪽에 동시 노출된다.
바로 아래 두 entry와 Same Lab 표지가 숫자 모순을 하나의 Lost Update 학습 메커니즘으로 회수한다.
- viewport: 1280
verdict: pass
observation: >-
넓은 hero에서도 동일한 이름·카테고리·헤드라인과 100/120/70 folio가 한 시야에 유지되고,
추가 제품명이나 경쟁 약속 없이 두 entry와 5단계 학습 루프로 이어진다.
assessment:
- criterion: single-public-name
verdict: pass
rationale: >-
세 렌더의 최상단 이름은 Technology Atlas 하나이며 by Hyeonworks는 명확한 보조 서명이다.
Lost Update Lab과 Shared/Same Lab은 시나리오·mechanic 표지로 읽혀 별도 제품명과 경쟁하지 않는다.
- criterion: category-clarity
verdict: pass
rationale: >-
개발자 대상, 인터랙티브 형식, 시스템 메커니즘이라는 세 요소가 헤드라인 직전에 고정되어
Atlas라는 넓은 이름을 구체적인 제품 카테고리로 좁힌다.
- criterion: headline-ownability
verdict: pass
rationale: >-
실행 전에 가설을 고정하고 증거로 설명한다는 동사 쌍이 Predict/Observe/Compare/Explain/Transfer와
직접 이어져 장식적 슬로건이 아니라 실제 사용 방식으로 재확인된다.
- criterion: mechanic-anchor
verdict: pass
rationale: >-
Initial 100, Expected 120, Observed 70과 “두 요청은 성공했는데 왜 70인가”라는 모순이
Lost Update를 설명 없이도 질문 형태로 기억하게 하는 가장 구체적인 단서다.
- criterion: cross-viewport-consistency
verdict: pass
rationale: >-
360은 세로 적층, 768·1280은 좌우 병치로 레이아웃만 달라지고 이름·카테고리·헤드라인·수치·순서는
바뀌지 않는다. 따라서 viewport별 copy drift나 mechanic 분리는 없다.
findings:
- id: MM-R3-01
severity: non-blocking
disposition: monitor
finding: >-
360에서는 100/120/70 folio가 headline과 같은 가로 장면이 아니라 hero copy와 약속 뒤에 적층되어
넓은 화면보다 즉시 동시 노출이 약하다.
verdict-impact: >-
수치 folio가 입구 선택보다 앞에 있고 문구·값이 손실되지 않아 현재 판정을 revise로 낮출 정도는 아니다.
report-header:
bottom-line: >-
PASS — 공개 home은 360/768/1280 모두 Technology Atlas라는 단일 이름, 개발자용 인터랙티브
시스템 메커니즘 Lab이라는 카테고리, “실행 전에 원인 가설을 세우고, 증거로 설명합니다”라는 약속,
Initial 100 / Expected 120 / Observed 70 질문을 하나의 위계로 유지한다. 숫자 모순이 Lost Update와
두 입구·같은 Lab mechanic을 구체화하므로 구조적 회상 가능성이 충분하다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: three-hash-bound-home-renders-and-default-public-render-source }
risks:
- "실제 사용자 회상 테스트가 없으므로 관찰된 메시지 위계를 실제 회상률로 확대 해석할 수 없다."
- "360에서는 수치 folio가 hero 본문 뒤에 세로 적층되어 768·1280보다 첫 장면의 즉시 동시 노출이 약하다."
- "Technology Atlas라는 이름만 떼어 쓰면 범위가 넓으므로 현재 카테고리·헤드라인·100/120/70 anchor를 한 묶음으로 유지해야 한다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: "exact target ENG-FE-20260718T135811Z / 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0 및 세 preview SHA 결속"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "sha256 0dcfc9446659c936dbd7ccfb9943ae79c3e12abad5431482ced6a99eb74bc444; 공개 home의 단일 이름·카테고리·headline·100/120/70 세로 위계"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "sha256 5de39c29fc6ad908852ff8e4f0fc36aa5d354b56fa77c609881795dfb5c7bc83; 동일 메시지와 수치 folio의 좌우 병치"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "sha256 315eaa89dfe4d65b279196448f7864b621d4a426982093f16118eb9c2138b88b; 동일 묶음과 두 entry·Same Lab·5단계 reinforcement"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "default public scenario가 tx-lost-update-01이고 renderHome이 Technology Atlas/category/headline/100·120·70 bundle을 동일 데이터로 구성함"
@@ -0,0 +1,90 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: GTM-PMM-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: GTM-PMM
created-at: 20260718T145000Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviewer-role-id: GTM-PMM
reviewer-run-id: 82488e67545d8401fa217e7e28fc1f600dcbb378af719354f74a58a530c55388
lens: market-memorability
verdict: pass
findings:
- id: MM-R4-01
severity: note
area: "home header, hero descriptor, Lab breadcrumb"
evidence: >-
360·1280 home에서 TECHNOLOGY ATLAS BY HYEONWORKS가 최상단에 고정되고,
'개발자를 위한 인터랙티브 시스템 메커니즘 LAB'과
TECHNOLOGY ATLAS / CONCURRENCY / TRANSACTION ISOLATION / LOST UPDATE가
제품명→카테고리→이번 주제 순서로 반복된다.
assessment: >-
포괄적인 제품명 Technology Atlas가 구체적인 developer mechanism Lab 카테고리와
결합돼 무엇을 위한 제품인지 회수할 단서가 충분하다. 이름과 카테고리가 충돌하지 않는다.
- id: MM-R4-02
severity: note
area: "home promise and five-phase learning loop"
evidence: >-
home의 '실행 전에 원인 가설을 세우고, 증거로 설명합니다.'가 Lab의
Predict → Observe → Compare → Explain → Transfer 순서와 각 상태의 실제 동사형 과제로
끝까지 이어진다.
assessment: >-
추상적인 '깊이 학습' 대신 가설을 먼저 고정하고 증거로 설명한다는 행동 약속이
반복 경험으로 입증된다. 제품 약속과 핵심 사용 흐름이 같은 문장으로 기억될 수 있다.
- id: MM-R4-03
severity: note
area: "shared scenario sheet and persistent dark Lab ledger"
evidence: >-
home의 100 initial / 120 expected / 70 observed 시트가 모든 Lab 상태에서
어두운 causal ledger로 지속되고, coral 70과 read/write evidence가 Compare·Explain·Transfer까지
같은 대비 규칙으로 재등장한다.
assessment: >-
100·120·70의 값 차이와 밝은 편집지 위 어두운 증거 원장은 Lost Update를 회상시키는
구체적인 visual mnemonic이다. 장식이 아니라 학습 메커니즘과 직접 결속돼 있다.
- id: MM-R4-04
severity: note
area: "guided-scenario boundary in Lab and completion"
evidence: >-
Lab 원장에는 '고정된 실행 순서를 재현하는 학습용 시나리오'이며 실제 장애 원인을
확정하지 않는다고 명시하고, 완료 화면도 자유 서술 능력이나 실제 장애 진단을
증명하지 않는다고 다시 제한한다.
assessment: >-
debugger 감각은 증상·가설·증거의 학습 방식으로만 쓰이고 원격 DB 분석이나 자동 진단
약속으로 팽창하지 않는다. 이름·약속·mnemonic을 훼손하지 않으면서 신뢰 경계를 보존한다.
residual-observation: >-
Technology Atlas라는 이름만 단독 노출되면 범위가 넓게 읽힐 수 있으므로 향후 주제 확장에서도
developer mechanism Lab descriptor와 evidence-loop 언어를 함께 유지해야 한다. 현재 R4 화면에서는
이 결속이 일관돼 승인 차단 사유가 아니다.
report-header:
bottom-line: >-
R4는 Technology Atlas라는 이름을 developer mechanism Lab 카테고리, '가설을 세우고 증거로
설명한다'는 약속, 100·120·70 causal ledger mnemonic에 일관되게 결속하며 guided scenario 경계도
반복해 시장 기억성 렌즈를 통과한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-R4-home-and-six-state-responsive-renders-without-external-market-claims}
risks:
- >-
실제 고객의 비보조 회상률·카테고리 이해도·선호도는 사용자 조사 없이 검증됐다고 주장할 수 없다.
- >-
향후 주제가 늘 때 Technology Atlas만 남고 mechanism Lab·evidence-loop descriptor가 사라지면
넓은 이름이 카테고리 구체성을 약화할 수 있다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T144700Z.report.yaml
grade: E3
note: "exact R4 winner SHA 8b208279… and revision-4 closure"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "mobile name, category, promise, shared-scenario mnemonic and entry hierarchy"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "desktop name/category/promise hierarchy and dual-entry shared-Lab framing"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "Predict through Complete at 360 and 1280; persistent ledger mnemonic and honest boundary"
@@ -0,0 +1,36 @@
report-type: workflow-artifact
artifact-kind: method-judgment-review
artifact-version: 1
identity:
artifact-id: UX-RESEARCHER-20260718T111657Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-discovery
producer-role-id: UX-RESEARCHER
created-at: 20260718T111657Z
attempt-id: 1
payload:
method-role-id: DES-PROD
method-id: pre-direction
step-id: discover
gate-id: evidence-grounded
criterion: "제약이 미적 형용사가 아니라 사용자 과업·accepted decision·접근성·제품 경계에 접지됐는가"
reviewed-artifact-id: DES-PROD-20260718T111439Z
reviewed-artifact-sha256: 5305736dbd0a856159732067c0ddcbe4f092fb2124460e4c7988ffeec5e74b13
reviewer-role-id: UX-RESEARCHER
verdict: Passed
findings:
- severity: note
finding: "10초 이해·같은 Lab 합류·키보드/360px 완주가 관찰 가능한 사용자 기준으로 정의됐다."
- severity: note
finding: "구체 visual solution을 선결정하지 않고 네 개의 divergence axis를 보존했다."
- severity: note
finding: "실제 진단 도구 오인을 명시적으로 차단해 symptom entry의 trust boundary가 접지됐다."
report-header:
bottom-line: "PASS — pre-direction framing은 accepted 제품 결정과 구체 사용자 과업·접근성·정직성 기준에 접지됐고 시각 해법을 미리 고정하지 않았다."
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: exact-artifact-review }
risks: []
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-PROD-20260718T111439Z.report.yaml
grade: E3
note: "exact id+sha reviewed artifact"
@@ -0,0 +1,147 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: UX-RESEARCHER-20260718T121036Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: UX-RESEARCHER
created-at: 20260718T121036Z
attempt-id: 2
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T120840Z
target-prototype-sha256: 1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: hyeonworks-vnext-v1-direction-review-usability-20260718T1211Z
lens: usability
verdict: revise
method:
type: expert-usability-inspection
participants: 0
contexts:
- "winner source와 360/768/1280 supplied render 직접 대조"
- "실제 Chrome에서 concept entry와 symptom entry 실행"
- "360px에서 Predict→Observe→Compare→Explain→Transfer 완주"
- "키보드 focus, 오류 회복, mobile overflow, accessibility tree 점검"
inspected-artifacts:
prototype-source: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
implementation:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/index.html
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
renders:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
strengths:
- area: "Home → orientations → shared Lab mental model"
evidence: >-
concept와 symptom 모두 exact #/lab/tx-lost-update-01로 합류했고 fresh run의 initial/current 값은
100/120/100으로 같았다. Home, symptom orientation, Lab에서 guided scenario 경계도 반복됐다.
- area: "Task gates and recovery baseline"
evidence: >-
선택 전 primary action은 disabled이고, Observe 6회를 끝내기 전 Compare로 갈 수 없으며,
오답은 다음 phase를 열지 않았다. Reset은 어느 phase에서도 01 Predict의 동일 초기값으로 복귀했다.
- area: "Responsive completion"
evidence: >-
360px concept entry에서 complete까지 직접 실행했고 home/concept/symptom/lab의 360/768/1280
document scrollWidth가 clientWidth를 넘지 않았다. skip link는 H1로 포커스를 옮겼다.
findings:
- finding-id: UX-U01
severity: high
area: "Lab keyboard focus continuity — choice inputs and Observe 6/6 transition"
evidence:
- >-
Chrome 1280에서 prediction radio에 포커스한 뒤 Space로 120을 고르면 activeElement가 INPUT에서
phase H2로 이동했다. 같은 re-render 경로가 explanation·transfer radio change에도 적용된다.
- >-
Observe 5/6까지는 activeElement가 다음 실행 단계 BUTTON으로 유지됐지만, 6/6 직후에는 BODY가 됐다.
다음 Tab은 새 ‘예측과 결과 비교하기’가 아니라 header brand로 이동했다.
- >-
dist/app.js:180-225에서 모든 choice change가 전체 render를 호출하고, preserveFocus는
[data-action="advance"]만 다시 찾으므로 마지막 advance에서 새 to-compare control로 인계하지 못한다.
action: >-
action별 focus target을 명시한다. choice 변경 시 같은 name/value input을 유지하고, Observe 마지막
event 뒤에는 [data-action="to-compare"]로 포커스를 옮긴다. prediction/explanation/transfer의
Arrow·Space 조작과 6번째 advance를 포함한 keyboard regression test를 추가한다.
- finding-id: UX-U02
severity: medium
area: "Explain/Transfer error feedback and correction consistency"
evidence:
- >-
Chrome에서 잘못된 explanation을 확인하면 시각적 feedback은 삽입되지만 activeElement는 phase H2,
feedback의 role과 aria-live는 null이고 live announcer는 결과가 아닌 Explain 단계.’만 말했다.
- >-
오답 제출 후 정답 radio로 바꾸면 explanationSubmitted가 true로 남아 별도 ‘설명 확인’ 없이
성공 feedback과 to-transfer 버튼이 즉시 나타났다. transfer도 같은 state/render 구조다.
- >-
dist/app.js:51-62,145-156,187-216은 submitted flag를 선택 변경 시 초기화하지 않고 feedback을
일반 div로 렌더하며, non-trace dispatch에는 phase 이름만 announce한다.
action: >-
feedback을 role="status" 또는 동등한 live region으로 연결해 정오·다음 행동을 구체적으로 알리고,
결과로 포커스를 안전하게 이동하거나 설명과 연계한다. 답 변경 시 submitted flag를 false로 되돌려
모든 수정 답을 같은 확인 동작으로 제출하게 한다.
- finding-id: UX-U03
severity: medium
area: "Home mobile/tablet first-entry discoverability"
evidence:
- >-
실제 Chrome 첫 로드에서 first entry card top은 360x800에서 1252.8px(1.57 viewports),
768x900에서 1107.9px(1.23 viewports)였다. 1280x900에서는 834.4px로 첫 viewport 안이었다.
- >-
supplied preview.w360.png와 preview.w768.png에서도 큰 논제와 scenario folio가 entry controls보다
먼저 길게 점유한다. 첫 viewport의 동작 가능한 link는 본문 선택이 아닌 header/skip뿐이다.
action: >-
850px 이하에서는 hero 안에 ‘입구 선택으로 이동’ anchor를 두거나 scenario folio를 entry 뒤로 옮겨
첫 과제 행동을 첫 viewport 가까이에 노출한다. 두 entry의 동일 Lab 약속은 그대로 유지한다.
- finding-id: UX-U04
severity: medium
area: "Observe trace comprehension for assistive and 360px reading"
evidence:
- >-
dist/app.js:136-138의 role=table header row는 span에 columnheader role을 주지 않는다.
Chrome accessibility tree에서 desktop header의 STEP/SESSION/OPERATION/VALUE 노드는 role none으로
ignored됐고 data cells와 header association이 없었다.
- >-
dist/styles.css:46은 360px에서 .trace-head를 display:none 처리해 accessibility tree에서도 네 열
이름이 완전히 사라졌다. 각 행은 cell 값만 남아 ‘—’와 숫자의 열 의미를 재확인하기 어렵다.
action: >-
native table/thead/th(scope=col)/tbody/td를 사용하거나 완전한 ARIA table 관계를 구현한다.
mobile에서는 header를 display:none하지 말고 visually-hidden header 또는 각 cell의 명시적 label로
Step·Session·Operation·Value 의미를 보존한다.
limitations:
- "이 평가는 usability expert inspection이며 모집 사용자 관찰이나 인터뷰가 아니다."
- "학습 성과, 초심자 terminology 이해, 실제 screen reader별 발화 차이는 결론 범위 밖이다."
report-header:
bottom-line: >-
Expert usability inspection에서 concept·symptom 두 입구와 5단계 Lab은 360/768/1280에서
완주 가능했고 상태·교육 경계도 이해 가능했다. 그러나 라디오 선택과 Observe 마지막 단계에서
키보드 포커스가 이탈하고 오류 피드백이 보조기술에 전달되지 않아, panel pass 전 수정이 필요하다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-target-hash-source-review-and-live-chrome-expert-inspection-without-user-participants
risks:
- >-
참여자를 모집한 사용자 테스트가 아니므로 실제 초심자의 이해도, 과제 성공률, 학습 효과와
재방문 기억은 검증하지 않았다.
- >-
screen reader 수동 세션은 수행하지 않았으며 Chrome accessibility tree와 키보드 동작으로만
보조기술 영향을 점검했다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T120840Z.report.yaml
grade: E3
note: "target ENG-FE-20260718T120840Z의 live SHA256=1cfa4ff43762111f46b0088057f6b902375f86856558056aa5f11f117f107267 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "두 entry, reducer gates, focus/announce/error 경로를 소스와 실제 Chrome 상태 전이로 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360px 실제 렌더 직접 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768px 실제 렌더 직접 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280px 실제 렌더 직접 점검"
@@ -0,0 +1,135 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: UX-RESEARCHER-20260718T131443Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: UX-RESEARCHER
created-at: 20260718T131443Z
attempt-id: 3
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T131305Z
target-prototype-sha256: bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: b08974977a3f60b7b0ca23bb23d853bb5b2476387bd71a011e20ba145dd35d79
lens: usability
verdict: revise
method:
type: expert-usability-inspection
participants: 0
contexts:
- "exact revision-2 source와 supplied 360/768/1280 및 state previews 직접 대조"
- "실제 Chrome에서 concept·symptom entry와 전체 Lab 실행"
- "360px에서 Tab·Space keyboard-only completion 및 오류 회복 점검"
- "360/768/1280 responsive geometry와 Chrome accessibility tree 점검"
inspected-artifacts:
prototype-source: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
implementation:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/index.html
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
renders:
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-concept.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-symptom.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.state-lab.png
- hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
strengths:
- area: "Dual entry and learning-loop comprehension"
evidence: >-
concept와 symptom 모두 exact #/lab/tx-lost-update-01로 합류했다. symptom 단서 1/4→4/4는
같은 control에 포커스를 유지했고, Predict의 원인 가설이 Compare에 그대로 다시 제시된 뒤
Explain의 세 인과 요소와 Transfer로 이어졌다.
- area: "Keyboard focus, error recovery, and feedback"
evidence: >-
360px Chrome에서 Tab·Space만으로 concept entry부터 Complete까지 완주했다. choice 변경은 선택한
input에 포커스를 유지했고 Observe 6/6은 to-compare 버튼으로 인계했다. Explain·Transfer의 오답
feedback은 role=status로 포커스됐으며 답 수정 시 feedback이 사라지고 재제출을 요구했다.
- area: "Trace semantics"
evidence: >-
Observe accessibility tree에서 STEP/SESSION/OPERATION/VALUE가 columnheader로, 단계 번호가
rowheader로 노출됐다. native table과 phase별 text labels가 색에 의존하지 않고 현재 상태를 전달했다.
findings:
- finding-id: UX-R2-U01
severity: high
area: "360px Lab / Observe responsive trace and primary action"
evidence:
- >-
실제 360x800 Chrome에서 Predict를 고정해 Observe로 들어가면 document clientWidth는 360px인데
scrollWidth는 612px가 됐다. workbench는 596px, trace-scroll은 562px, table은 560px로 viewport를
크게 벗어나 전체 페이지를 좌우로 밀어야 했다.
- >-
이 상태에서 trace-scroll의 clientWidth와 scrollWidth가 모두 560px라, aria-label이 안내하는
container 내부 가로 스크롤은 발생하지 않았다. Next action도 늘어난 workbench 폭을 따라 잘렸다.
- >-
dist/styles.css:241,256-257,311-323에서 table min-width:560px와 overflow-x:auto를 두었지만,
mobile .lab-grid를 1fr로 전환하면서 workbench/grid item의 min-width를 0으로 제한하지 않았다.
action: >-
mobile .lab-grid track을 minmax(0,1fr)로 만들고 .workbench 및 .trace-scroll에 min-width:0과
max-width:100%를 적용해 table만 내부에서 스크롤되게 한다. 360px Observe에서 document
scrollWidth===clientWidth, trace-scroll scrollWidth>clientWidth를 동시에 검증하고 Observe state
preview와 regression assertion을 추가한다.
- finding-id: UX-R2-U02
severity: medium
area: "Home / mobile-tablet ‘입구부터 선택하기’ shortcut"
evidence:
- >-
360x800에서 entry title은 처음 1195.7px 아래에 있었고 shortcut은 첫 viewport 안에 보였다.
그러나 keyboard activation 뒤 hash는 #entry-title이 됐어도 activeElement는 hero H1,
scrollY는 256px, entry title의 viewport top은 939.7px여서 목표가 여전히 화면 밖이었다.
- >-
768x900 pointer activation도 scrollY 0, entry title top 706.9px, activeElement H1으로 남아
shortcut이 entry 선택 위치를 유의미하게 열지 못했다.
- >-
dist/app.js:184-190의 href=#entry-title이 hash를 바꾸면 lines 268-279,351의 global hashchange
render가 Home DOM을 다시 만들고 data-focus-heading H1에 포커스를 주어 anchor 이동을 덮어쓴다.
action: >-
shortcut activation에서 route render를 일으키지 말고 #entry-title을 tabindex=-1 target으로
직접 focus/scroll한다. 또는 local-anchor hash를 hashchange router에서 별도로 처리한다.
360/768의 keyboard와 pointer에서 target이 viewport 상단 근처에 있고 activeElement가 target인지
회귀 검증한다.
limitations:
- "이 결과는 usability expert inspection이며 모집 사용자 관찰·인터뷰가 아니다."
- "학습 효과와 실제 초심자의 용어 이해, screen-reader별 발화 차이는 검증하지 않았다."
report-header:
bottom-line: >-
Revision 2의 dual-entry, 인과 학습 루프, keyboard focus·feedback·table semantics는 실제 Chrome에서
완주 가능했다. 그러나 360px Observe가 612px document overflow를 만들고 mobile entry shortcut도
목표로 이동하지 않아, usability pass 전 responsive·anchor routing 수정이 필요하다.
decision-needed: { needed: false, approver: null }
confidence:
value: Med
derived-from: exact-winner-hash-supplied-state-renders-and-live-chrome-expert-inspection-without-participants
risks:
- >-
참여자를 모집하지 않았으므로 초심자의 실제 과제 성공률, 이해도, 인지 부담과 학습 효과는
이 verdict가 검증하지 않는다.
- >-
Chrome accessibility tree와 keyboard flow는 점검했지만 screen reader 제품별 수동 발화 세션은
수행하지 않았다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T131305Z.report.yaml
grade: E3
note: "exact target id와 live SHA256=bcc557fcd7463349345bd06090868c4c2b6b792453d4e1dddd4ac60b0fa68674 확인"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "dual-entry, reducer gates, focus restoration, feedback와 hash routing을 실제 Chrome 동작과 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/styles.css
grade: E3
note: "360/768/1280 live geometry와 Observe min-content overflow 원인을 대조"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "Predict/Compare/Explain/Transfer/Complete의 360·1280 supplied state renders 직접 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w360.png
grade: E3
note: "360px Home supplied render 직접 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w768.png
grade: E3
note: "768px Home supplied render 직접 점검"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/preview.w1280.png
grade: E3
note: "1280px Home supplied render 직접 점검"
@@ -0,0 +1,150 @@
report-header:
bottom-line: >-
PASS — exact R3 target ENG-FE-20260718T135811Z /
735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0는 usability gate를 통과한다.
Chrome 150 독립 재현에서 360 Observe는 document 폭 360px를 유지한 채 trace만 292→560px로
내부 스크롤됐고, 360 keyboard·768 pointer entry shortcut, 양 entry의 shared Lab 합류,
Predict→Complete→Reset 전체 keyboard flow와 native/AX semantics가 모두 작동했다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: exact-hash-bound-must-read-plus-independent-live-chrome-and-ax-tree}
risks:
- "Chrome AX tree와 native semantics는 확인했지만 screen-reader 제품별 실제 발화 품질은 수동 검증하지 않았다."
- "통제된 task completion만 검증했으며 모집 사용자 이해도·학습 효과는 주장하지 않는다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/ENG-FE-20260718T135811Z.report.yaml
grade: E3
note: "검토 대상 manifest; sha256 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0를 재계산해 exact target을 결속했다."
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E3
note: "must-read predict·observe·compare·explain·transfer·complete의 360/1280 12개 렌더를 전부 직접 확인했다."
- command: "node -e <independent usability harness; /usr/bin/google-chrome Chrome/150.0.7871.128; no screenshot writes>"
exit-code: 0
grade: E2
note: "독립 로컬 HTTP/Chrome 세션에서 shortcut, containment, 양 entry, full keyboard, error correction, reset, DOM과 CDP AX tree를 assertion했다."
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: UX-RESEARCHER-20260718T140000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: UX-RESEARCHER
created-at: 20260718T140000Z
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T135811Z
target-prototype-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: d304420508e13d58140002ade85a20b5ba65f76807bcb3e1ffb58b53fc944d89
lens: usability
verdict: pass
findings: []
independence:
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/UX-RESEARCHER-20260718T135944Z.pkg.yaml
context-package-sha256: d304420508e13d58140002ade85a20b5ba65f76807bcb3e1ffb58b53fc944d89
prior-lens-reviews-consulted: false
prototype-modified: false
basis: "context package 전체와 그 must-read만 판단 근거로 사용했다."
exact-target-binding:
artifact-id: ENG-FE-20260718T135811Z
artifact-sha256: 735d588bef412dd3c59899d393562ae76a67a55bbe9f507ddf38eeab1481e9f0
prototype-id: hyeonworks-ledger-core-flow-r3
prototype-revision: 3
prototype-sha256: bd2bf67bddde92ae4fa0d329bd21e078625aa343ba59b78fec75f248111d22a1
runtime-files:
app-js-sha256: 4bd59d70b8470263a84c3605db8f61bc88d86eef297dd0643f57365f300ace1b
styles-css-sha256: 1fdf73a63e2d59019ae5a9c348b66858ecc7176daf9f3cc46fee4f91b84a0e10
verify-flow-sha256: e84666f38a7d672c75655b3ed8298e951a139436c84732e27eecad749dd5645e
live-browser-evidence:
browser: Chrome/150.0.7871.128
executable: /usr/bin/google-chrome
mode: "headless=new, actual Chrome, local-only HTTP"
viewport-360-observe:
document: {client-width: 360, scroll-width: 360, window-scroll-x: 0}
workbench-bounds: {left: 16, right: 344}
action-right: 327
trace-before: {client-width: 292, scroll-width: 560, scroll-left: 0}
trace-after-keyboard-arrow-right: {client-width: 292, scroll-width: 560, scroll-left: 120}
focus-after-scroll: trace-scroll
judgment: pass
entry-shortcuts:
viewport-360-keyboard:
visible-in-first-viewport: true
initial-top: 598.1875
tabs-from-document-start: 3
result: {active-id: entry-title, target-top: 37.6875, scroll-y: 1158, same-node: true, hash: ""}
document: {client-width: 360, scroll-width: 360}
focus-ring: {style: solid, width: 3px, color: "rgb(7, 93, 88)"}
judgment: pass
viewport-768-pointer:
shortcut-visible: true
initial-top: 555.875
result: {active-id: entry-title, target-top: 37.9375, scroll-y: 669, same-node: true, hash: ""}
document: {client-width: 768, scroll-width: 768}
judgment: pass
dual-entry:
concept-keyboard-result: {scenario-id: tx-lost-update-01, phase: "01 · Predict"}
symptom-keyboard-result:
revealed-clues-by-button: 4
final-focus-handoff: "a[data-start-lab]"
scenario-id: tx-lost-update-01
judgment: pass
full-keyboard-flow:
path: "home → symptom clues → shared Lab → Predict → Observe(6 steps) → Compare → Explain(error→keyboard correction→success) → Transfer(error→keyboard correction→success) → Complete → Reset"
phase-heading-focus:
- {phase: Predict, focused: "관찰 전에 원인 가설을 고정하세요."}
- {phase: Observe, focused: "두 세션을 한 단계씩 실행하세요."}
- {phase: Compare, focused: "가설과 실행 증거를 대조하세요."}
- {phase: Explain, focused: "세 증거 조각으로 인과를 구성하세요."}
- {phase: Transfer, focused: "새 재고 사례에 적용하세요."}
- {phase: Complete, focused: "세 인과 요소를 연결하고 새 사례에 적용했습니다."}
observe-announcements:
first: "실행 1/6. A가 공유값 100을 읽습니다. 현재 공유값 100."
last: "실행 6/6. B가 공유값을 70으로 덮어씁니다. 현재 공유값 70."
feedback-focus:
explain-error: {role: status, tabindex: -1, focused: true}
explain-success: {role: status, tabindex: -1, focused: true}
transfer-error: {role: status, tabindex: -1, focused: true}
transfer-success: {role: status, tabindex: -1, focused: true}
stale-feedback-after-keyboard-correction: absent
reset-result: {phase: Predict, focused-phase-heading: true, current-value: 100}
runtime-errors: []
judgment: pass
semantics:
chrome-ax-table:
name: "Lost Update의 단계별 세션, 연산, 값"
column-headers: [STEP, SESSION, OPERATION, VALUE]
row-header-count: 6
trace-region:
tabindex: 0
aria-label: "Lost Update 실행 표, 가로로 스크롤할 수 있습니다"
explanation:
fieldset-count: 3
ax-group-names:
- "1. 두 계산이 시작한 read 기준"
- "2. 공유값에 마지막으로 반영된 write"
- "3. 그 결과 보존되지 않은 변화"
ax-radio-count: 9
announcements: {aria-live: polite, aria-atomic: true}
feedback-role: status
skip-link-target: "#main"
focused-radio-ring: {style: solid, width: 3px, color: "rgb(7, 93, 88)"}
judgment: pass
usability-judgment:
containment: pass
entry-focus-and-scroll: pass
keyboard-operability-and-focus-restoration: pass
feedback-and-error-recovery: pass
native-and-accessibility-tree-semantics: pass
honest-guided-scenario-boundary: pass
blocking-findings: []
rationale: >-
요구된 R3 closure를 독립 Chrome에서 재현했으며 task completion을 막거나 오도하는 usability 결함을
발견하지 못했다. 남은 screen-reader 제품별 발화와 실제 사용자 학습 효과는 검증 범위 밖의 residual risk이지
이 prototype gate를 revise 또는 blocking으로 바꿀 근거가 아니다.
@@ -0,0 +1,98 @@
report-type: workflow-artifact
artifact-kind: design-lens-review
artifact-version: 1
identity:
artifact-id: UX-RESEARCHER-20260718T145000Z
workflow-id: hyeonworks-vnext-v1-direction
stage: design-direction-critique
producer-role-id: UX-RESEARCHER
created-at: 20260718T145000Z
attempt-id: 1
payload:
direction-cycle-id: hyeonworks-vnext-direction-cycle-1
target-prototype-id: ENG-FE-20260718T144700Z
target-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
reviewer-role-id: UX-RESEARCHER
reviewer-run-id: e821d474bc30c9a4d4b16925e1d596cfd8901397bb9d24b59b30f17ac0bd826c
lens: usability
verdict: pass
findings: []
review-scope:
- task-continuity
- keyboard-and-focus
- accessible-interaction-semantics
- responsive-containment
- route-safe-skip-link
checks:
exact-target-integrity:
result: pass
evidence: >-
winner report SHA 8b208279…와 그 보고서가 지목한 revision-4 manifest SHA
287bc732…를 로컬 바이트에서 다시 대조했다.
dual-entry-and-task-continuity:
result: pass
evidence: >-
concept와 symptom 진입은 동일 scenario-id의 Predict로 합류한다. Predict → Observe →
Compare → Explain → Transfer → Complete 전체 루프와 기본 6-step, fixture 4-step을
Chrome에서 완주했고, 오답 뒤 수정·재제출과 reset의 상태 경계도 통과했다.
keyboard-and-focus:
result: pass
evidence: >-
native radio/fieldset/legend, button과 link 활성화, 선택 후 동일 control 복귀,
단계 전환 시 heading 이동, Observe 실행 후 다음 action 이동, 오류·성공 feedback 이동을
실제 activeElement assertion으로 확인했다.
skip-link-state-preservation:
result: pass
evidence: >-
home, concept, 단서 2/4가 공개된 symptom, 기본 Lab Observe cursor 1, fixture Lab Observe
cursor 1에서 360/768/1280 keyboard activation을 실행했다. main node identity, hash,
scenario, phase, cursor, trace/clue text가 보존되고 현재 main이 tabindex=-1 focus와
viewport scroll target이 됐다.
responsive-and-table-access:
result: pass
evidence: >-
360px의 모든 학습 상태에서 document 폭이 viewport와 같고 Korean word가 음절 중간에서
갈라지지 않았다. Observe의 native table은 thead, scope=col/row, caption과 이름 있는
tabindex=0 내부 scroll region을 가지며 table만 가로 스크롤되고 작업대와 action은
viewport 안에 남았다. 768px와 1280px에서도 route/focus 흐름을 재검증했다.
feedback-and-boundaries:
result: pass
evidence: >-
aria-live announcer와 role=status feedback이 선택·실행·오답·정답 상태를 침묵 없이 전달하고,
답 변경 시 오래된 제출 feedback이 제거된다. 완료 문구는 통제된 구성·전이 통과와 실제 장애
진단·자유 서술 능력을 구분한다.
browser-run:
command: node scripts/verify_flow.cjs
result: pass
routes:
- home
- concept
- symptom-with-revealed-clue
- default-lab-observe-cursor-1
- fixture-lab-observe-cursor-1
viewports: [360, 768, 1280]
runtime-errors: 0
reviewed-state-images:
directory: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
states: [predict, observe, compare, explain, transfer, complete]
viewports: [360, 1280]
report-header:
bottom-line: >-
exact R4는 두 진입에서 같은 학습 과제로 합류하고, 키보드 포커스·피드백·모바일 내부 스크롤과
5-route×3-viewport skip-link 상태 보존을 실제 Chrome에서 통과했다. usability와
accessibility interaction 관점의 필수 수정은 남지 않아 pass로 판정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-target-source-inspection-live-chrome-e2e-and-twelve-state-renders}
risks:
- 실제 사용자 학습효과와 보조기기 제품별 발화 품질은 이번 prototype usability 검증 범위 밖이다.
- 360px Observe 표의 가로 스크롤은 키보드·터치로 조작 가능하지만 플랫폼별 scrollbar 노출성은 후속 사용자 관찰 항목이다.
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/scripts/verify_flow.cjs
grade: E3
note: "fresh Chrome pass: full learning loop, keyboard focus, semantics, overflow and 5-route×3-viewport state preservation"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/dist/app.js
grade: E3
note: "native interaction structure, reducer transitions, focus restoration and persistent local skip handler inspected"
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/state-previews
grade: E2
note: "Predict through Complete at 360 and 1280 visually inspected for readable sequence and containment"
@@ -0,0 +1,89 @@
report-type: workflow-artifact
artifact-kind: overall-design
artifact-version: 1
tier: standard
identity:
artifact-id: ARCH-SOLUTION-20260718T151500Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: ARCH-SOLUTION
created-at: 20260718T151500Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
source-artifact-refs:
- artifact-id: EXEC-CEO-20260718T111108Z
artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
- artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
summary: >-
Technology Atlas v1은 Lost Update 하나를 깊이 학습하는 zero-dependency 정적 웹 앱이다.
hash route와 명시적 scenario registry, 하나의 reducer가 홈·개념·증상·Lab·완료를 연결한다.
서버·계정·원격 데이터 없이 브라우저 내부 deterministic state만 사용해 제품 약속과 운영 범위를 일치시킨다.
architecture-boundaries:
- id: static-delivery
owns: HTML, CSS, JavaScript와 로컬 정적 서버
excludes: SSR, backend, account, API gateway, remote database
- id: route-controller
owns: hash route 해석, 화면 렌더, route-safe focus 이동
invariant: skip link는 hashchange를 발생시키지 않는다.
- id: scenario-registry
owns: tx-lost-update-01의 단계·trace·clue·transfer 콘텐츠
invariant: concept와 symptom entry가 동일 scenario object를 참조한다.
- id: lab-reducer
owns: entryMode, phase, cursor, prediction, explanation, transfer 상태 전이
invariant: entryMode는 orientation 메타데이터이고 합류 후 reducer를 분기하지 않는다.
- id: verification-fixture
owns: reducer 일반성과 route-state 회귀를 확인하는 짧은 fixture
excludes: 공개 학습 콘텐츠 주장
quality-attributes:
- {attribute: learning-integrity, target: Predict→Observe→Compare→Explain→Transfer 순서와 100·120·150·70 인과 증거 고정}
- {attribute: accessibility, target: 360·768·1280에서 keyboard completion, visible focus, semantic controls, no horizontal overflow}
- {attribute: honesty, target: guided simulation을 실제 진단·로그·원격 DB로 표현하지 않음}
- {attribute: reliability, target: network 없는 로컬 실행에서 deterministic full flow 반복 통과}
- {attribute: maintainability, target: 첫 공개 주제 동안 framework·schema platform 없이 읽을 수 있는 정적 모듈 유지}
- {attribute: performance, target: third-party runtime과 remote asset 요청 0개}
decisions:
- id: ADR-001-STATIC-SPA
choice: zero-dependency hash-routed static app
rationale: 현재 한 주제·로컬 상태 범위에 서버와 framework는 비용만 늘린다.
revisit: 콘텐츠가 세 개를 넘거나 server-backed progress가 승인될 때
- id: ADR-002-SHARED-REDUCER
choice: 두 entry가 동일 scenario와 reducer를 사용
rationale: CEO kill criterion인 두 제품화와 지식 불일치를 구조적으로 막는다.
revisit: 하지 않음; 제품 불변식
- id: ADR-003-STATE-IN-MEMORY
choice: 진행 상태는 현재 세션 메모리에만 유지
rationale: persistence·privacy·migration 설계를 만들지 않고 정직한 범위를 유지한다.
revisit: 사용자 계정/재방문 진행 저장이 별도 결정으로 승인될 때
- id: ADR-004-NATIVE-CONTROLS
choice: button, textarea, anchor, main을 native semantics로 사용
rationale: custom widget의 접근성 복잡도를 피한다.
revisit: 기능적으로 native control로 표현할 수 없는 상호작용이 생길 때
dependencies: []
compatibility-assumptions:
- 최신 evergreen Chrome 계열에서 ES2019 수준 JavaScript와 hashchange를 지원한다.
- 배포 호스트는 정적 파일과 index.html을 제공하며 원격 서비스는 필요하지 않다.
- approved-design-direction의 exact token·interaction·accessibility 계약이 ui-design과 일치한다.
- 실제 사용자 학습성과 측정은 후속 제품 분석이며 v1 자동 검증 범위가 아니다.
conflicts: []
handoff:
implementation: hyeonworks/app 아래의 독립 실행 가능한 정적 앱
required-verification: full dual-entry browser flow, viewport matrix, contrast, keyboard/focus, static network boundary
report-header:
bottom-line: >-
v1은 하나의 deterministic reducer를 중심으로 한 zero-dependency 정적 앱으로 설계한다.
현재 범위에 backend·persistence·범용 콘텐츠 플랫폼을 추가하지 않으면서 학습 깊이와 접근성을 코드로 검증한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-ceo-basis-approved-direction-and-live-prototype}
risks:
- 단일 app module은 세 번째 주제부터 편집 충돌이 늘 수 있다.
- 메모리 진행 상태는 새로고침 뒤 복구되지 않으며 이는 의도된 v1 경계다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: exact accepted product decision and scope boundaries
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: browser-tested implementation evidence for the architecture
@@ -0,0 +1,68 @@
report-type: workflow-artifact
artifact-kind: approved-design-direction
artifact-version: 1
tier: standard
identity:
artifact-id: DES-DIRECTOR-20260718T151300Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: DES-DIRECTOR
created-at: 20260718T151300Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
direction-approval:
child-workflow-id: hyeonworks-vnext-v1-direction
approved-direction-id: DES-DIRECTOR-20260718T151100Z
approved-direction-sha256: ce8414dff0472e61961ea77b5930e1e706cf7e4596f8a7d230f3cb4ac18f9abb
selected-direction-id: ledger-studio
winner-prototype-id: ENG-FE-20260718T144700Z
winner-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
seven-lens-panel-id: DES-DIRECTOR-20260718T150500Z
panel-verdict: pass
visual-thesis: >-
전문 저널의 질문과 causal ledger를 결합해 사용자의 예측과 실제 실행 증거의 차이를 읽게 한다.
비대칭 editorial spread가 제품의 깊이를 표현하고 일반 dashboard·terminal 은유는 사용하지 않는다.
locked-invariants:
- LI-EDITORIAL-EVIDENCE
- LI-DUAL-ENTRY-SHARED-CORE
- LI-EVIDENCE-LEARNING-LOOP
- LI-HONEST-BOUNDARY
- LI-ACCESSIBLE-READING
interaction-contract:
entries: [concept, symptom-debugger]
shared-scenario: tx-lost-update-01
shared-loop: [Predict, Observe, Compare, Explain, Transfer]
route-safe-skip-link: true
fixture-boundary: verification-only
token-contract:
paper: '#f3efe4'
ink: '#1b201e'
deep: '#202724'
observed: '#ad4031'
accent-on-deep: '#ff8873'
pending: '#535c58'
control-border: '#88877e'
normal-text-contrast-min: '4.5:1'
essential-control-contrast-min: '3:1'
scope-boundary:
included: [static educational UI, deterministic Lost Update scenario, local progress state, browser accessibility]
excluded: [real log ingestion, remote database connection, AI diagnosis, accounts, server persistence, public API]
handoff-rule: ui-design과 구현은 이 exact basis와 interaction/token/accessibility 계약을 바꾸지 않는다.
report-header:
bottom-line: >-
7-lens를 통과한 Ledger Studio revision 4를 부모 설계의 유일한 UI 방향으로 승격한다.
두 입구·하나의 Lab, 다섯 단계 학습 루프, 정직한 guided simulation 경계를 구현 계약으로 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-approved-direction-and-seven-lens-browser-backed-panel}
risks:
- 구현 단계가 두 entry를 별도 reducer로 분기하면 승인 방향이 훼손된다.
- 세 번째 주제 전까지는 범용 콘텐츠 플랫폼을 미리 설계하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T151100Z.report.yaml
grade: E3
note: exact accepted approved-direction bound to parent
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T150500Z.report.yaml
grade: E3
note: exact seven-lens pass panel
@@ -0,0 +1,86 @@
report-type: workflow-artifact
artifact-kind: ui-design
artifact-version: 1
tier: standard
identity:
artifact-id: DES-VISUAL-20260718T151500Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: DES-VISUAL
created-at: 20260718T151500Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
user-flows:
- id: FLOW-CONCEPT
steps: [홈에서 개념 입구 선택, 격리 수준 orientation 읽기, 같은 Lab 시작, Predict, Observe, Compare, Explain, Transfer]
completion: 사용자가 Lost Update 인과를 서술하고 새 사례 전이를 제출한다.
- id: FLOW-SYMPTOM-DEBUGGER
steps: [홈에서 증상 입구 선택, 결과 70 단서 공개, 후보 메커니즘 확인, 같은 Lab 시작, Predict, Observe, Compare, Explain, Transfer]
completion: 실제 진단이 아니라 guided scenario 검증임을 이해한 채 같은 Lab을 완주한다.
- id: FLOW-KEYBOARD
steps: [skip link로 현재 main 이동, 모든 control을 Tab·Enter·Space로 조작, 입력 focus 유지, Transfer 완료]
completion: pointer 없이 전체 경로가 완주된다.
screen-inventory:
- {screen-id: HOME, purpose: 제품 약속과 두 입구를 한 화면에서 제시, route: '#/'}
- {screen-id: ORIENT-CONCEPT, purpose: isolation 약속에서 질문을 형성, route: '#/orient/concept'}
- {screen-id: ORIENT-SYMPTOM, purpose: 70이라는 증상과 후보 단서를 단계적으로 공개, route: '#/orient/symptom'}
- {screen-id: LAB, purpose: 다섯 단계 학습 루프와 causal ledger 실행, route: '#/lab/tx-lost-update-01'}
- {screen-id: COMPLETE, purpose: 설명과 transfer의 완료 상태를 정직하게 요약, route: same Lab state}
state-matrix:
- {state: home, required: [two distinct entries, shared-Lab statement, guided-learning boundary]}
- {state: symptom-hidden, required: [single reveal control, no premature diagnosis claim]}
- {state: symptom-revealed, required: [70 clue, candidate mechanism, same-Lab CTA]}
- {state: predict, required: [editable prediction, locked future evidence]}
- {state: observe-running, required: [100·120·150·70 trace, cursor progression, pending labels]}
- {state: compare, required: [prediction versus observation, lost write causal relation]}
- {state: explain, required: [user-authored causal explanation, prompt does not reveal full answer first]}
- {state: transfer, required: [new-case prompt, user-authored transfer, completion boundary]}
accessibility:
landmarks: skip link targets the currently rendered main without route mutation
keyboard: every interactive state is reachable and operable with native controls
focus: visible focus ring and deterministic focus restoration after render
contrast: normal text 4.5:1 minimum and essential control boundary 3:1 minimum on actual surface
color-independence: value, transaction, observed, pending, and completion have text/shape labels
responsive: 360·768·1280 DOM order preserved with zero document overflow
motion: essential meaning does not depend on animation; reduced motion remains usable
language: Korean words are not split into single-character vertical fragments
design-system-bindings:
- {token: surface.paper, value: '#f3efe4', use: reading canvas}
- {token: content.ink, value: '#1b201e', use: primary paper text}
- {token: surface.deep, value: '#202724', use: evidence Lab}
- {token: evidence.observed, value: '#ad4031', use: observed evidence on light surfaces}
- {token: evidence.on-deep, value: '#ff8873', use: highlighted evidence on deep surface}
- {token: evidence.pending, value: '#535c58', use: pending trace with computed AA contrast}
- {token: control.border, value: '#88877e', use: essential field and choice boundary}
- {component: editorial-spread, rule: asymmetric thesis and ledger; no generic card grid}
- {component: causal-ledger, rule: mono evidence sequence with semantic labels}
- {component: phase-rail, rule: five ordered phases; current and complete text labels}
visual-rationale: >-
기술을 깊게 배운다는 약속을 화려한 dashboard 대신 읽고 표시하고 대조하는 편집 기록으로 표현한다.
serif 논제는 질문의 무게를, mono ledger는 실행 증거의 정밀함을, coral은 예측과 다른 관찰 순간을 담당한다.
모바일에서는 장식적 비대칭보다 인과 읽기 순서를 우선해 단일 열로 수렴한다.
approved-direction-binding:
artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
prototype-binding:
manifest: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
manifest-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77
winner-id: ENG-FE-20260718T144700Z
report-header:
bottom-line: >-
홈·두 orientation·공통 Lab·완료를 하나의 editorial evidence 시스템으로 명세했다.
다섯 단계 상태, keyboard/focus, 실제 surface 대비와 3601280px 읽기 순서를 구현 가능한 계약으로 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: approved-direction-and-r4-browser-viewport-contrast-matrix}
risks:
- editorial 밀도가 모바일에서 과해지지 않도록 각 phase에는 현재 필요한 control만 노출해야 한다.
- fixture route는 검증 전용으로 공개 제품 내비게이션에 노출하지 않는다.
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: exact R4 manifest with three bound receipts
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T145005Z.report.yaml
grade: E3
note: independent visual-craft pass across viewports and states
@@ -0,0 +1,66 @@
report-type: workflow-artifact
artifact-kind: ui-implementation
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T152400Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T152400Z
attempt-id: 1
payload:
summary: >-
승인된 Ledger Studio revision 4를 hyeonworks/app의 독립 실행 가능한 zero-dependency 정적 앱으로 승격했다.
배포 dist, 로컬 서버, static integrity 검증, 실제 Chrome full-flow 검증과 확인 스크린샷을 포함한다.
source-revision:
kind: source-bundle
sha256: e27731ba712e1c6e7bde4d8600d9ff5abefea09f6909e5b8cbd7153958196ea6
input-bindings:
overall-design: {artifact-id: ARCH-SOLUTION-20260718T151500Z, sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83}
approved-design-direction: {artifact-id: DES-DIRECTOR-20260718T151300Z, sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885}
ui-design: {artifact-id: DES-VISUAL-20260718T151500Z, sha256: c1ed02e6b2b128c47f8dd3406f81b690b3d80636fc74eacbf442be7d667c8a4e}
prd: {artifact-id: PROD-PM-20260718T152100Z, sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627}
acceptance-criteria: {artifact-id: PROD-PO-20260718T152300Z, sha256: ee4ac8fb7807c047b655c1b012b7604431cf075980aa9b41c4018ad2c5681176}
delivered:
app-root: hyeonworks/app
deployable: hyeonworks/app/dist
local-server: hyeonworks/app/scripts/serve.cjs
static-verifier: hyeonworks/app/scripts/verify_static.cjs
browser-verifier: hyeonworks/app/scripts/verify_flow.cjs
screenshots: hyeonworks/app/verification/screenshots
implementation-contract:
runtime-dependencies: 0
remote-assets: 0
public-scenarios: [tx-lost-update-01]
entries: [concept, symptom-debugger]
shared-state-engine: learningReducer
phases: [Predict, Observe, Compare, Explain, Transfer]
supported-viewports: [360, 768, 1280]
honest-boundary: guided simulation only; no live diagnosis, log ingestion, AI, or remote DB
non-goals-preserved: [backend, persistence, account, public API, multi-topic platform, real incident diagnosis]
rollback: hyeonworks/app은 승인 prototype을 변경하지 않은 독립 디렉터리이므로 app 디렉터리만 제외하면 원형이 보존된다.
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- {step-id: implement-ui, status: completed, output-binding: current-artifact}
report-header:
bottom-line: >-
승인 prototype을 그대로 보존하면서 hyeonworks/app에 배포 가능 dist·zero-dependency 서버·정적/E2E 검증을 갖춘 실제 앱을 구현했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-spec-byte-identical-r4-dist-and-independent-app-audit}
risks:
- 자동 접근성 실행은 Chrome 중심이며 실제 스크린리더 발화는 잔여 수동 검증 범위다.
- verification fixture hash route는 내비게이션에 노출되지 않지만 dist에 포함돼 있다.
evidence:
- source-uri: hyeonworks/app/README.md
grade: E3
note: runnable production handoff
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: full browser regression suite
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: exact approved winner file hashes
@@ -0,0 +1,97 @@
report-type: workflow-artifact
artifact-kind: completion-record
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T152600Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T152600Z
attempt-id: 1
payload:
summary: >-
Technology Atlas의 첫 공개 딥다이브를 hyeonworks/app에 완성했다. 두 entry는 동일 Lost Update Lab과
reducer로 합류하고 Predict→Observe→Compare→Explain→Transfer를 완주한다. 실제 앱 source bundle은
정적 integrity와 headless Chrome 전체 흐름으로 검증됐다.
source-revision:
kind: source-bundle
sha256: e27731ba712e1c6e7bde4d8600d9ff5abefea09f6909e5b8cbd7153958196ea6
primary-artifacts:
- {path: hyeonworks/app/dist/index.html, kind: deployable-html, sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861}
- {path: hyeonworks/app/dist/styles.css, kind: production-css, sha256: 71e51b907f5b01c480eb348df35db17995fc45269db36ed6a1afd113e3f29f58}
- {path: hyeonworks/app/dist/app.js, kind: production-javascript, sha256: b148057f4d25ba6afb4170c82f5c832263563feaf99a345a0d79e350d83fbed3}
- {path: hyeonworks/app/scripts/serve.cjs, kind: local-static-server, sha256: 7d60ac663b8e91d19a94fb90a3e1fb4564bcd56fce631e7cb0a998565a5f17e7}
- {path: hyeonworks/app/scripts/verify_static.cjs, kind: static-verifier, sha256: 6bc257fae1b72ce4206f02021f122965833a8d959124cb23e690c401ed7dd842}
- {path: hyeonworks/app/scripts/verify_flow.cjs, kind: browser-e2e-verifier, sha256: b552c6fe5b2336a58a9867d08190aa8d94378f33c697b7712834459f4af2f160}
- {path: hyeonworks/app/package.json, kind: runnable-package-manifest, sha256: ad1a4310e6802db564a23969045fc52d09109190f6fa0fdb78d73798d4cf5aea}
- {path: hyeonworks/app/README.md, kind: operator-handoff, sha256: 9dd5adfc0dc7593a23d2b578edca13bec0384a615f210fd54dd3c31abc96bc9e}
- {path: hyeonworks/app/verification/approved-r4.json, kind: approved-baseline-binding, sha256: e83e47797fb8871cd0dbbdefc5acac2c4b9e9f418f7446d28eb7f27139a6f91f}
acceptance-criteria-coverage:
- criterion-id: AC-DUAL-ENTRY-SHARED-LAB
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-FULL-LEARNING-LOOP
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-CAUSAL-LEDGER-VALUES
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706, vr-1784388251-82db6d30415d]
- criterion-id: AC-A11Y-RESPONSIVE-STATE
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-DETERMINISTIC-OFFLINE
status: Passed
evidence-receipt-ids: [vr-1784388251-82db6d30415d, vr-1784388271-d3001b5d8706]
verification-receipt-ids:
- vr-1784388251-82db6d30415d
- vr-1784388271-d3001b5d8706
verification-summary:
static: approved R4 file hashes, zero runtime dependency, local-only assets, semantic shell and token markers passed.
browser: dual entry, complete default and fixture loops, error/retry, 360·768·1280, keyboard/focus/skip state, contrast and zero browser errors passed.
contrast: {lab-id: 7.1437, dark-boundary: 5.6157, pending: 5.4403, choice-border: 3.5575, textarea-border: 3.5575}
remaining-risks:
- severity: Low
item: 자동 browser 검증은 Chrome 엔진 중심이며 실제 스크린리더 발화는 수동 잔여 검증이다.
blocking: false
- severity: Low
item: 검증 전용 fixture hash route가 dist에 포함되지만 공개 내비게이션에는 노출되지 않는다.
blocking: false
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- step-id: implement-ui
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: ENG-FE-20260718T152400Z, sha256: 849cde3678402dcc84fb4020de2b1f53f34139af5e2e6073769b3389352a053a}
- {step-id: verify-ui, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: verify-ui
gate-id: ui-verified
verdict: Passed
evidence-refs: [vr-1784388251-82db6d30415d, vr-1784388271-d3001b5d8706, payload.acceptance-criteria-coverage]
report-header:
bottom-line: >-
COMPLETED — 실제 production source bundle e27731ba…가 여섯 수용 기준을 모두 통과했고,
배포 파일·서버·검증기·실행 안내까지 hyeonworks/app에 완성됐다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: typed-static-and-full-browser-receipts-plus-independent-temp-copy-audit}
risks:
- Chrome 이외 엔진과 실제 스크린리더 발화는 비차단 잔여 위험이다.
- 실제 사용자 학습효과는 출시 후 관찰 대상이며 이 완료 기록이 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: typed build receipts bound to workflow and source revision
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: executable full-flow assertions
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: exact approved baseline hashes
@@ -0,0 +1,86 @@
report-type: workflow-artifact
artifact-kind: completion-record
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T153900Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T153900Z
attempt-id: 2
supersedes-report-id: ENG-FE-20260718T152600Z
payload:
summary: >-
verification에서 발견한 responsive reflow와 진행 중 smooth scroll 사이의 skip-link 타이밍 회귀를 닫은
production hardening revision이다. 현재 main focus·route·학습 상태 보존은 그대로 유지하고,
main 시작과 첫 제목의 실제 가시성을 viewport layout 안정화 뒤 검증한다.
source-revision:
kind: source-bundle
sha256: 276b49194885f7f2c7072732095294c36f804512032e20af54c1234ca3de26cb
primary-artifacts:
- {path: hyeonworks/app/dist/index.html, kind: deployable-html, sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861}
- {path: hyeonworks/app/dist/styles.css, kind: production-css, sha256: 71e51b907f5b01c480eb348df35db17995fc45269db36ed6a1afd113e3f29f58}
- {path: hyeonworks/app/dist/app.js, kind: production-javascript, sha256: ff85c317c9579e341a0f98cf4371a64937b13be2a21c2ac244466a630dfe6e17}
- {path: hyeonworks/app/scripts/serve.cjs, kind: local-static-server, sha256: 7d60ac663b8e91d19a94fb90a3e1fb4564bcd56fce631e7cb0a998565a5f17e7}
- {path: hyeonworks/app/scripts/verify_static.cjs, kind: static-verifier, sha256: 888f43084a2a9fdd4678868bdb4f6289556c0d5e4d4a9e74442e19c9d9925e26}
- {path: hyeonworks/app/scripts/verify_flow.cjs, kind: browser-e2e-verifier, sha256: 3b3816cd70e5f6061059cc667feb10d8b0a84c1dbbe2d734c950dc7e37c47147}
- {path: hyeonworks/app/package.json, kind: runnable-package-manifest, sha256: ad1a4310e6802db564a23969045fc52d09109190f6fa0fdb78d73798d4cf5aea}
- {path: hyeonworks/app/README.md, kind: operator-handoff, sha256: 8ec55a62f70fc7e3b8c1e794b96fd9ab22681be30e43ba391360ccd79fb74ad9}
- {path: hyeonworks/app/verification/approved-r4.json, kind: baseline-and-hardening-provenance, sha256: 08a414ab22b97394477106df6ab2794b3f55b2914b51ed3191527f503993a8e1}
acceptance-criteria-coverage:
- {criterion-id: AC-DUAL-ENTRY-SHARED-LAB, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-FULL-LEARNING-LOOP, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-CAUSAL-LEDGER-VALUES, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d, vr-1784389087-77f25d28672d]}
- {criterion-id: AC-A11Y-RESPONSIVE-STATE, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-DETERMINISTIC-OFFLINE, status: Passed, evidence-receipt-ids: [vr-1784389087-77f25d28672d, vr-1784389110-f7cccb4db1b0]}
verification-receipt-ids:
- vr-1784389079-234063b3e56d
- vr-1784389087-77f25d28672d
- vr-1784389110-f7cccb4db1b0
revision-closure:
detected-by: vr-1784388413-a071334f9199 and reliability reruns
cause: exact-pixel assertion raced responsive header reflow while an earlier smooth scroll was still active.
production-fix: skip activation cancels smooth behavior, directly aligns current main, and holds auto scrolling through a settle window.
verifier-fix: viewport layout settles for two animation frames and checks main-start tolerance plus first-heading visibility instead of brittle exact-zero pixels.
repeat-proof: two unwrapped npm test passes followed by source-bound AC, static, and reliability receipts.
contrast: {lab-id: 7.1437, dark-boundary: 5.6157, pending: 5.4403, choice-border: 3.5575, textarea-border: 3.5575}
remaining-risks:
- {severity: Low, item: Chrome 중심 자동화이며 실제 스크린리더 발화와 비-Chromium 엔진은 수동 잔여 검증이다., blocking: false}
- {severity: Low, item: 검증 fixture hash route가 dist에 포함되지만 공개 내비게이션에는 노출되지 않는다., blocking: false}
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- step-id: implement-ui
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: ENG-FE-20260718T152400Z, sha256: 849cde3678402dcc84fb4020de2b1f53f34139af5e2e6073769b3389352a053a}
- {step-id: verify-ui, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: verify-ui
gate-id: ui-verified
verdict: Passed
evidence-refs: [vr-1784389079-234063b3e56d, vr-1784389087-77f25d28672d, vr-1784389110-f7cccb4db1b0, payload.revision-closure]
report-header:
bottom-line: >-
COMPLETED revision 2 — verification에서 발견된 skip-link/reflow 타이밍 회귀를 재현·교정했고,
최종 source 276b4919…가 전체 flow·static integrity·반복 reliability를 모두 통과했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: reproduced-failure-source-bound-fix-and-consecutive-full-suite-passes}
risks:
- 비-Chromium과 실제 스크린리더 발화는 비차단 잔여 위험이다.
- 실제 사용자 학습효과는 출시 후 관찰 대상이며 자동 검증으로 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: final source-bound AC, test and reliability receipts plus preserved failure receipts
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: responsive layout settle, main-state preservation and first-heading visibility assertions
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: approved winner provenance and explicit post-approval production hardening
@@ -0,0 +1,50 @@
report-type: workflow-artifact
artifact-kind: workload-profile
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260718T110454Z-1
workflow-id: hyeonworks-vnext-v1
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260718T110454Z
attempt-id: 2
payload:
surfaces:
ui: true
public-api: false
persistence: false
infrastructure: false
risk:
security-bearing: false
data-migration: false
external-side-effect: false
risk-level: Med
reversibility: two-way-door
blast-radius: single-role
privacy: false
regulatory: false
slo-impact: false
pii: false
data-residency: false
customer-impact: false
revenue-impact: false
required-capabilities: [product-strategy, learning-design, product-design, frontend-engineering, accessibility-qa]
product-feature: true
context-scope: company
delivery-profile:
target-repo: hyeonworks
application-root: hyeonworks/app
implementation: "browser-local deterministic learning product"
verification: [static-contract, production-build, browser-e2e, keyboard-a11y, responsive-render]
report-header:
bottom-line: >-
UI-bearing 표준 제품 작업이다. 외부 API·영속성·인프라·개인정보는 범위 밖이며, frontend와 학습 설계,
접근성 QA에 집중한다.
decision-needed: { needed: false, approver: EXEC-CEO }
confidence: { value: Med, derived-from: explicit-company-context-and-bounded-surface-contract }
risks:
- "브라우저 로컬 시뮬레이션을 실제 데이터베이스 동작 보증처럼 표현하면 신뢰를 훼손한다."
evidence:
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: "공식 제품 범위·trust boundary·project manifest"
@@ -0,0 +1,48 @@
report-type: workflow-artifact
artifact-kind: decision-brief
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260718T110454Z
workflow-id: hyeonworks-vnext-v1
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260718T110454Z
attempt-id: 1
payload:
mode: divergent
tier: standard
candidate-families: [FAM-STRATEGY, FAM-PRODUCT, FAM-DESIGN, FAM-ARCHITECTURE-TECH, FAM-ENG-FRONTEND, FAM-QA]
objective: >-
확정된 Atlas + limited symptom-first shared-core 전략을 실제로 학습 가능한 Hyeonworks vNext 제품으로
설계·구현한다. 첫 범위는 Transaction Isolation / Lost Update이며 두 진입은 동일 실험을 공유한다.
company-context-ref: org-os/01-company/company-context.yaml
venture-decision-id: EXEC-CEO-20260718T110148Z
company-decision-ids:
- DEC-HW2-HYBRID-001
- DEC-HW2-SCOPE-001
- DEC-HW2-LEARNING-001
- DEC-HW2-BOUNDARY-001
required-outcomes:
- "홈에서 개념으로 시작하기와 증상에서 시작하기의 차이가 명확하다"
- "두 진입이 동일 Lost Update scenario와 학습 상태 엔진으로 합류한다"
- "Predict → Observe → Compare → Explain → Transfer를 키보드와 모바일로 완주한다"
- "증상 단서를 단계적으로 좁히되 실제 장애 확정 도구로 표현하지 않는다"
non-goals:
- "다중 도메인 증상 taxonomy, 실제 로그·DB 연결, AI 진단, 계정·결제·CMS"
- "완성되지 않은 기술 주제를 활성 콘텐츠처럼 표시"
report-header:
bottom-line: >-
새 제품 cascade는 과거 UI를 복원하지 않고, 승인된 hybrid 전략을 바탕으로 discovery부터 새 옵션을
발산한 뒤 디자인 방향·설계·개발·브라우저 검증까지 표준 등급으로 진행한다.
decision-needed: { needed: false, approver: HUMAN-001 }
confidence: { value: Med, derived-from: accepted-company-strategy-with-unbuilt-product }
risks:
- "두 진입이 별도 flow와 콘텐츠로 갈라지면 과도한 설계가 된다."
- "Lost Update 한 사례의 깊이가 부족하면 Atlas도 Debugger도 피상적으로 보일 수 있다."
evidence:
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: "새 HUMAN-001 승인 hybrid 전략의 공식 SoT"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "표준 3안×9-gate 기반 venture decision"
@@ -0,0 +1,99 @@
report-type: workflow-artifact
artifact-kind: executive-decision-packet
artifact-version: 1
tier: standard
identity:
artifact-id: EXEC-CEO-20260718T111108Z
workflow-id: hyeonworks-vnext-v1
stage: decide
producer-role-id: EXEC-CEO
created-at: 20260718T111108Z
attempt-id: 3
payload:
basis-artifact-id: STR-ANALYST-20260718T110705Z
basis-artifact-sha256: df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3
recommendation: >-
GO — OPT-DUAL-PORTAL을 선택한다. 홈은 "개념을 알고 있어요"와 "증상만 알고 있어요"라는
두 출발점을 명확히 제공하되, 짧은 orientation 뒤 동일 tx-lost-update-01 Lab Brief로 합류한다.
이후 URL·scenario data·reducer·학습 콘텐츠·진행 상태·Transfer 과제는 완전히 동일하다.
Case File의 단서 전개는 공통 Lab 서사에만 차용하고, 큰 Atlas 지도는 완성 딥다이브 3개 전까지 보류한다.
selected-option-id: OPT-DUAL-PORTAL
evaluation-criteria:
- "처음 보는 사용자가 10초 안에 제품 목적과 두 출발점의 차이를 이해하는가"
- "두 진입이 하나의 shared core로 합류해 1인 운영성을 지키는가"
- "Lost Update의 깊이 있는 학습과 새 사례 전이를 가능하게 하는가"
- "실제 장애 확정 도구로 오인되지 않는가"
- "360px·키보드·reduced motion까지 단순하고 견고하게 구현 가능한가"
option-evaluations:
- option-id: OPT-DUAL-PORTAL
scores: {clarity: 5, learning-depth: 4, scope-control: 4, shared-core: 5, accessibility: 5}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- "EXEC-CEO-20260718T110148Z@cb7e0e18a80cf6f25bd8be4eeea3933e616e24976b3b27f5c352f93f9bfccf8c"
- option-id: OPT-CASE-FILE
scores: {clarity: 3, learning-depth: 5, scope-control: 5, shared-core: 5, accessibility: 4}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- option-id: OPT-ATLAS-WITH-DEBUG-DOCK
scores: {clarity: 3, learning-depth: 4, scope-control: 3, shared-core: 4, accessibility: 3}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
tradeoffs:
- "두 출발점의 명확성을 얻는 대신 홈 선택 부담을 감수하고, '두 입구, 하나의 Lab' 문구로 완화한다."
- "Atlas의 장기 확장성을 짧은 breadcrumb와 roadmap으로만 보여주고 과장된 지도를 만들지 않는다."
- "Case File의 기억 가능한 단서 전개를 취하지만 탐정·incident·확정 진단 시각 언어는 사용하지 않는다."
- "entryMode는 유입 메타데이터로만 유지하고 합류 후 reducer 동작을 분기하지 않는다."
dissent:
- "순수 구현 효율은 OPT-CASE-FILE이 더 높으며 Dual Portal이 두 제품처럼 보이면 선택 근거가 사라진다."
- "사용자 실측 전에는 두 카드가 실제 시작률을 높이는지 알 수 없다."
- "한 주제로 Atlas라는 이름을 쓰는 것 자체가 과장으로 느껴질 가능성이 있다."
kill-criteria:
- "두 진입에 별도 URL progress·scenario·reducer·설명 콘텐츠가 생긴다."
- "사용자 5명 중 3명 이상이 두 출발점의 차이 또는 같은 Lab으로 합류한다는 사실을 설명하지 못한다."
- "사용자 5명 중 3명 이상이 실제 장애 확정 도구로 오인한다."
- "학습 후 3명 이상이 동일 값 읽기 → 독립 계산 → 마지막 쓰기 덮어쓰기 인과를 설명하지 못한다."
- "360px 또는 키보드 전용 환경에서 Transfer까지 완주되지 않는다."
revisit-conditions:
- "Dual Portal 선택 혼란이 관찰되면 OPT-CASE-FILE 단일 화면으로 축소한다."
- "완성형 딥다이브가 3개 이상 쌓이면 OPT-ATLAS-WITH-DEBUG-DOCK 또는 실제 Atlas map을 재평가한다."
- "증상 진입 완주율과 학습 전이가 유지되면 같은 콘텐츠 모델의 두 번째 증상을 검토한다."
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- "EXEC-CEO-20260718T110148Z@cb7e0e18a80cf6f25bd8be4eeea3933e616e24976b3b27f5c352f93f9bfccf8c"
- "org-os/01-company/company-context.yaml"
method-execution:
role-id: EXEC-CEO
method-id: decide-direction
contract-sha256: b5d36495b0e7e9a82fab77979a91c0144b1c51dbe1e6153352b6162272bb0d46
step-results:
- {step-id: read-evidence, status: completed, output-binding: current-artifact}
- {step-id: evaluate-options, status: completed, output-binding: current-artifact}
- {step-id: converge-decision, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: converge-decision
gate-id: single-direction
verdict: Passed
evidence-refs: ["payload.selected-option-id", "payload.option-evaluations", "payload.dissent"]
decisions:
- decision-id: HWVNEXT-PRODUCT-DIRECTION-001
selected-option-id: OPT-DUAL-PORTAL
alternatives:
- {option-id: OPT-DUAL-PORTAL}
- {option-id: OPT-CASE-FILE}
- {option-id: OPT-ATLAS-WITH-DEBUG-DOCK}
report-header:
bottom-line: >-
CEO는 Dual Portal을 선택한다. 두 입구를 명확히 보여주되 orientation 직후 하나의 Lost Update Lab으로
합류하고, Case File은 공통 Lab 서사에만 차용하며 큰 Atlas 지도는 보류한다.
decision-needed: { needed: true, approver: HUMAN-001 }
confidence: { value: Med, derived-from: three-independent-lens-reviews-and-accepted-grounding }
risks:
- "두 개의 카드가 두 제품으로 인식될 수 있다."
- "사용자 행동 데이터가 없어 선택 명확성은 디자인·브라우저 검증 후에도 실제 사용자 테스트가 필요하다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/STR-ANALYST-20260718T110705Z.report.yaml
grade: E3
note: "세 experience option과 tradeoff가 보존된 accepted grounding"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "accepted company strategy and shared-core boundaries"
@@ -0,0 +1,45 @@
report-type: workflow-artifact
artifact-kind: release-decision
artifact-version: 1
tier: standard
identity:
artifact-id: HUMAN-001-20260718T155500Z
workflow-id: hyeonworks-vnext-v1
stage: acceptance
producer-role-id: HUMAN-001
created-at: 20260718T155500Z
payload:
release-decision: {status: Approved}
unresolved-critical-risks: false
reviewed-completion-artifact-id: ENG-FE-20260718T153900Z
reviewed-completion-artifact-sha256: cec169bd196221d1fe42f29d8f570f277a1872331eb88c489b4477aff1271d44
reviewed-quality-event-id: wfe-20260718T155340Z-3d57e932
reviewed-quality-artifact-id: QA-20260718T155400Z
reviewed-quality-artifact-sha256: 9882d710d65c85ef18ba45deb148a535f1c399b8f3a87ccbb02e42afd99bdfe8
approval-basis:
- full learning flow and responsive keyboard behavior passed on the corrected exact source revision
- static production integrity and deterministic repeat suite passed in the new verification epoch
- the previously blocking skip-link timing regression is resolved with no open blocker
residual-risks:
- {severity: Low, blocking: false, item: non-Chromium engines and actual screen-reader speech remain manual follow-up coverage}
- {severity: Low, blocking: false, item: learning outcome effectiveness requires post-release user observation}
authority-note: >-
The user explicitly requested that the complete workflow be run under an assumed approval so the finished result can be inspected.
report-header:
bottom-line: >-
APPROVED — the corrected completion and its exact current quality event satisfy the standard-tier release gates;
no unresolved Critical risk or open blocker remains.
decision-needed: {needed: false, approver: HUMAN-001}
confidence: {value: High, derived-from: exact-completion-quality-binding-and-user-assumed-approval}
risks:
- Remaining coverage gaps are Low and explicitly non-blocking.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ENG-FE-20260718T153900Z.report.yaml
grade: E3
note: accepted corrected completion exact revision
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/QA-20260718T155400Z.report.yaml
grade: E3
note: current Passed quality gate with resolved blocker
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: fresh source-bound verification receipts
@@ -0,0 +1,114 @@
report-type: workflow-artifact
artifact-kind: opportunity-solution-tree
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T151700Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T151700Z
attempt-id: 1
payload:
root-outcome:
id: OUTCOME-LOST-UPDATE-TRANSFER
statement: >-
사용자는 guided Lost Update 사례를 끝낸 뒤, 동일 값 읽기 → 독립 계산 → 마지막 쓰기 덮어쓰기라는
인과를 증거 값으로 설명하고 새로운 재고 사례에서 사라진 변경을 스스로 찾아낸다.
observable-completion:
- 예측을 관찰 전에 기록한다.
- 100·120·150·70과 여섯 실행 단계를 근거로 예상과 관찰을 비교한다.
- read basis, final write, lost change를 사용해 인과 설명을 구성한다.
- 별도 재고 사례에서 사라진 변화를 식별해 Transfer를 제출한다.
target-job:
actor: 트랜잭션 동시성 개념을 이름만 알거나 이상한 최종값만 본 학습자
situation: Lost Update를 암기가 아니라 실행 순서와 값의 변화로 이해하고 싶을 때
motivation: 원인을 재구성하고 다른 사례에서도 같은 메커니즘을 판별하고 싶다.
opportunities:
- id: OPP-EVIDENCE-GAP
problem: 용어 설명만으로는 최종값 70이 왜 직렬 기대값 120과 다른지 재구성하기 어렵다.
desired-change: 예측과 실제 READ/WRITE ledger를 나란히 비교한다.
priority: 1
- id: OPP-ENTRY-GAP
problem: 개념명을 아는 사람과 결과 증상만 아는 사람은 시작 질문이 다르다.
desired-change: 두 orientation을 제공하되 하나의 scenario와 reducer로 즉시 합류한다.
priority: 2
- id: OPP-TRANSFER-GAP
problem: 정답 선택만으로는 새 사례에 지식을 옮길 수 있는지 알 수 없다.
desired-change: 설명 구성과 새 재고 사례의 Transfer를 완료 경계로 둔다.
priority: 3
- id: OPP-TRUST-GAP
problem: 증상 진입이 실제 로그 분석이나 장애 확정 기능으로 오인될 수 있다.
desired-change: 모든 증상 단서를 guided simulation으로 명시한다.
priority: 4
solution-hypotheses:
- id: SOL-DUAL-PORTAL-SHARED-LAB
addresses: [OPP-ENTRY-GAP, OPP-EVIDENCE-GAP, OPP-TRANSFER-GAP, OPP-TRUST-GAP]
hypothesis: >-
개념·증상 두 입구와 하나의 deterministic Lab을 결합하면 시작 맥락을 존중하면서도
중복 없이 Predict→Observe→Compare→Explain→Transfer의 깊은 학습을 제공할 수 있다.
selected: true
smallest-testable-scope: Lost Update 한 주제, 브라우저 로컬 상태, 원격 의존성 없음
- id: SOL-SINGLE-CASE-FILE
addresses: [OPP-EVIDENCE-GAP, OPP-TRANSFER-GAP]
hypothesis: 하나의 사건 화면만 제공하면 구현은 단순하지만 두 시작 맥락의 차이가 약해진다.
selected: false
- id: SOL-ATLAS-MAP
addresses: [OPP-ENTRY-GAP]
hypothesis: 관계 지도를 먼저 제공하면 장기 확장은 보이지만 한 주제 v1에서는 범위를 과장한다.
selected: false
scope-boundary:
in:
- tx-lost-update-01 한 주제
- 두 orientation과 동일 Lab 합류
- causal ledger와 다섯 단계 학습 루프
- 키보드·360/768/1280·skip-link 상태 보존
- deterministic offline 실행
out:
- 실제 로그 수집·장애 원인 확정·AI 진단
- 계정·진행 저장·원격 데이터베이스·서버 API
- 세 주제 전에 범용 콘텐츠 플랫폼이나 Atlas map 구축
evidence-bindings:
product-decision:
artifact-id: EXEC-CEO-20260718T111108Z
artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
overall-design:
artifact-id: ARCH-SOLUTION-20260718T151500Z
artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- step-id: frame-outcome
status: completed
output-binding: current-artifact
decisions:
- decision-id: HWVNEXT-SOLUTION-HYPOTHESIS-001
alternatives:
- option-id: SOL-DUAL-PORTAL-SHARED-LAB
evidence-refs: [payload.opportunities, payload.evidence-bindings]
- option-id: SOL-SINGLE-CASE-FILE
evidence-refs: [payload.solution-hypotheses]
- option-id: SOL-ATLAS-MAP
evidence-refs: [payload.scope-boundary]
selected-option-id: SOL-DUAL-PORTAL-SHARED-LAB
rejection-rationales:
SOL-SINGLE-CASE-FILE: 두 시작 맥락을 명확히 지원하지 못한다.
SOL-ATLAS-MAP: 한 주제 v1에 구조와 표현을 과잉 설계한다.
report-header:
bottom-line: >-
v1의 루트 성과는 Lost Update의 인과를 증거로 재구성하고 새 사례로 전이하는 것이다.
이를 위해 두 입구가 하나의 deterministic Lab으로 합류하는 최소 가설을 선택했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-product-decision-overall-design-and-browser-tested-direction}
risks:
- 실제 사용자 학습성과는 출시 후 별도 관찰이 필요하다.
- 두 입구가 두 제품처럼 보이면 shared-Lab 문구와 orientation 길이를 다시 줄여야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: accepted dual-portal product decision and kill criteria
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted architecture and explicit scope boundary
@@ -0,0 +1,70 @@
report-type: workflow-artifact
artifact-kind: opportunity-solution-tree
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T152000Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T152000Z
attempt-id: 1
payload:
outcome: >-
개발자가 Lost Update를 정의로 외우는 데 그치지 않고, 실행 전 결과를 예측한 뒤 100·120·150·70의
read/write 증거로 어긋남을 찾아 세 인과 요소를 설명하고 새 동시성 사례에 전이한다.
opportunities:
- id: OPP-ENTRY-CONTEXT
problem: 사용자는 격리 개념을 알거나 이상 결과만 아는 서로 다른 상태에서 시작한다.
solutions:
- id: SOL-DUAL-ENTRY
hypothesis: 두 orientation이 같은 scenario와 reducer로 합류하면 시작 맥락은 맞추면서 제품 분열을 막는다.
- id: SOL-SINGLE-ARTICLE
hypothesis: 한 문서 입구는 단순하지만 증상 기반 질문을 잃는다.
- id: OPP-PASSIVE-UNDERSTANDING
problem: 정답을 먼저 읽으면 실제 실행 순서와 마지막 write의 영향을 스스로 재구성하기 어렵다.
solutions:
- id: SOL-EVIDENCE-LOOP
hypothesis: Predict→Observe→Compare→Explain→Transfer gate가 능동적 인과 구성을 유도한다.
- id: SOL-REFERENCE-ONLY
hypothesis: 긴 설명은 깊이를 주지만 예측·전이 행동을 증명하지 못한다.
- id: OPP-DEBUGGER-TRUST
problem: 증상에서 시작하는 흐름이 실제 장애 진단 도구로 오인될 수 있다.
solutions:
- id: SOL-GUIDED-DEBUGGER
hypothesis: 단서→후보→고정 Lab 검증과 명시적 guided boundary가 디버거 사고법만 제공한다.
- id: SOL-REAL-LOG-INGESTION
hypothesis: 실제 로그 수집은 v1 범위·보안·데이터 설계를 과도하게 늘려 제외한다.
selected-solution-set: [SOL-DUAL-ENTRY, SOL-EVIDENCE-LOOP, SOL-GUIDED-DEBUGGER]
evidence-basis:
overall-design-id: ARCH-SOLUTION-20260718T151500Z
overall-design-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
approved-prototype-id: ENG-FE-20260718T144700Z
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- {step-id: frame-outcome, status: completed, output-binding: current-artifact}
decisions:
- decision-id: HWVNEXT-SOLUTION-SET
selected-option-id: SOL-EVIDENCE-LOOP
alternatives:
- {option-id: SOL-EVIDENCE-LOOP}
- {option-id: SOL-REFERENCE-ONLY}
- {option-id: SOL-REAL-LOG-INGESTION}
report-header:
bottom-line: >-
제품 outcome을 Lost Update 인과를 증거로 설명하고 전이한다’로 고정하고,
두 입구·evidence learning loop·guided debugger를 최소 솔루션 집합으로 선택한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-overall-design-and-browser-tested-prototype-without-user-outcome-data}
risks:
- 실제 사용자 학습 성과는 아직 측정하지 않았으므로 자동 완주를 학습효과로 과장하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted architecture and quality boundaries
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: browser-tested shared learning loop
@@ -0,0 +1,106 @@
report-type: workflow-artifact
artifact-kind: prd
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T152100Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T152100Z
attempt-id: 1
payload:
basis-artifact-id: ARCH-SOLUTION-20260718T151500Z
basis-artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
problem: >-
기술 학습자는 Transaction Isolation과 Lost Update의 정의를 읽어도, 두 세션이 같은 값을 읽고
독립 계산한 뒤 마지막 write가 앞선 변화를 덮는 실행 인과를 스스로 재구성하기 어렵다.
개념을 아는 사람과 결과 70이라는 증상만 아는 사람 모두에게 맞는 출발점이 필요하지만,
두 개의 제품·진단 엔진·콘텐츠 사본을 만들면 품질과 정직성이 무너진다.
outcomes:
- 사용자가 정답을 보기 전에 기대 결과를 예측한다.
- 사용자가 100→120/150→70 실행 증거에서 동일 read basis, 독립 계산, 마지막 write라는 세 요소를 연결한다.
- 개념·증상 입구 모두 동일 Lost Update Lab과 진행 모델을 완주한다.
- 사용자가 새 재고 사례에서 사라진 변화를 같은 인과 구조로 전이한다.
- 제품이 guided simulation 경계를 명확히 유지한다.
non-goals:
- 실제 로그 수집·분석 또는 장애 원인 확정
- 원격 데이터베이스 연결·쿼리 실행·벤더별 보장 판정
- AI 진단, 계정, 서버 진행 저장, 공개 API
- 여러 기술 주제를 빈 카드나 지도에 미리 채우는 것
- 자동 테스트 통과를 실제 사용자 학습효과로 주장하는 것
user-stories:
- id: US-CONCEPT
story: 격리 개념을 아는 개발자로서 약속과 실행 결과의 차이를 검증해 Lost Update 인과를 정확히 설명하고 싶다.
- id: US-SYMPTOM
story: 기대 120 대신 70이라는 증상만 아는 개발자로서 단서를 공개하고 후보 메커니즘을 고정 Lab에서 검증하고 싶다.
- id: US-PRACTICE
story: 학습자로서 예측부터 전이까지 순서대로 행동해 수동적 읽기가 아니라 내 설명을 만들고 싶다.
- id: US-KEYBOARD
story: 키보드·작은 화면 사용자로서 route나 진행 상태를 잃지 않고 전체 Lab을 완주하고 싶다.
success-metrics:
- id: QUALITY-DUAL-ENTRY
launch-threshold: 두 공개 entry의 browser E2E가 동일 scenario-id와 reducer state에 합류해 100% 통과한다.
- id: QUALITY-CAUSAL-LOOP
launch-threshold: 기본 6-step과 회귀 fixture 4-step이 Predict→Transfer를 deterministic하게 반복 완주한다.
- id: QUALITY-A11Y
launch-threshold: 360·768·1280에서 문서 overflow 0, keyboard completion 100%, normal text 4.5:1 및 control 3:1 이상이다.
- id: QUALITY-HONESTY
launch-threshold: 모든 공개 진입과 완료 상태에 guided scenario 경계가 있고 remote request가 0건이다.
- id: LEARNING-HYPOTHESIS
post-launch-measure: 사용자 5명 중 3명 이상이 세 인과 요소와 새 사례를 설명하는지 별도 관찰한다; 출시 자동 게이트가 아니다.
constraints:
- zero runtime dependency와 정적 배포를 유지한다.
- 주제는 Transaction Isolation / Lost Update 하나로 제한한다.
- concept와 symptom entry는 scenario data·reducer·학습 콘텐츠를 복제하지 않는다.
- 360px, keyboard, visible focus, reduced motion, 한국어 읽기 순서를 보존한다.
- 실제 로그·원격 DB·AI 진단처럼 표현하지 않는다.
prioritized-requirements:
- {id: R1, priority: P0, requirement: 두 입구가 하나의 tx-lost-update-01 Lab에 합류한다.}
- {id: R2, priority: P0, requirement: Predict→Observe→Compare→Explain→Transfer 순서와 gate를 유지한다.}
- {id: R3, priority: P0, requirement: 100·120·150·70과 read/write 순서를 causal ledger로 관찰한다.}
- {id: R4, priority: P0, requirement: symptom debugger는 단서·후보·검증을 제공하되 실제 진단을 주장하지 않는다.}
- {id: R5, priority: P0, requirement: 반응형·keyboard·focus·skip-link state·contrast를 자동 검증한다.}
- {id: R6, priority: P1, requirement: static local-only delivery와 deterministic regression fixture를 유지한다.}
delivery-boundary:
inspectable-app: hyeonworks/app
first-public-topic: Transaction Isolation / Lost Update
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- step-id: frame-outcome
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: PROD-PM-20260718T152000Z, sha256: f8af0e1bbaedf87dd955d663cad887545c1efc7347f0908942400707000b0045}
- {step-id: write-prd, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: write-prd
gate-id: outcome-grounded
verdict: Passed
evidence-refs: [payload.outcomes, payload.success-metrics, payload.prioritized-requirements, PROD-PM-20260718T152000Z]
decisions:
- decision-id: HWVNEXT-V1-SCOPE
selected-option-id: DUAL-ENTRY-SHARED-LAB
alternatives:
- {option-id: DUAL-ENTRY-SHARED-LAB}
- {option-id: SINGLE-ARTICLE}
- {option-id: REAL-DEBUGGING-PLATFORM}
report-header:
bottom-line: >-
v1은 두 출발점이 하나의 Lost Update causal Lab으로 합류하는 깊이 학습 제품이다.
출시 범위는 예측·관찰·비교·설명·전이와 접근성·정직한 경계이며 backend·실제 진단은 명시적으로 제외한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-strategy-design-and-browser-proof-with-user-learning-still-a-hypothesis}
risks:
- 실제 사용자에게 두 입구의 차이가 명확한지는 별도 사용성 관찰이 필요하다.
- 한 주제에서 Atlas라는 명칭의 기대가 과할 수 있어 roadmap은 inactive로 정직하게 표시한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152000Z.report.yaml
grade: E3
note: exact opportunity-solution tree
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted overall design
@@ -0,0 +1,52 @@
report-type: workflow-artifact
artifact-kind: product-goal
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PO-20260718T152200Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PO
created-at: 20260718T152200Z
attempt-id: 1
payload:
goal: >-
개념 또는 증상에서 출발한 개발자가 같은 Lost Update Lab에서 정답을 먼저 보지 않고 예측하고,
실제 read/write 증거를 관찰·비교해 세 인과 요소를 설명한 뒤 새 사례에 전이할 수 있는
첫 번째 완성형 Technology Atlas 딥다이브를 출시한다.
prd-binding:
artifact-id: PROD-PM-20260718T152100Z
artifact-sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627
backlog-order:
- {order: 1, item: shared scenario and reducer across two entries, risk: product split}
- {order: 2, item: gated five-phase causal learning loop, risk: passive answer reveal}
- {order: 3, item: exact 100·120·150·70 ledger and transfer case, risk: causal inaccuracy}
- {order: 4, item: debugger clue flow plus guided boundary, risk: diagnosis misrepresentation}
- {order: 5, item: responsive keyboard focus contrast and skip-state preservation, risk: inaccessible completion}
- {order: 6, item: dependency-free local delivery and deterministic regression, risk: unnecessary operations}
definition-of-done:
- 여섯 수용 기준이 각각 실행 가능한 검증 방법과 expected result를 가진다.
- actual production files와 전체 browser flow가 동일 source revision에 결속된다.
- 독립 QA가 verification stage에서 새 영수증으로 quality gate를 통과한다.
exclusions: [real diagnosis, remote database, account, persistence, public API, additional public topic]
method-execution:
role-id: PROD-PO
method-id: backlog-definition
contract-sha256: 2e233338fb4f316efbd68ae3af77b36474ecec9683f759bfbbb51bd55eecb34e
step-results:
- {step-id: set-goal, status: completed, output-binding: current-artifact}
report-header:
bottom-line: >-
Product Goal은 두 입구에서 동일한 Lost Update 인과 Lab을 완주하고 새 사례로 전이하는 첫 딥다이브 출시다.
백로그는 제품 분열·인과 오류·진단 오인·접근성 회귀 위험 순으로 정렬한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-prd-and-explicit-testable-done-boundary}
risks:
- 실제 학습성과는 출시 품질 게이트와 별개로 후속 관찰해야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152100Z.report.yaml
grade: E3
note: exact accepted PRD
- source-uri: hyeonworks/app/README.md
grade: E3
note: inspectable production flow and honest scope
@@ -0,0 +1,114 @@
report-type: workflow-artifact
artifact-kind: acceptance-criteria
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PO-20260718T152300Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PO
created-at: 20260718T152300Z
attempt-id: 1
payload:
basis-artifact-id: ARCH-SOLUTION-20260718T151500Z
basis-artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
prd-binding:
artifact-id: PROD-PM-20260718T152100Z
artifact-sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627
criteria:
- criterion-id: AC-DUAL-ENTRY-SHARED-LAB
preconditions: [앱이 홈 route에서 실행 중이다.]
input:
routes: ['#/orient/concept', '#/orient/symptom']
action: 각 orientation에서 Lab 시작 control을 활성화한다.
expected-result: >-
두 경로는 모두 동일 '#/lab/tx-lost-update-01'로 이동하고 main의 scenario-id가
tx-lost-update-01이며 동일한 initial state·phase order·learning reducer를 사용한다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-FULL-LEARNING-LOOP
preconditions: [tx-lost-update-01 Lab이 초기화돼 있다.]
input:
actions: [prediction 선택, Observe 6단계 실행, Compare 확인, causal explanation 제출, transfer answer 제출]
negative-paths: [설명 오답 제출 후 재시도, transfer 오답 제출 후 재시도]
expected-result: >-
Predict→Observe→Compare→Explain→Transfer만 순서대로 열리고 오답은 구체적 피드백과 focus를 제공하며,
정답 후 완료 화면과 같은 Lab 재실행 control이 나타난다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-CAUSAL-LEDGER-VALUES
preconditions: [Observe phase가 시작됐다.]
input:
scenario: A는 +50, B는 -30을 같은 initial 100에서 계산한다.
expected-trace: [A read 100, B read 100, A computes 150, B computes 70, A writes 150, B writes 70]
expected-result: >-
serial expected 값은 120, 최종 observed 값은 70이며 Compare·Explain은 동일 read basis,
독립 계산, B의 마지막 write가 A의 +50을 덮었다는 세 인과 요소에 결속된다.
risk-level: Critical
verification-method: automated-test
- criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY
preconditions: [증상 orientation route가 열려 있다.]
input:
action: 단서 4개를 차례로 공개하고 후보 메커니즘에서 Lab을 시작한다.
expected-result: >-
결과 70에서 후보 Lost Update로 좁힌 뒤 공통 Lab으로 합류하고, 화면은 고정 guided scenario이며
실제 로그 분석·AI 진단·원격 DB 실행·장애 원인 확정이 아님을 명시한다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-A11Y-RESPONSIVE-STATE
preconditions: [Chrome에서 360px·768px·1280px viewport를 사용할 수 있다.]
input:
modes: [keyboard-only, pointer]
skip-link-states: [home, concept, revealed-symptom, default-observe-cursor-1, fixture-observe-cursor-1]
expected-result: >-
모든 control이 키보드로 동작하고 focus가 가시적이며 skip link가 같은 main node에 focus하되
hash·scenario·phase·cursor·trace/clue state를 보존한다. 문서 overflow는 0이고 표 overflow는
내부 scroll container에만 격리되며 normal text 대비 4.5:1, essential control 경계 3:1 이상이다.
risk-level: Critical
verification-method: automated-test
- criterion-id: AC-DETERMINISTIC-OFFLINE
preconditions: [배포 dist와 Node.js 18 이상이 있다.]
input:
actions: [설치 없이 정적 서버 실행, full-flow 반복 실행, verification fixture 실행, remote request 감시]
expected-result: >-
runtime dependency와 remote asset/request가 0이고 기본·fixture scenario가 서로 섞이지 않으며
반복 실행의 상태·값·완료 결과가 동일하다. 서버는 정적 파일과 최소 보안 헤더만 제공한다.
risk-level: Med
verification-method: automated-test
coverage-rule: completion-record는 여섯 criterion-id를 그대로 사용하고 각 Passed 상태를 typed receipt에 결속한다.
method-execution:
role-id: PROD-PO
method-id: backlog-definition
contract-sha256: 2e233338fb4f316efbd68ae3af77b36474ecec9683f759bfbbb51bd55eecb34e
step-results:
- step-id: set-goal
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: PROD-PO-20260718T152200Z, sha256: 588440aaf0e7a7b41e05675b6b8ab98ae419b58c62ff46f76412cfc9257a77ea}
- {step-id: define-acceptance, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: define-acceptance
gate-id: testable-criteria
verdict: Passed
evidence-refs:
- payload.criteria.AC-DUAL-ENTRY-SHARED-LAB
- payload.criteria.AC-FULL-LEARNING-LOOP
- payload.criteria.AC-CAUSAL-LEDGER-VALUES
- payload.criteria.AC-SYMPTOM-DEBUGGER-HONESTY
- payload.criteria.AC-A11Y-RESPONSIVE-STATE
- payload.criteria.AC-DETERMINISTIC-OFFLINE
report-header:
bottom-line: >-
여섯 수용 기준이 제품 핵심·인과 정확성·디버거 정직성·접근성·오프라인 결정성을 실행 가능한 browser/static 검증으로 닫는다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-prd-product-goal-and-existing-browser-assertion-coverage}
risks:
- 실제 스크린리더 발화와 비-Chromium 엔진은 이 자동 기준 밖이며 독립 잔여 위험으로 남긴다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152100Z.report.yaml
grade: E3
note: exact accepted PRD
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: executable browser assertions covering the six criteria
@@ -0,0 +1,50 @@
report-type: workflow-artifact
artifact-kind: compatibility-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T151700Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: QA
created-at: 20260718T151700Z
attempt-id: 1
payload:
left:
artifact-kind: approved-design-direction
artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
right:
artifact-kind: ui-design
artifact-id: DES-VISUAL-20260718T151500Z
artifact-sha256: c1ed02e6b2b128c47f8dd3406f81b690b3d80636fc74eacbf442be7d667c8a4e
dimensions: [interaction, tokens, accessibility]
findings: []
verdict: Passed
reviewer-role-id: QA
checks:
interaction:
verdict: Passed
evidence: 두 entry가 동일 tx-lost-update-01과 reducer, 동일 다섯 단계 루프에 합류하며 skip link가 route state를 보존한다.
tokens:
verdict: Passed
evidence: paper·ink·deep·observed·on-deep·pending·control-border 값과 surface별 대비 floor가 정확히 일치한다.
accessibility:
verdict: Passed
evidence: native controls, visible focus, current-main skip target, color-independent labels, 360·768·1280 읽기 순서 계약이 일치한다.
independence: QA는 두 endpoint producer DES-DIRECTOR·DES-VISUAL과 다르며 exact immutable revision을 검토했다.
report-header:
bottom-line: >-
PASS — 승인 방향과 UI 설계는 interaction·token·accessibility 세 계약에서 exact하게 일치하며
구현 전달을 막는 finding이 없다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-endpoint-sha-contract-comparison-and-r4-browser-evidence}
risks:
- 구현 중 token 이름만 복사하고 실제 surface 사용처가 달라지는 회귀는 브라우저 computed-style 검증으로 다시 잡아야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/DES-DIRECTOR-20260718T151300Z.report.yaml
grade: E3
note: exact approved design direction endpoint
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/DES-VISUAL-20260718T151500Z.report.yaml
grade: E3
note: exact UI design endpoint
@@ -0,0 +1,46 @@
report-type: workflow-artifact
artifact-kind: quality-gate-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T154200Z
workflow-id: hyeonworks-vnext-v1
stage: verification
producer-role-id: QA
created-at: 20260718T154200Z
attempt-id: 1
payload:
quality-gate: {status: Failed}
blocker-open: true
reviewed-artifact-id: ENG-FE-20260718T152600Z
reviewed-artifact-sha256: 5b8b256ce82f07b3f1d06f61926111460823ac6fe6b71934e5de2be2f7e3d0ad
checks:
- check-id: AC-FULL-FLOW
category: acceptance-criteria
status: Failed
evidence-receipt-ids: [vr-1784388413-a071334f9199]
findings:
- finding-id: QF-SKIP-REFLOW-TIMING
severity: High
blocking: true
resolved: false
summary: >-
768→360 responsive reflow 직후 이전 smooth scroll이 진행 중인 상태에서 skip link를 활성화하면
current main의 시작 위치가 약 25px 위로 벗어나는 timing regression이 재현됐다.
required-action: build 단계로 돌아가 production scroll cancellation과 non-brittle visibility regression을 구현한 뒤 새 source revision으로 재검증한다.
independence: QA는 reviewed completion producer ENG-FE와 다르며 verification 진입 후 fresh typed receipt를 사용했다.
report-header:
bottom-line: >-
FAILED — build source e27731ba…는 route와 학습 상태를 보존하지만 responsive reflow와 진행 중 scroll이 겹칠 때
current main 시작 가시성이 흔들리므로 출시를 차단하고 build rework가 필요하다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: fresh-source-bound-reproducible-chrome-receipt}
risks:
- 재실행만으로 통과시키면 간헐적 접근성 회귀가 그대로 출시될 수 있다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: failed typed receipt vr-1784388413-a071334f9199 bound to source e27731ba
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: exact skip state and in-view assertion
@@ -0,0 +1,63 @@
report-type: workflow-artifact
artifact-kind: quality-gate-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T155400Z
workflow-id: hyeonworks-vnext-v1
stage: verification
producer-role-id: QA
created-at: 20260718T155400Z
attempt-id: 2
supersedes-report-id: QA-20260718T154200Z
payload:
quality-gate: {status: Passed}
blocker-open: false
reviewed-artifact-id: ENG-FE-20260718T153900Z
reviewed-artifact-sha256: cec169bd196221d1fe42f29d8f570f277a1872331eb88c489b4477aff1271d44
checks:
- check-id: AC-FULL-FLOW
category: acceptance-criteria
status: Passed
evidence-receipt-ids: [vr-1784389937-4c23760db5ed]
- check-id: TEST-STATIC-QUALITY
category: test
status: Passed
evidence-receipt-ids: [vr-1784389949-8e741a9a1f0e]
- check-id: RELIABILITY-DETERMINISM
category: reliability
status: Passed
evidence-receipt-ids: [vr-1784389973-18328d8be77c]
findings:
- finding-id: QF-SKIP-REFLOW-TIMING
severity: High
blocking: true
resolved: true
summary: >-
responsive reflow와 진행 중 smooth scroll이 겹칠 때 발생하던 skip-link 가시성 회귀를
production scroll cancellation과 layout-settled heading visibility 검증으로 닫았다.
resolution-evidence-receipt-ids:
- vr-1784389937-4c23760db5ed
- vr-1784389973-18328d8be77c
independence: >-
QA는 completion producer ENG-FE와 분리되어 있으며, 수정 completion exact SHA가 build에서
승인된 뒤 열린 새 verification epoch에서 세 검증을 독립적으로 다시 실행했다.
report-header:
bottom-line: >-
PASSED — 수정 source 276b4919…와 completion cec169bd…가 전체 학습 플로우,
정적 무결성, 반복 결정성 검증을 모두 통과했고 기존 High blocker는 해결됐다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: fresh-exact-source-bound-independent-verification}
risks:
- 비-Chromium 엔진과 실제 스크린리더 발화는 출시를 막지 않는 수동 잔여 검증이다.
- 실제 사용자 학습효과는 운영 관찰 대상이며 자동화 결과로 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: 새 verification epoch의 AC, static, reliability typed receipts
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: dual-entry shared lab, full causal loop, responsive state, keyboard focus and contrast
- source-uri: hyeonworks/app/scripts/verify_static.cjs
grade: E3
note: approved provenance, local-only assets and deployable static integrity
@@ -0,0 +1,110 @@
report-type: workflow-artifact
artifact-kind: grounding-package
artifact-version: 1
tier: standard
identity:
artifact-id: STR-ANALYST-20260718T110705Z
workflow-id: hyeonworks-vnext-v1
stage: discovery
producer-role-id: STR-ANALYST
created-at: 20260718T110705Z
attempt-id: 1
payload:
problem-structure:
user-job: >-
개념명이나 실제 증상 중 자신이 아는 단서에서 시작해 Lost Update의 상태 변화와 인과를 직접
검증하고, 새로운 동시성 사례에도 같은 메커니즘을 전이한다.
current-gap:
- "개념 중심 학습은 실제 증상과 연결이 약하고, 검색 중심 해결은 원리와 전이가 약하다."
- "두 진입을 별도 제품처럼 만들면 콘텐츠와 상태 엔진이 중복된다."
- "한 사례만으로도 깊이를 보여주면서 향후 Atlas 확장 구조를 전달해야 한다."
- "guided simulation과 실제 데이터베이스 보장의 경계를 화면에서 명확히 해야 한다."
key-questions:
- "홈에서 두 진입을 어떻게 구분하되 선택 부담을 키우지 않을 것인가?"
- "어느 진입에서도 동일 scenario와 학습 진행 상태로 합류한다는 것을 어떻게 보장할 것인가?"
- "Lost Update를 표면 정의가 아니라 타임라인·값 변화·인과·통제·전이까지 얼마나 깊게 다룰 것인가?"
analysis-synthesis:
insight: >-
제품의 핵심은 두 개의 기능이 아니라 하나의 학습 코어에 대한 두 개의 입구다. 첫 화면은 사용자가
가진 단서에 맞는 진입을 제공하고, 이후 모든 단계는 동일 scenario contract와 상태 reducer를 사용해야 한다.
invariant:
- "single scenario id: tx-lost-update-01"
- "single learning-state machine: orient → predict → trace → compare → explain → transfer"
- "single mechanism content source: Lost Update causal model"
- "diagnostic language is candidate/verify, never confirmed incident diagnosis"
design-consequences:
- "개념 진입은 작은 관계 지도와 핵심 질문을 먼저 보여준다."
- "증상 진입은 4개 단서를 한 번에 답하지 않고 단계적으로 공개한다."
- "두 경로는 실험 시작 전 하나의 Lab Brief에서 합류하며 이후 URL과 상태를 공유한다."
- "준비 중 주제를 큰 카드 카탈로그로 만들지 않고 하단 roadmap에 정직하게 표시한다."
evidence:
- ref: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
finding: "HUMAN-001이 hybrid shared-core 전략과 첫 scenario 범위를 승인했다"
- ref: org-os/01-company/company-context.yaml
grade: E2
finding: "제품 경계·학습 루프·operating constraints의 공식 SoT"
- ref: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E3
finding: "독립 Debugger는 operability 실패, shared-core hybrid는 조건부 통과"
options:
- id: OPT-DUAL-PORTAL
problem: "사용자가 가진 단서에 맞춰 개념과 증상 진입을 가장 명시적으로 구분하는 방법"
concept: >-
Dual Portal — 홈의 동등한 두 선택 카드가 Atlas Context 또는 Symptom Triage로 시작하고,
짧은 orientation 뒤 하나의 Lost Update Lab으로 합류한다.
tradeoffs:
- "장점: 두 방식의 차이가 즉시 명확하고 사용자 최신 요구가 잘 보인다."
- "단점: 첫 화면 선택 부담과 두 제품처럼 보일 위험이 있어 shared-core 표식이 필요하다."
evidence-refs: ["EXEC-CEO-20260718T110148Z", "DEC-HW2-HYBRID-001"]
- id: OPT-CASE-FILE
problem: "증상에서 시작하되 제품 전체가 진단 도구로 보이지 않게 하는 방법"
concept: >-
Mechanism Case File — Lost Update 사건 파일 하나를 중심에 두고, 같은 화면에서 개념 렌즈와
증상 렌즈를 전환하며 단서를 조사한 뒤 실험으로 이동한다.
tradeoffs:
- "장점: 하나의 이야기와 데이터 모델로 결속돼 중복이 가장 적다."
- "단점: Atlas의 확장 구조와 두 진입 선택이 첫 방문에 덜 명확할 수 있다."
evidence-refs: ["HYP-HW2-SHARED-CORE-001", "DEC-HW2-SCOPE-001"]
- id: OPT-ATLAS-WITH-DEBUG-DOCK
problem: "Technology Atlas 정체성을 강하게 유지하면서 symptom entry를 보조하는 방법"
concept: >-
Atlas + Debug Dock — 개념 관계 지도가 주 화면이고, '이런 증상을 보셨나요?' dock에서 Lost Update
단서를 고르면 같은 map node와 Lab으로 연결된다.
tradeoffs:
- "장점: 장기 확장 구조가 가장 선명하고 Debugger가 독립 제품으로 보이지 않는다."
- "단점: 한 주제뿐인 초기 제품에서 map이 과장돼 보일 수 있고 증상 진입이 부차적으로 느껴진다."
evidence-refs: ["DEC-HW2-HYBRID-001", "DEC-HW2-SCOPE-001"]
method-execution:
role-id: STR-ANALYST
method-id: strategy-analysis
contract-sha256: 405d565f85b4e06aa2df9e1d41fe3cfd3be113d19b17cfc7dbb8f6172b166299
step-results:
- {step-id: structure-problem, status: completed, output-binding: current-artifact}
- {step-id: analyze-environment, status: completed, output-binding: current-artifact}
- {step-id: diverge-options, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: diverge-options
gate-id: options-diverge
verdict: Passed
evidence-refs: ["payload.options[0]", "payload.options[1]", "payload.options[2]"]
decisions:
- decision-id: HWVNEXT-DISCOVERY-OPTION-SET
selected: null
alternatives: [OPT-DUAL-PORTAL, OPT-CASE-FILE, OPT-ATLAS-WITH-DEBUG-DOCK]
report-header:
bottom-line: >-
discovery는 같은 학습 코어를 유지하면서 진입 구조가 다른 세 안을 보존한다. 아직 선택하지 않으며,
CEO decide에서 명확성·깊이·운영성·확장 정직성을 비교해야 한다.
decision-needed: { needed: true, approver: EXEC-CEO }
confidence: { value: Med, derived-from: accepted-strategy-and-no-user-behavior-yet }
risks:
- "사용자 관찰 없이 두 진입의 실제 이해도를 예측해야 한다."
- "Atlas 확장성을 과도하게 강조하면 완성 콘텐츠 하나라는 정직한 범위를 흐릴 수 있다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "accepted hybrid strategy and product boundaries"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E3
note: "three-option nine-gate validation"
@@ -0,0 +1,27 @@
report-type: workflow-artifact
artifact-kind: decision-brief
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260720T110333Z
workflow-id: hyeonworks-vnext-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260720T110333Z
attempt-id: 1
payload: {}
projection-version: 1
decision-summary:
bottom-line: ""
recommendation: ""
decision-needed: false
confidence: Med
evidence-index: []
dissent: []
open-risks: []
artifact-refs: []
report-header:
bottom-line: ""
decision-needed: { needed: false, approver: }
confidence: { value: Med, derived-from: evidence }
risks: []
evidence: []
@@ -0,0 +1,111 @@
report-type: workflow-artifact
artifact-kind: decision-brief
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260720T110525Z
workflow-id: hyeonworks-vnext-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260720T110525Z
attempt-id: 1
payload:
mode: divergent
tier: standard
candidate-families:
- FAM-STRATEGY
- FAM-UX-RESEARCH
- FAM-GTM-GROWTH
- FAM-PRODUCT-MGMT
- FAM-ARCHITECTURE-TECH
intent-restatement: >-
hyeonworks 학습 제품을 경쟁 경험 근거 위에서 재설계한다. v1이 확정한 dual-portal 정보구조와
Lost Update 단일 주제 범위를 기정사실로 두지 않고, 정보구조·상호작용·제품 범위를 다시 발산해
결정한다.
lineage:
supersedes-parent-workflow: hyeonworks-vnext-v1
reason: >-
v1 부모 원장에 design-direction-approval(child=hyeonworks-vnext-v1-direction)이 이미 기록돼
있어 같은 부모에서 새 방향 사이클을 finalize할 수 없다(기존 approval 충돌 검사). 따라서 신규
부모 계보를 연다. v1 산출물은 삭제하지 않고 비교 기준으로 보존한다.
candidate-family-rationale:
- family-id: FAM-GTM-GROWTH
why: >-
v1 intake의 candidate-families에 이 family가 없어 GTM-CI(competitive-intelligence)가 후보에서
구조적으로 배제됐고, 그 결과 v1 부모 workflow 전체의 외부 근거가 0건이었다. 이번 사이클의
1순위 시정 항목이다.
- family-id: FAM-UX-RESEARCH
why: 학습 경험 재설계의 고객 렌즈. 사용 데이터가 없으므로 정성 리서치가 주 경로다.
- family-id: FAM-STRATEGY
why: 제품 범위·포지셔닝 옵션 발산.
- family-id: FAM-PRODUCT-MGMT
why: 제품 가치·범위 판단 및 독립 리뷰.
- family-id: FAM-ARCHITECTURE-TECH
why: 브라우저 실행 제약(WASM·단일 연결) 하에서 범위 옵션의 실현 가능성 검증.
role-selection-note:
plan-status: ready
engine-selected: [ARCH-APP, STR-ANALYST, DATA-ANALYST, GTM-CI, PROD-PO]
tie-break-applied:
capability: customer-research
engine-suggested: DATA-ANALYST
resolved-to: UX-RESEARCHER
basis: >-
role-selection-scorecard tie-break(동점 시 relevance 우선). 두 역할 모두 FAM-UX-RESEARCH의
customer-research를 덮고 엔진 점수가 total:1 동점이었다. 제품에 사용자·사용 데이터가 없어
정량 분석 대상이 존재하지 않으므로 relevance는 UX-RESEARCHER가 높다. 엔진 산출 DATA-ANALYST는
coverage에 lens 기여가 없어 LENS-CUSTOMER가 미충족으로 남는 문제도 함께 해소된다.
projection-version: 1
decision-summary:
bottom-line: >-
v1을 보존한 채 신규 부모 계보 hyeonworks-vnext-v2를 divergent/standard로 열고, v1에서 누락됐던
경쟁 근거 역할(GTM-CI)을 후보에 포함해 제품 범위와 정보구조를 재발산한다.
recommendation: >-
/ground를 5렌즈+contrarian으로 실행하되 외부 경쟁 근거를 필수로 요구하고, /decide에서 dual-portal을
기정사실이 아닌 후보 중 하나로 재경쟁시킨다.
decision-needed: true
confidence: Med
evidence-index:
- EXEC-CEO-20260718T111108Z
- STR-ANALYST-20260718T110705Z
dissent:
- >-
v1 제품 결정문 자체가 "Dual Portal이 두 제품처럼 보이면 선택 근거가 사라진다"와 "사용자 실측 전에는
두 카드가 시작률을 높이는지 알 수 없다"를 dissent로 남겼다. 이 소수의견은 검증되지 않은 채
released까지 통과했으므로 이번 discovery의 반증 대상으로 승계한다.
open-risks:
- >-
v2도 결정 이후 단계에서만 경쟁 근거를 확보하면 제품 결정 자체는 여전히 얇은 근거 위에 놓인다.
/ground 단계에서 외부 근거를 확보해야 한다.
- >-
범위 확대(단일 주제 → 복수 주제)는 1인 유지부담과 직접 상충한다. 발산 단계에서 옵션별 유지비용을
함께 산출하지 않으면 실행 불가능한 옵션이 선택될 수 있다.
artifact-refs:
- hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
- hyeonworks/completion-records/hyeonworks-vnext-v1/STR-ANALYST-20260718T110705Z.report.yaml
report-header:
bottom-line: >-
v1을 보존한 채 신규 부모 hyeonworks-vnext-v2를 divergent/standard로 열고, v1에서 구조적으로
배제됐던 경쟁 근거 역할(GTM-CI)을 candidate-families에 포함해 제품 범위·정보구조를 재발산한다.
decision-needed: { needed: true, approver: HUMAN-001 }
confidence: { value: Med, derived-from: evidence }
risks:
- 범위 확대와 1인 유지부담의 상충이 발산 단계에서 정량화되지 않으면 실행 불가능한 옵션이 선택될 수 있다.
- company-context가 provisional이라 회사 문맥 기반 주장은 E2 상한에 묶인다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: >-
v1 executive-decision-packet. selected-option-id=OPT-DUAL-PORTAL과 미검증 dissent 2건이
기록돼 있다 — 이번 사이클이 재경쟁시킬 대상.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/STR-ANALYST-20260718T110705Z.report.yaml
grade: E3
note: >-
v1 grounding-package. evidence 3건이 전부 사내 아티팩트이며 외부 경쟁 근거가 0건이다 —
candidate-families에 FAM-GTM-GROWTH를 넣는 직접 근거.
- source-uri: hyeonworks/state/hyeonworks-vnext-v1/workflow.yaml
grade: E3
note: >-
부모 원장에 design-direction-approval이 기록돼 있고 stage=released다. 같은 부모에서 새 방향
사이클을 닫을 수 없어 신규 계보가 필요하다는 근거.
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: status=provisional. 회사 문맥 인용은 E2/Med 상한.
@@ -0,0 +1,69 @@
report-type: workflow-artifact
artifact-kind: workload-profile
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260720T110616Z
workflow-id: hyeonworks-vnext-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260720T110616Z
attempt-id: 1
payload:
surfaces:
ui: true
public-api: false
persistence: false
infrastructure: false
surface-archetype: interactive-learning
experience-change: major-redesign
risk:
security-bearing: false
data-migration: false
external-side-effect: false
required-capabilities:
- strategy
- customer-research
- competitive-intelligence
- product
- architecture
product-feature: true
projection-version: 1
decision-summary:
bottom-line: >-
UI를 가진 interactive-learning 제품의 major-redesign이므로 experience-foundation이
design-direction보다 먼저 강제되며, discovery wave는 경쟁 근거를 포함한 5 capability로 계획한다.
recommendation: >-
required-capabilities를 discovery wave의 최소 충분 집합으로 유지하고, design·frontend·
information-architecture는 각 후속 stage와 experience-foundation child가 자체 선택하게 둔다.
decision-needed: false
confidence: Med
evidence-index:
- EXEC-CEO-20260720T110525Z
dissent: []
open-risks:
- >-
required-capabilities를 discovery 범위로 좁혔으므로 design·information-architecture·frontend
커버리지는 후속 stage에서 별도로 보장해야 한다. 이 프로필만으로는 그 단계의 충분성을 주장하지 않는다.
artifact-refs:
- hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
report-header:
bottom-line: >-
surfaces.ui=true · surface-archetype=interactive-learning · experience-change=major-redesign으로
판정한다. 이 조합은 experience-foundation을 design-direction 선행으로 강제한다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: evidence }
risks:
- discovery 범위로 좁힌 capability 집합이므로 후속 stage 커버리지는 별도 보장이 필요하다.
evidence:
- source-uri: hyeonworks/app/index.html
grade: E3
note: >-
v1이 released한 실물 UI. surfaces.ui=true와 interactive-learning archetype의 직접 근거이며,
이번 작업이 신규 제품이 아니라 기존 릴리스의 major-redesign임을 보인다.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
grade: E3
note: 같은 intake의 decision-brief. mode/tier/candidate-families 선언과 정합.
- source-uri: hyeonworks/app/package.json
grade: E3
note: >-
런타임 의존성 0의 browser-local 정적 앱. public-api·persistence·infrastructure 모두 false인 근거.
@@ -0,0 +1,73 @@
report-type: workflow-artifact
artifact-kind: workload-profile
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260720T110657Z
workflow-id: hyeonworks-vnext-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260720T110657Z
attempt-id: 1
supersedes-report-id: EXEC-CEO-20260720T110616Z
payload:
surfaces:
ui: true
public-api: false
persistence: false
infrastructure: false
surface-archetype: interactive-learning
experience-change: major-redesign
risk:
security-bearing: false
data-migration: false
external-side-effect: false
required-capabilities:
- strategy
- customer-research
- competitive-intelligence
- product
- architecture
product-feature: true
projection-version: 1
decision-summary:
bottom-line: >-
UI를 가진 interactive-learning 제품의 major-redesign이므로 experience-foundation이
design-direction보다 먼저 강제되며, discovery wave는 경쟁 근거를 포함한 5 capability로 계획한다.
recommendation: >-
required-capabilities를 discovery wave의 최소 충분 집합으로 유지하고, design·frontend·
information-architecture는 각 후속 stage와 experience-foundation child가 자체 선택하게 둔다.
decision-needed: false
confidence: Med
evidence-index:
- EXEC-CEO-20260720T110525Z
dissent: []
open-risks:
- >-
required-capabilities를 discovery 범위로 좁혔으므로 design·information-architecture·frontend
커버리지는 후속 stage에서 별도로 보장해야 한다. 이 프로필만으로는 그 단계의 충분성을 주장하지 않는다.
revision-note: >-
EXEC-CEO-20260720T110616Z의 evidence[0] source-uri가 미실존 경로(hyeonworks/app/index.html)였다.
validate_report가 허위 근거로 차단했고, 실제 산출물 경로(hyeonworks/app/dist/index.html)로 교정했다.
artifact-refs:
- hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
report-header:
bottom-line: >-
surfaces.ui=true · surface-archetype=interactive-learning · experience-change=major-redesign으로
판정한다. 이 조합은 experience-foundation을 design-direction 선행으로 강제한다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: evidence }
risks:
- discovery 범위로 좁힌 capability 집합이므로 후속 stage 커버리지는 별도 보장이 필요하다.
evidence:
- source-uri: hyeonworks/app/dist/index.html
grade: E3
note: >-
v1이 released한 실물 UI 엔트리. surfaces.ui=true와 interactive-learning archetype의 직접
근거이며, 이번 작업이 신규 제품이 아니라 기존 릴리스의 major-redesign임을 보인다.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
grade: E3
note: 같은 intake의 decision-brief. mode/tier/candidate-families 선언과 정합.
- source-uri: hyeonworks/app/package.json
grade: E3
note: >-
런타임 의존성 0의 browser-local 정적 앱. public-api·persistence·infrastructure 모두 false인 근거.
@@ -0,0 +1,84 @@
report-type: workflow-artifact
artifact-kind: workload-profile
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260720T110814Z
workflow-id: hyeonworks-vnext-v2
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260720T110814Z
attempt-id: 1
supersedes-report-id: EXEC-CEO-20260720T110657Z
payload:
surfaces:
ui: true
public-api: false
persistence: false
infrastructure: false
surface-archetype: interactive-learning
experience-change: major-redesign
risk:
security-bearing: false
data-migration: false
external-side-effect: false
risk-level: Low
reversibility: two-way-door
blast-radius: single-role
privacy: false
regulatory: false
slo-impact: false
required-capabilities:
- strategy
- customer-research
- competitive-intelligence
- product
- architecture
product-feature: true
projection-version: 1
decision-summary:
bottom-line: >-
UI를 가진 interactive-learning 제품의 major-redesign이므로 experience-foundation이
design-direction보다 먼저 강제되며, discovery wave는 경쟁 근거를 포함한 5 capability로 계획한다.
recommendation: >-
required-capabilities를 discovery wave의 최소 충분 집합으로 유지하고, design·frontend·
information-architecture는 각 후속 stage와 experience-foundation child가 자체 선택하게 둔다.
decision-needed: false
confidence: Med
evidence-index:
- EXEC-CEO-20260720T110525Z
dissent: []
open-risks:
- >-
required-capabilities를 discovery 범위로 좁혔으므로 design·information-architecture·frontend
커버리지는 후속 stage에서 별도로 보장해야 한다. 이 프로필만으로는 그 단계의 충분성을 주장하지 않는다.
revision-note: >-
110616Z는 evidence source-uri 미실존(hyeonworks/app/index.html)으로 validate_report에 차단됐고,
110657Z는 risk 필수 필드(risk-level·reversibility·blast-radius·privacy·regulatory·slo-impact)
누락으로 submit-artifact 스키마 게이트에 차단됐다. 이 revision이 두 결함을 모두 교정한다.
artifact-refs:
- hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
report-header:
bottom-line: >-
surfaces.ui=true · surface-archetype=interactive-learning · experience-change=major-redesign으로
판정한다. 이 조합은 experience-foundation을 design-direction 선행으로 강제한다.
decision-needed: { needed: false, approver: null }
confidence: { value: Med, derived-from: evidence }
risks:
- discovery 범위로 좁힌 capability 집합이므로 후속 stage 커버리지는 별도 보장이 필요하다.
- >-
risk-level=Low는 사용자·매출·개인정보 노출이 없는 현재 상태 기준이다. 범위 확대 옵션이 서버·
계정·데이터 수집을 도입하면 이 판정은 재검토 대상이다.
evidence:
- source-uri: hyeonworks/app/dist/index.html
grade: E3
note: >-
v1이 released한 실물 UI 엔트리. surfaces.ui=true와 interactive-learning archetype의 직접
근거이며, 이번 작업이 신규 제품이 아니라 기존 릴리스의 major-redesign임을 보인다.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
grade: E3
note: 같은 intake의 decision-brief. mode/tier/candidate-families 선언과 정합.
- source-uri: hyeonworks/app/package.json
grade: E3
note: >-
런타임 의존성 0의 browser-local 정적 앱. public-api·persistence·infrastructure=false와
blast-radius=single-role·privacy/regulatory/slo-impact=false의 근거.
@@ -0,0 +1,460 @@
report-type: workflow-artifact
artifact-kind: competitive-market-grounding
artifact-version: 1
tier: standard
identity:
artifact-id: GTM-CI-20260720T115855Z
workflow-id: hyeonworks-vnext-v2
stage: discovery
producer-role-id: GTM-CI
created-at: 20260720T115855Z
attempt-id: 1
payload:
assigned-lens: LENS-REVENUE
producer-run-id: hyeonworks-vnext-v2-discovery-gtm-ci-20260720T115755Z
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v2/gtm-ci-20260720T115755Z.pkg.yaml
context-package-sha256: e533d781dc0ed8341e4d1fef2a608fd6a9144e40b34b3f802b15f2f61ce6aec7
research-note: >-
v1 부모 workflow(STR-ANALYST-20260718T110705Z)는 evidence 3건이 전부 사내 아티팩트였고 외부
경쟁 근거가 0건이었다. 이번 pack은 WebSearch/WebFetch로 오늘(2026-07-20) 실제 접속해 확인한
9개 실명 competitor/substitute를 direct/adjacent/substitute 3개 class로 접지한다. 각 옵션(A/B/C)은
이 하나의 pack 위에서만 평가하고 옵션별 추가 조사를 하지 않았다. hyeonworks 자체 사용자 행동
데이터(GA/전환/설문)는 없으므로 모든 유입·반복방문·수익 가설은 외부 사례에서 도출한 유추(E2)다.
competitors-and-substitutes:
- name: "The Deadlock Empire"
type: competitor
class: direct
product-form: >-
브라우저 인터랙티브 퍼즐 게임. 사용자가 스케줄러 역할을 맡아 멀티스레드 프로그램의 명령을
한 단계씩 실행하며 데드락이나 critical-section 동시 진입 같은 금지된 상태를 스스로 유발한다.
content-unit: "16개 동시성 챌린지(레벨) 캠페인 — 단일 도메인(락·데드락) 카탈로그"
interaction-model: >-
원자적이지 않은 명령(load/store 등)까지 쪼개 한 단계씩 실행·되돌리기하며 스레드 스케줄링을
직접 조작한다. Predict(사전 가설)나 Explain(사후 인과 서술) 단계는 없다.
paywall: "무료 — 결제·로그인·광고 없음"
evidence-urls:
- https://deadlockempire.github.io/
- https://github.com/deadlockempire/deadlockempire.github.io
confirmed-at: "2026-07-20"
- name: "The Secret Lives of Data — Raft"
type: competitor
class: direct
product-form: "단일 페이지 explorable explanation(스크롤/클릭 연동 애니메이션)"
content-unit: "단일 메커니즘(Raft 합의 알고리즘) 하나만 best-case/worst-case 시나리오로 깊게 다룸"
interaction-model: >-
리더 선출·로그 복제를 애니메이션으로 재생·일시정지하며 관찰한다. 사용자가 값을 먼저
예측하거나 결과를 자기 언어로 설명하는 단계는 없는 관찰자 모드에 가깝다.
paywall: "무료"
evidence-urls:
- https://thesecretlivesofdata.com/raft/
confirmed-at: "2026-07-20"
- name: "Jepsen — Consistency Models"
type: substitute
class: adjacent
product-form: "정적 레퍼런스 사이트(내비게이션 + 텍스트 + 다이어그램). 상태를 조작하는 인터랙션 없음"
content-unit: "일관성 모델·현상(phenomena) 전체를 아우르는 카탈로그형 참고자료"
interaction-model: "읽기 전용 문서 탐색. 사용자가 상태를 조작하거나 예측/비교하지 않는다."
paywall: "레퍼런스 자체는 무료. 별도 Jepsen 컨설팅/테스트 서비스(Services)는 유료로 시사됨"
evidence-urls:
- https://jepsen.io/consistency
- https://jepsen.io/consistency/models
confirmed-at: "2026-07-20"
- name: "CodeCrafters"
type: competitor
class: adjacent
product-form: >-
실제 프로덕션급 도구(Redis/Git/SQLite 등)를 처음부터 코드로 구현하는 IDE 연동 챌린지 플랫폼.
git push 시 자동 테스트(Turbo tests)로 즉시 피드백을 준다.
content-unit: "11개 주요 챌린지 카탈로그(Git/Redis/Shell/Kafka/SQLite/DNS/BitTorrent 등), 챌린지별 단계형 구조"
interaction-model: >-
로컬에서 실제 코드를 작성해 프로토콜/명령을 구현하고 자동 테스트를 통과시키는 방식이다.
Predict/Observe/Compare/Explain 같은 개념 학습 단계는 없고 구현 성공 여부로 학습을 확인한다.
paywall: "무료 티어(제한적) + 유료 멤버십(3개월/연간/평생) + 5인 이상 팀 플랜(연간 결제)"
evidence-urls:
- https://codecrafters.io/pricing
- https://app.codecrafters.io/courses/redis/overview
confirmed-at: "2026-07-20"
- name: "VisuAlgo"
type: competitor
class: adjacent
product-form: "웹 기반 알고리즘/자료구조 애니메이션 시각화 도구(NUS 제작, 2011년부터 운영)"
content-unit: "26개 이상 알고리즘·자료구조 주제 카탈로그, 주제별 e-Lecture 모드 포함"
interaction-model: "단계별 애니메이션 재생 + 커스텀 입력으로 직접 조작 가능. causal '왜' 설명은 약함"
paywall: "완전 무료, 로그인 불필요"
evidence-urls:
- https://visualgo.net/en
confirmed-at: "2026-07-20"
- name: "Use The Index, Luke"
type: substitute
class: substitute
product-form: "무료 웹북(정적 텍스트 + SQL 코드 스니펫). 유료 인쇄판은 별도 판매"
content-unit: "SQL 인덱싱·성능 주제를 다루는 챕터형 책 전체(Oracle/MySQL/PostgreSQL/SQL Server/Db2 벤더 중립)"
interaction-model: "읽기 전용. '3분 SQL 스킬 진단' 퀴즈 외에는 상태 시각화·시뮬레이션이 없다."
paywall: "웹 버전 무료. 인쇄본/전자책(SQL Performance Explained)은 유료 구매"
evidence-urls:
- https://use-the-index-luke.com/
confirmed-at: "2026-07-20"
- name: "CMU 15-445 Database Systems + BusTub"
type: substitute
class: substitute
product-form: "대학 강의 영상(YouTube 전체 공개) + 실제 C++ 데이터베이스 구현 프로젝트(BusTub)"
content-unit: >-
26개 강의 + 4개 대형 프로젝트(버퍼풀 매니저 / B+Tree 인덱스 / 쿼리 실행기 /
동시성 제어·락 매니저) 전체 학기 커리큘럼
interaction-model: >-
영상 시청(수동)과 자기 PC에서 실제 C++ 코드로 락 매니저·격리 프로토콜까지 구현하는
중자산(heavy) 실습이 결합된 방식. 정식 자동채점(Gradescope)은 등록 학생 전용이다.
paywall: "강의·코드 다운로드는 전부 무료. 정식 채점만 비공개"
evidence-urls:
- https://15445.courses.cs.cmu.edu/
- https://www.youtube.com/playlist?list=PLSE8ODhjZXjYMAgsGH-GtY5rJYZ6zjsd5
confirmed-at: "2026-07-20"
- name: "Brilliant.org"
type: competitor
class: adjacent
product-form: "수학·과학·CS 전반을 다루는 인터랙티브 학습 구독 플랫폼(웹/모바일)"
content-unit: "다수 코스 카탈로그. 코스당 챕터 구조이며 비로그인/무료는 코스당 첫 챕터만 공개"
interaction-model: "짧은 인터랙티브 퀴즈·조작형 위젯 단위 학습 + 일일 챌린지로 재방문을 유도"
paywall: "월 $27.99 또는 연 $161.88(월 환산 $13.49) 구독. 가족 플랜 별도. 7일 무료체험"
evidence-urls:
- https://brilliant.org/subscribe/
- https://brilliant.org/courses/
confirmed-at: "2026-07-20"
- name: "PostgreSQL 공식 문서 — Transaction Isolation"
type: substitute
class: substitute
product-form: "공식 정적 텍스트 문서(격리수준×이상현상 매트릭스 표 + SQL 예시)"
content-unit: "단일 문서 페이지. Lost Update는 별도 용어로 명명되지 않고 이상현상 설명에 암묵 포함"
interaction-model: "읽기 전용. 표와 SQL 예시뿐이며 상태 변화를 조작하거나 인과를 단계별로 설명하지 않는다."
paywall: "무료"
evidence-urls:
- https://www.postgresql.org/docs/current/transaction-iso.html
confirmed-at: "2026-07-20"
current-alternatives:
- alternative: "공식 데이터베이스 문서 정독(예: PostgreSQL Transaction Isolation)"
evidence-url: https://www.postgresql.org/docs/current/transaction-iso.html
- alternative: "Stack Overflow 등 커뮤니티 Q&A에서 유사 증상 검색"
- alternative: "동료에게 질문하거나 화면 공유로 페어 디버깅"
- alternative: "책(예: Designing Data-Intensive Applications류) 정독을 통한 정적 텍스트 학습 — 이번 pack에서 URL로 개별 검증하지 않음, 일반 통념으로만 인용(E1)"
- alternative: "hyeonworks v1 자체 released 제품(Dual Portal, 단일 Lost Update 주제) — 사내 status quo"
evidence-path: hyeonworks/app/README.md
strengths-weaknesses:
- subject: "The Deadlock Empire"
strengths:
- "능동적 조작으로 동시성 버그를 스스로 유발하는 몰입감 높은 상호작용"
- "무료·가입 불필요로 진입장벽이 낮음"
- "2016년 해커톤 이후 HN 등 개발자 커뮤니티에서 자발적으로 회자된 바이럴 사례"
weaknesses:
- "원인→결과를 언어로 설명(explain)하거나 기대값·관찰값을 대조하는 단계가 없어 causal reasoning 언어화가 약함"
- "새 사례로 전이(transfer)하는 후속 연습이 없음"
- "카탈로그가 2016년 이후 크게 갱신되지 않아 최신성 신호가 약함"
- subject: "The Secret Lives of Data — Raft"
strengths:
- "단일 메커니즘을 best/worst-case 시나리오로 나눠 시각적으로 깊게 보여주는 서사 구조"
- "스크롤 연동 애니메이션이 기억에 남는 설명 방식으로 널리 인용됨"
weaknesses:
- "수동 재생 위주라 사용자가 직접 예측·조작하지 않는 관찰자 모드에 가까움"
- "단일 페이지 이후 재방문을 유도할 후속 콘텐츠가 없음"
- subject: "Jepsen — Consistency Models"
strengths:
- "일관성 모델 전체를 아우르는 권위 있는 카탈로그형 레퍼런스로 업계 표준 용어의 근거로 자주 인용됨"
weaknesses:
- "인터랙티브 조작이 없는 정적 텍스트+다이어그램이라 상태를 직접 조작하며 배우기 어려움"
- "실무자 대상 사전지식을 요구해 입문 난이도가 높음"
- subject: "CodeCrafters"
strengths:
- "실제 프로덕션급 도구를 처음부터 구현해 확신(confidence)을 준다는 창업자 인터뷰의 핵심 가치제안"
- "git push 즉시 자동 테스트로 피드백 루프가 빠름"
- "400K+ 사용자, GitHub 'build-your-own-x' 레포 50만 스타 수준의 높은 인지도"
weaknesses:
- "코드 작성이 전제조건이라 진입장벽이 높고 '개념/증상만 아는' 사용자에게는 부적합"
- >-
4년 이상 운영 후 "the gap between people love it and people pay for it"을 좁히지
못했다며 신규 챌린지 개발을 공식 중단(2026 블로그) — 참여도(사랑받음)와 지불의사(과금)
사이 괴리가 breadth-catalog·프리미엄 모델의 핵심 리스크임을 실증하는 사례
- subject: "VisuAlgo"
strengths:
- "26개 이상 주제의 폭넓은 카탈로그로 검색 트래픽을 다각화"
- "무료·무로그인으로 접근장벽이 없고 10년 이상 운영되며 대학 강의 표준 자료로 정착"
weaknesses:
- "알고리즘/자료구조 도메인에 한정돼 있어 동시성/트랜잭션 같은 시스템 상태 개념에 적용된 직접 사례가 없음"
- "e-Lecture 모드 외에는 causal '왜' 설명이 약하고 애니메이션 관찰 위주"
- subject: "Use The Index, Luke"
strengths:
- "벤더 중립적으로 5개 DB를 아우르는 권위 있는 무료 텍스트"
- "다국어 번역으로 도달 범위가 넓음"
weaknesses:
- "정적 텍스트라 문제공간이 지적하는 한계('정적 문서만으로 이해하기 어려움')를 그대로 가짐"
- "상태 변화를 직접 조작·비교하는 인터랙션이 없음"
- subject: "CMU 15-445 Database Systems + BusTub"
strengths:
- "동시성 제어(Project 4)까지 포함한 대학 수준의 완전한 무료 커리큘럼"
- "실제 C++ 코드로 락 매니저를 구현하는 매우 높은 깊이"
weaknesses:
- "강의+대형 프로젝트 완주에 수십 시간이 필요해 진입장벽·시간비용이 매우 높음"
- "정식 채점(Gradescope)이 등록 학생 전용이라 일반 개발자는 자기 검증 피드백이 약함"
- subject: "Brilliant.org"
strengths:
- "짧은 인터랙티브 퀴즈 단위로 매일 재방문을 유도하는 습관 형성 루프"
- "연 $161.88 구독이 실제로 매출을 내는 검증된 모델"
- "카탈로그 규모 자체가 구독 정당화 근거가 될 만큼 큼"
weaknesses:
- "CS 특정 시스템 주제(트랜잭션/동시성) 깊이보다 수학/과학 대중 교양 폭에 최적화"
- "무료는 코스당 1챕터로 제한돼 초기 신뢰 형성 전 이탈 위험"
- subject: "PostgreSQL 공식 문서 — Transaction Isolation"
strengths:
- "가장 권위 있고 무료이며 버전별로 항상 최신 상태"
- "실무자가 실제로 가장 먼저 찾는 기본 status quo"
weaknesses:
- "Lost Update가 별도 용어로 명명되지 않고 이상현상 설명에 암묵적으로만 포함돼 개념-증상 연결이 약함(고정 문제공간 정의 자체를 실증)"
- "표와 SQL 예시뿐이라 인과 설명이 없음"
differentiation-hypotheses:
- >-
Deadlock Empire·Secret Lives of Data처럼 상호작용은 있지만 causal explain·전이 단계가 없는
direct 대체재와 달리, Predict→Observe→Compare→Explain→Transfer 5단계 루프 전체를 갖춘 제품은
확인된 9개 근거 중 없다 — 이 루프 완결성이 차별화 지점이 될 수 있다는 가설(미검증).
- >-
PostgreSQL 공식문서·Use The Index Luke 같은 정적 문서는 Lost Update를 별도 개념으로 명명조차
하지 않는다 — '증상에서 시작해 원인을 추적'하는 진입 경로 자체가 시장에 상대적으로 비어있다는
가설(단, 그 진입 경로에 대한 수요 존재는 미검증).
- >-
CodeCrafters·CMU 15-445는 실제 코드 작성을 요구해 진입장벽이 매우 높다 — 코드 작성 없이 상태를
조작하며 인과를 배우는 포지션은 '개념/증상만 아는' 개발자 세그먼트에서 상대적으로 비어있다는 가설.
- >-
VisuAlgo·Brilliant는 카탈로그 폭으로 검색 트래픽을 다각화했지만, 시스템 동시성/트랜잭션
도메인에 특화된 카탈로그 경쟁자는 이번 조사에서 확인되지 않았다 — breadth 확장 시 도메인
특화가 차별화가 될 수 있다는 가설.
- >-
경계 가설(differentiation이 아니라 risk-bounding): CodeCrafters 사례(400K+ 사용자·GitHub 50만
스타에도 수익화 실패로 신규 개발 중단)는 참여도가 곧 지불의사로 전환되지 않음을 보여준다.
ground-boundary의 under-review 항목("반복 방문 가치", "배포 및 향후 유료 가치")을 낙관적으로
가정하려면 이 반증 사례를 반박할 별도 근거가 필요하다.
evidence-urls:
- https://deadlockempire.github.io/
- https://github.com/deadlockempire/deadlockempire.github.io
- https://thesecretlivesofdata.com/raft/
- https://jepsen.io/consistency
- https://jepsen.io/consistency/models
- https://codecrafters.io/pricing
- https://app.codecrafters.io/courses/redis/overview
- https://codecrafters.io/blog/pausing-new-challenges
- https://visualgo.net/en
- https://use-the-index-luke.com/
- https://15445.courses.cs.cmu.edu/
- https://www.youtube.com/playlist?list=PLSE8ODhjZXjYMAgsGH-GtY5rJYZ6zjsd5
- https://brilliant.org/subscribe/
- https://brilliant.org/courses/
- https://www.postgresql.org/docs/current/transaction-iso.html
option-evaluations:
- option-id: OPT-A-DEPTH-FIRST
label: "Depth-first flagship"
current-alternatives-and-competitors: >-
오늘 이 문제를 겪는 개발자는 공식 문서(PostgreSQL 문서)나 책을 읽거나, Deadlock Empire류
인터랙티브 퍼즐, Secret Lives of Data류 explorable로 단일 메커니즘을 학습한다. 가장 가까운
direct 경쟁자는 Deadlock Empire(상호작용은 있으나 explain 단계 없음)와 Secret Lives of Data
(설명은 깊으나 관찰자 모드)이며, Jepsen consistency는 같은 도메인의 substitute 레퍼런스다.
differentiation-hypothesis: >-
두 direct 경쟁자 모두 갖추지 못한 predict-compare-explain-transfer 전체 루프가 depth-first의
차별화 지점이 될 수 있다(미검증 가설).
acquisition-hypothesis: >-
단일 주제 depth 제품은 SEO/공유 키워드가 좁아 초기 유입 채널이 협소할 위험이 있다. Deadlock
Empire는 2016년 HN 게시로 일회성 트래픽 급증 후 눈에 띄는 재확산 신호가 없다(같은 해커톤
기원 이후 콘텐츠 갱신이 뜸함) — depth-first 단독으로는 반복적 외부 유입 채널 확보가 어려울
수 있다는 유추.
retention-hypothesis: >-
완성 콘텐츠가 1개뿐이면 재방문 유인이 약하다. Secret Lives of Data(Raft)도 단일 페이지 이후
후속 콘텐츠가 없어 재방문 유인이 없는 동일 패턴을 보인다 — depth-first 단독 유지 시 반복
방문 가치는 '전이(transfer)' 연습이나 신규 사례 추가로만 확보될 수 있다는 가설.
revenue-hypothesis: >-
무료 단일 콘텐츠는 CodeCrafters/Brilliant류 구독 모델의 전제인 '카탈로그 규모'가 없어
유료화 근거가 약하다 — depth-first는 초기엔 무료 브랜드 자산으로 포지셔닝하고 수익화는
카탈로그 확장 이후로 지연될 가능성이 높다는 가설.
evidence-refs:
- "The Deadlock Empire (https://deadlockempire.github.io/)"
- "The Secret Lives of Data — Raft (https://thesecretlivesofdata.com/raft/)"
- "Jepsen — Consistency Models (https://jepsen.io/consistency)"
unresolved-assumptions:
- "단일 심층 주제만으로 개발자 커뮤니티에서 재확산(바이럴)될지는 실측 없이 유추한 것이다."
- "Lost Update가 Raft/데드락 수준의 대중적 인지도를 가진 주제인지 확인되지 않았다."
kill-criteria:
- "3개월 내 외부 링크(HN/Reddit/X) 경유 유입이 없고 오가닉 검색 세션이 주당 10 미만이면 depth-first 단독 유입 전략을 재검토한다."
- "완주자 대상 재방문(2주 내)이 5% 미만이면 반복방문 가치 가정을 기각한다."
- option-id: OPT-B-BREADTH-CATALOG
label: "Breadth-first structured catalog"
current-alternatives-and-competitors: >-
VisuAlgo(알고리즘 26+주제 무료 카탈로그), CodeCrafters(시스템 도구 11개 유료 카탈로그),
Brilliant.org(수학/과학/CS 다과목 구독 카탈로그), CMU 15-445(프로젝트 시퀀스 커리큘럼)가
모두 breadth-catalog 패턴의 실명 경쟁·인접 대체재다.
differentiation-hypothesis: >-
VisuAlgo는 알고리즘, Brilliant는 범용 STEM에 최적화돼 있고 시스템 동시성/트랜잭션 도메인에
특화된 카탈로그 경쟁자는 확인되지 않았다 — 도메인 특화 breadth가 white space일 수 있다는
가설이나, CodeCrafters가 이미 인접 영역(Redis/Git/SQLite 직접 구현)을 유료로 채우고 있어
여백이 생각보다 좁을 수 있다.
acquisition-hypothesis: >-
카탈로그형은 주제별로 각각 SEO 키워드를 얻어 총 유입 채널이 다각화된다(VisuAlgo가 26+
주제로 광범위 검색 트래픽을 확보한 사례) — breadth가 유입 채널 다각화에 유리하다는 가설.
retention-hypothesis: >-
카탈로그는 '다음 주제' 진행형 재방문 구조를 만들 수 있다(CodeCrafters 챌린지 시퀀스,
Brilliant 코스 이어보기·일일 챌린지). 단, 1인 운영으로 카탈로그를 계속 채우지 못하면
재방문 유인이 끊긴다는 상충 리스크가 있다(운영비용 자체는 이 lens 밖이나 수익가설의 전제조건).
revenue-hypothesis: >-
카탈로그 존재가 구독형 과금의 전제조건으로 보인다(Brilliant $27.99/mo·$161.88/yr, CodeCrafters
유료 멤버십). 그러나 CodeCrafters는 11개 챌린지 카탈로그·400K+ 사용자·GitHub 50만 스타의
높은 참여도에도 "수익화 구조 부재"로 4년 만에 신규 개발을 중단했다 — 카탈로그 breadth가
곧 수익 전환을 보장하지 않는다는 강한 반증이다. breadth 자체보다 초기부터 명확한 지불
전환 지점 설계가 선행돼야 한다는 가설.
evidence-refs:
- "VisuAlgo (https://visualgo.net/en)"
- "CodeCrafters pricing (https://codecrafters.io/pricing)"
- "CodeCrafters — 신규 챌린지 중단 (https://codecrafters.io/blog/pausing-new-challenges)"
- "Brilliant.org subscribe (https://brilliant.org/subscribe/)"
unresolved-assumptions:
- "동시성/트랜잭션 도메인에서 카탈로그가 몇 개 주제 규모여야 구독 전환이 발생하는지 실측이 없다."
- "1인 운영으로 카탈로그 제작 속도가 유입 성장 속도를 따라갈 수 있는지 확인되지 않았다(운영 렌즈 소관이나 수익가설의 전제)."
kill-criteria:
- "카탈로그 3개 주제 이후에도 재방문율(2주 내 재방문)이 depth-first 단일 버전 대비 개선되지 않으면 breadth의 반복방문 가설을 기각한다."
- "CodeCrafters 사례처럼 참여 지표(완주율·체류시간)는 높으나 12개월 내 지불의사 신호(사전등록·유료 문의)가 전무하면 breadth-first의 수익 가설을 기각한다."
- option-id: OPT-C-CATEGORY-REDEF
label: "Category redefinition"
current-alternatives-and-competitors: >-
카테고리 자체를 재정의한다는 것은 A/B 패턴에 속한 위 8개 제품 전체를 '현재 카테고리'로
간주하고 그 카테고리 밖의 형태를 찾는 것이다. 확인된 공통 약점: Jepsen은 정적이라 상호작용이
없고, Deadlock Empire·Raft explorable은 상호작용은 있으나 causal explain·transfer가 없으며,
CodeCrafters·CMU 15-445는 실제 코드 작성을 요구해 진입장벽이 매우 높고, VisuAlgo·Brilliant는
도메인이 알고리즘/범용 STEM에 국한된다.
differentiation-hypothesis: >-
'코드 작성 없이 상태를 직접 조작하며 causal reasoning을 언어화하는' 카테고리는 9개 근거
어디에도 명시적으로 존재하지 않는다는 gap 가설. 단, 이 gap이 실제 시장 기회인지 단순 비수요
(아무도 원하지 않아 아무도 안 만들었다)인지는 이번 조사로 구분할 수 없다.
acquisition-hypothesis: >-
새 카테고리는 기존 검색어(예: "concurrency game", "sql performance", "algorithm visualizer")에
올라타지 못한다는 리스크가 가장 크다. 확인된 9개 레퍼런스 전부가 기존 카테고리 키워드
(게임/비주얼라이제이션/북/코스/챌린지)로 발견됐으므로, 재정의 카테고리는 새 용어 자체를
처음부터 만들어야 해 세 옵션 중 가장 느린 유입 가설을 갖는다.
retention-hypothesis: >-
카테고리가 불명확하면 사용자가 제품을 '무엇'이라 부를지 몰라 공유·추천이 어려워지고, 이는
반복방문·바이럴 유입 모두에 불리하다는 간접 가설(근거: v1 자체 dissent "Dual Portal이 두
제품처럼 보이면 선택 근거가 사라진다"가 명료성 리스크의 선례).
revenue-hypothesis: >-
카테고리가 시장에 없다는 것은 비교 가능한 가격 기준점(pricing anchor)도 없다는 뜻이다.
Brilliant/CodeCrafters 같은 기존 카테고리의 가격 신호를 그대로 차용할 수 없어, 수익 가설
자체를 세울 근거가 세 옵션 중 가장 약하다.
evidence-refs:
- "Jepsen — Consistency Models (https://jepsen.io/consistency)"
- "The Deadlock Empire (https://deadlockempire.github.io/)"
- "CodeCrafters pricing (https://codecrafters.io/pricing)"
- "VisuAlgo (https://visualgo.net/en)"
unresolved-assumptions:
- "재정의된 카테고리에 대한 검색 수요 자체가 존재하는지 전혀 확인되지 않았다(세 옵션 중 가장 큰 미검증 가정)."
- "기존 카테고리 부재가 시장 기회인지 단순 비수요인지 이번 조사만으로는 구분되지 않는다."
kill-criteria:
- "재정의 후 새 카테고리 용어로 첫 방문자에게 제품을 설명했을 때 5명 중 3명 이상이 무엇을 하는 제품인지 자력으로 설명하지 못하면 category redefinition을 기각한다."
- "출시 후 6주 내 자연 검색·추천 공유가 0에 가깝고 유료 채널(광고) 없이는 유입이 전무하면 재정의 자체가 시장에 존재하지 않는 카테고리임을 인정하고 기각한다."
conditional-option-d:
proposed: false
admission-rule-checked: >-
ground-boundary.yaml의 admission-rule: "조사 근거에서 독립적으로 도출될 경우에만 추가한다.
A와 B를 절충했다는 이유만으로 hybrid를 기본 추천하지 않는다."를 이 pack의 근거에 대조했다.
rationale: >-
staged 전략(먼저 depth-first로 단일 주제를 검증한 뒤 breadth-catalog로 확장)의 실제 사례로
CodeCrafters를 검토했으나, 창업자 인터뷰(TechCrunch/Y Combinator 자료)에 따르면 CodeCrafters는
단일 챌린지에서 출발해 단계적으로 확장한 것이 아니라 **출시 시점부터 4개 챌린지로 동시에
시작**했다. 즉 "먼저 하나로 증명한 뒤 넓힌다"는 staging 서사는 가장 근접한 실사례에서
확인되지 않았다 — 오히려 그 CodeCrafters조차 breadth를 갖춘 채로도 4년 뒤 수익화 실패로
신규 개발을 중단했다는 사실은, 문제가 'A냐 B냐 순서'가 아니라 두 옵션 모두에서 수익 전환
설계가 별도로 필요하다는 것을 시사한다. 이는 A/B의 절충이 아니라 A와 B 각각의 독립적인
약점이므로, staged 옵션(D)을 정당화하는 독립 근거가 되지 못한다. 따라서 D는 제안하지 않는다
("D 미제안").
evidence-refs:
- "CodeCrafters — 신규 챌린지 중단 (https://codecrafters.io/blog/pausing-new-challenges)"
- "CodeCrafters Y Combinator 프로필 (https://www.ycombinator.com/companies/codecrafters)"
report-header:
bottom-line: >-
실명 경쟁·대체재 9건(direct 2 · adjacent 4 · substitute 3, 전부 2026-07-20 실제 접속 확인)을
공통 evidence pack으로 접지해 v1의 외부근거 0건을 시정했다. 이 pack 위에서 OPT-A/B/C를
LENS-REVENUE(유입·반복방문·수익) 관점으로만 평가했고, CodeCrafters가 400K+ 사용자·GitHub
50만 스타의 높은 참여도에도 수익화 실패로 신규 개발을 중단한 사례가 breadth-catalog·구독
수익가설 전반의 핵심 리스크를 실증한다. 조건부 OPT-D는 근거에서 독립적으로 도출되지 않아
제안하지 않는다("D 미제안").
decision-needed:
needed: false
approver: null
confidence:
value: Med
derived-from: evidence
risks:
- "옵션별 유입·반복방문·수익 가설은 전부 외부 사례에서 도출한 유추(E2)이며 hyeonworks 자체 실측 데이터(GA·전환·설문)가 전무하다 — /decide에서 이 가설만으로 확정하지 않아야 한다."
- "CodeCrafters·Brilliant는 카탈로그 성숙기 제품(수년 운영·수십만 사용자)이라 hyeonworks 1인 초기단계로 그대로 스케일 다운한 유추는 규모 차이를 과소평가할 위험이 있다."
- "OPT-C(category redefinition)의 근거는 '기존 카테고리 제품들의 공통 약점'에서 도출한 간접 추론이며, 재정의된 카테고리 자체의 수요는 어떤 근거로도 직접 확인되지 않았다 — 세 옵션 중 가장 낮은 확신도다."
- "company-context가 provisional이라 회사 문맥 인용은 이 보고서에서 사용하지 않았다. 인용한 내부 문서는 전부 hyeonworks 프로젝트 산출물(E3)이며 org-os 회사문맥이 아니다."
evidence:
- source-uri: hyeonworks/design/hyeonworks-vnext-v2/ground-boundary.yaml
grade: E3
note: "mandated-option-set A/B/C(+조건부 D)와 evidence-protocol(공통 pack·외부근거 필수)의 원천."
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/STR-ANALYST-20260718T110705Z.report.yaml
grade: E3
note: "v1 grounding-package. evidence 3건이 전부 사내 아티팩트였고 외부 경쟁 근거가 0건이었음을 직접 확인."
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: "v1이 선택한 OPT-DUAL-PORTAL과 미검증 dissent 2건 — 이번 pack 비교의 baseline(계승 아님)."
- source-uri: hyeonworks/app/README.md
grade: E3
note: "v1 released 실물(Dual Portal, 단일 Lost Update 주제) — 사내 현행 status quo 제품."
- source-uri: https://deadlockempire.github.io/
grade: E2
note: "direct competitor — 인터랙티브 동시성 퍼즐 게임, 16챌린지, 무료. 2026-07-20 확인."
- source-uri: https://thesecretlivesofdata.com/raft/
grade: E2
note: "direct competitor — 단일 메커니즘(Raft) explorable explanation, 무료. 2026-07-20 확인."
- source-uri: https://jepsen.io/consistency
grade: E2
note: "substitute/adjacent — 일관성 모델 정적 카탈로그 레퍼런스, 무료. 2026-07-20 확인."
- source-uri: https://codecrafters.io/pricing
grade: E2
note: "adjacent competitor — 시스템 도구 build-your-own-X 카탈로그, 유료 멤버십. 2026-07-20 확인."
- source-uri: https://codecrafters.io/blog/pausing-new-challenges
grade: E2
note: "참여도-수익화 괴리 실증. 400K+ 사용자·GitHub 50만 스타에도 수익화 실패로 신규 챌린지 개발 중단(2026). breadth-catalog 수익가설의 핵심 리스크 근거. 2026-07-20 확인."
- source-uri: https://visualgo.net/en
grade: E2
note: "adjacent competitor — 무료 알고리즘/자료구조 시각화 카탈로그(26+ 주제). 2026-07-20 확인."
- source-uri: https://use-the-index-luke.com/
grade: E2
note: "substitute — 무료 정적 웹북(SQL 인덱싱/성능), 벤더 중립. 2026-07-20 확인."
- source-uri: https://15445.courses.cs.cmu.edu/
grade: E2
note: "substitute — 무료 대학 강의 + 동시성제어 프로젝트(BusTub). 2026-07-20 확인."
- source-uri: https://brilliant.org/subscribe/
grade: E2
note: "adjacent competitor — 구독형 STEM/CS 학습 카탈로그, 월 $27.99/연 $161.88. 2026-07-20 확인."
- source-uri: https://www.postgresql.org/docs/current/transaction-iso.html
grade: E2
note: "substitute — 공식 정적 문서, Lost Update가 별도 명명되지 않고 이상현상 설명에 암묵 포함. 2026-07-20 확인."
@@ -0,0 +1,375 @@
report-type: workflow-artifact
artifact-kind: grounding-contribution
artifact-version: 1
tier: standard
identity:
artifact-id: UX-RESEARCHER-20260720T115855Z
workflow-id: hyeonworks-vnext-v2
stage: discovery
producer-role-id: UX-RESEARCHER
created-at: '20260720T115855Z'
attempt-id: 1
payload:
assigned-lens: LENS-CUSTOMER
producer-run-id: hyeonworks-vnext-v2-discovery-ux-researcher-20260720T115952Z
context-package-ref: hyeonworks/state/context-packages/hyeonworks-vnext-v2/ux-researcher-20260720T115952Z.pkg.yaml
context-package-sha256: fb04b11007ab95b05ab4c533a2af943420c610a5b717f7186b89c7bcf86cac98
research-note: >-
실사용자 0명(제품에 사용 데이터 없음). 아래는 전부 WebSearch/WebFetch로 접지한 2차 근거
(외부 실무자료·학습과학 문헌·경쟁/대체재 제품)와 사내 기존 결정문 대조에 기반한 가설이다.
"실측했다"고 주장하지 않으며, 이에 따라 confidence는 Med를 상한으로 유지한다. NN/g 방법선택
프레임 기준으로는 generative 단계(문제 재구성)에 해당하며 formative/summative(실사용자 검증)는
이번 조사 범위 밖이다.
findings:
- id: PJ1
statement: >-
동시성·트랜잭션 격리 학습의 근본 어려움은 "약한 격리일수록 동시성은 늘지만 일관성이 흔들리고,
강한 격리(Serializable)는 이론상 명확해도 실제로는 성능 저하·직렬화 실패로 이어진다"는
트레이드오프 자체가 직관적으로 설명되지 않는다는 데 있다고 다수의 실무 자료가 지목한다.
grade: E2
evidence-refs:
- https://www.baeldung.com/cs/concurrency-control-lost-update-problem
- https://www.designgurus.io/answers/detail/top-concurrency-and-multithreading-for-system-design-interviews
- id: PJ2
statement: >-
Race condition/동시성 버그는 "타이밍에 의존해 재현이 비결정적"이라는 성질 때문에 정적 코드
리딩이나 단계별 디버거만으로는 원인을 재구성하기 어렵다 — ground-boundary의 target-user 정의
(정적 문서만으로 이해하기 어려운 개발자)와 직접 부합한다.
grade: E2
evidence-refs:
- https://www.rceenetworks.com/a-software-race-condition-is-hard-to-debug/
- https://bugpilot.io/2026/05/28/debugging-concurrency-bugs-race-condition-resolution-guide/
- id: PJ3
statement: >-
"Lost Update"류 이상 현상은 에러를 던지지 않고 두 트랜잭션 모두 성공을 보고하며, 손상은
최종 상태에서만 관찰된다("no error is raised, both transactions report success, the
corruption is visible only in the final state"). 이는 ground-boundary target-user의
"증상·결과를 내부 상태 변화와 인과관계에 연결하기 어려운 개발자"가 가상의 페르소나가 아니라
실제로 문서화된 혼란 지점임을 보여준다.
grade: E2
evidence-refs:
- https://www.abstractalgorithms.dev/lost-update-database-anomaly
- id: PJ4
statement: >-
근본원인분석(root cause analysis) 실무 문헌은 "반증 가능한 가설을 세우기 전에 코드를
만지지 말라"를 강조한다. Predict 단계(관찰 전에 가설을 먼저 선택하게 하는 구조)가 임의의
교육적 장치가 아니라 실무 디버깅 습관과 방향이 일치한다는 근거다.
grade: E2
evidence-refs:
- https://www.seangoedecke.com/debugging/
- https://www.freecodecamp.org/news/why-is-debugging-hard-how-to-develop-an-effective-debugging-mindset/
- id: PJ5
statement: >-
정적 다이어그램(UML 상태/구조도 등)은 시간에 따라 변하는 시스템 동작을 표현하는 데 태생적
한계가 있다는 점을 소프트웨어공학·물리교육 문헌이 일치해서 지적한다 — "정적 문서만으로
이해하기 어렵다"는 문제 정의를 지지한다.
grade: E2
evidence-refs:
- https://www.cs.uct.ac.za/mit_notes/software/htmls/ch05s08.html
- https://arxiv.org/pdf/2405.18614
- id: PJ6
statement: >-
능동학습(상호작용·시뮬레이션)이 수동적 학습(비디오·읽기)보다 유지율이 높다는 방향성은 학습
과학 일반론에서 반복 확인되나, 인용되는 정량 수치(예: 80%대 20%)는 출처가 불명확한 요약
통계이고 성인 개발자 자기주도 학습을 특정한 연구가 아니다 — 방향 참고(E2)로만 쓰고 수치를
확정 근거로 쓰지 않는다.
grade: E2
evidence-refs:
- https://transfrinc.com/resources/blog/active-learning-vs-passive-learning-with-technology
- id: PJ7
statement: >-
"시스템 설계 인터뷰 준비"라는 학습 맥락은 ByteByteGo, Grokking the (Modern) System Design
Interview, System Design Primer 같은 대형·지속 수익화 제품이 존재할 만큼 크고 이미 검증된
수요다. 동시성/격리 수준 주제가 그 커리큘럼에 명시적으로 포함되어 있다.
grade: E2
evidence-refs:
- https://www.designgurus.io/answers/detail/top-concurrency-and-multithreading-for-system-design-interviews
- https://www.freecodecamp.org/news/systems-design-for-interviews
- id: PJ8
statement: >-
"직접 만들어보며 배운다"(CodeCrafters의 "Build your own Redis/Git/SQLite")는 실무 심화·
숙련 강화 동기의 존재를 보여주는 별개 세그먼트다 — 인터뷰 준비(PJ7)와는 다른 유입 동기
(전문성 심화/호기심)로 보인다.
grade: E2
evidence-refs:
- https://codecrafters.io/
- id: PJ9
statement: >-
공식 문서·정의 중심 자료에 대한 반작용으로 만화/zine 형식(Julia Evans, wizardzines)이
인기 있다는 사실은, "기존 학습자료가 실패하는 지점"이 상호작용 부재만이 아니라 접근성·
친근함의 부재이기도 하다는 것을 시사한다.
grade: E2
evidence-refs:
- https://jvns.ca/
- https://wizardzines.com/zines/git/
- id: PJ10
statement: >-
raft.github.io / thesecretlivesofdata.com류의 "각본화된 시나리오 기반 인터랙티브 시각화"가
복잡한 분산 프로토콜 학습에 널리 인용되는 성공 사례로 존재한다 — 단일 메커니즘을 깊이
학습시키는 접근(depth-first)의 실행 가능성을 뒷받침하는 선례다.
grade: E2
evidence-refs:
- https://raft.github.io/
- https://thesecretlivesofdata.com/raft/
- id: PJ11
statement: >-
(주의 신호) SQL Murder Mystery는 스스로를 "SQL을 이미 아는 사람이 재미로 연습하는 게임에
더 가까운 것"으로 규정한다 — 내러티브/게임 포장이 무(無)지식 상태의 최초 개념 학습을
대체한다는 근거는 아니며, 오히려 실기 연습·재방문 동기에 가깝다. 카테고리 재정의(OPT-C)의
내러티브 방향에 대한 반증적 참고.
grade: E2
evidence-refs:
- https://mystery.knightlab.com/
- id: PJ12
statement: >-
이번 조사에서 "팀 온보딩" 맥락(신규 입사자가 기존 시스템의 내부 동작을 학습)을 직접 다루는
외부 근거는 찾지 못했다 — 데이터 공백으로 남긴다. "실무 디버깅" 맥락은 fixed-problem-space가
실제 장애 확정을 영구 금지하므로, 이 제품 안에서는 "디버깅 스킬을 통제된 시나리오로 연습"하는
형태로만 존재할 수 있고 실사고 대응 도구로는 존재할 수 없다(경계 재확인, 확장 제안 아님).
grade: E1
evidence-refs: []
v1-premise-verdict:
dual-entry:
verdict: population-supported--ui-form-unverified
reasoning: >-
두 사용자 모집단("개념은 알지만 인과를 설명 못 하는 개발자" vs "증상은 봤지만 어떤 메커니즘을
검증해야 할지 모르는 개발자")이 실재한다는 것은 외부 근거로 뒷받침된다: 전자는 정의·isolation
level 설명 중심 자료(PJ1, PJ7)의 존재 자체가, 후자는 "증상은 보이나 원인 후보를 좁혀야 하는"
상황을 정면으로 다루는 실무 문헌(PJ3, PJ4)이 뒷받침한다. 그러나 이 두 모집단을 "첫 화면의
선택 카드 두 개"로 분리해 보여주는 UI 해법 자체가 시작률·이해도를 높이는지 낮추는지에 대한
근거는 이번 조사에서도 찾지 못했다 — v1 자체 dissent("사용자 실측 전에는 두 카드가 실제
시작률을 높이는지 알 수 없다", EXEC-CEO-20260718T111108Z)가 그대로 유효하다. 판정: 문제
(두 모집단의 실재)는 지지되나, 해법 형태(선택 카드 UI)는 지지도 반증도 되지 않는다 — 실측
전까지 미해결.
evidence-refs:
- PJ1
- PJ3
- PJ4
- PJ7
- hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
five-step-loop:
verdict: components-analogous--whole-loop-unverified-for-domain
reasoning: >-
Predict/Observe/Explain은 POE(Predict-Observe-Explain) 교수법과 구조적으로 유사하며, 그
문헌은 오개념이 67%→7.4%로 줄었다고 보고한다(학교 과학교육 도메인). Compare(기대값-실제값
명시 대조)는 근본원인분석 실무에서 강조하는 "반증 가능한 가설 없이 코드를 만지지 말라"(PJ4)는
습관과 부합한다. Transfer는 productive-failure/far-transfer 문헌(Kapur)이 보고하는 "구조화된
실패(struggle) 후 전이 과제가 개념 이해·새 문제 전이를 높인다"는 결과와 방향이 일치한다.
그러나 이 근거들은 전부 (a) 정규 교육과정(교사 개입이 있는 교실, 대부분 K-12/대학 도메인)에서
나왔고, (b) 자기주도·시간압박 상태의 성인 개발자가 감독 없이 온라인에서 완주하는 상황을 직접
다루지 않으며, (c) "정확히 5단계, 이 순서·이 세분화"가 다른 변형(3~4단계)보다 낫다는 비교
연구는 찾지 못했다. 판정: 각 단계가 임의의 설계가 아니라는 유추적 근거는 있으나, 이 도메인·이
사용자층에 대한 5단계 고정 루프 자체의 직접 검증은 없다 — v1이 이를 "확정"으로 취급한 것은
근거의 강도를 실제보다 높게 표현한 것이다.
evidence-refs:
- https://onlinelibrary.wiley.com/doi/10.1111/cogs.12107
- https://files.eric.ed.gov/fulltext/EJ1272872.pdf
- PJ4
option-evaluations:
- option-id: OPT-A-DEPTH-FIRST
target-user-and-painful-job: >-
이미 Lost-Update류 이상을 마주쳤거나(증상 입구) 개념은 아는데(개념 입구) 왜 값이 사라지는지
스스로도 남에게도 설명하지 못하는 개발자. 실제 장애를 진단하려는 게 아니라 "이 메커니즘 하나는
완전히 설명할 수 있다"는 확신(인터뷰·코드리뷰·팀 설명 상황에서 재현 가능한 이해)을 원한다.
learning-outcome-hypothesis: >-
단일 주제에 대한 깊은 predict/observe/compare/explain/transfer 반복이 productive-failure/
far-transfer 문헌이 보고하는 "새 사례로의 전이" 효과를 낼 가능성이 있다(가설, 미검증).
Lost Update는 여러 2차 자료가 "동시성 이상현상을 가르치는 대표 예시"로 반복 인용하는 주제라
다른 동시성 버그로의 전이 가능성이 상대적으로 높은 소재로 보인다.
key-tradeoffs:
- 깊이를 얻는 대신 도달범위를 잃는다 — "당장 내일 인터뷰"처럼 넓은 커버리지가 급한 사용자에게
단일 주제 제품은 매력이 낮다.
- 기존 대체재(PJ7의 ByteByteGo·Grokking·System Design Primer)가 이미 폭넓은 인터뷰 대비
콘텐츠를 제공하므로, A는 그 수요와 정면 경쟁하지 않고 호기심/숙련 세그먼트(PJ8)에 기대야
한다.
evidence-refs: [PJ3, PJ4, PJ10, "https://onlinelibrary.wiley.com/doi/10.1111/cogs.12107"]
unresolved-assumptions:
- "단일 주제 완성도"가 성인 자기주도 학습자의 전이·유지에 실제로 유의미한 차이를 만드는지는
이 도메인에서 검증된 바 없다.
- 두 번째·세 번째 메커니즘으로 확장할 때 동일한 완성도를 유지할 수 있는지는 LENS-CUSTOMER
근거만으로 판단할 수 없다(운영·콘텐츠 비용은 다른 렌즈 소관).
kill-criteria:
- "(가설, 미검증) 학습자 다수가 Transfer 단계에서 다른 사례로 일반화하지 못하고 암기한 단일
사례만 재현한다면 depth-first의 핵심 전제(전이)가 성립하지 않는다."
- "(가설, 미검증) 도달범위 부족으로 초기 유입이 임계치 이하로 떨어지면(예: 인터뷰 준비
세그먼트가 전혀 붙지 않으면) depth 단독 전략의 성장경로가 막힌다."
- option-id: OPT-B-BREADTH-CATALOG
target-user-and-painful-job: >-
여러 동시성/DB 메커니즘을 인터뷰·설계 검토를 앞두고 일관된 분류체계로 빠르게 훑고 싶은
개발자. "이 개념도 저 개념도 알아야 하는데 어디서부터 봐야 할지 모른다"는 항해(navigation)
문제가 핵심 painful job이다.
learning-outcome-hypothesis: >-
ByteByteGo·Grokking류 기존 카탈로그는 대체로 정적/애니메이션 설명(수동적) 형태다. hyeonworks가
각 항목에서도 predict/observe 상호작용 루프를 유지한다면 "능동학습이 수동학습보다 유지율이
높다"는 일반 방향성(PJ6, 정량 미확정) 위에서 차별화될 수 있다는 가설. 단, 이 인터뷰-대비
세그먼트가 실제로 상호작용 깊이를 요구하는지(시간 압박 상황에서는 속도가 더 중요할 수도 있음)는
검증되지 않았다.
key-tradeoffs:
- 도달범위(PJ7의 크고 입증된 수요)를 얻는 대신, 항목마다 동일한 인터랙티브 깊이를 유지하지
못하면 카탈로그가 fixed-problem-space가 애초에 "실패"라고 규정한 정적 자료로 퇴행할 위험이
있다.
- 이미 강한 기존 대체재가 있는 시장에 진입하므로, 사용자가 기존 자료로 "충분히 해결됨"을
느끼는 상황에서 전환 이유를 사용자 관점에서 설명하기 어렵다.
evidence-refs: [PJ1, PJ6, PJ7]
unresolved-assumptions:
- 인터뷰 준비 사용자가 "빠른 훑기"보다 "깊은 상호작용"을 실제로 선호하는지는 검증되지 않았다
(시간 압박 상황에서는 얕고 빠른 콘텐츠를 선호할 수 있다는 반대 가설도 배제하지 못한다).
- 카탈로그 각 항목이 v1과 동일한 완성도(로컬 정적 앱, zero dependency, E2E 검증)를 유지할 수
있는지는 사용자 관점만으로 판단할 수 없다.
kill-criteria:
- "(가설, 미검증) 사용자 다수가 카탈로그 진입 화면에서 자신의 문제와 관련된 항목을 짧은 시간
안에 고르지 못하고 이탈한다면 항해 문제 해결이라는 핵심 가설이 성립하지 않는다."
- "(가설, 미검증) 항목별 상호작용 깊이가 얕아져 정적 자료와 체감상 구별되지 않는다면
(사용자가 '결국 또 다른 설명 블로그'로 인식하면) 차별화 가설이 무너진다."
- option-id: OPT-C-CATEGORY-REDEF
target-user-and-painful-job: >-
현재로선 LENS-CUSTOMER 근거만으로 특정할 수 없음. 두 방향의 후보만 근거상 관찰된다: (1)
공식 문서의 딱딱함·진입장벽에 대한 반작용으로 존재하는 "친근한 압축 설명" 수요(PJ9) — 정적
콘텐츠로 회귀할 위험을 동반, (2) 이미 기초 지식을 가진 사용자의 실기 연습/재방문 수요(PJ8,
PJ11) — 무지식 상태의 최초 학습을 대체하지 못하는 도구로 보인다.
learning-outcome-hypothesis: >-
두 후보 중 어느 쪽을 택하느냐에 따라 학습성과 가설이 정반대로 갈린다: (1)을 따르면 상호작용
엔진을 축소하고 압축 설명으로 접근장벽을 낮추는 가설, (2)를 따르면 상호작용 엔진에 내러티브
스킨만 입혀 기억 가능성·재방문을 높이는 가설이다. 이 둘을 구분할 근거가 없어 단일 학습성과
가설을 세울 수 없다.
key-tradeoffs:
- 가장 넓은 재정의 자유를 얻는 대신 가장 큰 연구 부채(무엇을 만들지조차 미확정)를 진다 —
ground-boundary가 "무제한 재정의는 아님"이라 명시한 이유와 부합한다.
- 카테고리를 열면 fixed-problem-space(정적 문서로 이해 어려운 개발자)와의 연결이 느슨해질
위험이 있다 — 문제공간을 벗어나지 않으면서 카테고리만 바꾸는 것이 실제로 가능한지는 이번
조사로 결론 내리지 못했다.
evidence-refs: [PJ8, PJ9, PJ11]
unresolved-assumptions:
- 이 옵션이 상호작용 학습 엔진을 유지하는지 포기하는지 자체가 정의되지 않았다.
- target-user가 특정되지 않아 kill-criteria를 사용자 행동으로 조작적 정의할 수 없다.
kill-criteria:
- "/decide 전까지 A/B만큼 구체적인 target-user와 painful job 한 문장을 제시하지 못하면,
이 옵션은 LENS-CUSTOMER 관점에서 반증 불가능하므로 다른 옵션과 동일 기준으로 비교될 수
없다(채택 반려 대상)."
- option-id: OPT-D-STAGED
admission-verdict: not-independently-supported-by-LENS-CUSTOMER
reasoning: >-
본 조사가 발견한 것은 A와 B가 서로 다른, 실재하는 유입 동기(호기심·숙련 대 인터뷰 준비, PJ7·
PJ8)를 겨냥한다는 "세그먼트 분리" 사실이다. 이 사실은 논리적으로 "그러니 단계적으로 둘 다
한다"(D)와 "그러니 하나의 세그먼트를 골라 잘 한다"(A 또는 B 단독)를 동등하게 지지한다 —
세그먼트가 다르다는 사실 자체가 단계 전략을 요구하지 않는다. ground-boundary의 admission-rule
("A와 B를 절충했다는 이유만으로 hybrid를 기본 추천하지 않는다")에 따라, 이 관찰만으로는
LENS-CUSTOMER가 D를 독립적으로 도출하지 않는다 — 비채택. 다만 세그먼트 분리 사실 자체는
자원배분·수익 판단을 하는 다른 렌즈(STR-ANALYST/PROD-PM/EXEC-CFO 등)가 단계 전략의 독립적
근거로 쓸 수 있는 입력이므로 findings(PJ7, PJ8)로 남긴다.
evidence-refs: [PJ7, PJ8, PJ10]
evidence-urls:
- https://www.baeldung.com/cs/concurrency-control-lost-update-problem
- https://www.abstractalgorithms.dev/lost-update-database-anomaly
- https://www.rceenetworks.com/a-software-race-condition-is-hard-to-debug/
- https://bugpilot.io/2026/05/28/debugging-concurrency-bugs-race-condition-resolution-guide/
- https://www.seangoedecke.com/debugging/
- https://www.freecodecamp.org/news/why-is-debugging-hard-how-to-develop-an-effective-debugging-mindset/
- https://onlinelibrary.wiley.com/doi/10.1111/cogs.12107
- https://files.eric.ed.gov/fulltext/EJ1272872.pdf
- https://raft.github.io/
- https://thesecretlivesofdata.com/raft/
- https://mystery.knightlab.com/
- https://jvns.ca/
- https://wizardzines.com/zines/git/
- https://codecrafters.io/
- https://www.designgurus.io/answers/detail/top-concurrency-and-multithreading-for-system-design-interviews
- https://www.freecodecamp.org/news/systems-design-for-interviews
- https://www.cs.uct.ac.za/mit_notes/software/htmls/ch05s08.html
- https://arxiv.org/pdf/2405.18614
- https://transfrinc.com/resources/blog/active-learning-vs-passive-learning-with-technology
report-header:
bottom-line: >-
학습 painful job(정적 자료로는 동시성 상태변화·인과를 이해하기 어렵고, 증상만 봤을 때 무엇을
검증해야 할지 모르는 상황)은 외부 2차 근거로 지지된다. 그러나 v1이 확정한 두 전제는 지지 강도가
다르다: dual-entry는 "두 사용자 모집단이 실재한다"는 점만 지지되고 "선택 카드 UI가 시작률을
높인다"는 점은 여전히 미검증(v1 dissent 그대로 유효)이며, 5단계 고정 루프는 각 단계가 인접
학습과학(POE·productive failure·근본원인분석)에 유추적으로 근거하나 이 도메인·사용자층에 대한
5단계 전체의 직접 검증은 없다. A(깊이)와 B(폭)는 서로 다른 실재 유입 동기(호기심·숙련 대 인터뷰
준비)를 겨냥하고 후자는 강한 기존 대체재(ByteByteGo·Grokking·System Design Primer)가 이미
점유하고 있다. C(카테고리 재정의)는 target-user와 painful job이 특정되지 않아 LENS-CUSTOMER
관점에서 아직 반증 불가능한 옵션으로 남는다. D는 A/B의 세그먼트 분리 관찰만으로는 LENS-CUSTOMER가
독립적으로 도출하지 않는다(비채택, admission-rule 적용). 옵션 선택은 하지 않는다.
decision-needed:
needed: false
approver: null
confidence:
value: Med
derived-from: evidence
risks:
- >-
모든 painful-job·학습효과 근거는 2차 자료(외부 실무문서·학계 연구)이며 hyeonworks 실사용자
인터뷰·사용성 테스트는 0건이다 — 실측 전에는 어떤 옵션도 사용자 검증됐다고 볼 수 없다.
- >-
POE·productive-failure 근거의 원 도메인은 K-12/대학 정규 교육(교사 개입이 있는 교실)이며,
자기주도·시간압박 상태의 성인 개발자 대상 무감독 온라인 학습으로의 전이는 검증되지 않았다.
- >-
v1 dissent("사용자 실측 전에는 두 카드가 실제 시작률을 높이는지 알 수 없다")는 이번 조사로도
해소되지 않았다 — dual-entry의 UI 형태 자체를 지지·반증하는 근거가 여전히 없다.
- >-
OPT-C는 target-user painful job이 특정되기 전까지 LENS-CUSTOMER 관점에서 반증 불가능한
옵션으로 남아, 다른 옵션과 동일 기준 비교가 어렵다.
- >-
OPT-B의 핵심 유입 동기로 식별한 "인터뷰 준비"는 ByteByteGo·Grokking·System Design Primer 등
강한 기존 대체재가 있어, 진입 자체만으로는 사용자 관점에서 전환 이유가 서지 않는다(경쟁 전략
판단은 다른 렌즈 소관, 여기서는 사용자 인지 리스크로만 기록).
- >-
"팀 온보딩" 학습 맥락은 이번 외부 조사에서 직접 근거를 찾지 못한 공백으로 남는다(PJ12).
evidence:
- source-uri: hyeonworks/design/hyeonworks-vnext-v2/ground-boundary.yaml
grade: E3
note: fixed-problem-space target-user 정의·mandated-option-set·evidence-protocol(E2 상한 지시)의 원문.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: >-
v1 dissent 원문("사용자 실측 전에는 두 카드가 실제 시작률을 높이는지 알 수 없다" 등)과
OPT-DUAL-PORTAL 선택 근거 — 이번 사이클의 반증 대상.
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v2/EXEC-CEO-20260720T110525Z.report.yaml
grade: E3
note: v2 intake — v1 dissent를 이번 사이클의 반증 대상으로 명시 승계.
- source-uri: hyeonworks/design/hyeonworks-vnext-v1/direction-input-brief.yaml
grade: E3
note: v1 core-users(primary/secondary) 정의 — 이번 조사의 대조 baseline.
- source-uri: hyeonworks/app/README.md
grade: E3
note: v1 released 실물의 dual-entry + 5단계 루프 실제 구현 확인(status quo 비교 기준).
- source-uri: https://www.abstractalgorithms.dev/lost-update-database-anomaly
grade: E2
note: "PJ3 — 에러 없이 성공 보고, 최종 상태에만 손상이 보이는 Lost Update의 실제 서술."
- source-uri: https://www.rceenetworks.com/a-software-race-condition-is-hard-to-debug/
grade: E2
note: "PJ2 — 비결정적 타이밍 재현 불가가 정적 리딩/디버거의 한계로 이어진다는 근거."
- source-uri: https://www.seangoedecke.com/debugging/
grade: E2
note: "PJ4 — 반증 가능한 가설 없이 코드를 만지지 말라(Predict 단계의 실무적 정당화)."
- source-uri: https://onlinelibrary.wiley.com/doi/10.1111/cogs.12107
grade: E2
note: "Kapur productive failure — Transfer 단계의 유추적 근거(도메인 전이 미검증)."
- source-uri: https://files.eric.ed.gov/fulltext/EJ1272872.pdf
grade: E2
note: "POE(Predict-Observe-Explain) 오개념 감소 보고 — Predict/Observe/Explain 구조의 유추적 근거."
- source-uri: https://raft.github.io/
grade: E2
note: "PJ10 — 단일 복잡 프로토콜의 각본화된 인터랙티브 시각화 선례(depth-first 실행 가능성)."
- source-uri: https://www.designgurus.io/answers/detail/top-concurrency-and-multithreading-for-system-design-interviews
grade: E2
note: "PJ7 — 인터뷰 준비 맥락에서 동시성/격리 주제가 이미 확립된 커리큘럼임을 보여줌."
- source-uri: https://codecrafters.io/
grade: E2
note: "PJ8 — '직접 만들어보며 배운다' 숙련 심화 세그먼트의 존재."
- source-uri: https://jvns.ca/
grade: E2
note: "PJ9 — 공식 문서 대비 친근한 압축 설명 수요의 존재(OPT-C 후보 방향 1)."
- source-uri: https://mystery.knightlab.com/
grade: E2
note: "PJ11 — 내러티브/게임 포장은 대체로 기존 지식 보유자의 실기 연습용(OPT-C 후보 방향 2, 주의 신호)."