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,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"