DMF_Crawler/docs/research/11-tdd-red-and-design-audit-theory.md
Yun Chan 56a6e2da93 chore: 저장소 구조 정리 및 문서화, 첫 커밋
- src/dist 산출물 분리 원칙 정리(.gitignore, .gitattributes)
- 루트 및 주요 폴더(config/scripts/prompts/tests/src, 런타임 폴더 5종)에
  안내용 README.md 추가
- CHANGELOG.md, LICENSE, docs/ops/05-release-and-versioning.md 추가
- docs/README.md 문서 지도 갱신
2026-09-04 09:25:44 +09:00

22 KiB
Raw Blame History

TDD · E2E RED · 디자인 감사 이론 조사 정본

이 문서는 DMF Crawler 의 TDD/RED/디자인 감사 이론 SSOT 다.
프로젝트 적용 규칙은 docs/design/07-tdd-red-system.md 가 정본이고, 이 문서는 그 근거 아카이브다.

작성/검색 기준: 2026-09-03 KST
근거 채택 기준: (A) 2026년 9월 기준 최근 6개월 내 자료, 또는 (B) Kent Beck·W3C·NN/g·Playwright·Testing Library·Google Testing Blog·GDS 같은 권위 자료, 또는 (C) 유명 책·논문·체계적 문헌고찰·arXiv/IEEE/ACM/ScienceDirect 계열 연구
원문 아카이브: docs/research/_raw/tdd-red/


0. 결론 12개

  1. TDD 의 핵심은 테스트가 아니라 설계 루프다. Kent Beck 의 두 규칙은 “자동화 테스트가 실패할 때만 새 코드를 쓴다”와 “중복을 제거한다”다. Red-Green-Refactor 는 이 두 규칙을 실행하는 리듬이다.
  2. RED 는 반드시 실제로 실패해야 한다. 즉시 통과하는 테스트는 새 행동을 규정하지 못했거나, 기존 테스트의 중복이거나, 주장이 약하다. 그런 테스트는 RED 로 인정하지 않는다.
  3. Green 은 최소 구현이다. 미래 추상화·범용화·과잉 구조는 Refactor 단계 전까지 금지한다.
  4. Refactor 는 Green 상태에서만 한다. 실패 중인 테스트를 둔 채 구조 변경을 하면 실패 원인이 행동 변경인지 리팩터링 사고인지 분리할 수 없다.
  5. 테스트는 구현 세부가 아니라 관찰 가능한 행동을 검증해야 한다. Testing Library 의 “The more your tests resemble the way your software is used, the more confidence they can give you.” 원칙과 Playwright 의 사용자 관찰 출력 중심 원칙이 같은 결론을 낸다.
  6. E2E 는 TDD 의 전부가 아니다. 빠른 단위/통합 테스트가 대부분을 맡고, E2E 는 핵심 사용자 여정·회귀 위험·시각/접근성 감사에 집중한다. 느린 E2E 를 무한 증식시키면 TDD 가 아니라 병목이 된다.
  7. AI 에이전트에게 “TDD 해”라고만 말하면 충분하지 않다. 2026 TDAD 논문은 단순 TDD prompting 이 회귀를 늘릴 수 있고, 코드-테스트 영향 분석을 함께 줬을 때 회귀를 크게 줄였다고 보고한다. 에이전트는 “어떤 테스트가 무엇을 보호하는지” 알아야 한다.
  8. AI 가 만든 테스트는 자동으로 가치 있지 않다. 2026 “Rethinking the Value of Agent-Generated Tests” 계열 연구는 에이전트 작성 테스트가 종종 관찰/디버깅 피드백에 머물고, 강한 검증으로 작동하지 않을 수 있음을 경고한다.
  9. 테스트 스위트는 확장만 하지 않는다. 의미 없는 RED, 같은 결함을 여러 번 검사하는 중복 RED, 구현에 묶인 brittle RED 는 통폐합·삭제한다. 단, 삭제는 대체 근거와 사용자 위험 분석이 있어야 한다.
  10. 디자인 감사도 RED 로 만든다. “예쁘다/별로다” 같은 감상이 아니라, 대비·정렬·레이아웃 overflow·폼 라벨·키보드 포커스·입력 시나리오·버튼 클릭·엑셀 시트 구조·컨테이너 경계 같은 실패 조건을 자동화 가능한 주장으로 바꾼다.
  11. 자동 접근성 검사는 필요하지만 충분하지 않다. WCAG/W3C/axe 는 contrast·label·ARIA 오류를 잘 잡지만, 레이블 의미·초점 순서·문구 이해성·시각적 균형·사용자 흐름은 수동/시나리오 테스트와 결합해야 한다.
  12. 이 프로젝트의 디자인 감사 대상은 웹만이 아니다. DMF Crawler 는 tkinter GUI 와 xlsx 리포트가 핵심 UI 이므로, Playwright/axe 원칙을 그대로 베끼지 말고 tkinter 위젯 트리 검사와 xlsx zip/XML 검사로 변환해야 한다.

1. 원문 아카이브 인덱스

파일 출처 채택 사유 검증 상태
google-testing-blog-way-of-tdd-2026.raw.html Google Testing Blog, “The Way of TDD”, 2026-03 최근 6개월 경계 내 최신 실무 권위 블로그 원문 저장 성공
gds-way-test-driven-development.raw.html UK Government Digital Service, TDD standard 정부 디지털 서비스 표준, Red-Green-Refactor 설명 원문 저장 성공
informit-kent-beck-tdd-by-example.raw.html Kent Beck, Test Driven Development: By Example 출판사 페이지 TDD 고전/권위 책 원문 저장 성공
testing-library-guiding-principles.raw.html Testing Library Guiding Principles 사용자 행동과 닮은 테스트 원칙의 대표 출처 원문 저장 성공
playwright-best-practices.raw.html Playwright Best Practices E2E 테스트 공식 권위 문서 원문 저장 성공
wcag22.raw.html W3C WCAG 2.2 Recommendation 접근성 공식 표준 원문 저장 성공
vercel-web-interface-guidelines-command.raw.md Vercel Web Interface Guidelines AI agent UI 코드 감사 체크리스트 원문 저장 성공
nng-good-visual-design.raw.html NN/g, Good Visual Design, Explained 시각 디자인 권위 자료 원문 저장 성공
nng-web-form-design.raw.html NN/g, Website Forms Usability 폼 UX 권위 자료 원문 저장 성공
nng-form-placeholders.raw.html NN/g, Placeholders in Form Fields Are Harmful placeholder-only label 금지 근거 원문 저장 성공
nng-form-white-space.raw.html NN/g, Group Form Elements Effectively Using White Space 라벨/입력 proximity·white space 근거 원문 저장 성공
arxiv-2312-04687-llm4tdd.raw.html LLM4TDD LLM + TDD 초기 연구 원문 저장 성공
arxiv-2505-09027-tests-as-prompt.raw.html Tests as Prompt / WebApp1K 테스트를 prompt/spec 으로 쓰는 최신 연구 원문 저장 성공
arxiv-2506-09289-utboost.raw.html UTBoost 기존 테스트 부족·에이전트 패치 오판 경고 원문 저장 성공
arxiv-2602-07900-agent-generated-tests.raw.html Rethinking Agent-Generated Tests 에이전트 생성 테스트의 한계 경고 원문 저장 성공
arxiv-2603-08806-test-driven-ai-agent-definition.raw.html Test-Driven AI Agent Definition prompt/agent behavior 자체를 TDD 로 검증 원문 저장 성공
arxiv-2603-17973-tdad.raw.html TDAD: Test-Driven Agentic Development AI coding agent 회귀 감소·impact analysis 근거 원문 저장 성공
ieee-what-do-we-know-tdd.raw.html IEEE Xplore, “What Do We Know about TDD?” 체계적 문헌고찰로 검색 확인 원문 0 bytes — 원문 인용 금지, DOI/검색 근거만 사용

원문 저장 성공은 “페이지가 로컬에 저장됐다”는 뜻이지, 모든 주장을 자동 승인한다는 뜻이 아니다. 프로젝트 규칙으로 승격하려면 docs/design/07-tdd-red-system.md 의 사용자 위험/검증 가능성 필터를 통과해야 한다.


2. TDD 정통 이론

2.1 Kent Beck: 두 규칙과 Red-Green-Refactor

Kent Beck 의 Test Driven Development: By Example 는 이 프로젝트에서 TDD 의 최고 권위 근거로 취급한다. 출판사/요약 기준으로 핵심은 다음이다.

  • 새 코드는 자동화 테스트가 실패할 때만 작성한다.
  • 중복을 제거한다.
  • Red: 아주 작은 실패 테스트를 작성한다.
  • Green: 빨리 통과시킨다. 일시적으로 못생긴 코드도 허용된다.
  • Refactor: 테스트가 계속 통과하는 상태에서 중복·이름·구조를 정리한다.

DMF Crawler 에서의 해석:

원칙 이 프로젝트 적용
failing automated test first src/ 변경 전 tests/ 에 실패하는 주장 추가. 문서만 바꾸는 경우도 문서 링크/정책 테스트 또는 체크리스트를 추가한다.
do the simplest thing API/DB/리포트가 통과할 최소 구현 우선. 미래 웹 UI·브라우저 수집 추상화는 테스트 없이 만들지 않는다.
eliminate duplication 테스트 중복도 제거 대상. 같은 실패를 여러 파일에서 반복하면 하나의 강한 시나리오로 합친다.
refactor only when green compileall, import, 관련 pytest 가 실패하는 동안 구조 변경 금지. 먼저 RED 를 Green 으로 만든다.

2.2 GDS/Google: TDD 는 설계 품질과 피드백 루프

GDS Way 의 TDD 표준은 Red-Green-Refactor 를 “작은 실패 테스트 → 전체 테스트 통과 → 설계 반복” 루프로 설명한다. Google Testing Blog 의 2026 글도 TDD 를 품질·재사용·자신감의 도구로 설명하되, 은탄환은 아니라고 본다.

프로젝트 적용:

  • TDD 는 “테스트 파일을 많이 만든다”가 아니라 “작은 행동 단위로 설계를 밀어낸다”다.
  • 실패가 너무 크면 원인을 알 수 없다. RED 는 한 번에 하나의 행동/위험만 드러내야 한다.
  • 리포트/GUI 디자인처럼 주관이 섞이는 영역도 측정 가능한 실패 조건으로 쪼갠다.

2.3 체계적 문헌고찰: 품질 이점은 있으나 생산성은 혼합

IEEE/ScienceDirect 계열 체계적 문헌고찰들은 대체로 TDD 가 외부 품질·내부 품질에 긍정 효과를 줄 수 있지만, 생산성 효과는 맥락별로 혼합이라고 요약된다. 따라서 이 프로젝트는 “TDD 를 신처럼 여긴다”는 사용자 방침을 따르되, 무의미한 테스트 팽창은 TDD 가 아니라 비용으로 본다.

프로젝트 적용:

  • 테스트 작성 자체를 산출물로 착각하지 않는다.
  • 테스트가 결함을 막지 못하면 약한 테스트다.
  • 너무 느려 자주 못 돌리는 테스트는 TDD inner loop 에 맞지 않으므로 nightly/E2E 계층으로 내린다.

3. AI coding agent 와 TDD

3.1 LLM4TDD: 테스트가 prompt 와 검증 장치가 될 수 있다

LLM4TDD 는 LLM 을 테스트 주도 방식으로 반복 유도하는 연구다. 핵심 함의는 “자연어 요구만으로 구현을 맡기지 말고, 테스트가 요구를 실행 가능한 형태로 제한해야 한다”다.

DMF Crawler 적용:

  • 에이전트에게 “DMF API 구현해”라고 시키지 않는다.
  • 먼저 tests/test_source_mfds.py 에 fixture 기반 실패를 만든다.
  • 그 테스트 이름과 실패 로그를 에이전트 지시의 중심에 둔다.

3.2 Tests as Prompt / WebApp1K: 테스트 자체가 스펙이다

Tests as Prompt 는 테스트 케이스가 prompt 이자 verification 역할을 하는 벤치마크를 제안한다. 중요한 관찰은 TDD 성공이 일반 코딩 능력보다 instruction followingin-context learning 에 크게 좌우된다는 점이다.

DMF Crawler 적용:

  • AGENTS.md 는 “어떤 테스트를 왜 돌리는지”를 명확히 적는다.
  • 테스트 이름은 요구사항 번호와 위험을 포함한다. 예: test_r2_2_rejects_full_withdrawal_on_empty_success_body.
  • 장문 프롬프트에 모든 문서를 집어넣기보다, 해당 테스트와 관련 SSOT 문서만 읽게 한다.

3.3 TDAD: agent 에게 영향 테스트 지도를 줘야 한다

2026 TDAD 논문은 AI coding agent 가 기존 테스트를 깨뜨리는 회귀를 자주 만든다고 지적하고, 코드-테스트 의존 지도/impact analysis 를 제공하면 회귀가 크게 감소한다고 보고한다. 단순히 “TDD 로 해”라고 prompting 하는 것만으로는 충분하지 않거나 해로울 수 있다는 점이 핵심이다.

DMF Crawler 적용:

  • 파일을 바꾸기 전 “영향 테스트 목록”을 적는다.
  • 예시:
    • normalize.pytests/test_normalize.py, tests/test_diff.py, tests/test_integrity.py, report data tests
    • storage/repo.py → migration tests, pipeline smoke, report data tests
    • report/* → xlsx zip/XML tests, visual/layout audit tests
    • gui/* → tkinter structure/a11y tests, text input/button scenario tests
  • 에이전트는 관련 테스트만 먼저 돌린 뒤 전체 smoke 로 확장한다.

3.4 Agent-generated tests 경고: 얕은 테스트는 통과 장식이 된다

2026 “Rethinking the Value of Agent-Generated Tests” 는 에이전트가 작성한 테스트가 최종 문제 해결률을 자동으로 높인다고 볼 수 없으며, 디버깅 관찰 수단에 머무는 경우가 많다고 경고한다. UTBoost 도 기존 테스트가 부족하면 잘못된 패치가 통과한다고 보여준다.

DMF Crawler 적용:

  • 에이전트가 만든 테스트는 반드시 실패 확인을 거친다.
  • 실패 이유가 “모듈 없음/오타”뿐이면 행동 RED 로 약하다. 실제 요구 위반까지 도달하도록 보강한다.
  • “현재 구현을 그대로 assert” 하는 회고성 테스트는 거부한다.
  • 과거 버그가 있으면 그 버그를 재현하는 fixture 를 먼저 만든다.

3.5 Test-Driven AI Agent Definition: 지침서도 테스트 대상이다

Test-Driven AI Agent Definition 은 agent prompt/behavior 를 실행 가능한 테스트로 검증하는 방법론을 제안한다. visible/hidden test split, mutation testing, spec evolution 이 핵심이다.

DMF Crawler 적용:

  • AGENTS.md 자체가 정책 SSOT 를 참조한다.
  • 에이전트 지침 변경 시 다음을 검증한다.
    • “테스트 없이 코드 변경 금지” 문구가 있는가.
    • “RED 삭제/완화 금지” 문구가 있는가.
    • “디자인 감사 RED”가 구체 항목을 포함하는가.
    • “실패를 숨기지 말 것” 규칙이 있는가.

4. E2E/사용자 행동 테스트 이론

4.1 Testing Library: 사용자와 닮은 테스트

Testing Library 의 대표 문장:

The more your tests resemble the way your software is used, the more confidence they can give you.

실무 규칙:

  • CSS 클래스나 내부 함수명보다 사용자에게 보이는 텍스트/역할/라벨을 우선한다.
  • 폼은 label 로 찾는다.
  • 버튼은 role/name 으로 찾는다.
  • 테스트 ID 는 마지막 수단이다.

DMF Crawler 변환:

  • 웹 프론트가 아니어도 “사용자와 닮은 테스트” 원칙은 그대로 쓴다.
  • CLI: 실제 python -m dmf_crawler doctor 출력과 종료 코드를 검사한다.
  • GUI: 실제 tkinter 위젯에 텍스트를 입력하고 버튼 command 를 호출한다.
  • xlsx: 실제 파일을 zip 으로 열고 workbook/sheet XML 을 검사한다.

4.2 Playwright: E2E 는 관찰 가능한 출력과 격리

Playwright 공식 best practices 의 핵심은 다음으로 요약된다.

  • 사용자가 보는/상호작용하는 출력 중심으로 테스트한다.
  • 테스트는 독립적이어야 한다.
  • 안정적인 locator 를 사용한다.
  • E2E 는 중요한 흐름에 집중한다.
  • 시각 회귀는 OS/browser 환경을 고정해야 한다.

DMF Crawler 적용:

  • 브라우저 수집 경로가 들어오면 “엑셀 다운로드 버튼 클릭 → 파일 생성 → .crdownload 사라짐 → xlsx 구조 검증”을 E2E 로 둔다.
  • 공공 사이트 실접속은 기본 테스트에서 제외하고 fixture/mock 서버를 사용한다.
  • 실제 nedrug 접속은 사용자가 승인한 수동 smoke 로만 둔다.

5. 디자인 감사 이론

5.1 W3C/WCAG 2.2: 접근성 최소선

DMF Crawler 디자인 RED 는 최소 WCAG 2.2 AA 를 기준으로 삼는다.

영역 기준 자동화 가능한 RED
텍스트 대비 1.4.3, 일반 4.5:1 / 큰 글자 3:1 팔레트 HEX 대비 계산 테스트
비텍스트 대비 1.4.11, UI 경계/상태 3:1 input border/focus/아이콘 상태색 대비 계산
색 단독 전달 금지 1.4.1 상태가 색+라벨+기호로 표현되는지 검사
키보드 접근 2.1.1 모든 버튼/입력의 tab/focus 가능성 검사
초점 표시 2.4.7, 2.4.11 focus style 또는 tkinter highlight/focus 이동 검사
라벨/지시 3.3.2 입력마다 visible label/help/error 연결 검사
오류 식별 3.3.1/3.3.3 빈 입력 제출 시 오류 문구+복구 버튼 검사

5.2 NN/g: 폼·정렬·시각 계층

NN/g 자료는 다음 UX 결정을 뒷받침한다.

  • 폼은 가능하면 단일 컬럼.
  • 라벨은 입력 가까이에 둔다.
  • placeholder 를 label 대체로 쓰지 않는다.
  • 관련 필드는 white space 와 섹션 제목으로 묶는다.
  • 시각 디자인은 grid alignment, typographic hierarchy, intentional color, consistency 가 핵심이다.

DMF Crawler 적용:

  • 온보딩 GUI 는 “중앙 정렬된 큰 덩어리”가 아니라 좌측 라벨/상태/행동 버튼의 스캔 가능한 구조를 기본으로 한다.
  • 입력창 내부 padding, 버튼 높이, 아이콘과 텍스트 baseline 정렬은 테스트 대상이다.
  • 오류 문구는 [무엇]/[왜]/[어떻게]/[다음] 4요소를 강제한다.

5.3 Vercel Web Interface Guidelines: agent 가 잡아야 할 UI 결함 목록

Vercel 의 command.md 는 AI agent 가 UI 코드를 감사할 때 잡아야 할 항목을 구체적으로 제시한다. 이 프로젝트는 웹 UI 가 아니더라도 항목을 일반화해 쓴다.

  • 접근성: icon-only button label, form label, semantic control, alt/decorative distinction, live region.
  • focus: outline 제거 금지, focus visible, sticky/overlay 가 focus 를 가리지 않음.
  • forms: autocomplete/name/type, paste 차단 금지, clickable label, inline errors, first error focus.
  • typography: ... 대신 , tabular numbers, heading wrapping.
  • content handling: long text overflow, flex child min-width, empty state.
  • layout: unwanted scrollbar, content overflow, safe area.
  • interaction: hover/focus/active feedback, destructive action confirmation/undo.
  • anti-patterns: transition: all, outline: none, div click handler, unlabeled inputs/icons, hardcoded date/number format.

DMF Crawler 변환:

Web guideline tkinter/xlsx 변환
form controls need label Entry/Combobox 옆/위에 명시 텍스트 존재
icon-only button aria-label 아이콘 버튼은 텍스트 라벨 또는 tooltip/help text 존재
focus visible 버튼/입력의 focus highlight 또는 순서 검사
long content handling 한글 긴 성분명/업체명 fixture 로 clipping/overflow 검사
tabular numbers xlsx 수치 열의 number format, CLI 표 정렬 검사
empty states 변경 0건/워치리스트 0건/AI 없음 상태 시 깨진 표 금지
URL reflects state GUI 복구 모드는 --focus <check_key> 로 상태 직접 진입 가능

6. 이 프로젝트의 “빡센 디자인 RED” 범위

디자인 RED 는 다음을 반드시 잡는다.

6.1 정렬/레이아웃

  • 의미 없는 전체 중앙 정렬 금지. 제목·KPI 처럼 의도 있는 중앙 정렬만 허용.
  • 폼 라벨과 입력은 grid 에 맞고 서로 가까워야 한다.
  • 버튼 그룹은 같은 높이/간격/정렬선을 가져야 한다.
  • 아이콘과 텍스트는 vertical center/baseline 이 맞아야 한다.
  • 컨테이너보다 큰 요소, 잘리는 텍스트, 가로 스크롤 발생을 실패로 본다.
  • flex/grid 류 레이아웃에서는 긴 텍스트가 줄바꿈/말줄임/폭 축소를 할 수 있어야 한다. 웹이면 min-width: 0 류를 검사한다.

6.2 타이포그래피

  • 최소 본문 크기: GUI 10pt, xlsx 본문 10pt, 각주 9pt 이하 남용 금지.
  • 정보 계층: 제목/섹션/본문/도움말/오류가 크기·굵기·색으로 구분돼야 한다.
  • 숫자 열은 정렬과 number format 이 안정적이어야 한다.
  • 한국어 긴 문자열이 폭 255 같은 비정상 Excel 열폭을 만들면 실패.

6.3 폼/입력

  • placeholder-only label 금지.
  • 실제 입력 테스트 필수: API 키 붙여넣기, 잘못된 키, 빈 값, 긴 값, 한글/영문 혼합.
  • paste 차단 금지.
  • 오류 시 첫 오류로 포커스 이동 또는 명확한 안내.
  • input 내부 padding/버튼과의 간격이 최소값 이상이어야 한다.

6.4 접근성/상태 표현

  • 색만으로 신규/변경/취하/경고를 표현하면 실패.
  • 상태는 라벨+기호+색+서식(취하는 취소선 등) 4중 이상 표현.
  • 포커스 가능한 요소는 키보드로 접근 가능해야 한다.
  • 모달은 닫기/나중에/복구 액션이 명확해야 한다.

6.5 xlsx 리포트 디자인

  • 시트 순서: 00_대시보드, 01_오늘변경분, 02_전체현황, 03_성분별, 04_업체별, 05_워치리스트(조건부), 06_추이, 99_메타.
  • 대시보드 첫 화면 무스크롤 목표: 1366×768 노트북에서 90% zoom 기준.
  • 틀 고정/자동필터/조건부서식/내부 링크/출처 문구가 없으면 실패.
  • 파일은 zip/xlsx 구조 검증을 통과해야 한다.
  • openpyxl 에 의존하지 않는다. 검증도 stdlib zipfile/XML 로 한다.

7. RED 확장·통폐합·삭제 원칙

  1. 사용자 유즈케이스 없는 RED 금지. “있으면 좋음”만으로 테스트를 추가하지 않는다.
  2. 같은 위험을 검사하는 RED 는 통합한다. 중복은 실행 시간을 늘리고 실패 원인을 흐린다.
  3. brittle selector/좌표 테스트는 금지한다. 사용자 의미(role/label/text), xlsx 구조, 위젯 역할 중심으로 검사한다.
  4. 테스트 삭제는 허용된다. 단, 다음 중 하나가 문서화돼야 한다.
    • 더 강한 통합/시나리오 테스트가 같은 위험을 덮는다.
    • 요구사항이 삭제됐다.
    • 테스트가 구현 세부에 묶여 리팩터링을 방해했다.
    • flaky 원인이 환경이며 안정화 비용이 가치보다 크다.
  5. 테스트 완화는 삭제보다 위험하다. 임계값을 낮추거나 assert 를 약하게 바꾸려면 실패 스크린샷/로그와 사용자 영향 분석이 필요하다.

8. 프로젝트 적용 문서

이 연구 정본의 적용 규칙은 다음 문서가 담당한다.

  • docs/design/07-tdd-red-system.md — 프로젝트 TDD/RED 운영 체계 SSOT
  • AGENTS.md — AI coding agent 작업 규칙
  • CLAUDE.md — Claude Code 진입용 얇은 포인터

9. 미해결·추가 검증 항목

  • IEEE/ScienceDirect 논문 원문은 접근 제한/빈 응답이 있어 직접 인용을 하지 않았다. 필요 시 DOI 기반 서지 정보만 별도 표로 확정한다.
  • google-testing-blog-way-of-tdd-2026.raw.html 은 원문 저장은 됐으나 HTML 정제 후 핵심 문구를 별도 발췌하는 작업이 남았다.
  • GUI screenshot 기반 pixel diff 는 현재 런타임 의존성 3개 원칙과 충돌한다. dev 의존성으로 둘지, tkinter geometry 검사로만 갈지 결정해야 한다.
  • 브라우저 수집 경로가 구현되면 Playwright/axe 를 쓸지, Chrome DevTools Protocol 직접 검사로 충분한지 결정해야 한다.