본문으로 이동

표현 범위와 검증 범위

항목 값
상태 결정
관련 결정 그림 문법과 배치

요약

ThinkFlow는 thinkflow 원본 하나로 구조, 순서, 상태, 스키마, API, 클래스, 칸 격자, 추적, 값에 묶인 차트와 열여섯 차트 종류를 한 모형으로 그린다. 개발자가 만드는 모든 시각물을 지원하지는 않는다. 이 문서는 지원하는 표현을 문법, 예제, 확인 근거와 이어 주고, 전용 문법이 없거나 일부러 제외한 표현을 구분한다. 문법 전체의 항목 목록은 그림 문법의 생성 표가 정본이다. 이 문서의 표는 "예제가 이 기능을 적었다"와 "확인한 시험이 있다"를 말할 뿐 모든 조합이 맞다고 주장하지 않는다.

동기

문법을 읽는 시험만으로는 글자 잘림, 조작 오류, 본문에 넣었을 때의 크기와 테마 연결을 판단할 수 없고, 예제 수만으로는 기능이 빠졌는지 알 수 없다. 기능마다 어느 예제가 쓰는지, 무엇을 확인했는지, 무엇을 확인하지 않았는지를 한 곳에서 대조할 수 있어야 한다.

기능을 판단하는 기준

목적은 기술 블로그와 문서에서 아키텍처·순서·요청 흐름·상태·자료구조·표·다양한 그래프와 데이터를 일관된 시각 언어로 설명하는 것이다. 이 표현들은 핵심 범위이며 기능 수만으로 줄이지 않는다. 같은 카드·선·아이콘·탭·조작은 공통 디자인을 상속한다. 기능 수나 예제 수를 늘리는 것을 목표로 삼지 않는다. 새 표현은 설명할 문서 사례와 기존 부품으로 부족한 의미를 먼저 확인한다. 기본값으로 표현할 수 있는 그림에는 불필요한 옵션·보기·장면 선언을 요구하지 않고 같은 의미에 같은 문법을 사용한다.

애니메이션과 트래픽 효과는 필수 표현이다. 장면별 재생·반복, 동시 이동, 값 변화와 강조를 유지하고 공통 문법·시간표·부품으로 구현한다. 정적인 구조와 움직이는 설명은 같은 카드와 관계를 사용하며 화면마다 별도 효과를 구현하지 않는다. 움직임 줄이기 설정은 같은 의미를 마지막 상태로 전달한다.

사용하지 않는 옵션과 효과가 없는 별칭은 정리 대상으로 검토한다. 사용처가 예제뿐이라는 이유만으로 기능을 미사용 코드로 판정하지 않는다. 구조·순서·상태·스키마·클래스·메모리·성능 분석처럼 문서 용도가 다르면 같은 모양의 상자로 대체할 수 있는지도 의미를 먼저 대조한다.

예시

기능이 예제에 있는지 찾기

  1. 아래 표에서 기능의 줄을 찾는다.
  2. 예제 열의 원본(examples/*.thinkflow)을 연다. 카탈로그(npm run catalog가 .local/examples/index.html로 만든다)는 모든 예제의 첫 장면 정지 이미지 미리보기와 재생 화면, SVG, 원본 링크를 한 쪽에 모으고 iframe을 쓰지 않는다. thinkflow gallery가 쓰는 목록 쪽은 재생기를 iframe으로 모으므로 둘은 다른 출력이다.
  3. 예제가 그 기능을 줄 번호와 함께 쓰는지는 scripts/lib/catalog-coverage.mjs가 원본 낱말을 읽어 알려 준다.

지원 범위를 넘는 요청

  1. 간트 차트나 UML 연관 클래스처럼 전용 문법이 없는 표현을 아래 목록에서 확인한다.
  2. 카드와 선으로 일부 의미를 설명할 수 있어도 해당 표준이나 차트를 지원한다고 표시하지 않는다.

상세 설계

지원하는 표현

모든 예제는 첫 줄이 thinkflow이다. mode는 줄이 없는 장면은 정지(static), 줄이 있는 장면은 한 번(once)이 기본이라, 필요할 때만(loop, 줄이 있는 정지 장면) 적는다. 첫 장면은 정지이고 움직임은 둘째 장면 이후에 둔다. 보기는 기본 보기로 충분하면 적지 않고, 방향(down)이나 라벨이 필요하거나 카드를 나눠야 할 때만 적는다. 차트는 종류마다 예제를 하나씩 두며, 개발 그림은 구조와 처리 과정이 다른 경우 별도 예제로 둔다. 메모리는 페이지 배치·주소 변환·페이지 부재, SQL은 행 결합을 구분한다. 같은 표현의 모양만 바꾼 변형 예제는 두지 않는다.

표현 문법 예제 확인
구성도: 사용자, 외부 시스템, 저장소, 중첩 그룹, 아이콘, 배지, 복제 개수, 타일, 번호 선, 등록한 아이콘 세트, 조용한 선 person, external, store, group, icons, icon=, badge=, count=, shape=tile, no=, quiet architecture test/kinds.test.js(K-arch), test/escaping.test.js(사용자 아이콘), test/examples.test.js
색: 한 낱말 색과 표현 방식 tone=, appearance=plain|filled|outline(도형, 그룹, show) architecture, flow test/authoring.test.js, test/examples.test.js
흐름: 동시 이동, 흐름 줄, 구간별 시간, 손실, 갈림길, 카드 바꾸기 &, track, legs, lost, decision, show, clear, light flow, architecture test/values.test.js, test/examples.test.js
값: 증감, 대입, 참조, 읽기, 장면 사이 유지와 재설정 value, on, set=, ref=, :=, keep= flow, metric, donut, stack, pointer test/values.test.js, test/examples.test.js
카드 본문: 정지 설명, 값, 작은 관계 그래프, 차트를 한 카드에 합성 box { text …; value …; graph …; chart … }(실제 줄은 줄바꿈으로 구분) integration test/authoring.test.js(#186, #188)
조건과 대기: 조건, 기다림, 시간 초과, 대체 경로, 의도한 막힘, 원자적 예약 when=, wait=, timeout=, else=, stuck, reserve= flow, queue test/values.test.js, test/examples.test.js
큐: 용량, 채움, 역압, 보관함 queue slots= from= queue, architecture, sequence test/kinds.test.js(K-queue)
장면별 상태 알약 status= architecture, flow, queue test/examples.test.js. 알약 자체를 직접 확인하는 시험은 확인되지 않았다(검증 요구사항, 미완료)
순서 보기: 메시지, 응답, 자기 호출, 메모, 활성 구간, 생성과 소멸, 네 구획(alt, loop, par, opt) view sequence, fragment, branch, note, activate, create, destroy sequence test/kinds.test.js(K-sequence), test/cards.test.js
상태: 시작, 끝, 자기 전이, 그룹, 점선 전이 state, start, final, group state test/kinds.test.js(K-state)
스키마: 키, 유일, NULL 허용, 외래 키(같은 테이블의 두 열을 잇는 자기 참조 포함), 삭제 정책, 다중성, 예시 행 table, pk, unique, nullable, required, fk=, ondelete=, from=, to=, show schema test/cards.test.js(S4): 외래 키 대상과 같은 열 참조, pk와 nullable의 충돌, 직접 연결과 외래 키의 다중성 표시 및 잘못된 범위를 확인한다. test/examples.test.js가 예제를 빌드한다
API 카드: 메서드와 경로, https:// 주소, 칸 사이 연결 api api, integration test/cards.test.js(S1), test/examples.test.js
클래스: 세 구획, 가시성, 정적, 추상, 여섯 관계, 다중성, 그룹 class, interface, field, method, relation=, from=, to= class test/kinds.test.js(K-class)
칸 격자: 비트 필드, 합친 칸, 생략한 칸, 칸에서 칸으로 가는 선 grid, item, gap memory, stack, pointer test/kinds.test.js(K-grid), test/cards.test.js(S2, S3)
추적: 구간, 레인, 실제 시간 축, 밀리초와 마이크로초 trace, span, view time, unit= trace, integration test/kinds.test.js(K-trace)
여러 보기가 같은 사건을 공유, 보기를 적지 않은 카드의 기본 보기 한 문서의 view 여럿, 보기 줄 없음 integration, trace, metric, donut test/cards.test.js(S5, S9, S10), test/authoring.test.js
차트 열여섯 종류 chart id "제목" 종류 { 종류마다 bar, stacked, percent, dumbbell, difference, line, step, area, scatter, histogram, box, ecdf, heatmap, donut, pie, waterfall test/charts.test.js(K1), test/examples.test.js
계열 N개, 색 수(지금 일곱)를 넘는 구분 series percent(9), pie(9), line(4), ecdf(3) 색과 무늬의 모양은 검증 요구사항, 미완료. 계열 수 범위의 거절은 test/charts.test.js(K5)
기대값 계열, 신뢰구간, 행 기준선, 공통 기준선 role=reference, .low, .high, rule bar, line, step, dumbbell, difference 예제 빌드는 test/examples.test.js. 그림의 의미는 직접 확인하는 시험이 확인되지 않았다(검증 요구사항, 미완료)
빠진 값(-)과 0의 구분, 모두 0이거나 모두 빠진 차트 -, missing bar, stacked, percent, line, step, ecdf test/charts.test.js(K4). 히스토그램, 워터폴, 상자의 빠진 값은 예제가 쓰지 않고 직접 확인하는 시험이 확인되지 않았다(차트, 검증 요구사항, 미완료)
값에 묶은 차트와 바뀐 표식 강조 행의 계열=값이름 donut, metric, integration test/charts.test.js(C1~C4)
차트 값을 JSON에서 읽기 data "경로" at "/포인터" histogram test/charts.test.js(C5)
장면 재생 방식과 배속 mode=static|once|loop(생략하면 줄이 있으면 once, 없으면 static), speed= 모든 예제, flow(speed=1.5) test/authoring.test.js, test/exports.test.js

예제가 쓰지 않는 문법

문법 표에 있어도 예제가 쓰지 않아 이 문서가 예제로 연결하지 못하는 항목이다. 지원을 부정하는 것이 아니라 예제 근거가 없다는 뜻이다.

항목 이유
머리 aspect, width wide 그림 비율을 억지로 맞추면 접힌 배치가 오히려 길어지고, 넓은 캔버스는 표시 폭으로 줄어 글자가 12px 아래로 내려간다. 예제가 쓰면 읽기 기준에 어긋난다
차트 series ... key= JSON 키와 계열 이름을 따로 둘 때만 필요하다. 예제의 JSON은 histogram의 value 하나뿐이다
shape=circle, shape=rect, 값 목록 head=end, border=solid 기본값이거나 짧은 이름을 담는 작은 원 하나라 예제의 이야기에 필요하지 않았다
visibility=package, 색 red의 appearance(tone=red는 쓴다) 다른 값이 같은 규칙을 보인다
추적 unit=s ms와 us가 단위 규칙을 보인다

전용 표현이 없는 범위

다음은 기존 카드와 선으로 일부 의미를 그릴 수 있어도 전용 문법과 검증이 없는 범위다. 전용 지원 여부는 src/source/grammar.js의 카드, 보기, 차트 종류 목록을 기준으로 판단한다. 임의의 모든 조합을 시험했다는 뜻으로 목록을 사용하지 않는다. 이 목록은 지금 지원하지 않는다는 표시이고 구현해야 할 수용 기준이 아니다. 지원 범위에 넣으려면 먼저 승인한 제외와 보류와 대조해 따로 결정한다.

범위 현재 한계
UML 객체·패키지·컴포넌트와 전체 메타모델 클래스·인터페이스의 멤버 구획과 기본 관계는 지원, 연관 클래스·포트·표준 전체의 계약은 없음
시퀀스 제어 구획의 전체 의미 메시지·생명주기·활성 구간과 alt·고정 loop·par·명시적으로 재생을 선택하는 opt는 지원. 조건식 평가·조건부 반복·구획 안 생명주기·break·critical·ref는 미지원
UML 활동·유스케이스·타이밍 흐름·상태로 일부 설명 가능, 전용 의미 검증 없음
BPMN·Petri net 갈림길·큐는 있으나 이벤트·게이트웨이·토큰 의미 규칙 없음. 전체 BPMN은 지원 대상에서 제외했다
간트·일정·달력·로드맵 전용 날짜축·기간·의존 작업 모델 없음. 추적의 time 보기는 실제 시간 축 위 구간만 놓는다
스윔레인·표준 C4 전 계층 그룹으로 일부 표현 가능, 전용 레인·C4 규칙 검증 없음
마인드맵·방사형·자유 네트워크 방향성 자동 배치 외의 전용 배치 없음
차트 확장 누적 면적, 이중 축, 작은 다중 차트, 바이올린·밀도 곡선, 로그가 아닌 구간 추정(Sturges 외)은 없다. 원·도넛은 한 계열이다. 흐름 폭을 쓰는 Sankey, 불꽃 그래프, 바이올린은 보류 항목이다
와이어프레임·임의 웹 UI·폼 그림 재생기를 출력하며 앱 UI를 편집·생성하는 도구는 아님
자유 손그림·벡터 편집·이미지 합성 좌표 직접 편집, 브러시, 이미지 레이어 모델 없음
실시간 데이터·실행 추적 수집 작성한 시간표의 재생만 지원. 추적 카드의 시간은 작성한 값이다. 실시간 백엔드는 지원 대상에서 제외했다

승인한 제외와 보류

설계 검토에서 정한 제외와 보류다. 제외는 지원한다고 쓰거나 우회 문법을 두지 않는다. 보류는 지원하지 않는다는 결정이 아니라 검증이 끝나지 않았다는 뜻이고, 지금은 지원한다고 쓰지 않는다.

표현 상태 비고
Sankey, 불꽃 그래프, 바이올린 보류 흐름 폭이나 분포 모양을 그리는 모형이 아직 없다. 넣으려면 모형과 화면을 검증한 뒤 따로 결정한다
3차원, 지도, CAD, 전체 BPMN 제외 좌표계나 표준 전체의 의미 모형을 두지 않는다
CPU 시뮬레이션(그리기 대신 계산), 실시간 백엔드 제외 ThinkFlow는 작성한 시간표를 재생하며 실행을 계산하거나 수집하지 않는다
클래스 멤버를 연결점으로 쓰기 제외 class members are not ports. Connect "order" 오류. 선은 클래스 카드에 닿는다
API 카드를 실행하기 제외 API 카드는 문서화용이다

색 수는 팔레트 개정 1의 일곱이고 고정된 최대가 아니다. 앞 네 색(파랑, 노랑, 빨강, 초록)은 공식 solid 2024 기능 아이콘에서 읽은 값이라 바뀌지 않고, 뒤 색은 후보를 실제 크기의 라이트·다크 화면으로 검수한 뒤 기록한 순서 끝에만 더한다. 개정 2가 생기기 전에는 원본에서 개정을 고르는 문법이 없다.

Things와의 연결 기준

기준은 Things 공식 페이지와 기능 페이지의 실제 렌더링이다. 예전 Refero 화면은 정규화한 측정값과 재구성 예제라 보조 참고일 뿐 기준이 아니다. 중립 면, 흰 카드, 절제된 파랑, 글자 위계를 역할이 같은 요소끼리 비교한다. 재생 조작은 시간 흐름을 장면 탭으로 고르는 구조라 Things의 대응 요소가 없고, 도구 막대 아이콘은 ThinkFlow의 확장이다(재생). ThinkFlow의 데이터 의미색과 글꼴 측정 규칙을 Things의 원본 구현이라고 부르지 않는다.

화면 값은 design-tokens의 tokens가 소유한다. ThinkFlow에서 가져온 JSON이나 생성 CSS·JS를 손으로 고치지 않는다. 그림 글꼴은 측정과 SVG 배포를 위해 포함한 글꼴을 쓰므로, 운영체제 글꼴을 쓰는 Things와 글꼴 파일이 같지는 않다. 다크 테마는 ThinkFlow의 확장이며 공식 밝은 페이지와 같은 화면이라고 판정하지 않는다. 다크의 보조 참고는 라이트·다크가 함께 있는 2018년 Things 3.7 화면 쌍이고, 현재 네이티브 버전의 다크라는 근거는 아니다. 2017년 사이트 영상 스틸도 같은 이유로 역할 비교용 보조 참고일 뿐 현재 네이티브 버전과 같다는 근거가 아니며, 두 이미지의 색을 현재 네이티브 색으로 읽지 않는다.

화면으로 확인한 범위는 예제와 검증 범위의 표가 정하고, 그 밖의 폭과 장면, 실제 기기와 Safari, Firefox는 확인하지 않았다(검증 요구사항, 미완료). 가로 넘침 없는 결과와 실제 글자가 읽히는 결과를 구분한다. 복잡한 그래프와 순서 그림은 보통 보기에서 모든 판이 같은 비율로 줄어 가로로 잘리지 않고 들어오지만 그만큼 글자가 작아지므로 글자가 읽힌다고 적지 않고, 전체 화면은 묶음 전체를 영역에 맞춘 뒤 수동 확대로 읽는다(재생). 화면 비교는 도형 경계, 텍스트 겹침, 카드 여백, 의미색, 조작의 위치를 확인하며 자동 검사 통과만으로 디자인 승인을 대신하지 않는다.

요소별 대응과 소유권

요소 하나를 추가·수정할 때 실제 Things 화면 옆에 놓고 판정한다. 같은 색·모서리 수치나 자동 테스트 통과만으로 일체감을 통과시키지 않는다. 대응 요소의 실제 캡처, 양쪽 크기·획·모서리·글꼴·간격, 주변 문맥, 선택·비선택·재생 상태, 모바일 읽기 결과를 함께 남긴다. 원본에 없는 도표·관계 기호는 확장으로 표시하고 조화 여부를 별도로 판정한다.

기준은 Things 공식 웹 페이지이고, 색의 기준점은 공식 사이트의 solid 2024 기능 아이콘이다. 웹 페이지에 보이는 요소는 computed style을 1280px Chrome에서 확인한다. 공식 2017년 사이트 영상 스틸과 2018년 Things 3.7 화면 쌍은 역할 위계의 보조 참고이고 역할이 같은 요소끼리 비교한다. 사이트 기능 아이콘의 면색은 사이트의 값이지 네이티브 앱 모든 역할의 같은 색이라는 근거가 아니다. 숨긴 접근성 제목은 화면 글자 크기 비교에서 제외한다. 아래의 확장은 Things에 동일한 도형이 있다는 뜻이 아니고, 표의 판정은 같은 모양이라는 증명이 아니라 어느 정본 경로가 맡는지의 대응이다.

ThinkFlow 요소 Things 대응 정본 경로·구현 판정
페이지·조작 글꼴 시스템 글꼴 스택 font.sans, @woonyong-choi/design-tokens/styles/tabs.css·@woonyong-choi/design-tokens/styles/toolbar.css 직접 대응. 그림 글꼴과 분리
그림·코드 글꼴 대응 요소 없음 font.figure-sans, font.figure-mono 측정과 SVG 포함을 위한 확장
큰 제목 .fancysection-heading, 36px·700 text.heading, font-weight.bold 크기·굵기 대응
조작 글자 .navigation-button, 15px·600. 분절 조작은 선택과 비선택 모두 600이고 실측 15.84px다 text.body-text, text.platform-text, text.feature-tab-font, font-weight.semibold, @woonyong-choi/design-tokens/styles/tabs.css·@woonyong-choi/design-tokens/styles/toolbar.css 장면 탭은 홈페이지 문서 탭과 같은 버튼 변형이고 테마 선택은 분절 변형이다. 두 변형은 부모 문서의 글자 크기와 관계없이 같은 정본 글자 기준을 쓴다. 선택과 비선택의 굵기, 패널 뒤 간격과 버튼 여백도 공통 규칙이다
본문 글자 body, 18px·400 text.body-text, font.sans, @woonyong-choi/design-tokens/styles/diagram/document.css 문서 본문 크기 대응
그림 이름·상세·메타 직접 대응 요소 없음. 역할 위계의 보조 참고(2017년 영상 스틸)에서 항목 제목은 보통 굵기, 구획 제목은 semibold다 text.small-text, text.tiny-text, text.figure-meta, measure/texts.js의 STYLE 그림 밀도를 위한 확장. 카드 제목은 15px regular, 그룹 제목은 같은 15px semibold, 그림 안 글의 굵기는 regular와 semibold 둘이다. 크기와 굵기를 STYLE이 재고 CSS가 같은 토큰으로 그린다
캔버스 면 페이지 판의 면 역할. 공식 페이지는 body와 섹션마다 배경이 다르다 color.prose-pre-background 페이지 판 면의 역할 대응이고 값은 같지 않다. 실제 Chrome에서 잰 공식 홈 body는 rgb(242, 245, 247), 기능 페이지 body는 rgb(213, 217, 222)이고 ThinkFlow 캔버스는 rgb(245, 245, 246)다. 사이트 body 값을 그림 캔버스에 복사하지 않는다
캔버스 카드 .productcard의 18px 모서리 radius.card-radius 바깥 카드 역할. 모든 내부 도형에 적용하지 않는다. 그룹 틀과 순서 구획은 카드와 같은 바깥 모서리(radius.lg)를 쓴다
조작 모서리 .navigation-button의 6px 모서리 radius.md 직접 대응
도형 외곽선 대응 요소 없음 color.help-border, border-width.thin, .fl-node > .fl-stroke 공통 경계 규칙으로 확장
표·클래스 및 병합 격자의 내부 구분선 대응 요소 없음 color.ui-line, border-width.hair, .col-line 내부 경계를 한 규칙으로 통합
관계선·화살촉 페이지 이동 표시의 방향성 border-width.edge, draw/arrow.js 관계 의미를 위한 확장. 채운 삼각형 화살촉과 UML 기호 구분
생명선·활성 구간·소멸 대응 요소 없음 border-width.lifeline, draw/sequence-life.js 시퀀스 의미를 위한 확장
시퀀스 제어 구획·대안 제목 대응 요소 없음 color.ui-line, color.ui-card, draw/sequence-fragments.js 공통 중립 경계·글자 위계를 재사용한 확장
카드 본문 공식 할 일 카드의 같은 종이 면 안에 놓인 본문·목록 color.ui-card, draw/content.js 바깥 카드와 같은 면. 내용이 있다는 이유로 회색 상자를 추가하지 않음
알약(선 라벨, 배지, 개수) 대응 요소 없음 .pill, .badge-pill(@woonyong-choi/design-tokens/styles/diagram/figure.css 한 규칙) 중립 면과 평소 경계를 한 규칙으로 쓰는 확장
선택·호버·키보드 초점 페이지 링크의 조작 상태 color.search-hover, color.help-hover, outline-width.focus 접근성을 포함한 확장. 키보드 초점 고리 굵기는 조작부, 재생기 캔버스, 문서와 목록 링크 모두 outline-width.focus 하나다
조작 아이콘 영상 재생과 방향 아이콘 공통 카탈로그의 controls, @woonyong-choi/design-tokens/ui/icons.mjs 크기 위계 대응. 조작 도형과 렌더러는 공통 디자인 사본을 읽고 출처·라이선스는 공통 고지와 NOTICE가 맡는다
시스템·브랜드 아이콘 대응 요소 없음 @woonyong-choi/design-tokens/assets/icons/, 의미색 토큰 종류 구분을 위한 확장. 개념 아이콘과 브랜드는 웹과 같은 공통 SVG 원본을 쓴다
데이터·상태 의미색 대응 요소 없음 color.tag, color.state, 차트 역할색 오류·성공·계열 구분을 위한 확장
다크 모드 웹 기준 페이지에는 없다. 공식 네이티브 앱 화면 이미지 가운데 라이트·다크가 함께 있는 것(2018년 Things 3.7)이 보조 참고다 tokens/tokens.dark.json 보조 참고만 있는 확장. 2018년 이미지는 현재 네이티브 버전이 아니므로 현재 앱과 같다고 판정하지 않고, 역할이 같은 요소끼리만 견준다

스타일 책임은 테마의 값, 배치의 크기, 렌더러의 기하, 공통 CSS의 상태로 나눈다. 도형 종류마다 같은 경계 값을 다시 쓰지 않는다. 클래스 구획도 표의 col-line을 사용한다. 원본에 명시한 의미색은 공통 기본값보다 우선한다. 페이지가 시스템 글꼴을 써도 그림 측정과 출력 글꼴은 바꾸지 않는다.

지원 범위를 넓힐 때

지원하는 표현의 회귀 검사와 표현 확장의 완료 판정은 별개다. 전용 표현이 없는 범위의 표현은 구현과 검증이 갖춰지기 전까지 지원하지 않는다. 지원하지 않는 문법을 거부하는 테스트는 오류 계약의 근거이며 해당 표현을 지원한다는 근거가 아니다.

새 표현을 지원 범위에 넣기로 따로 결정하면 원본 선언, 의미와 오류 검사, 배치와 렌더링, 정적 출력과 재생, 실제 브라우저 검수를 모두 연결한다. 표준의 일부만 구현하면 지원하는 부분을 명시한다. 임의의 모든 조합이나 모든 개발 분야를 검증했다고 쓰지 않는다.

아래는 지금 요구하는 구현 목록이 아니라 아직 범위에 없는 바람의 예다. 완전한 C4 계층이나 객체 편집처럼 이 표에 없는 바람도 새 수용 기준이 되지 않으며, 필요하면 결정 기록으로 먼저 정한다.

아직 범위에 없는 바람 넣기로 결정할 때 판정할 사례
대상의 동일성을 유지하는 구조 변경 연결 리스트 삽입·삭제와 트리 회전에서 같은 대상의 이동, 연결 변경, 생성·소멸을 구분
서로 다른 표현의 동기화 한 코드 실행 단계가 호출 스택, 메모리, 요청 흐름에 같은 시점으로 반영
변경 전후 비교 추가·삭제·수정·유지 항목의 대응 관계와 변경 이유를 함께 표시
상세도 전환 전체 구조에서 하위 구조를 열고 같은 대상을 잃지 않고 돌아오기
설명과 관측의 구분 작성한 시뮬레이션과 수집한 실행 기록의 출처·단위·시간·불확실성을 구분

요구사항

요구사항 검증 계획
예제 폴더가 지원하는 표현마다 하나이고 옛 산출물이 없다. 차트 예제는 문법 표의 차트 종류와 하나씩 맞는다. test/examples.test.js, scripts/build-catalog.mjs의 같은 대조
모든 예제가 thinkflow, 현재 문법(이름 없는 보기, tone과 appearance)으로 strict 빌드에서 오류와 경고 없이 만들어지고, 모든 장면이 SVG와 HTML이 된다. test/examples.test.js
표의 기능마다 그 기능을 쓰는 예제가 있다. scripts/lib/catalog-coverage.mjs가 원본 낱말을 읽어 알려 준다. 기능마다 쓰이는지를 시험이 따로 확인하지 않는다(검증 요구사항, 미완료)
개발 그림 가족과 차트 열여섯 종류가 독립한 최소 원본으로도 읽히고 잘못된 입력을 줄 번호와 함께 거절한다. test/kinds.test.js, test/charts.test.js
지원하지 않는 전용 표현을 지원한다고 안내하지 않는다. test/grammar.test.js
갤러리 목록이 모든 예제의 재생 화면, SVG, 원본 글을 담고 외부 틀을 쓰지 않는다. 검증 요구사항, 미완료
첫 화면 그림이 영어와 한국어 한 쌍으로 같은 구조이고 첫 그림은 반복 장면이다. 검증 요구사항, 미완료
모든 재생 페이지와 갤러리 목록이 폭 320·390·430·데스크톱에서 가로로 넘치지 않는다. 자동 시험은 없다. 예제 재생 화면의 문서 가로 넘침은 실제 Chrome에서 폭 320·390·430·1440의 라이트·다크로 쟀고 넘침이 없었다. 목록 쪽은 폭 320의 대표만 봤다(예제와 검증 범위). 그 밖의 폭과 목록 쪽, 그 밖의 재생 페이지는 확인하지 않았다(검증 요구사항, 미완료)

시험은 각 파일이 맡은 계약의 범위만 보인다. 이 표는 시험이 있는 계약을 대응시킬 뿐 전체 품질을 확인했다는 근거가 아니다. npm test는 브라우저를 열지 않는다. 그림 안의 글자 겹침, 의미색, 라이트와 다크의 모양, 재생 중 표시는 자동으로 확인하지 않고 화면으로 본다. 이 문서와 다른 문서의 표는 시험이 맡은 계약을 적을 뿐이고, 시험이나 CI를 실제로 돌린 결과는 GitHub Actions 기록과 이슈가 맡는다.

시험 번호

시험 이름은 번호로 시작한다(V1, S7, K-arch). 번호는 계약 묶음을 가리키고, 묶음의 규칙은 오른쪽 문서가 정한다. 결함을 막는 시험은 이슈 번호(#171)를 이름에 단다. 문서의 요구사항 표는 이 번호로 시험을 가리킨다.

번호 시험 파일 보는 계약 규칙을 정하는 문서
V test/grammar.test.js 시작 선언, 줄과 낱말, 이름 공간, 연결점, 오류의 위치와 필드 그림 문법
G test/authoring.test.js 이름 없는 보기와 기본 보기, 장면 mode 기본값, tone과 appearance 그림 문법
S test/cards.test.js 카드 연결점(표 열, API 칸, 격자 칸, 추적 구간), 여러 보기에 놓인 카드, 보기 규칙(#172, #175) 그림 문법, 그림 종류, 칸 격자
K, K-종류 test/charts.test.js(K1~K9), test/kinds.test.js(K-arch, K-class, K-sequence, K-state, K-trace, K-queue, K-grid, K-view), test/examples.test.js(K30) 종류만의 수학, 의미, 거절. 차트 열여섯 종류와 개발 그림 가족. K-view는 종류가 아니라 판을 합치는 공통 한 곳(layout/panels.js)의 판 폭(제목이 잘리지 않고 내용은 가운데)을 그래프 판과 순서 판으로 읽고, 차트 판과 시간 판은 같은 경로여도 따로 읽지 않는다 차트, 그림 종류, 칸 격자
C test/charts.test.js 값에 묶인 차트, data JSON(#171) 차트, 그림 문법
E test/values.test.js 값, 이동, 조건, 대기, 예약(#173) 그림 문법, 재생
X test/exports.test.js 장면 방식, 움직이는·멈춘 SVG, HTML의 마크업, 결정성, 정본 내려받기 재생
I test/escaping.test.js 글 이스케이프와 사용자 아이콘의 안전 재생, 배치
L test/cli.test.js render, check, gallery의 파일, 종료 코드, 이름 겹침(#176), 쓰기 실패(#177) 재생
M test/markdown.test.js md의 블록, 소유 표시, 정리, 접기, 잠금, 쓰기 실패(#176) 마크다운
G(도구) test/tooling.test.js(G1~G3) 이 저장소의 npm run check가 쓰는 도구: 하드코딩 검사가 JS의 정규식·문자열 뒤 색은 찾고 주석과 정규식 속은 건너뛰며(G1), CSS 주석 뒤의 선언은 계속 검사하는지(G2), 공통 디자인 사본이 manifest 해시와 다르면 렌더링 전에 실패하는지(G3). G 번호는 위 authoring 시험과 겹치지만 파일이 다르다 아키텍처
P test/package.test.js 패키지에 오르는 파일과 진입점 마크다운
T test/text.test.js 글을 읽는 방식(백틱이 글자인지 코드인지), 측정이 놓은 글 자리를 그리는 쪽과 그림 검사가 읽는 것, 긴 제목의 줄바꿈(카드 머리, 차트·시간 머리), 카드 내용의 관계 그래프 이름이 모든 카드 종류에서 잘리거나 겹치지 않는 폭(T13, 폭을 정하는 measure/content.js 한 곳) 배치, 그림 문법
Q test/sampler.test.js(Q1~Q8) 순수 표본 추출기(player/sample.js)가 장면과 시각만으로 모습을 정하는 규칙 재생
U test/components.test.js, test/component-state.test.js(켜짐과 평소의 정의 --fx-*, 켜진 차트 카드의 바탕 색 color와 이를 읽는 지움 면, 움직이는 SVG의 선·알약·조용한 선의 시간, light가 켠 그룹의 경계, 차트 방향선 화살촉의 역할별 표식. 번호 없이 파일로 가리킨다) 공통 부품: 잰 카드와 그려진 카드가 같다(U1), 머리 규칙(U2), 머리와 필드의 구분(U3), 글 이스케이프(U4), 라벨의 백틱 읽기(U6. 값과 형식의 글자 그대로 읽기는 T), 보통 화살표와 의미 관계의 화살촉(U7), 개념 아이콘이 하나의 도형(U8), 그림 틀의 도구 막대와 탭 줄(U9), 차트가 놓인 면 안에 그려지고 속 빈 기준 표식이 운반된 면을 읽는다(U10), 글 역할의 크기와 굵기를 STYLE이 재고 CSS가 같은 토큰으로 그린다(U11) 배치, 재생, 아키텍처

공통 부품(카드, 필드, 선, 화살촉, 라벨, 아이콘, 탭, 도구 막대)의 모양과 상태는 부품이 하나씩 소유하므로 그 시험도 부품마다 한 곳에 한 번만 둔다. 부품 시험은 둘로 나뉜다. test/components.test.js는 부품의 기하와 구조(잰 크기와 그린 모양이 같다, 글이 이스케이프된다, 같은 도형이 같은 모양이다)를 보고, 코드가 실제로 쓰는 진입점(measure/card.js, measure/texts.js, draw/texts.js, draw/arrow.js, icons/, html/player-script.js의 figureFrame)과 공개 진입점(buildFigure, toSvg, toHtml)을 부른다. test/component-state.test.js는 출력 어댑터 사이의 일치를 본다. 켜짐과 평소의 모습을 움직이는 SVG와 HTML이 같은 정의(--fx-*)로 읽는지, 차트 방향선의 화살촉이 역할마다 정의 하나인지를 공개 진입점의 출력에서만 읽는다. 시험만을 위한 내보내기나 훅은 없다. 종류별 시험이 같은 색, 두께, 모양을 다시 확인하지 않고, 조합 시험은 데이터 전달과 연결만 본다. 이 시험들은 부품이 약속한 기하와 구조, 출력이 읽는 정의를 읽을 뿐이고, 토큰 값이 자기 자신과 같은지나 소스 글을 읽지 않으며, 계산된 색이 화면에서 어떻게 보이는지는 보지 않는다. 부품 시험으로 아직 덮지 못한 것: 카드 내용(show) 줄의 면과 색(줄의 글 자리는 test/text.test.js가 측정과 그린 자리의 일치로 본다), 격자 칸과 큐 칸의 모양, 글꼴 조각에 백틱 글자가 실리는지(보이는 글자가 글꼴에 있는지는 화면에서 본다).

브라우저에서만 보이는 계약

공개 진입점으로 읽을 수 없는 계약이다. 시험이 없다고 통과로 쓰지 않고, 실제 Chrome에서 보는 검수의 몫이다. 표의 "시험이 대신 보는 것"과 "보지 않는 것"은 시험의 범위일 뿐이고, 어떤 항목을 Chrome에서 어디까지 확인했는지는 예제와 검증 범위가 정한다. 거기 적히지 않은 항목은 검증 요구사항, 미완료다.

계약 시험이 대신 보는 것 보지 않는 것
재생기가 순서 보기를 먼저 적은 혼합 그림에서도 그래프 판의 카드 내용을 그린다(#172) test/cards.test.js(S8)가 멈춘 SVG와 HTML 판 마크업을 읽는다 재생기가 once 장면이 끝난 뒤 카드를 칠한 모습
멈춘 장면과 한 번 장면의 마지막 모습이 장면 끝의 박자를 읽는다(#174) test/exports.test.js(X2)가 SVG의 재생 길이를, test/sampler.test.js(Q)가 순수 표본 추출기(player/sample.js)가 돌려주는 마지막 모습을 읽는다 브라우저의 시계가 표본을 부르는 일과 HTML 재생기가 그 모습을 DOM에 쓰는 일
장면 탭: 장면이 둘 이상일 때만 아래 가운데에 놓이고, 눌러도 화면이 튀지 않고, 같은 탭을 다시 눌러도 되감지 않는다 test/components.test.js(U9)가 페이지의 탭 줄이 비어 있고 그림 밖에 있다는 것과 재생기가 읽는 장면 수(steps)를 읽는다 재생기가 탭을 만들고, 장면이 하나이거나 시간 흐름이 없을 때 탭 줄을 숨기는 일(player/play.js), 눌림, 위치
장면 방식의 시계, 문서가 가려질 때 얼림, 움직임 줄이기 없음 모두
도구 막대의 실제 동작: 문법 복사(클립보드에 쓴 글, 실패 표시), HTML 다운로드(받은 파일), 전체화면(확대, 끌기, 장면과 시계 유지) test/exports.test.js(X8, X11)가 정본 복원과 페이지에 실린 원본을, test/components.test.js(U9)가 단추 순서를, X10이 재생 조작이 없다는 것을 읽는다 클릭, 클립보드, 파일 저장, 44px 눌림 영역, 호버, 초점, 터치 노출
320·390·430px에서 도구 막대와 탭이 잘리지 않고 문서가 가로로 넘치지 않으며 좁은 배치로 바뀐다 없음 모두. 문서 가로 넘침과 판 경계는 Chrome에서 쟀다(예제와 검증 범위)
색과 면: tone·appearance가 구분되는 모습, 라이트·다크 대비 test/authoring.test.js(G5)가 모형과 SVG의 차이를 읽는다 실제 화면에서 구분되는지, 대비
켜진 도형·표 줄·격자 칸·알약과 차트 방향선 화살촉의 색이 움직이는 SVG와 HTML에서 같다 test/component-state.test.js가 두 출력이 같은 --fx-* 정의와 역할별 표식(fl-arrow-<역할>)을 읽는지 읽는다 브라우저가 계산한 색, 라이트·다크, 표식이 문서 밖 정의에서 색을 받는지
켜진 차트 카드의 글자 바탕과 받침 선이 정지 SVG, 움직이는 SVG, HTML에서 같은 켜진 면을 읽는다 test/component-state.test.js(S3)가 별칭의 정의, 차트 묶음의 color가 켜짐 구간에 --fx-face-on과 --fx-face로 바뀌는지, keyframes가 사용자 정의 속성을 선언하지 않는지, 받는 쪽이 currentColor를 읽는지 읽는다. 선언을 읽는 시험이다 브라우저가 계산한 색과 재생 중 라이트·다크 전환의 보임. 실제 Chrome에서 본 범위는 예제와 검증 범위의 “차트 바탕” 행이고 그 밖의 소비자와 상태는 검증 요구사항, 미완료
효과의 시간(펄스, 선 켜짐·꺼짐, 점과 글 상자) test/component-state.test.js(S4)가 움직이는 SVG의 keyframes를, test/sampler.test.js(Q)가 재생기의 순수 표본을 읽는다 브라우저의 시계가 표본을 DOM에 쓰는 일(player/stage.js가 알약 색 --pill-tint를 라벨 묶음과 선 묶음에 쓰는 일 포함), 실제 보임
복사 글이 줄바꿈까지 원본과 같다 test/exports.test.js(X11)가 페이지에 원본이 있음을 읽는다 실제로 클립보드에 들어간 글

예제와 검증 범위

예제 30개는 test/examples.test.js가 현재 문법으로 strict 빌드하고, 첫 화면 그림 docs/assets/how-it-works.thinkflow은 CI의 check --strict가 읽는다. 첫 화면 그림 쇼케이스(docs/assets/showcase/의 일곱 쌍)도 CI의 원본 검사와 생성 그림 대조가 읽는다. npm run figures는 예제와 첫 화면 그림, 쇼케이스, 문서 그림을 함께 갱신한다. 실제 Chrome에서 확인한 범위는 아래와 같고, 그 밖은 검증 요구사항, 미완료다. 이전 모양의 화면 검수는 이번 개편(공통 장면 기본값, 한 낱말 색, 공통 도구 막대, Things 색 역할)의 근거가 아니다. 시험과 빌드를 돌린 결과와 날짜, 개수는 이슈가 맡고 이 표에 적지 않는다.

검증 대상 실제 범위와 근거 증명하지 않는 것
원본의 현재 문법과 기능 사용 test/examples.test.js: 등록된 예제를 strict로 읽고 모든 장면을 SVG와 HTML로 만든다 모든 입력 조합
개발 그림 가족과 차트 종류의 경계 test/kinds.test.js, test/charts.test.js: 독립한 최소 원본으로 의미와 거절을 본다 모든 입력 조합, 그림의 모양
결과물 test/exports.test.js: 같은 원본이 같은 SVG와 HTML을 내고, 정본 내려받기가 바이트까지 같다 브라우저에서의 동작, 재생 중 모든 순간
순수 표본 추출기 test/sampler.test.js(Q1~Q8): 실제 player/sample.js와 curve.js를 node:vm에서 돌리고 재생 데이터는 공개 진입점 toHtml이 실은 JSON을 읽는다. 이력과 무관한 같은 모습, 정지 장면의 마지막 모습, 같은 선을 쓰는 정방향·역방향 점의 선 켜짐, 잃은 점이 도착으로 보이지 않음, 같은 시각의 넘겨받기, 선 라벨 알약의 줄어듦, 마지막 값 유지, 소수 배속에서 반올림한 표시 길이 뒤에 효과가 끝난 모습을 본다 브라우저의 시계와 DOM에 쓰는 일
공통 탭 교체 후 확인(Chrome) 공통 탭을 사용하는 모든 예제 첫 장면을 실제 CSS 너비 320·390·430·1440의 라이트·다크로 다시 확인했다. 페이지와 탭에 가로 넘침이 없고 선택 글자는 두 테마에서 흰색이다. 홈페이지 삽입 예제에서는 탭 선택·방향키·원문 복사·반복 트래픽을 확인했다 첫 장면의 기하와 공통 조작 확인이다. 모든 움직임 프레임이나 실제 모바일 기기를 확인한 것은 아니다
기하 확인(Chrome) 기존 예제 30개 첫 장면을 실제 Chrome에서 폭 320·390·430·1440(CSS 픽셀), 라이트·다크로 확인했다. 문서 가로 넘침, SVG가 부모 캔버스 밖으로 나가는지, 탭의 가로 경계를 쟀고 실패가 없었다. 폭 390 라이트에서는 움직임 줄이기를 켜고 모든 장면 탭을 눌러 마지막 상태의 같은 경계를 확인했다. 공통 부품을 고치면 영향받은 경로를 다시 본다 모든 폭에서 모든 장면을 확인한 것은 아니다. 기하 확인은 글자의 읽힘이나 재생 중 모든 프레임, 임의 입력, 실제 기기의 검수가 아니다. 세로로 긴 그림의 탭은 그림 아래에 있고 페이지 스크롤로 닿는다
첫 장면 화면 검수(Chrome) 현재 소스의 모든 예제 첫 장면을 폭 430의 라이트·다크로 캡처하고 눈으로 대조했다. 카드 면, 글자 겹침, 범례, 노란 계열의 테두리, 도형과 탭 경계를 봤다. 통합 예제는 세 참여자와 추적 끝이 모두 보인다. 복잡한 구조·시퀀스는 전체 그림을 맞추면 글자가 작아져 전체화면 확대로 읽는다 화면의 모든 글자가 모바일 개요 크기에서 읽힌다는 판정은 아니다. 모든 폭·장면·재생 중 프레임·실제 기기와 Safari를 보지는 않았다
수정 뒤 화면 재검수(Chrome) 위 결함을 고친 현재 소스에서 영향받은 화면을 눈으로 다시 봤다: 폭 390 라이트의 면적, 지표, 상태, 워터폴, 산점도, 흐름, 메모리, 스택, 막대 예제와 폭 390 다크의 통합 예제 전체 페이지. 눈금이 고르게 솎이고, API 1·2·3 열이 선언한 순서이며, 워터폴 바닥 띠가 차트 바탕과 같고, 자기 전이 고리가 도형에서 떨어져 있고, 산점도 점 라벨이 자기 점에 가까운 쪽에 놓이는 것을 이 화면에서 봤다 받아들인 남은 한계: 스택의 고정 연결점에서 생기는 선 교차, 점이 몰린 산점도에서 점 라벨의 소유가 늘 분명하다는 보장 없음, 복잡한 개요 그림의 작은 글자는 전체화면 확대에 의존. 위 화면 밖의 폭, 테마, 장면, 재생 중 모든 프레임, 실제 휴대폰의 Safari는 확인하지 않았다(검증 요구사항, 미완료)
좁은 배치 전환(Chrome) 검사 7번 경고가 늘면 좁은 배치를 싣지 않는 기준이 실제 HTML에서 맞게 동작했다: 흐름 예제는 좁은 배치 template이 없고, 지표, 도넛, 통합 예제는 좁은 배치를 유지했다. 위 기하 확인의 매트릭스가 이 상태로 통과했다 좁은 배치로 바뀌는 순간의 동작(초점, 시계 유지)과, 이 네 예제 밖에서 좁은 배치가 읽히는지는 확인하지 않았다(검증 요구사항, 미완료)
차트 바탕(Chrome) 차트 묶음의 color가 싣는 바탕 면(--chart-ground)을 실제 Chrome의 계산된 색으로 확인했다. 켜진 차트 카드는 움직이는 SVG에서 켜짐 꺼짐 양쪽, 재생을 이어 둔 채(다시 불러오지 않고) 다크에서 라이트로, 라이트에서 다크로 바꾸는 전환 양방향을 여러 주기에 걸쳐 확인했고, 정지 SVG는 두 테마, HTML 재생기는 켜짐 꺼짐과 두 전환 방향을 확인했다. 어느 출력에서나 카드 면과 글자 바탕 면 모두 계산된 RGB가 같았다. 막대 차트의 다크 바탕 면과 기준선 받침 선은 캔버스 색과 같았고, 선 차트 기대값 계열의 속 빈 점은 라이트의 채움이 캔버스와 같았다 위에서 본 예제, 출력, 상태, 테마 전환뿐이다. 모든 소비자와 모든 상태를 확인했거나 픽셀이 같다는 뜻이 아니고, 다른 종류의 받침 선과 속 빈 점은 보지 않았다(검증 요구사항, 미완료)
카드 본문 합성과 도구 자리(Chrome) 본문·값·막대가 함께 든 카드에서 값 0 → 1과 막대 갱신, 같은 축 범위, 라이트·다크의 본문과 차트 바탕 RGB 일치를 확인했다. 공통 도구 막대는 입력 방식과 관계없이 자리를 예약해 첫 카드를 가리지 않는다. 내려받은 HTML 두 번과 재다운로드의 바이트가 같고 복사 원본도 일치했다. 내려받은 파일을 HTTP로 연 뒤 네트워크를 끈 상태에서 탭·움직이는 패킷·다운로드가 동작했다 이 대표 원본 밖의 모든 합성 조합을 확인한 것은 아니다. 파일 주소로 오프라인에서 처음 여는 동작과 실제 터치 기기 검수는 남는다
차트 노랑의 계산된 색(Chrome) 의미 표지와 넓은 데이터 면은 모두 기준색 #f2d024를 사용하며 라이트 테두리는 #d6b600, 다크 테두리는 #f2d024다. 막대·도넛·원·범례·시간 구간이 같은 범주 역할을 소비한다 정본은 design-tokens이고 ThinkFlow에 둘째 팔레트를 두지 않는다. 노랑 그래픽 대비 전체를 접근성 적합으로 주장하지 않는다
목록 쪽(Chrome) thinkflow gallery가 쓴 목록 쪽을 폭 320의 라이트·다크로 봤다. 대표로 API 예제 iframe 하나를 봤다: 부모 페이지에 가로 넘침이 없고, iframe 폭은 좁은 배치 기준(272)이며, 캔버스의 client와 scroll 크기가 같아 가려진 부분이 없고 장면 탭이 그림 전체 아래에 놓였다. iframe 안에서 장면 탭을 바꿨고 목록의 테마 단추로 고른 라이트가 iframe에 전달됐다. npm run catalog가 쓴 카탈로그는 폭 320 다크에서 정지 이미지 미리보기와 링크로만 이루어져 iframe이 없고 가로 넘침이 없었다 대표 하나이고 모든 예제의 iframe, 전체화면 대체 동작, 시스템·다크 전환, 다른 폭은 아니다. 카탈로그와 thinkflow gallery는 다른 출력이라 서로의 근거로 쓰지 않는다
긴 머리와 글 읽기(Chrome, 폭 320) 긴 한국어 머리글과 긴 API 경로·클래스 이름이 든 시험 원본이 줄바꿈되어 그려졌고 장면이 없는 그 원본에는 탭 줄이 없었다. 백틱, 꺾쇠, 따옴표가 든 글을 담은 시험 원본의 전체화면 스크린샷에서 홀수 개의 백틱과 꺾쇠, 따옴표 모양이 글 그대로 보였고 전체화면 닫기가 동작했다. 복잡한 개요 그림은 작아서 전체화면 확대로 읽는다 이 두 원본 밖의 입력, 폭, 글꼴 조각 전체는 아니다
재생기 조작(Chrome) 시계를 확인하는 대표 예제를 폭 390 다크에서 확인했다. 정지 장면은 마지막 모습, 한 번 장면은 재생 뒤 마지막 모습, 반복 장면은 점이 계속 움직인다. 지금 탭을 다시 눌러도 다시 시작하지 않고, 다른 탭에 갔다 오면 다시 시작한다. 움직임 줄이기에서는 마지막 모습이 보이고, 움직임 줄이기를 끄면 장면에 다시 들어갈 때까지 다시 시작하지 않는다. 전체화면에 들어가고 나와도 고른 장면이 같고 점이 계속 움직이며, 확대와 맞춤이 동작한다. 전체화면 캔버스는 tabindex=0이고 밖에서는 없다. 흐름 예제의 반복 장면에서는 문서를 가린 동안 패킷 좌표가 유지되고, 복귀 뒤 같은 장면에서 다음 위치로 이동했다 전체화면 전후의 경과 시간이 정확히 같은지는 재지 않았다. 위에 적지 않은 예제와 폭, 호버, 키보드 조작도 마찬가지다
복사와 다운로드(Chrome) 원본 복사는 원래 글의 바이트와 줄바꿈을 그대로 보존했다. HTML 다운로드는 독립한 HTML을 받았고, 탭을 바꾼 뒤 두 번째로 받은 파일이 처음 받은 파일과 바이트까지 같으며 크기가 늘지 않았다. HTTP로 이미 열어 둔 독립 재생 페이지는 네트워크를 끈 채로(움직임 줄이기는 꺼진 상태) 장면 전환과 다운로드가 계속 동작했고, 반복 장면의 점의 변환 값이 관측 사이에 바뀌어 정적인 탭뿐 아니라 움직임도 오프라인에서 도는 것을 확인했다. 확인 뒤 네트워크를 되돌렸다 내려받은 파일을 오프라인에서 처음 여는 일은 확인하지 못했다. 브라우저가 file:// 주소 이동을 막았고 우회하지 않았다(검증 요구사항, 미완료)
색각 이상 에뮬레이션, 스크린 리더, 실제 사용자 이번 개편 뒤에는 하지 않았다. 실제 기기의 Safari와 Firefox도 보지 않았다 검증 요구사항, 미완료
Things와 역할 비교 공식 기능 페이지를 열어 중립 캔버스, 카드 면, 제목 위계, 파란 선택 조작, 작은 아이콘과 선의 역할을 눈으로 견줬다. 공식 기능 페이지의 2024 solid 기능 아이콘에서 원색 네 개의 출처를 고정했고 UI 선택색은 따로 둔다. 2017 공식 사이트 영상 스틸과 2018 Things 3.7 라이트·다크 공식 화면은 큰 제목, 작은 구획 제목, 본문, 보조 글자, 흰색·회색·다크 면, 파란 선택, 작은 의미 아이콘, 얇은 구분선을 역할끼리 견주는 보조 참고다 현재 네이티브 앱의 픽셀 단위 대조나 네이티브와 같다는 판정은 아니다. 다크는 재구성한 확장이고 글꼴은 다르며 그래프, 흐름, 트래픽 표현은 ThinkFlow의 확장이다

자동 시험은 브라우저 엔진도, 실제 휴대폰이나 기기의 Safari도 시험하지 않는다. 접근성 기준 전체를 충족한다고도 적지 않는다.

알려진 결함과 제한은 이 문서의 승인한 제외와 보류와 차트에 있다. 예제의 트래픽은 설명용 시뮬레이션이고, 수치는 모두 기능을 설명하려고 만든 예시 데이터다. 실제 부하나 실행 추적을 수집하는 기능은 없다.

미해결 질문

  • E1: 명시한 그룹 방향·포함 관계를 유지하면서 큰 중첩 구성도를 좁은 화면에서 읽히게 할 방법. 모바일 배치 기준을 따르며, 원본 의미 변경과 보기 전환을 구분한다.
  • E2: 전용 표현이 없는 범위의 항목 가운데 지원 범위에 넣을 것이 있는지. 넣는다면 어떤 문법·의미 검사·렌더러·실행 사례로 지원할지. 기존 상자·선으로 그릴 수 있다는 이유로 지원으로 승격하지 않는다.

추가한 memory-address, memory-fault, sql-join과 개편한 memory는 위 기존 일괄 검수의 범위에 포함하지 않는다. 격자 외곽 변경의 영향 범위는 이 네 예제와 stack, pointer이며, Safari와 실제 모바일 기기 검수는 미완료다.