init: company-haness 설계
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
artifact-kind: visual-direction-concept
|
||||
artifact-version: 1
|
||||
identity:
|
||||
concept-id: hyeonworks-vnext-v1-signal-trace
|
||||
direction-id: signal-trace
|
||||
representative-screen-id: dual-entry-shared-lab
|
||||
producer-run-id: hyeonworks-vnext-v1-direction-divergence-signal-20260718T1135Z
|
||||
|
||||
basis:
|
||||
context-package: hyeonworks/state/context-packages/hyeonworks-vnext-v1-direction/DES-VISUAL-20260718T113223Z.pkg.yaml
|
||||
context-package-sha256: f2a89ef290b57ed34610b08e30b2a23d07e7244fec0991de81d61ca157d8ccf6
|
||||
assigned-question: >-
|
||||
두 세션의 신호와 값 흐름을 계측 rail처럼 추적하면 Lost Update의 시간적 인과를
|
||||
더 빨리 이해하는가?
|
||||
|
||||
visual-thesis: >-
|
||||
서로 다른 두 입력 단서를 밝은 계측 band로 분리해 시작하고, 명시적인 merge bus에서
|
||||
하나의 Lab으로 수렴시킨 뒤, 같은 초기값을 읽고 150과 70을 순서대로 쓰는 과정을 단일
|
||||
transaction trace로 읽게 한다. 화면의 개성은 terminal 표면이나 장식적 dashboard가 아니라
|
||||
선로의 합류, 시간축 정렬, 숫자 probe, 충돌 hatch가 만드는 판독성에서 나온다. 두 진입의
|
||||
차이는 orientation 메타데이터에만 남고, 합류 뒤에는 tx-lost-update-01과 공통 학습 루프를
|
||||
오직 한 번만 렌더링한다.
|
||||
|
||||
reference-clusters:
|
||||
- id: railway-junction-schematic
|
||||
source-family: "railway signal diagram / interlocking schematic"
|
||||
useful-signal: "독립된 입력선이 이름 붙은 junction에서 하나의 선로로 합류하는 구조"
|
||||
translation:
|
||||
- "CONCEPT와 SYMPTOM을 좌우 entry band로 분리한다."
|
||||
- "band 아래 두 선은 SAME LAB 스탬프에서 합쳐지고 이후에는 한 선만 유지한다."
|
||||
- "합류 전에는 두 band, 합류 후에는 하나의 trace table이라는 수량 규칙을 지킨다."
|
||||
boundary: "실제 철도 관제 UI, 신호등 색 체계, 사실적인 선로 일러스트를 모사하지 않는다."
|
||||
|
||||
- id: logic-analyzer-timing-sheet
|
||||
source-family: "logic analyzer trace / timing diagram"
|
||||
useful-signal: "공통 시간축에 채널별 상태와 read/compute/write 선후관계를 정렬하는 방식"
|
||||
translation:
|
||||
- "01~04 행을 고정된 실행 순서로 두고 Session A와 B를 같은 행에서 비교한다."
|
||||
- "현재 행동과 대기 상태를 같은 셀 문법으로 기록하며 장황한 서술 대신 동사+값을 쓴다."
|
||||
- "마지막 overwrite 행 전체에 hatch를 적용해 충돌 구간의 범위를 드러낸다."
|
||||
boundary: "파형, 네온 glow, 검은 console, 실행 중인 모니터링 제품처럼 보이는 chrome은 쓰지 않는다."
|
||||
|
||||
- id: calibration-instrument-panel
|
||||
source-family: "industrial calibration panel / labeled value probe"
|
||||
useful-signal: "숫자와 단위를 장식 없이 비교하고 각 값의 역할을 짧은 태그로 고정하는 방식"
|
||||
translation:
|
||||
- "Initial 100, Expected 120, Observed 70을 동일 크기의 value probe로 나란히 둔다."
|
||||
- "Observed의 위험 신호는 red뿐 아니라 ALERT 문맥과 별도 probe 상태로 중복 부호화한다."
|
||||
- "숫자는 tabular 형태의 monospace로 정렬하고 본문보다 강한 크기 대비를 준다."
|
||||
boundary: "probe를 성과 지표 카드나 실시간 KPI로 늘리지 않고 이 시나리오의 세 값으로 제한한다."
|
||||
|
||||
- id: engineering-hatch-legend
|
||||
source-family: "engineering drawing hatch / printed channel legend"
|
||||
useful-signal: "색을 볼 수 없어도 패턴, 기호, 라벨로 채널과 예외 영역을 구분하는 방식"
|
||||
translation:
|
||||
- "Session A는 circle, Session B는 diamond와 반복 라벨로 구분한다."
|
||||
- "Session B entry edge와 overwrite 구간에는 서로 다른 밀도의 diagonal hatch를 쓴다."
|
||||
- "legend는 trace 바로 위에 놓아 기호를 기억해야 하는 거리를 줄인다."
|
||||
boundary: "경찰 테이프나 incident severity 장식으로 읽힐 정도의 과한 경고 패턴은 피한다."
|
||||
|
||||
layout-grammar:
|
||||
topology: "dual input bands → centered merge bus → single shared Lab → common learning loop → boundary"
|
||||
desktop:
|
||||
viewport-reference: "1280px 이상"
|
||||
grid: "intro는 1.15fr/0.85fr, entry bands는 1fr/1fr, Lab은 0.65fr/1.35fr"
|
||||
reading-order:
|
||||
- "Atlas breadcrumb와 visual thesis"
|
||||
- "GUIDED SCENARIO 경계"
|
||||
- "두 entry band"
|
||||
- "SAME LAB merge bus"
|
||||
- "Lab metadata와 value probes"
|
||||
- "transaction trace"
|
||||
- "Predict → Observe → Compare → Explain → Transfer"
|
||||
- "learning boundary"
|
||||
density-rule: "trace는 중간~높은 밀도를 허용하되 entry 영역은 선택지 두 개 외의 카드를 만들지 않는다."
|
||||
compact:
|
||||
breakpoint-contract: "800px 이하에서 intro, bands, Lab을 한 열로 재배치하고 420px 이하에서 probe를 한 열로 쌓는다."
|
||||
trace-reflow: "각 시간 행은 step 번호 다음 A 셀, B 셀 순으로 선형화하며 DOM 읽기 순서는 바꾸지 않는다."
|
||||
merge-rule: "공간이 부족하면 장식용 두 번째 branch를 줄여도 SAME LAB 스탬프와 단일 도착점은 유지한다."
|
||||
minimum-width: "360px에서 가로 스크롤 없이 boundary와 Transfer까지 도달한다."
|
||||
spacing-rule: "rail 사이 수직 간격보다 섹션 전환 간격을 크게 해 입력·합류·실험의 위계를 보존한다."
|
||||
|
||||
interaction-grammar:
|
||||
entry-selection:
|
||||
control: "두 entry band 전체를 native link 또는 button으로 제공한다."
|
||||
behavior: "어느 band를 선택해도 동일한 #shared Lab으로 이동하고 entryMode만 orientation 메타데이터로 기록한다."
|
||||
state-boundary: "합류 후 scenarioId, reducer state, 단계 목록, 정답·설명 콘텐츠를 entry별로 복제하거나 분기하지 않는다."
|
||||
keyboard: "Tab으로 각 band에 도달하고 Enter로 선택하며 focus-visible outline을 항상 표시한다."
|
||||
trace-progression:
|
||||
controls: "production 단계 제어는 native previous/next button을 사용하며 drag를 필수 입력으로 만들지 않는다."
|
||||
announcement: "단계가 바뀌면 aria-live에 step 번호, session, action, value를 한 번 알리고 사용자의 focus는 이동시키지 않는다."
|
||||
active-state: "현재 segment는 굵기+기호+짧은 pulse로 강조하며 완료·대기·충돌을 색만으로 구분하지 않는다."
|
||||
learning-loop: "Predict를 완료한 뒤 Observe를 열고 Compare, Explain, Transfer 순서를 하나의 progress 구조로 유지한다."
|
||||
prototype-scope: >-
|
||||
현재 coded slice는 두 native anchor가 동일한 #shared DOM target을 참조해 shared-core 구조를
|
||||
증명한다. runtime reducer 실행이나 실제 DB 연결을 시뮬레이션한다고 주장하지 않는다.
|
||||
|
||||
type-grammar:
|
||||
display:
|
||||
family: "precise grotesk sans; coded slice fallback은 Arial, Helvetica, sans-serif"
|
||||
role: "한 화면의 질문과 Lab 목적만 크게 표시"
|
||||
treatment: "큰 x-height, 단단한 800 weight, 음수 letter-spacing; 장식적 italic 금지"
|
||||
body:
|
||||
family: "same sans family"
|
||||
role: "학습 의도, 경계, 짧은 인과 설명"
|
||||
measure: "한 문단 최대 약 58ch"
|
||||
signal-label:
|
||||
family: "ui-monospace, monospace"
|
||||
role: "scenario id, channel code, execution step, compact uppercase label"
|
||||
treatment: "0.68~0.82rem, 700~800 weight, 제한된 letter-spacing"
|
||||
numeric:
|
||||
family: "ui-monospace, monospace"
|
||||
treatment: "font-variant-numeric: tabular-nums; Initial/Expected/Observed의 baseline을 맞춘다."
|
||||
language-rule: "한국어를 기본 설명 언어로 두고 SQL·transaction 동작과 compact signal label만 원어를 병기한다."
|
||||
|
||||
primitive-grammar:
|
||||
entry-band:
|
||||
anatomy: "channel code + 한국어 진입 라벨 + orientation 단서 + 방향 표시"
|
||||
rule: "합류 전에 정확히 두 개만 존재하고 각 band의 edge treatment로 채널을 중복 부호화한다."
|
||||
merge-bus:
|
||||
anatomy: "두 branch line + centered SAME LAB stamp + scenario id"
|
||||
rule: "두 진입이 별도 결과로 이어진다는 인상을 주는 분기선을 Lab 아래로 연장하지 않는다."
|
||||
trace-rail:
|
||||
anatomy: "step number + Session A cell + Session B cell"
|
||||
rule: "행은 실제 실행 순서를 보존하고 read/compute/write 동사와 값을 함께 기록한다."
|
||||
signal-stamp:
|
||||
anatomy: "짧은 uppercase 상태 + 필요 시 scenario id"
|
||||
rule: "merge와 경계처럼 의미가 고정된 지점에만 쓰며 badge cloud로 늘리지 않는다."
|
||||
conflict-hatch:
|
||||
anatomy: "diagonal pattern + overwrite text + Session B diamond"
|
||||
rule: "충돌이 일어난 04행에만 적용하고 red 단독 의미 전달을 금지한다."
|
||||
value-probe:
|
||||
anatomy: "role label + tabular numeric value"
|
||||
rule: "Initial/Expected/Observed 세 값의 동일 비교에만 사용한다."
|
||||
|
||||
semantic-encoding:
|
||||
tokens:
|
||||
background: { value: "#eef2f2", role: "밝은 계측 바탕" }
|
||||
panel: { value: "#f9fbfa", role: "entry와 Lab 표면" }
|
||||
ink: { value: "#102b31", role: "본문과 구조선" }
|
||||
trace-blue: { value: "#176c8a", role: "Session A와 concept input", non-color-cue: "circle + CONCEPT/A label" }
|
||||
trace-red: { value: "#a24a3f", role: "Session B와 overwrite", non-color-cue: "diamond + hatch + SYMPTOM/B label" }
|
||||
merge-green: { value: "#165f54", role: "공통 Lab junction", restriction: "일반 CTA에는 사용하지 않음" }
|
||||
focus: { value: "#7b2e95", role: "키보드 focus outline 전용" }
|
||||
contrast-rule: "본문, signal label, control 상태는 panel/background 위 WCAG AA 대비를 유지한다."
|
||||
status-rule: "모든 의미 상태는 text, symbol, shape, pattern 중 최소 하나를 color와 함께 제공한다."
|
||||
|
||||
motion-grammar:
|
||||
allowed: "사용자가 실행한 현재 rail segment의 짧고 국소적인 pulse"
|
||||
timing: "한 번의 180~240ms emphasis; 자동 반복과 배경 이동 금지"
|
||||
reduced-motion: "prefers-reduced-motion에서는 pulse를 제거하고 3px line, pattern, CURRENT text로 대체"
|
||||
prohibited: "glow, scanline, terminal cursor, 자동 재생 trace, parallax"
|
||||
|
||||
content-contract:
|
||||
required-copy:
|
||||
entries: ["개념을 알고 있어요", "증상만 알고 있어요"]
|
||||
scenario-id: tx-lost-update-01
|
||||
guided-label: GUIDED SCENARIO
|
||||
values: { initial: 100, expected: 120, observed: 70, a-write: 150, b-write: 70 }
|
||||
learning-loop: [Predict, Observe, Compare, Explain, Transfer]
|
||||
atlas-path: [Concurrency, Transaction Isolation, Lost Update]
|
||||
trust-boundary: >-
|
||||
운영 로그를 분석하거나 실제 장애 원인을 확정하지 않으며, 고정된 조건에서 검증할 후보
|
||||
메커니즘을 학습한다는 설명을 symptom 진입과 Lab 주변에 유지한다.
|
||||
|
||||
coded-slice-map:
|
||||
entry-bands: "index.html #entry .bands; 두 href가 모두 #shared"
|
||||
merge-junction: "index.html .bus .merge; same lab · tx-lost-update-01"
|
||||
shared-lab: "index.html section#shared.lab; 문서에 단 한 번 존재"
|
||||
transaction-trace: "index.html .trace [role=table]; 100 read → 150/70 write의 4단계"
|
||||
common-loop: "index.html .loop; shared Lab 뒤에 단 한 번 존재"
|
||||
guided-boundary: "index.html .readout과 .boundary"
|
||||
|
||||
accessibility-contract:
|
||||
- "skip link는 두 entry band가 시작되는 #entry로 이동한다."
|
||||
- "entry control과 향후 step control은 native semantics를 유지한다."
|
||||
- "focus-visible은 배경과 분명히 구별되는 3px outline과 offset을 사용한다."
|
||||
- "trace는 table/row/cell 의미를 제공하고 모바일에서도 step→A→B 읽기 순서를 유지한다."
|
||||
- "360/768/1280px에서 가로 스크롤 없이 공통 학습 루프를 끝까지 읽고 조작할 수 있어야 한다."
|
||||
- "색 외에 circle/diamond, label, hatch, text로 session과 충돌을 구분한다."
|
||||
- "prefers-reduced-motion에서는 모든 비필수 transition과 animation을 제거한다."
|
||||
|
||||
do-not-use:
|
||||
- neon terminal 또는 검은 hacker console
|
||||
- glow, scanline, 실제 monitoring chrome
|
||||
- dashboard KPI grid
|
||||
- 색만으로 구분한 session과 충돌
|
||||
- drag 전용 timeline
|
||||
- 실제 장애 진단 또는 원격 DB 분석을 암시하는 카피
|
||||
- 과장된 atlas map이나 준비 중 콘텐츠의 가짜 catalog
|
||||
- 합류 후 entry별 Lab, reducer, progress, 설명 콘텐츠 복제
|
||||
Reference in New Issue
Block a user