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,89 @@
report-type: workflow-artifact
artifact-kind: overall-design
artifact-version: 1
tier: standard
identity:
artifact-id: ARCH-SOLUTION-20260718T151500Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: ARCH-SOLUTION
created-at: 20260718T151500Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
source-artifact-refs:
- artifact-id: EXEC-CEO-20260718T111108Z
artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
- artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
summary: >-
Technology Atlas v1은 Lost Update 하나를 깊이 학습하는 zero-dependency 정적 웹 앱이다.
hash route와 명시적 scenario registry, 하나의 reducer가 홈·개념·증상·Lab·완료를 연결한다.
서버·계정·원격 데이터 없이 브라우저 내부 deterministic state만 사용해 제품 약속과 운영 범위를 일치시킨다.
architecture-boundaries:
- id: static-delivery
owns: HTML, CSS, JavaScript와 로컬 정적 서버
excludes: SSR, backend, account, API gateway, remote database
- id: route-controller
owns: hash route 해석, 화면 렌더, route-safe focus 이동
invariant: skip link는 hashchange를 발생시키지 않는다.
- id: scenario-registry
owns: tx-lost-update-01의 단계·trace·clue·transfer 콘텐츠
invariant: concept와 symptom entry가 동일 scenario object를 참조한다.
- id: lab-reducer
owns: entryMode, phase, cursor, prediction, explanation, transfer 상태 전이
invariant: entryMode는 orientation 메타데이터이고 합류 후 reducer를 분기하지 않는다.
- id: verification-fixture
owns: reducer 일반성과 route-state 회귀를 확인하는 짧은 fixture
excludes: 공개 학습 콘텐츠 주장
quality-attributes:
- {attribute: learning-integrity, target: Predict→Observe→Compare→Explain→Transfer 순서와 100·120·150·70 인과 증거 고정}
- {attribute: accessibility, target: 360·768·1280에서 keyboard completion, visible focus, semantic controls, no horizontal overflow}
- {attribute: honesty, target: guided simulation을 실제 진단·로그·원격 DB로 표현하지 않음}
- {attribute: reliability, target: network 없는 로컬 실행에서 deterministic full flow 반복 통과}
- {attribute: maintainability, target: 첫 공개 주제 동안 framework·schema platform 없이 읽을 수 있는 정적 모듈 유지}
- {attribute: performance, target: third-party runtime과 remote asset 요청 0개}
decisions:
- id: ADR-001-STATIC-SPA
choice: zero-dependency hash-routed static app
rationale: 현재 한 주제·로컬 상태 범위에 서버와 framework는 비용만 늘린다.
revisit: 콘텐츠가 세 개를 넘거나 server-backed progress가 승인될 때
- id: ADR-002-SHARED-REDUCER
choice: 두 entry가 동일 scenario와 reducer를 사용
rationale: CEO kill criterion인 두 제품화와 지식 불일치를 구조적으로 막는다.
revisit: 하지 않음; 제품 불변식
- id: ADR-003-STATE-IN-MEMORY
choice: 진행 상태는 현재 세션 메모리에만 유지
rationale: persistence·privacy·migration 설계를 만들지 않고 정직한 범위를 유지한다.
revisit: 사용자 계정/재방문 진행 저장이 별도 결정으로 승인될 때
- id: ADR-004-NATIVE-CONTROLS
choice: button, textarea, anchor, main을 native semantics로 사용
rationale: custom widget의 접근성 복잡도를 피한다.
revisit: 기능적으로 native control로 표현할 수 없는 상호작용이 생길 때
dependencies: []
compatibility-assumptions:
- 최신 evergreen Chrome 계열에서 ES2019 수준 JavaScript와 hashchange를 지원한다.
- 배포 호스트는 정적 파일과 index.html을 제공하며 원격 서비스는 필요하지 않다.
- approved-design-direction의 exact token·interaction·accessibility 계약이 ui-design과 일치한다.
- 실제 사용자 학습성과 측정은 후속 제품 분석이며 v1 자동 검증 범위가 아니다.
conflicts: []
handoff:
implementation: hyeonworks/app 아래의 독립 실행 가능한 정적 앱
required-verification: full dual-entry browser flow, viewport matrix, contrast, keyboard/focus, static network boundary
report-header:
bottom-line: >-
v1은 하나의 deterministic reducer를 중심으로 한 zero-dependency 정적 앱으로 설계한다.
현재 범위에 backend·persistence·범용 콘텐츠 플랫폼을 추가하지 않으면서 학습 깊이와 접근성을 코드로 검증한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-ceo-basis-approved-direction-and-live-prototype}
risks:
- 단일 app module은 세 번째 주제부터 편집 충돌이 늘 수 있다.
- 메모리 진행 상태는 새로고침 뒤 복구되지 않으며 이는 의도된 v1 경계다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: exact accepted product decision and scope boundaries
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: browser-tested implementation evidence for the architecture
@@ -0,0 +1,68 @@
report-type: workflow-artifact
artifact-kind: approved-design-direction
artifact-version: 1
tier: standard
identity:
artifact-id: DES-DIRECTOR-20260718T151300Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: DES-DIRECTOR
created-at: 20260718T151300Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
direction-approval:
child-workflow-id: hyeonworks-vnext-v1-direction
approved-direction-id: DES-DIRECTOR-20260718T151100Z
approved-direction-sha256: ce8414dff0472e61961ea77b5930e1e706cf7e4596f8a7d230f3cb4ac18f9abb
selected-direction-id: ledger-studio
winner-prototype-id: ENG-FE-20260718T144700Z
winner-prototype-sha256: 8b208279e12f9aea0fa6d7a3c320811b0e72ddb74c6afac64cddadf4b157cf76
seven-lens-panel-id: DES-DIRECTOR-20260718T150500Z
panel-verdict: pass
visual-thesis: >-
전문 저널의 질문과 causal ledger를 결합해 사용자의 예측과 실제 실행 증거의 차이를 읽게 한다.
비대칭 editorial spread가 제품의 깊이를 표현하고 일반 dashboard·terminal 은유는 사용하지 않는다.
locked-invariants:
- LI-EDITORIAL-EVIDENCE
- LI-DUAL-ENTRY-SHARED-CORE
- LI-EVIDENCE-LEARNING-LOOP
- LI-HONEST-BOUNDARY
- LI-ACCESSIBLE-READING
interaction-contract:
entries: [concept, symptom-debugger]
shared-scenario: tx-lost-update-01
shared-loop: [Predict, Observe, Compare, Explain, Transfer]
route-safe-skip-link: true
fixture-boundary: verification-only
token-contract:
paper: '#f3efe4'
ink: '#1b201e'
deep: '#202724'
observed: '#ad4031'
accent-on-deep: '#ff8873'
pending: '#535c58'
control-border: '#88877e'
normal-text-contrast-min: '4.5:1'
essential-control-contrast-min: '3:1'
scope-boundary:
included: [static educational UI, deterministic Lost Update scenario, local progress state, browser accessibility]
excluded: [real log ingestion, remote database connection, AI diagnosis, accounts, server persistence, public API]
handoff-rule: ui-design과 구현은 이 exact basis와 interaction/token/accessibility 계약을 바꾸지 않는다.
report-header:
bottom-line: >-
7-lens를 통과한 Ledger Studio revision 4를 부모 설계의 유일한 UI 방향으로 승격한다.
두 입구·하나의 Lab, 다섯 단계 학습 루프, 정직한 guided simulation 경계를 구현 계약으로 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-approved-direction-and-seven-lens-browser-backed-panel}
risks:
- 구현 단계가 두 entry를 별도 reducer로 분기하면 승인 방향이 훼손된다.
- 세 번째 주제 전까지는 범용 콘텐츠 플랫폼을 미리 설계하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T151100Z.report.yaml
grade: E3
note: exact accepted approved-direction bound to parent
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-DIRECTOR-20260718T150500Z.report.yaml
grade: E3
note: exact seven-lens pass panel
@@ -0,0 +1,86 @@
report-type: workflow-artifact
artifact-kind: ui-design
artifact-version: 1
tier: standard
identity:
artifact-id: DES-VISUAL-20260718T151500Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: DES-VISUAL
created-at: 20260718T151500Z
attempt-id: 1
payload:
basis-artifact-id: EXEC-CEO-20260718T111108Z
basis-artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
user-flows:
- id: FLOW-CONCEPT
steps: [홈에서 개념 입구 선택, 격리 수준 orientation 읽기, 같은 Lab 시작, Predict, Observe, Compare, Explain, Transfer]
completion: 사용자가 Lost Update 인과를 서술하고 새 사례 전이를 제출한다.
- id: FLOW-SYMPTOM-DEBUGGER
steps: [홈에서 증상 입구 선택, 결과 70 단서 공개, 후보 메커니즘 확인, 같은 Lab 시작, Predict, Observe, Compare, Explain, Transfer]
completion: 실제 진단이 아니라 guided scenario 검증임을 이해한 채 같은 Lab을 완주한다.
- id: FLOW-KEYBOARD
steps: [skip link로 현재 main 이동, 모든 control을 Tab·Enter·Space로 조작, 입력 focus 유지, Transfer 완료]
completion: pointer 없이 전체 경로가 완주된다.
screen-inventory:
- {screen-id: HOME, purpose: 제품 약속과 두 입구를 한 화면에서 제시, route: '#/'}
- {screen-id: ORIENT-CONCEPT, purpose: isolation 약속에서 질문을 형성, route: '#/orient/concept'}
- {screen-id: ORIENT-SYMPTOM, purpose: 70이라는 증상과 후보 단서를 단계적으로 공개, route: '#/orient/symptom'}
- {screen-id: LAB, purpose: 다섯 단계 학습 루프와 causal ledger 실행, route: '#/lab/tx-lost-update-01'}
- {screen-id: COMPLETE, purpose: 설명과 transfer의 완료 상태를 정직하게 요약, route: same Lab state}
state-matrix:
- {state: home, required: [two distinct entries, shared-Lab statement, guided-learning boundary]}
- {state: symptom-hidden, required: [single reveal control, no premature diagnosis claim]}
- {state: symptom-revealed, required: [70 clue, candidate mechanism, same-Lab CTA]}
- {state: predict, required: [editable prediction, locked future evidence]}
- {state: observe-running, required: [100·120·150·70 trace, cursor progression, pending labels]}
- {state: compare, required: [prediction versus observation, lost write causal relation]}
- {state: explain, required: [user-authored causal explanation, prompt does not reveal full answer first]}
- {state: transfer, required: [new-case prompt, user-authored transfer, completion boundary]}
accessibility:
landmarks: skip link targets the currently rendered main without route mutation
keyboard: every interactive state is reachable and operable with native controls
focus: visible focus ring and deterministic focus restoration after render
contrast: normal text 4.5:1 minimum and essential control boundary 3:1 minimum on actual surface
color-independence: value, transaction, observed, pending, and completion have text/shape labels
responsive: 360·768·1280 DOM order preserved with zero document overflow
motion: essential meaning does not depend on animation; reduced motion remains usable
language: Korean words are not split into single-character vertical fragments
design-system-bindings:
- {token: surface.paper, value: '#f3efe4', use: reading canvas}
- {token: content.ink, value: '#1b201e', use: primary paper text}
- {token: surface.deep, value: '#202724', use: evidence Lab}
- {token: evidence.observed, value: '#ad4031', use: observed evidence on light surfaces}
- {token: evidence.on-deep, value: '#ff8873', use: highlighted evidence on deep surface}
- {token: evidence.pending, value: '#535c58', use: pending trace with computed AA contrast}
- {token: control.border, value: '#88877e', use: essential field and choice boundary}
- {component: editorial-spread, rule: asymmetric thesis and ledger; no generic card grid}
- {component: causal-ledger, rule: mono evidence sequence with semantic labels}
- {component: phase-rail, rule: five ordered phases; current and complete text labels}
visual-rationale: >-
기술을 깊게 배운다는 약속을 화려한 dashboard 대신 읽고 표시하고 대조하는 편집 기록으로 표현한다.
serif 논제는 질문의 무게를, mono ledger는 실행 증거의 정밀함을, coral은 예측과 다른 관찰 순간을 담당한다.
모바일에서는 장식적 비대칭보다 인과 읽기 순서를 우선해 단일 열로 수렴한다.
approved-direction-binding:
artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
prototype-binding:
manifest: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
manifest-sha256: 287bc732d7ddf9076ae8377e9a6824ff1495513a2011b8521fae8036e2c33b77
winner-id: ENG-FE-20260718T144700Z
report-header:
bottom-line: >-
홈·두 orientation·공통 Lab·완료를 하나의 editorial evidence 시스템으로 명세했다.
다섯 단계 상태, keyboard/focus, 실제 surface 대비와 3601280px 읽기 순서를 구현 가능한 계약으로 고정한다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: approved-direction-and-r4-browser-viewport-contrast-matrix}
risks:
- editorial 밀도가 모바일에서 과해지지 않도록 각 phase에는 현재 필요한 control만 노출해야 한다.
- fixture route는 검증 전용으로 공개 제품 내비게이션에 노출하지 않는다.
evidence:
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: exact R4 manifest with three bound receipts
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T145005Z.report.yaml
grade: E3
note: independent visual-craft pass across viewports and states
@@ -0,0 +1,66 @@
report-type: workflow-artifact
artifact-kind: ui-implementation
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T152400Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T152400Z
attempt-id: 1
payload:
summary: >-
승인된 Ledger Studio revision 4를 hyeonworks/app의 독립 실행 가능한 zero-dependency 정적 앱으로 승격했다.
배포 dist, 로컬 서버, static integrity 검증, 실제 Chrome full-flow 검증과 확인 스크린샷을 포함한다.
source-revision:
kind: source-bundle
sha256: e27731ba712e1c6e7bde4d8600d9ff5abefea09f6909e5b8cbd7153958196ea6
input-bindings:
overall-design: {artifact-id: ARCH-SOLUTION-20260718T151500Z, sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83}
approved-design-direction: {artifact-id: DES-DIRECTOR-20260718T151300Z, sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885}
ui-design: {artifact-id: DES-VISUAL-20260718T151500Z, sha256: c1ed02e6b2b128c47f8dd3406f81b690b3d80636fc74eacbf442be7d667c8a4e}
prd: {artifact-id: PROD-PM-20260718T152100Z, sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627}
acceptance-criteria: {artifact-id: PROD-PO-20260718T152300Z, sha256: ee4ac8fb7807c047b655c1b012b7604431cf075980aa9b41c4018ad2c5681176}
delivered:
app-root: hyeonworks/app
deployable: hyeonworks/app/dist
local-server: hyeonworks/app/scripts/serve.cjs
static-verifier: hyeonworks/app/scripts/verify_static.cjs
browser-verifier: hyeonworks/app/scripts/verify_flow.cjs
screenshots: hyeonworks/app/verification/screenshots
implementation-contract:
runtime-dependencies: 0
remote-assets: 0
public-scenarios: [tx-lost-update-01]
entries: [concept, symptom-debugger]
shared-state-engine: learningReducer
phases: [Predict, Observe, Compare, Explain, Transfer]
supported-viewports: [360, 768, 1280]
honest-boundary: guided simulation only; no live diagnosis, log ingestion, AI, or remote DB
non-goals-preserved: [backend, persistence, account, public API, multi-topic platform, real incident diagnosis]
rollback: hyeonworks/app은 승인 prototype을 변경하지 않은 독립 디렉터리이므로 app 디렉터리만 제외하면 원형이 보존된다.
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- {step-id: implement-ui, status: completed, output-binding: current-artifact}
report-header:
bottom-line: >-
승인 prototype을 그대로 보존하면서 hyeonworks/app에 배포 가능 dist·zero-dependency 서버·정적/E2E 검증을 갖춘 실제 앱을 구현했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-spec-byte-identical-r4-dist-and-independent-app-audit}
risks:
- 자동 접근성 실행은 Chrome 중심이며 실제 스크린리더 발화는 잔여 수동 검증 범위다.
- verification fixture hash route는 내비게이션에 노출되지 않지만 dist에 포함돼 있다.
evidence:
- source-uri: hyeonworks/app/README.md
grade: E3
note: runnable production handoff
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: full browser regression suite
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: exact approved winner file hashes
@@ -0,0 +1,97 @@
report-type: workflow-artifact
artifact-kind: completion-record
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T152600Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T152600Z
attempt-id: 1
payload:
summary: >-
Technology Atlas의 첫 공개 딥다이브를 hyeonworks/app에 완성했다. 두 entry는 동일 Lost Update Lab과
reducer로 합류하고 Predict→Observe→Compare→Explain→Transfer를 완주한다. 실제 앱 source bundle은
정적 integrity와 headless Chrome 전체 흐름으로 검증됐다.
source-revision:
kind: source-bundle
sha256: e27731ba712e1c6e7bde4d8600d9ff5abefea09f6909e5b8cbd7153958196ea6
primary-artifacts:
- {path: hyeonworks/app/dist/index.html, kind: deployable-html, sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861}
- {path: hyeonworks/app/dist/styles.css, kind: production-css, sha256: 71e51b907f5b01c480eb348df35db17995fc45269db36ed6a1afd113e3f29f58}
- {path: hyeonworks/app/dist/app.js, kind: production-javascript, sha256: b148057f4d25ba6afb4170c82f5c832263563feaf99a345a0d79e350d83fbed3}
- {path: hyeonworks/app/scripts/serve.cjs, kind: local-static-server, sha256: 7d60ac663b8e91d19a94fb90a3e1fb4564bcd56fce631e7cb0a998565a5f17e7}
- {path: hyeonworks/app/scripts/verify_static.cjs, kind: static-verifier, sha256: 6bc257fae1b72ce4206f02021f122965833a8d959124cb23e690c401ed7dd842}
- {path: hyeonworks/app/scripts/verify_flow.cjs, kind: browser-e2e-verifier, sha256: b552c6fe5b2336a58a9867d08190aa8d94378f33c697b7712834459f4af2f160}
- {path: hyeonworks/app/package.json, kind: runnable-package-manifest, sha256: ad1a4310e6802db564a23969045fc52d09109190f6fa0fdb78d73798d4cf5aea}
- {path: hyeonworks/app/README.md, kind: operator-handoff, sha256: 9dd5adfc0dc7593a23d2b578edca13bec0384a615f210fd54dd3c31abc96bc9e}
- {path: hyeonworks/app/verification/approved-r4.json, kind: approved-baseline-binding, sha256: e83e47797fb8871cd0dbbdefc5acac2c4b9e9f418f7446d28eb7f27139a6f91f}
acceptance-criteria-coverage:
- criterion-id: AC-DUAL-ENTRY-SHARED-LAB
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-FULL-LEARNING-LOOP
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-CAUSAL-LEDGER-VALUES
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706, vr-1784388251-82db6d30415d]
- criterion-id: AC-A11Y-RESPONSIVE-STATE
status: Passed
evidence-receipt-ids: [vr-1784388271-d3001b5d8706]
- criterion-id: AC-DETERMINISTIC-OFFLINE
status: Passed
evidence-receipt-ids: [vr-1784388251-82db6d30415d, vr-1784388271-d3001b5d8706]
verification-receipt-ids:
- vr-1784388251-82db6d30415d
- vr-1784388271-d3001b5d8706
verification-summary:
static: approved R4 file hashes, zero runtime dependency, local-only assets, semantic shell and token markers passed.
browser: dual entry, complete default and fixture loops, error/retry, 360·768·1280, keyboard/focus/skip state, contrast and zero browser errors passed.
contrast: {lab-id: 7.1437, dark-boundary: 5.6157, pending: 5.4403, choice-border: 3.5575, textarea-border: 3.5575}
remaining-risks:
- severity: Low
item: 자동 browser 검증은 Chrome 엔진 중심이며 실제 스크린리더 발화는 수동 잔여 검증이다.
blocking: false
- severity: Low
item: 검증 전용 fixture hash route가 dist에 포함되지만 공개 내비게이션에는 노출되지 않는다.
blocking: false
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- step-id: implement-ui
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: ENG-FE-20260718T152400Z, sha256: 849cde3678402dcc84fb4020de2b1f53f34139af5e2e6073769b3389352a053a}
- {step-id: verify-ui, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: verify-ui
gate-id: ui-verified
verdict: Passed
evidence-refs: [vr-1784388251-82db6d30415d, vr-1784388271-d3001b5d8706, payload.acceptance-criteria-coverage]
report-header:
bottom-line: >-
COMPLETED — 실제 production source bundle e27731ba…가 여섯 수용 기준을 모두 통과했고,
배포 파일·서버·검증기·실행 안내까지 hyeonworks/app에 완성됐다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: typed-static-and-full-browser-receipts-plus-independent-temp-copy-audit}
risks:
- Chrome 이외 엔진과 실제 스크린리더 발화는 비차단 잔여 위험이다.
- 실제 사용자 학습효과는 출시 후 관찰 대상이며 이 완료 기록이 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: typed build receipts bound to workflow and source revision
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: executable full-flow assertions
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: exact approved baseline hashes
@@ -0,0 +1,86 @@
report-type: workflow-artifact
artifact-kind: completion-record
artifact-version: 1
tier: standard
identity:
artifact-id: ENG-FE-20260718T153900Z
workflow-id: hyeonworks-vnext-v1
stage: build
producer-role-id: ENG-FE
created-at: 20260718T153900Z
attempt-id: 2
supersedes-report-id: ENG-FE-20260718T152600Z
payload:
summary: >-
verification에서 발견한 responsive reflow와 진행 중 smooth scroll 사이의 skip-link 타이밍 회귀를 닫은
production hardening revision이다. 현재 main focus·route·학습 상태 보존은 그대로 유지하고,
main 시작과 첫 제목의 실제 가시성을 viewport layout 안정화 뒤 검증한다.
source-revision:
kind: source-bundle
sha256: 276b49194885f7f2c7072732095294c36f804512032e20af54c1234ca3de26cb
primary-artifacts:
- {path: hyeonworks/app/dist/index.html, kind: deployable-html, sha256: 6295b1cf4b5f44cd4e9a5242643712728709ac851d62c4587ef933830bd33861}
- {path: hyeonworks/app/dist/styles.css, kind: production-css, sha256: 71e51b907f5b01c480eb348df35db17995fc45269db36ed6a1afd113e3f29f58}
- {path: hyeonworks/app/dist/app.js, kind: production-javascript, sha256: ff85c317c9579e341a0f98cf4371a64937b13be2a21c2ac244466a630dfe6e17}
- {path: hyeonworks/app/scripts/serve.cjs, kind: local-static-server, sha256: 7d60ac663b8e91d19a94fb90a3e1fb4564bcd56fce631e7cb0a998565a5f17e7}
- {path: hyeonworks/app/scripts/verify_static.cjs, kind: static-verifier, sha256: 888f43084a2a9fdd4678868bdb4f6289556c0d5e4d4a9e74442e19c9d9925e26}
- {path: hyeonworks/app/scripts/verify_flow.cjs, kind: browser-e2e-verifier, sha256: 3b3816cd70e5f6061059cc667feb10d8b0a84c1dbbe2d734c950dc7e37c47147}
- {path: hyeonworks/app/package.json, kind: runnable-package-manifest, sha256: ad1a4310e6802db564a23969045fc52d09109190f6fa0fdb78d73798d4cf5aea}
- {path: hyeonworks/app/README.md, kind: operator-handoff, sha256: 8ec55a62f70fc7e3b8c1e794b96fd9ab22681be30e43ba391360ccd79fb74ad9}
- {path: hyeonworks/app/verification/approved-r4.json, kind: baseline-and-hardening-provenance, sha256: 08a414ab22b97394477106df6ab2794b3f55b2914b51ed3191527f503993a8e1}
acceptance-criteria-coverage:
- {criterion-id: AC-DUAL-ENTRY-SHARED-LAB, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-FULL-LEARNING-LOOP, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-CAUSAL-LEDGER-VALUES, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d, vr-1784389087-77f25d28672d]}
- {criterion-id: AC-A11Y-RESPONSIVE-STATE, status: Passed, evidence-receipt-ids: [vr-1784389079-234063b3e56d]}
- {criterion-id: AC-DETERMINISTIC-OFFLINE, status: Passed, evidence-receipt-ids: [vr-1784389087-77f25d28672d, vr-1784389110-f7cccb4db1b0]}
verification-receipt-ids:
- vr-1784389079-234063b3e56d
- vr-1784389087-77f25d28672d
- vr-1784389110-f7cccb4db1b0
revision-closure:
detected-by: vr-1784388413-a071334f9199 and reliability reruns
cause: exact-pixel assertion raced responsive header reflow while an earlier smooth scroll was still active.
production-fix: skip activation cancels smooth behavior, directly aligns current main, and holds auto scrolling through a settle window.
verifier-fix: viewport layout settles for two animation frames and checks main-start tolerance plus first-heading visibility instead of brittle exact-zero pixels.
repeat-proof: two unwrapped npm test passes followed by source-bound AC, static, and reliability receipts.
contrast: {lab-id: 7.1437, dark-boundary: 5.6157, pending: 5.4403, choice-border: 3.5575, textarea-border: 3.5575}
remaining-risks:
- {severity: Low, item: Chrome 중심 자동화이며 실제 스크린리더 발화와 비-Chromium 엔진은 수동 잔여 검증이다., blocking: false}
- {severity: Low, item: 검증 fixture hash route가 dist에 포함되지만 공개 내비게이션에는 노출되지 않는다., blocking: false}
method-execution:
role-id: ENG-FE
method-id: frontend-implementation
contract-sha256: 0464eead5e973155d003539b00b7b4b5c8b392de952ee16fd22eb63997a38f2d
step-results:
- step-id: implement-ui
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: ENG-FE-20260718T152400Z, sha256: 849cde3678402dcc84fb4020de2b1f53f34139af5e2e6073769b3389352a053a}
- {step-id: verify-ui, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: verify-ui
gate-id: ui-verified
verdict: Passed
evidence-refs: [vr-1784389079-234063b3e56d, vr-1784389087-77f25d28672d, vr-1784389110-f7cccb4db1b0, payload.revision-closure]
report-header:
bottom-line: >-
COMPLETED revision 2 — verification에서 발견된 skip-link/reflow 타이밍 회귀를 재현·교정했고,
최종 source 276b4919…가 전체 flow·static integrity·반복 reliability를 모두 통과했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: reproduced-failure-source-bound-fix-and-consecutive-full-suite-passes}
risks:
- 비-Chromium과 실제 스크린리더 발화는 비차단 잔여 위험이다.
- 실제 사용자 학습효과는 출시 후 관찰 대상이며 자동 검증으로 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: final source-bound AC, test and reliability receipts plus preserved failure receipts
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: responsive layout settle, main-state preservation and first-heading visibility assertions
- source-uri: hyeonworks/app/verification/approved-r4.json
grade: E3
note: approved winner provenance and explicit post-approval production hardening
@@ -0,0 +1,50 @@
report-type: workflow-artifact
artifact-kind: workload-profile
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260718T110454Z-1
workflow-id: hyeonworks-vnext-v1
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260718T110454Z
attempt-id: 2
payload:
surfaces:
ui: true
public-api: false
persistence: false
infrastructure: false
risk:
security-bearing: false
data-migration: false
external-side-effect: false
risk-level: Med
reversibility: two-way-door
blast-radius: single-role
privacy: false
regulatory: false
slo-impact: false
pii: false
data-residency: false
customer-impact: false
revenue-impact: false
required-capabilities: [product-strategy, learning-design, product-design, frontend-engineering, accessibility-qa]
product-feature: true
context-scope: company
delivery-profile:
target-repo: hyeonworks
application-root: hyeonworks/app
implementation: "browser-local deterministic learning product"
verification: [static-contract, production-build, browser-e2e, keyboard-a11y, responsive-render]
report-header:
bottom-line: >-
UI-bearing 표준 제품 작업이다. 외부 API·영속성·인프라·개인정보는 범위 밖이며, frontend와 학습 설계,
접근성 QA에 집중한다.
decision-needed: { needed: false, approver: EXEC-CEO }
confidence: { value: Med, derived-from: explicit-company-context-and-bounded-surface-contract }
risks:
- "브라우저 로컬 시뮬레이션을 실제 데이터베이스 동작 보증처럼 표현하면 신뢰를 훼손한다."
evidence:
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: "공식 제품 범위·trust boundary·project manifest"
@@ -0,0 +1,48 @@
report-type: workflow-artifact
artifact-kind: decision-brief
artifact-version: 1
identity:
artifact-id: EXEC-CEO-20260718T110454Z
workflow-id: hyeonworks-vnext-v1
stage: intake
producer-role-id: EXEC-CEO
created-at: 20260718T110454Z
attempt-id: 1
payload:
mode: divergent
tier: standard
candidate-families: [FAM-STRATEGY, FAM-PRODUCT, FAM-DESIGN, FAM-ARCHITECTURE-TECH, FAM-ENG-FRONTEND, FAM-QA]
objective: >-
확정된 Atlas + limited symptom-first shared-core 전략을 실제로 학습 가능한 Hyeonworks vNext 제품으로
설계·구현한다. 첫 범위는 Transaction Isolation / Lost Update이며 두 진입은 동일 실험을 공유한다.
company-context-ref: org-os/01-company/company-context.yaml
venture-decision-id: EXEC-CEO-20260718T110148Z
company-decision-ids:
- DEC-HW2-HYBRID-001
- DEC-HW2-SCOPE-001
- DEC-HW2-LEARNING-001
- DEC-HW2-BOUNDARY-001
required-outcomes:
- "홈에서 개념으로 시작하기와 증상에서 시작하기의 차이가 명확하다"
- "두 진입이 동일 Lost Update scenario와 학습 상태 엔진으로 합류한다"
- "Predict → Observe → Compare → Explain → Transfer를 키보드와 모바일로 완주한다"
- "증상 단서를 단계적으로 좁히되 실제 장애 확정 도구로 표현하지 않는다"
non-goals:
- "다중 도메인 증상 taxonomy, 실제 로그·DB 연결, AI 진단, 계정·결제·CMS"
- "완성되지 않은 기술 주제를 활성 콘텐츠처럼 표시"
report-header:
bottom-line: >-
새 제품 cascade는 과거 UI를 복원하지 않고, 승인된 hybrid 전략을 바탕으로 discovery부터 새 옵션을
발산한 뒤 디자인 방향·설계·개발·브라우저 검증까지 표준 등급으로 진행한다.
decision-needed: { needed: false, approver: HUMAN-001 }
confidence: { value: Med, derived-from: accepted-company-strategy-with-unbuilt-product }
risks:
- "두 진입이 별도 flow와 콘텐츠로 갈라지면 과도한 설계가 된다."
- "Lost Update 한 사례의 깊이가 부족하면 Atlas도 Debugger도 피상적으로 보일 수 있다."
evidence:
- source-uri: org-os/01-company/company-context.yaml
grade: E2
note: "새 HUMAN-001 승인 hybrid 전략의 공식 SoT"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "표준 3안×9-gate 기반 venture decision"
@@ -0,0 +1,99 @@
report-type: workflow-artifact
artifact-kind: executive-decision-packet
artifact-version: 1
tier: standard
identity:
artifact-id: EXEC-CEO-20260718T111108Z
workflow-id: hyeonworks-vnext-v1
stage: decide
producer-role-id: EXEC-CEO
created-at: 20260718T111108Z
attempt-id: 3
payload:
basis-artifact-id: STR-ANALYST-20260718T110705Z
basis-artifact-sha256: df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3
recommendation: >-
GO — OPT-DUAL-PORTAL을 선택한다. 홈은 "개념을 알고 있어요"와 "증상만 알고 있어요"라는
두 출발점을 명확히 제공하되, 짧은 orientation 뒤 동일 tx-lost-update-01 Lab Brief로 합류한다.
이후 URL·scenario data·reducer·학습 콘텐츠·진행 상태·Transfer 과제는 완전히 동일하다.
Case File의 단서 전개는 공통 Lab 서사에만 차용하고, 큰 Atlas 지도는 완성 딥다이브 3개 전까지 보류한다.
selected-option-id: OPT-DUAL-PORTAL
evaluation-criteria:
- "처음 보는 사용자가 10초 안에 제품 목적과 두 출발점의 차이를 이해하는가"
- "두 진입이 하나의 shared core로 합류해 1인 운영성을 지키는가"
- "Lost Update의 깊이 있는 학습과 새 사례 전이를 가능하게 하는가"
- "실제 장애 확정 도구로 오인되지 않는가"
- "360px·키보드·reduced motion까지 단순하고 견고하게 구현 가능한가"
option-evaluations:
- option-id: OPT-DUAL-PORTAL
scores: {clarity: 5, learning-depth: 4, scope-control: 4, shared-core: 5, accessibility: 5}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- "EXEC-CEO-20260718T110148Z@cb7e0e18a80cf6f25bd8be4eeea3933e616e24976b3b27f5c352f93f9bfccf8c"
- option-id: OPT-CASE-FILE
scores: {clarity: 3, learning-depth: 5, scope-control: 5, shared-core: 5, accessibility: 4}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- option-id: OPT-ATLAS-WITH-DEBUG-DOCK
scores: {clarity: 3, learning-depth: 4, scope-control: 3, shared-core: 4, accessibility: 3}
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
tradeoffs:
- "두 출발점의 명확성을 얻는 대신 홈 선택 부담을 감수하고, '두 입구, 하나의 Lab' 문구로 완화한다."
- "Atlas의 장기 확장성을 짧은 breadcrumb와 roadmap으로만 보여주고 과장된 지도를 만들지 않는다."
- "Case File의 기억 가능한 단서 전개를 취하지만 탐정·incident·확정 진단 시각 언어는 사용하지 않는다."
- "entryMode는 유입 메타데이터로만 유지하고 합류 후 reducer 동작을 분기하지 않는다."
dissent:
- "순수 구현 효율은 OPT-CASE-FILE이 더 높으며 Dual Portal이 두 제품처럼 보이면 선택 근거가 사라진다."
- "사용자 실측 전에는 두 카드가 실제 시작률을 높이는지 알 수 없다."
- "한 주제로 Atlas라는 이름을 쓰는 것 자체가 과장으로 느껴질 가능성이 있다."
kill-criteria:
- "두 진입에 별도 URL progress·scenario·reducer·설명 콘텐츠가 생긴다."
- "사용자 5명 중 3명 이상이 두 출발점의 차이 또는 같은 Lab으로 합류한다는 사실을 설명하지 못한다."
- "사용자 5명 중 3명 이상이 실제 장애 확정 도구로 오인한다."
- "학습 후 3명 이상이 동일 값 읽기 → 독립 계산 → 마지막 쓰기 덮어쓰기 인과를 설명하지 못한다."
- "360px 또는 키보드 전용 환경에서 Transfer까지 완주되지 않는다."
revisit-conditions:
- "Dual Portal 선택 혼란이 관찰되면 OPT-CASE-FILE 단일 화면으로 축소한다."
- "완성형 딥다이브가 3개 이상 쌓이면 OPT-ATLAS-WITH-DEBUG-DOCK 또는 실제 Atlas map을 재평가한다."
- "증상 진입 완주율과 학습 전이가 유지되면 같은 콘텐츠 모델의 두 번째 증상을 검토한다."
evidence-refs:
- "STR-ANALYST-20260718T110705Z@df12abd3b459747fbcd396cdb1fb203351e39b79b130c44fe76a3a3facf1fda3"
- "EXEC-CEO-20260718T110148Z@cb7e0e18a80cf6f25bd8be4eeea3933e616e24976b3b27f5c352f93f9bfccf8c"
- "org-os/01-company/company-context.yaml"
method-execution:
role-id: EXEC-CEO
method-id: decide-direction
contract-sha256: b5d36495b0e7e9a82fab77979a91c0144b1c51dbe1e6153352b6162272bb0d46
step-results:
- {step-id: read-evidence, status: completed, output-binding: current-artifact}
- {step-id: evaluate-options, status: completed, output-binding: current-artifact}
- {step-id: converge-decision, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: converge-decision
gate-id: single-direction
verdict: Passed
evidence-refs: ["payload.selected-option-id", "payload.option-evaluations", "payload.dissent"]
decisions:
- decision-id: HWVNEXT-PRODUCT-DIRECTION-001
selected-option-id: OPT-DUAL-PORTAL
alternatives:
- {option-id: OPT-DUAL-PORTAL}
- {option-id: OPT-CASE-FILE}
- {option-id: OPT-ATLAS-WITH-DEBUG-DOCK}
report-header:
bottom-line: >-
CEO는 Dual Portal을 선택한다. 두 입구를 명확히 보여주되 orientation 직후 하나의 Lost Update Lab으로
합류하고, Case File은 공통 Lab 서사에만 차용하며 큰 Atlas 지도는 보류한다.
decision-needed: { needed: true, approver: HUMAN-001 }
confidence: { value: Med, derived-from: three-independent-lens-reviews-and-accepted-grounding }
risks:
- "두 개의 카드가 두 제품으로 인식될 수 있다."
- "사용자 행동 데이터가 없어 선택 명확성은 디자인·브라우저 검증 후에도 실제 사용자 테스트가 필요하다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/STR-ANALYST-20260718T110705Z.report.yaml
grade: E3
note: "세 experience option과 tradeoff가 보존된 accepted grounding"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "accepted company strategy and shared-core boundaries"
@@ -0,0 +1,45 @@
report-type: workflow-artifact
artifact-kind: release-decision
artifact-version: 1
tier: standard
identity:
artifact-id: HUMAN-001-20260718T155500Z
workflow-id: hyeonworks-vnext-v1
stage: acceptance
producer-role-id: HUMAN-001
created-at: 20260718T155500Z
payload:
release-decision: {status: Approved}
unresolved-critical-risks: false
reviewed-completion-artifact-id: ENG-FE-20260718T153900Z
reviewed-completion-artifact-sha256: cec169bd196221d1fe42f29d8f570f277a1872331eb88c489b4477aff1271d44
reviewed-quality-event-id: wfe-20260718T155340Z-3d57e932
reviewed-quality-artifact-id: QA-20260718T155400Z
reviewed-quality-artifact-sha256: 9882d710d65c85ef18ba45deb148a535f1c399b8f3a87ccbb02e42afd99bdfe8
approval-basis:
- full learning flow and responsive keyboard behavior passed on the corrected exact source revision
- static production integrity and deterministic repeat suite passed in the new verification epoch
- the previously blocking skip-link timing regression is resolved with no open blocker
residual-risks:
- {severity: Low, blocking: false, item: non-Chromium engines and actual screen-reader speech remain manual follow-up coverage}
- {severity: Low, blocking: false, item: learning outcome effectiveness requires post-release user observation}
authority-note: >-
The user explicitly requested that the complete workflow be run under an assumed approval so the finished result can be inspected.
report-header:
bottom-line: >-
APPROVED — the corrected completion and its exact current quality event satisfy the standard-tier release gates;
no unresolved Critical risk or open blocker remains.
decision-needed: {needed: false, approver: HUMAN-001}
confidence: {value: High, derived-from: exact-completion-quality-binding-and-user-assumed-approval}
risks:
- Remaining coverage gaps are Low and explicitly non-blocking.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ENG-FE-20260718T153900Z.report.yaml
grade: E3
note: accepted corrected completion exact revision
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/QA-20260718T155400Z.report.yaml
grade: E3
note: current Passed quality gate with resolved blocker
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: fresh source-bound verification receipts
@@ -0,0 +1,114 @@
report-type: workflow-artifact
artifact-kind: opportunity-solution-tree
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T151700Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T151700Z
attempt-id: 1
payload:
root-outcome:
id: OUTCOME-LOST-UPDATE-TRANSFER
statement: >-
사용자는 guided Lost Update 사례를 끝낸 뒤, 동일 값 읽기 → 독립 계산 → 마지막 쓰기 덮어쓰기라는
인과를 증거 값으로 설명하고 새로운 재고 사례에서 사라진 변경을 스스로 찾아낸다.
observable-completion:
- 예측을 관찰 전에 기록한다.
- 100·120·150·70과 여섯 실행 단계를 근거로 예상과 관찰을 비교한다.
- read basis, final write, lost change를 사용해 인과 설명을 구성한다.
- 별도 재고 사례에서 사라진 변화를 식별해 Transfer를 제출한다.
target-job:
actor: 트랜잭션 동시성 개념을 이름만 알거나 이상한 최종값만 본 학습자
situation: Lost Update를 암기가 아니라 실행 순서와 값의 변화로 이해하고 싶을 때
motivation: 원인을 재구성하고 다른 사례에서도 같은 메커니즘을 판별하고 싶다.
opportunities:
- id: OPP-EVIDENCE-GAP
problem: 용어 설명만으로는 최종값 70이 왜 직렬 기대값 120과 다른지 재구성하기 어렵다.
desired-change: 예측과 실제 READ/WRITE ledger를 나란히 비교한다.
priority: 1
- id: OPP-ENTRY-GAP
problem: 개념명을 아는 사람과 결과 증상만 아는 사람은 시작 질문이 다르다.
desired-change: 두 orientation을 제공하되 하나의 scenario와 reducer로 즉시 합류한다.
priority: 2
- id: OPP-TRANSFER-GAP
problem: 정답 선택만으로는 새 사례에 지식을 옮길 수 있는지 알 수 없다.
desired-change: 설명 구성과 새 재고 사례의 Transfer를 완료 경계로 둔다.
priority: 3
- id: OPP-TRUST-GAP
problem: 증상 진입이 실제 로그 분석이나 장애 확정 기능으로 오인될 수 있다.
desired-change: 모든 증상 단서를 guided simulation으로 명시한다.
priority: 4
solution-hypotheses:
- id: SOL-DUAL-PORTAL-SHARED-LAB
addresses: [OPP-ENTRY-GAP, OPP-EVIDENCE-GAP, OPP-TRANSFER-GAP, OPP-TRUST-GAP]
hypothesis: >-
개념·증상 두 입구와 하나의 deterministic Lab을 결합하면 시작 맥락을 존중하면서도
중복 없이 Predict→Observe→Compare→Explain→Transfer의 깊은 학습을 제공할 수 있다.
selected: true
smallest-testable-scope: Lost Update 한 주제, 브라우저 로컬 상태, 원격 의존성 없음
- id: SOL-SINGLE-CASE-FILE
addresses: [OPP-EVIDENCE-GAP, OPP-TRANSFER-GAP]
hypothesis: 하나의 사건 화면만 제공하면 구현은 단순하지만 두 시작 맥락의 차이가 약해진다.
selected: false
- id: SOL-ATLAS-MAP
addresses: [OPP-ENTRY-GAP]
hypothesis: 관계 지도를 먼저 제공하면 장기 확장은 보이지만 한 주제 v1에서는 범위를 과장한다.
selected: false
scope-boundary:
in:
- tx-lost-update-01 한 주제
- 두 orientation과 동일 Lab 합류
- causal ledger와 다섯 단계 학습 루프
- 키보드·360/768/1280·skip-link 상태 보존
- deterministic offline 실행
out:
- 실제 로그 수집·장애 원인 확정·AI 진단
- 계정·진행 저장·원격 데이터베이스·서버 API
- 세 주제 전에 범용 콘텐츠 플랫폼이나 Atlas map 구축
evidence-bindings:
product-decision:
artifact-id: EXEC-CEO-20260718T111108Z
artifact-sha256: 59aa01ae31c922475055d80a11a8facf298c6c7a0b900bbd086cd98324d326a4
overall-design:
artifact-id: ARCH-SOLUTION-20260718T151500Z
artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- step-id: frame-outcome
status: completed
output-binding: current-artifact
decisions:
- decision-id: HWVNEXT-SOLUTION-HYPOTHESIS-001
alternatives:
- option-id: SOL-DUAL-PORTAL-SHARED-LAB
evidence-refs: [payload.opportunities, payload.evidence-bindings]
- option-id: SOL-SINGLE-CASE-FILE
evidence-refs: [payload.solution-hypotheses]
- option-id: SOL-ATLAS-MAP
evidence-refs: [payload.scope-boundary]
selected-option-id: SOL-DUAL-PORTAL-SHARED-LAB
rejection-rationales:
SOL-SINGLE-CASE-FILE: 두 시작 맥락을 명확히 지원하지 못한다.
SOL-ATLAS-MAP: 한 주제 v1에 구조와 표현을 과잉 설계한다.
report-header:
bottom-line: >-
v1의 루트 성과는 Lost Update의 인과를 증거로 재구성하고 새 사례로 전이하는 것이다.
이를 위해 두 입구가 하나의 deterministic Lab으로 합류하는 최소 가설을 선택했다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: accepted-product-decision-overall-design-and-browser-tested-direction}
risks:
- 실제 사용자 학습성과는 출시 후 별도 관찰이 필요하다.
- 두 입구가 두 제품처럼 보이면 shared-Lab 문구와 orientation 길이를 다시 줄여야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/EXEC-CEO-20260718T111108Z.report.yaml
grade: E3
note: accepted dual-portal product decision and kill criteria
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted architecture and explicit scope boundary
@@ -0,0 +1,70 @@
report-type: workflow-artifact
artifact-kind: opportunity-solution-tree
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T152000Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T152000Z
attempt-id: 1
payload:
outcome: >-
개발자가 Lost Update를 정의로 외우는 데 그치지 않고, 실행 전 결과를 예측한 뒤 100·120·150·70의
read/write 증거로 어긋남을 찾아 세 인과 요소를 설명하고 새 동시성 사례에 전이한다.
opportunities:
- id: OPP-ENTRY-CONTEXT
problem: 사용자는 격리 개념을 알거나 이상 결과만 아는 서로 다른 상태에서 시작한다.
solutions:
- id: SOL-DUAL-ENTRY
hypothesis: 두 orientation이 같은 scenario와 reducer로 합류하면 시작 맥락은 맞추면서 제품 분열을 막는다.
- id: SOL-SINGLE-ARTICLE
hypothesis: 한 문서 입구는 단순하지만 증상 기반 질문을 잃는다.
- id: OPP-PASSIVE-UNDERSTANDING
problem: 정답을 먼저 읽으면 실제 실행 순서와 마지막 write의 영향을 스스로 재구성하기 어렵다.
solutions:
- id: SOL-EVIDENCE-LOOP
hypothesis: Predict→Observe→Compare→Explain→Transfer gate가 능동적 인과 구성을 유도한다.
- id: SOL-REFERENCE-ONLY
hypothesis: 긴 설명은 깊이를 주지만 예측·전이 행동을 증명하지 못한다.
- id: OPP-DEBUGGER-TRUST
problem: 증상에서 시작하는 흐름이 실제 장애 진단 도구로 오인될 수 있다.
solutions:
- id: SOL-GUIDED-DEBUGGER
hypothesis: 단서→후보→고정 Lab 검증과 명시적 guided boundary가 디버거 사고법만 제공한다.
- id: SOL-REAL-LOG-INGESTION
hypothesis: 실제 로그 수집은 v1 범위·보안·데이터 설계를 과도하게 늘려 제외한다.
selected-solution-set: [SOL-DUAL-ENTRY, SOL-EVIDENCE-LOOP, SOL-GUIDED-DEBUGGER]
evidence-basis:
overall-design-id: ARCH-SOLUTION-20260718T151500Z
overall-design-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
approved-prototype-id: ENG-FE-20260718T144700Z
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- {step-id: frame-outcome, status: completed, output-binding: current-artifact}
decisions:
- decision-id: HWVNEXT-SOLUTION-SET
selected-option-id: SOL-EVIDENCE-LOOP
alternatives:
- {option-id: SOL-EVIDENCE-LOOP}
- {option-id: SOL-REFERENCE-ONLY}
- {option-id: SOL-REAL-LOG-INGESTION}
report-header:
bottom-line: >-
제품 outcome을 Lost Update 인과를 증거로 설명하고 전이한다’로 고정하고,
두 입구·evidence learning loop·guided debugger를 최소 솔루션 집합으로 선택한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-overall-design-and-browser-tested-prototype-without-user-outcome-data}
risks:
- 실제 사용자 학습 성과는 아직 측정하지 않았으므로 자동 완주를 학습효과로 과장하지 않는다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted architecture and quality boundaries
- source-uri: hyeonworks/design-direction/hyeonworks-vnext-v1/prototype/core-flow.yaml
grade: E3
note: browser-tested shared learning loop
@@ -0,0 +1,106 @@
report-type: workflow-artifact
artifact-kind: prd
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PM-20260718T152100Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PM
created-at: 20260718T152100Z
attempt-id: 1
payload:
basis-artifact-id: ARCH-SOLUTION-20260718T151500Z
basis-artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
problem: >-
기술 학습자는 Transaction Isolation과 Lost Update의 정의를 읽어도, 두 세션이 같은 값을 읽고
독립 계산한 뒤 마지막 write가 앞선 변화를 덮는 실행 인과를 스스로 재구성하기 어렵다.
개념을 아는 사람과 결과 70이라는 증상만 아는 사람 모두에게 맞는 출발점이 필요하지만,
두 개의 제품·진단 엔진·콘텐츠 사본을 만들면 품질과 정직성이 무너진다.
outcomes:
- 사용자가 정답을 보기 전에 기대 결과를 예측한다.
- 사용자가 100→120/150→70 실행 증거에서 동일 read basis, 독립 계산, 마지막 write라는 세 요소를 연결한다.
- 개념·증상 입구 모두 동일 Lost Update Lab과 진행 모델을 완주한다.
- 사용자가 새 재고 사례에서 사라진 변화를 같은 인과 구조로 전이한다.
- 제품이 guided simulation 경계를 명확히 유지한다.
non-goals:
- 실제 로그 수집·분석 또는 장애 원인 확정
- 원격 데이터베이스 연결·쿼리 실행·벤더별 보장 판정
- AI 진단, 계정, 서버 진행 저장, 공개 API
- 여러 기술 주제를 빈 카드나 지도에 미리 채우는 것
- 자동 테스트 통과를 실제 사용자 학습효과로 주장하는 것
user-stories:
- id: US-CONCEPT
story: 격리 개념을 아는 개발자로서 약속과 실행 결과의 차이를 검증해 Lost Update 인과를 정확히 설명하고 싶다.
- id: US-SYMPTOM
story: 기대 120 대신 70이라는 증상만 아는 개발자로서 단서를 공개하고 후보 메커니즘을 고정 Lab에서 검증하고 싶다.
- id: US-PRACTICE
story: 학습자로서 예측부터 전이까지 순서대로 행동해 수동적 읽기가 아니라 내 설명을 만들고 싶다.
- id: US-KEYBOARD
story: 키보드·작은 화면 사용자로서 route나 진행 상태를 잃지 않고 전체 Lab을 완주하고 싶다.
success-metrics:
- id: QUALITY-DUAL-ENTRY
launch-threshold: 두 공개 entry의 browser E2E가 동일 scenario-id와 reducer state에 합류해 100% 통과한다.
- id: QUALITY-CAUSAL-LOOP
launch-threshold: 기본 6-step과 회귀 fixture 4-step이 Predict→Transfer를 deterministic하게 반복 완주한다.
- id: QUALITY-A11Y
launch-threshold: 360·768·1280에서 문서 overflow 0, keyboard completion 100%, normal text 4.5:1 및 control 3:1 이상이다.
- id: QUALITY-HONESTY
launch-threshold: 모든 공개 진입과 완료 상태에 guided scenario 경계가 있고 remote request가 0건이다.
- id: LEARNING-HYPOTHESIS
post-launch-measure: 사용자 5명 중 3명 이상이 세 인과 요소와 새 사례를 설명하는지 별도 관찰한다; 출시 자동 게이트가 아니다.
constraints:
- zero runtime dependency와 정적 배포를 유지한다.
- 주제는 Transaction Isolation / Lost Update 하나로 제한한다.
- concept와 symptom entry는 scenario data·reducer·학습 콘텐츠를 복제하지 않는다.
- 360px, keyboard, visible focus, reduced motion, 한국어 읽기 순서를 보존한다.
- 실제 로그·원격 DB·AI 진단처럼 표현하지 않는다.
prioritized-requirements:
- {id: R1, priority: P0, requirement: 두 입구가 하나의 tx-lost-update-01 Lab에 합류한다.}
- {id: R2, priority: P0, requirement: Predict→Observe→Compare→Explain→Transfer 순서와 gate를 유지한다.}
- {id: R3, priority: P0, requirement: 100·120·150·70과 read/write 순서를 causal ledger로 관찰한다.}
- {id: R4, priority: P0, requirement: symptom debugger는 단서·후보·검증을 제공하되 실제 진단을 주장하지 않는다.}
- {id: R5, priority: P0, requirement: 반응형·keyboard·focus·skip-link state·contrast를 자동 검증한다.}
- {id: R6, priority: P1, requirement: static local-only delivery와 deterministic regression fixture를 유지한다.}
delivery-boundary:
inspectable-app: hyeonworks/app
first-public-topic: Transaction Isolation / Lost Update
method-execution:
role-id: PROD-PM
method-id: product-discovery
contract-sha256: 26952bd19d4b39ecf35f674ba2abbcbf5ec14294911ef7f973bd63dc7666ed4a
step-results:
- step-id: frame-outcome
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: PROD-PM-20260718T152000Z, sha256: f8af0e1bbaedf87dd955d663cad887545c1efc7347f0908942400707000b0045}
- {step-id: write-prd, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: write-prd
gate-id: outcome-grounded
verdict: Passed
evidence-refs: [payload.outcomes, payload.success-metrics, payload.prioritized-requirements, PROD-PM-20260718T152000Z]
decisions:
- decision-id: HWVNEXT-V1-SCOPE
selected-option-id: DUAL-ENTRY-SHARED-LAB
alternatives:
- {option-id: DUAL-ENTRY-SHARED-LAB}
- {option-id: SINGLE-ARTICLE}
- {option-id: REAL-DEBUGGING-PLATFORM}
report-header:
bottom-line: >-
v1은 두 출발점이 하나의 Lost Update causal Lab으로 합류하는 깊이 학습 제품이다.
출시 범위는 예측·관찰·비교·설명·전이와 접근성·정직한 경계이며 backend·실제 진단은 명시적으로 제외한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-strategy-design-and-browser-proof-with-user-learning-still-a-hypothesis}
risks:
- 실제 사용자에게 두 입구의 차이가 명확한지는 별도 사용성 관찰이 필요하다.
- 한 주제에서 Atlas라는 명칭의 기대가 과할 수 있어 roadmap은 inactive로 정직하게 표시한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152000Z.report.yaml
grade: E3
note: exact opportunity-solution tree
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/ARCH-SOLUTION-20260718T151500Z.report.yaml
grade: E3
note: accepted overall design
@@ -0,0 +1,52 @@
report-type: workflow-artifact
artifact-kind: product-goal
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PO-20260718T152200Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PO
created-at: 20260718T152200Z
attempt-id: 1
payload:
goal: >-
개념 또는 증상에서 출발한 개발자가 같은 Lost Update Lab에서 정답을 먼저 보지 않고 예측하고,
실제 read/write 증거를 관찰·비교해 세 인과 요소를 설명한 뒤 새 사례에 전이할 수 있는
첫 번째 완성형 Technology Atlas 딥다이브를 출시한다.
prd-binding:
artifact-id: PROD-PM-20260718T152100Z
artifact-sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627
backlog-order:
- {order: 1, item: shared scenario and reducer across two entries, risk: product split}
- {order: 2, item: gated five-phase causal learning loop, risk: passive answer reveal}
- {order: 3, item: exact 100·120·150·70 ledger and transfer case, risk: causal inaccuracy}
- {order: 4, item: debugger clue flow plus guided boundary, risk: diagnosis misrepresentation}
- {order: 5, item: responsive keyboard focus contrast and skip-state preservation, risk: inaccessible completion}
- {order: 6, item: dependency-free local delivery and deterministic regression, risk: unnecessary operations}
definition-of-done:
- 여섯 수용 기준이 각각 실행 가능한 검증 방법과 expected result를 가진다.
- actual production files와 전체 browser flow가 동일 source revision에 결속된다.
- 독립 QA가 verification stage에서 새 영수증으로 quality gate를 통과한다.
exclusions: [real diagnosis, remote database, account, persistence, public API, additional public topic]
method-execution:
role-id: PROD-PO
method-id: backlog-definition
contract-sha256: 2e233338fb4f316efbd68ae3af77b36474ecec9683f759bfbbb51bd55eecb34e
step-results:
- {step-id: set-goal, status: completed, output-binding: current-artifact}
report-header:
bottom-line: >-
Product Goal은 두 입구에서 동일한 Lost Update 인과 Lab을 완주하고 새 사례로 전이하는 첫 딥다이브 출시다.
백로그는 제품 분열·인과 오류·진단 오인·접근성 회귀 위험 순으로 정렬한다.
decision-needed: {needed: false, approver: null}
confidence: {value: Med, derived-from: accepted-prd-and-explicit-testable-done-boundary}
risks:
- 실제 학습성과는 출시 품질 게이트와 별개로 후속 관찰해야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152100Z.report.yaml
grade: E3
note: exact accepted PRD
- source-uri: hyeonworks/app/README.md
grade: E3
note: inspectable production flow and honest scope
@@ -0,0 +1,114 @@
report-type: workflow-artifact
artifact-kind: acceptance-criteria
artifact-version: 1
tier: standard
identity:
artifact-id: PROD-PO-20260718T152300Z
workflow-id: hyeonworks-vnext-v1
stage: spec
producer-role-id: PROD-PO
created-at: 20260718T152300Z
attempt-id: 1
payload:
basis-artifact-id: ARCH-SOLUTION-20260718T151500Z
basis-artifact-sha256: 5217e3b3b8b9e3e33d13cd58e88112c32d93cbe9b51af9f919594d9be5f58d83
prd-binding:
artifact-id: PROD-PM-20260718T152100Z
artifact-sha256: b9f162e7f26dff79e79f018488ad96d839701eec29b5eb5d15e1aad7f59bd627
criteria:
- criterion-id: AC-DUAL-ENTRY-SHARED-LAB
preconditions: [앱이 홈 route에서 실행 중이다.]
input:
routes: ['#/orient/concept', '#/orient/symptom']
action: 각 orientation에서 Lab 시작 control을 활성화한다.
expected-result: >-
두 경로는 모두 동일 '#/lab/tx-lost-update-01'로 이동하고 main의 scenario-id가
tx-lost-update-01이며 동일한 initial state·phase order·learning reducer를 사용한다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-FULL-LEARNING-LOOP
preconditions: [tx-lost-update-01 Lab이 초기화돼 있다.]
input:
actions: [prediction 선택, Observe 6단계 실행, Compare 확인, causal explanation 제출, transfer answer 제출]
negative-paths: [설명 오답 제출 후 재시도, transfer 오답 제출 후 재시도]
expected-result: >-
Predict→Observe→Compare→Explain→Transfer만 순서대로 열리고 오답은 구체적 피드백과 focus를 제공하며,
정답 후 완료 화면과 같은 Lab 재실행 control이 나타난다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-CAUSAL-LEDGER-VALUES
preconditions: [Observe phase가 시작됐다.]
input:
scenario: A는 +50, B는 -30을 같은 initial 100에서 계산한다.
expected-trace: [A read 100, B read 100, A computes 150, B computes 70, A writes 150, B writes 70]
expected-result: >-
serial expected 값은 120, 최종 observed 값은 70이며 Compare·Explain은 동일 read basis,
독립 계산, B의 마지막 write가 A의 +50을 덮었다는 세 인과 요소에 결속된다.
risk-level: Critical
verification-method: automated-test
- criterion-id: AC-SYMPTOM-DEBUGGER-HONESTY
preconditions: [증상 orientation route가 열려 있다.]
input:
action: 단서 4개를 차례로 공개하고 후보 메커니즘에서 Lab을 시작한다.
expected-result: >-
결과 70에서 후보 Lost Update로 좁힌 뒤 공통 Lab으로 합류하고, 화면은 고정 guided scenario이며
실제 로그 분석·AI 진단·원격 DB 실행·장애 원인 확정이 아님을 명시한다.
risk-level: High
verification-method: automated-test
- criterion-id: AC-A11Y-RESPONSIVE-STATE
preconditions: [Chrome에서 360px·768px·1280px viewport를 사용할 수 있다.]
input:
modes: [keyboard-only, pointer]
skip-link-states: [home, concept, revealed-symptom, default-observe-cursor-1, fixture-observe-cursor-1]
expected-result: >-
모든 control이 키보드로 동작하고 focus가 가시적이며 skip link가 같은 main node에 focus하되
hash·scenario·phase·cursor·trace/clue state를 보존한다. 문서 overflow는 0이고 표 overflow는
내부 scroll container에만 격리되며 normal text 대비 4.5:1, essential control 경계 3:1 이상이다.
risk-level: Critical
verification-method: automated-test
- criterion-id: AC-DETERMINISTIC-OFFLINE
preconditions: [배포 dist와 Node.js 18 이상이 있다.]
input:
actions: [설치 없이 정적 서버 실행, full-flow 반복 실행, verification fixture 실행, remote request 감시]
expected-result: >-
runtime dependency와 remote asset/request가 0이고 기본·fixture scenario가 서로 섞이지 않으며
반복 실행의 상태·값·완료 결과가 동일하다. 서버는 정적 파일과 최소 보안 헤더만 제공한다.
risk-level: Med
verification-method: automated-test
coverage-rule: completion-record는 여섯 criterion-id를 그대로 사용하고 각 Passed 상태를 typed receipt에 결속한다.
method-execution:
role-id: PROD-PO
method-id: backlog-definition
contract-sha256: 2e233338fb4f316efbd68ae3af77b36474ecec9683f759bfbbb51bd55eecb34e
step-results:
- step-id: set-goal
status: completed
output-binding: trusted-artifact
artifact-refs:
- {report-id: PROD-PO-20260718T152200Z, sha256: 588440aaf0e7a7b41e05675b6b8ab98ae419b58c62ff46f76412cfc9257a77ea}
- {step-id: define-acceptance, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: define-acceptance
gate-id: testable-criteria
verdict: Passed
evidence-refs:
- payload.criteria.AC-DUAL-ENTRY-SHARED-LAB
- payload.criteria.AC-FULL-LEARNING-LOOP
- payload.criteria.AC-CAUSAL-LEDGER-VALUES
- payload.criteria.AC-SYMPTOM-DEBUGGER-HONESTY
- payload.criteria.AC-A11Y-RESPONSIVE-STATE
- payload.criteria.AC-DETERMINISTIC-OFFLINE
report-header:
bottom-line: >-
여섯 수용 기준이 제품 핵심·인과 정확성·디버거 정직성·접근성·오프라인 결정성을 실행 가능한 browser/static 검증으로 닫는다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-prd-product-goal-and-existing-browser-assertion-coverage}
risks:
- 실제 스크린리더 발화와 비-Chromium 엔진은 이 자동 기준 밖이며 독립 잔여 위험으로 남긴다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/PROD-PM-20260718T152100Z.report.yaml
grade: E3
note: exact accepted PRD
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: executable browser assertions covering the six criteria
@@ -0,0 +1,50 @@
report-type: workflow-artifact
artifact-kind: compatibility-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T151700Z
workflow-id: hyeonworks-vnext-v1
stage: design
producer-role-id: QA
created-at: 20260718T151700Z
attempt-id: 1
payload:
left:
artifact-kind: approved-design-direction
artifact-id: DES-DIRECTOR-20260718T151300Z
artifact-sha256: ad2120ba2b214a58adc17aac5620c6e19bd727ac4cfd1a48a41c2a75327ff885
right:
artifact-kind: ui-design
artifact-id: DES-VISUAL-20260718T151500Z
artifact-sha256: c1ed02e6b2b128c47f8dd3406f81b690b3d80636fc74eacbf442be7d667c8a4e
dimensions: [interaction, tokens, accessibility]
findings: []
verdict: Passed
reviewer-role-id: QA
checks:
interaction:
verdict: Passed
evidence: 두 entry가 동일 tx-lost-update-01과 reducer, 동일 다섯 단계 루프에 합류하며 skip link가 route state를 보존한다.
tokens:
verdict: Passed
evidence: paper·ink·deep·observed·on-deep·pending·control-border 값과 surface별 대비 floor가 정확히 일치한다.
accessibility:
verdict: Passed
evidence: native controls, visible focus, current-main skip target, color-independent labels, 360·768·1280 읽기 순서 계약이 일치한다.
independence: QA는 두 endpoint producer DES-DIRECTOR·DES-VISUAL과 다르며 exact immutable revision을 검토했다.
report-header:
bottom-line: >-
PASS — 승인 방향과 UI 설계는 interaction·token·accessibility 세 계약에서 exact하게 일치하며
구현 전달을 막는 finding이 없다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: exact-endpoint-sha-contract-comparison-and-r4-browser-evidence}
risks:
- 구현 중 token 이름만 복사하고 실제 surface 사용처가 달라지는 회귀는 브라우저 computed-style 검증으로 다시 잡아야 한다.
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/DES-DIRECTOR-20260718T151300Z.report.yaml
grade: E3
note: exact approved design direction endpoint
- source-uri: hyeonworks/completion-records/hyeonworks-vnext-v1/DES-VISUAL-20260718T151500Z.report.yaml
grade: E3
note: exact UI design endpoint
@@ -0,0 +1,46 @@
report-type: workflow-artifact
artifact-kind: quality-gate-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T154200Z
workflow-id: hyeonworks-vnext-v1
stage: verification
producer-role-id: QA
created-at: 20260718T154200Z
attempt-id: 1
payload:
quality-gate: {status: Failed}
blocker-open: true
reviewed-artifact-id: ENG-FE-20260718T152600Z
reviewed-artifact-sha256: 5b8b256ce82f07b3f1d06f61926111460823ac6fe6b71934e5de2be2f7e3d0ad
checks:
- check-id: AC-FULL-FLOW
category: acceptance-criteria
status: Failed
evidence-receipt-ids: [vr-1784388413-a071334f9199]
findings:
- finding-id: QF-SKIP-REFLOW-TIMING
severity: High
blocking: true
resolved: false
summary: >-
768→360 responsive reflow 직후 이전 smooth scroll이 진행 중인 상태에서 skip link를 활성화하면
current main의 시작 위치가 약 25px 위로 벗어나는 timing regression이 재현됐다.
required-action: build 단계로 돌아가 production scroll cancellation과 non-brittle visibility regression을 구현한 뒤 새 source revision으로 재검증한다.
independence: QA는 reviewed completion producer ENG-FE와 다르며 verification 진입 후 fresh typed receipt를 사용했다.
report-header:
bottom-line: >-
FAILED — build source e27731ba…는 route와 학습 상태를 보존하지만 responsive reflow와 진행 중 scroll이 겹칠 때
current main 시작 가시성이 흔들리므로 출시를 차단하고 build rework가 필요하다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: fresh-source-bound-reproducible-chrome-receipt}
risks:
- 재실행만으로 통과시키면 간헐적 접근성 회귀가 그대로 출시될 수 있다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: failed typed receipt vr-1784388413-a071334f9199 bound to source e27731ba
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: exact skip state and in-view assertion
@@ -0,0 +1,63 @@
report-type: workflow-artifact
artifact-kind: quality-gate-review
artifact-version: 1
tier: standard
identity:
artifact-id: QA-20260718T155400Z
workflow-id: hyeonworks-vnext-v1
stage: verification
producer-role-id: QA
created-at: 20260718T155400Z
attempt-id: 2
supersedes-report-id: QA-20260718T154200Z
payload:
quality-gate: {status: Passed}
blocker-open: false
reviewed-artifact-id: ENG-FE-20260718T153900Z
reviewed-artifact-sha256: cec169bd196221d1fe42f29d8f570f277a1872331eb88c489b4477aff1271d44
checks:
- check-id: AC-FULL-FLOW
category: acceptance-criteria
status: Passed
evidence-receipt-ids: [vr-1784389937-4c23760db5ed]
- check-id: TEST-STATIC-QUALITY
category: test
status: Passed
evidence-receipt-ids: [vr-1784389949-8e741a9a1f0e]
- check-id: RELIABILITY-DETERMINISM
category: reliability
status: Passed
evidence-receipt-ids: [vr-1784389973-18328d8be77c]
findings:
- finding-id: QF-SKIP-REFLOW-TIMING
severity: High
blocking: true
resolved: true
summary: >-
responsive reflow와 진행 중 smooth scroll이 겹칠 때 발생하던 skip-link 가시성 회귀를
production scroll cancellation과 layout-settled heading visibility 검증으로 닫았다.
resolution-evidence-receipt-ids:
- vr-1784389937-4c23760db5ed
- vr-1784389973-18328d8be77c
independence: >-
QA는 completion producer ENG-FE와 분리되어 있으며, 수정 completion exact SHA가 build에서
승인된 뒤 열린 새 verification epoch에서 세 검증을 독립적으로 다시 실행했다.
report-header:
bottom-line: >-
PASSED — 수정 source 276b4919…와 completion cec169bd…가 전체 학습 플로우,
정적 무결성, 반복 결정성 검증을 모두 통과했고 기존 High blocker는 해결됐다.
decision-needed: {needed: false, approver: null}
confidence: {value: High, derived-from: fresh-exact-source-bound-independent-verification}
risks:
- 비-Chromium 엔진과 실제 스크린리더 발화는 출시를 막지 않는 수동 잔여 검증이다.
- 실제 사용자 학습효과는 운영 관찰 대상이며 자동화 결과로 대신 주장하지 않는다.
evidence:
- source-uri: hyeonworks/evidence/ledger.jsonl
grade: E3
note: 새 verification epoch의 AC, static, reliability typed receipts
- source-uri: hyeonworks/app/scripts/verify_flow.cjs
grade: E3
note: dual-entry shared lab, full causal loop, responsive state, keyboard focus and contrast
- source-uri: hyeonworks/app/scripts/verify_static.cjs
grade: E3
note: approved provenance, local-only assets and deployable static integrity
@@ -0,0 +1,110 @@
report-type: workflow-artifact
artifact-kind: grounding-package
artifact-version: 1
tier: standard
identity:
artifact-id: STR-ANALYST-20260718T110705Z
workflow-id: hyeonworks-vnext-v1
stage: discovery
producer-role-id: STR-ANALYST
created-at: 20260718T110705Z
attempt-id: 1
payload:
problem-structure:
user-job: >-
개념명이나 실제 증상 중 자신이 아는 단서에서 시작해 Lost Update의 상태 변화와 인과를 직접
검증하고, 새로운 동시성 사례에도 같은 메커니즘을 전이한다.
current-gap:
- "개념 중심 학습은 실제 증상과 연결이 약하고, 검색 중심 해결은 원리와 전이가 약하다."
- "두 진입을 별도 제품처럼 만들면 콘텐츠와 상태 엔진이 중복된다."
- "한 사례만으로도 깊이를 보여주면서 향후 Atlas 확장 구조를 전달해야 한다."
- "guided simulation과 실제 데이터베이스 보장의 경계를 화면에서 명확히 해야 한다."
key-questions:
- "홈에서 두 진입을 어떻게 구분하되 선택 부담을 키우지 않을 것인가?"
- "어느 진입에서도 동일 scenario와 학습 진행 상태로 합류한다는 것을 어떻게 보장할 것인가?"
- "Lost Update를 표면 정의가 아니라 타임라인·값 변화·인과·통제·전이까지 얼마나 깊게 다룰 것인가?"
analysis-synthesis:
insight: >-
제품의 핵심은 두 개의 기능이 아니라 하나의 학습 코어에 대한 두 개의 입구다. 첫 화면은 사용자가
가진 단서에 맞는 진입을 제공하고, 이후 모든 단계는 동일 scenario contract와 상태 reducer를 사용해야 한다.
invariant:
- "single scenario id: tx-lost-update-01"
- "single learning-state machine: orient → predict → trace → compare → explain → transfer"
- "single mechanism content source: Lost Update causal model"
- "diagnostic language is candidate/verify, never confirmed incident diagnosis"
design-consequences:
- "개념 진입은 작은 관계 지도와 핵심 질문을 먼저 보여준다."
- "증상 진입은 4개 단서를 한 번에 답하지 않고 단계적으로 공개한다."
- "두 경로는 실험 시작 전 하나의 Lab Brief에서 합류하며 이후 URL과 상태를 공유한다."
- "준비 중 주제를 큰 카드 카탈로그로 만들지 않고 하단 roadmap에 정직하게 표시한다."
evidence:
- ref: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
finding: "HUMAN-001이 hybrid shared-core 전략과 첫 scenario 범위를 승인했다"
- ref: org-os/01-company/company-context.yaml
grade: E2
finding: "제품 경계·학습 루프·operating constraints의 공식 SoT"
- ref: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E3
finding: "독립 Debugger는 operability 실패, shared-core hybrid는 조건부 통과"
options:
- id: OPT-DUAL-PORTAL
problem: "사용자가 가진 단서에 맞춰 개념과 증상 진입을 가장 명시적으로 구분하는 방법"
concept: >-
Dual Portal — 홈의 동등한 두 선택 카드가 Atlas Context 또는 Symptom Triage로 시작하고,
짧은 orientation 뒤 하나의 Lost Update Lab으로 합류한다.
tradeoffs:
- "장점: 두 방식의 차이가 즉시 명확하고 사용자 최신 요구가 잘 보인다."
- "단점: 첫 화면 선택 부담과 두 제품처럼 보일 위험이 있어 shared-core 표식이 필요하다."
evidence-refs: ["EXEC-CEO-20260718T110148Z", "DEC-HW2-HYBRID-001"]
- id: OPT-CASE-FILE
problem: "증상에서 시작하되 제품 전체가 진단 도구로 보이지 않게 하는 방법"
concept: >-
Mechanism Case File — Lost Update 사건 파일 하나를 중심에 두고, 같은 화면에서 개념 렌즈와
증상 렌즈를 전환하며 단서를 조사한 뒤 실험으로 이동한다.
tradeoffs:
- "장점: 하나의 이야기와 데이터 모델로 결속돼 중복이 가장 적다."
- "단점: Atlas의 확장 구조와 두 진입 선택이 첫 방문에 덜 명확할 수 있다."
evidence-refs: ["HYP-HW2-SHARED-CORE-001", "DEC-HW2-SCOPE-001"]
- id: OPT-ATLAS-WITH-DEBUG-DOCK
problem: "Technology Atlas 정체성을 강하게 유지하면서 symptom entry를 보조하는 방법"
concept: >-
Atlas + Debug Dock — 개념 관계 지도가 주 화면이고, '이런 증상을 보셨나요?' dock에서 Lost Update
단서를 고르면 같은 map node와 Lab으로 연결된다.
tradeoffs:
- "장점: 장기 확장 구조가 가장 선명하고 Debugger가 독립 제품으로 보이지 않는다."
- "단점: 한 주제뿐인 초기 제품에서 map이 과장돼 보일 수 있고 증상 진입이 부차적으로 느껴진다."
evidence-refs: ["DEC-HW2-HYBRID-001", "DEC-HW2-SCOPE-001"]
method-execution:
role-id: STR-ANALYST
method-id: strategy-analysis
contract-sha256: 405d565f85b4e06aa2df9e1d41fe3cfd3be113d19b17cfc7dbb8f6172b166299
step-results:
- {step-id: structure-problem, status: completed, output-binding: current-artifact}
- {step-id: analyze-environment, status: completed, output-binding: current-artifact}
- {step-id: diverge-options, status: completed, output-binding: current-artifact}
self-check-results:
- step-id: diverge-options
gate-id: options-diverge
verdict: Passed
evidence-refs: ["payload.options[0]", "payload.options[1]", "payload.options[2]"]
decisions:
- decision-id: HWVNEXT-DISCOVERY-OPTION-SET
selected: null
alternatives: [OPT-DUAL-PORTAL, OPT-CASE-FILE, OPT-ATLAS-WITH-DEBUG-DOCK]
report-header:
bottom-line: >-
discovery는 같은 학습 코어를 유지하면서 진입 구조가 다른 세 안을 보존한다. 아직 선택하지 않으며,
CEO decide에서 명확성·깊이·운영성·확장 정직성을 비교해야 한다.
decision-needed: { needed: true, approver: EXEC-CEO }
confidence: { value: Med, derived-from: accepted-strategy-and-no-user-behavior-yet }
risks:
- "사용자 관찰 없이 두 진입의 실제 이해도를 예측해야 한다."
- "Atlas 확장성을 과도하게 강조하면 완성 콘텐츠 하나라는 정직한 범위를 흐릴 수 있다."
evidence:
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T110148Z.report.yaml
grade: E3
note: "accepted hybrid strategy and product boundaries"
- source-uri: hyeonworks/completion-records/hyeonworks-company-bootstrap-v2/EXEC-CEO-20260718T105950Z.report.yaml
grade: E3
note: "three-option nine-gate validation"