You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
React, Worker, scripts TypeScript 코드의 coverage gate를 statements, branches, functions, lines 각각 95% 이상으로 올리고, npm.cmd run test:coverage:ts가 95% threshold를 실제로 통과하도록 만든다.
이 child issue는 TypeScript coverage hard gate만 소유한다. Python coverage는 #329, QA Wiki traceability는 #330, 배포 확인과 UI/UX 기능 변경은 이 범위가 아니다.
Core Classification
Core: TSK-009-00
Parent Issue: #323
Rationale: UI/UX expectation tracking and 95% coverage gate parent 아래의 TypeScript coverage hard gate 실행 단위다.
Misroute blocked: Python coverage(#329), QA Wiki traceability(#330), UI/UX feature work, deployment debugging은 이 child issue 범위가 아니다.
public tests and stable boundary tests
-> Vitest coverage provider
-> 95% threshold gate
-> CI/local failure on regression
Architecture Boundary Gate
Durability: durable
Architecture profile: Vitest config, public tests, script command boundary.
Responsibility map: coverage config는 threshold policy를 소유하고, 테스트 파일은 public behavior와 stable boundary를 검증한다.
Dependency direction: production code는 test helper에 의존하지 않는다. 테스트만 production public exports와 DOM/API/Worker/script boundary를 호출한다.
External dependency boundary: external network and browser APIs are mocked or isolated through existing test seams.
Validation seam: unit, integration, regression, e2e, and coverage tests use mocked DOM/API/Worker/script boundaries. Coverage is proven without live external services as the only proof.
Scope map: coverage 미달 보강은 TypeScript tests/config/scripts 범위에 한정한다.
Architecture risk: coverage 수치만 맞추기 위한 private implementation monkey patch나 무의미한 import-only 테스트를 금지한다.
Coverage fill: base-data-mappers, festival-series, simple mapper/component branch는 리팩터링 없이 테스트 추가로 처리한다.
Final hard gate: Vitest coverage threshold를 statements/branches/functions/lines 95로 설정하고 npm.cmd run test:coverage:ts가 실제 threshold 기준으로 통과하게 고정한다.
Coverage Slice Checklist
src/hooks coverage slice: app navigation, review/comment action, feedback/bootstrap effect, route query branch를 public hook/helper 기준으로 테스트하고 coverage summary를 기록한다.
src/components/naver-map coverage slice: marker sync, selection sync, viewport sync, overlay fallback을 SDK local mock boundary로 테스트하고 coverage summary를 기록한다.
src/api coverage slice: API core cache/error/body parsing, reviews client 실패/성공 branch, bootstrap/tourism edge response를 테스트하고 coverage summary를 기록한다.
Worker service coverage slice: auth/session/social-user, notification/review handlers, festival/tourism read-service/repository, route handler branch를 Request/Response boundary로 테스트하고 coverage summary를 기록한다.
Final hard gate slice: Vitest coverage threshold를 statements/branches/functions/lines 95로 설정하고 npm.cmd run test:coverage:ts가 실제 threshold 기준으로 통과하게 고정한다.
I am on the correct branch: typescript-coverage-95.
I have read the relevant repository instructions.
I know the parent issue and sub-issue.
I know what must not change.
I know the simplest acceptable implementation path.
I know which files or boundaries I must not touch.
I know what evidence is required before completion.
I will stop if the task crosses an out-of-scope boundary.
Canonical Skill / Policy Source
llm-code-generation-protocol
tdd
Repository AGENTS.md
Agent governance parent/child/checklist policy
Verification Contract
required commands: npm.cmd run check:numeric-literals; npm.cmd run lint; npm.cmd run typecheck; npm.cmd run test:unit; npm.cmd run test:integration; npm.cmd run test:regression; npm.cmd run test:e2e; npm.cmd run test:coverage:ts; npm.cmd run build; git diff --check; UTF-8 integrity check.
TSK-009-05 TypeScript coverage 95
Scope-ID: TSK-009-05
Issue: #328
Parent Issue: #323
Child Issue: #328
Branch: typescript-coverage-95
Status: in-progress
PR URL: TBD-TSK-009-05
Commit SHA: TBD-TSK-009-05
merge commit: TBD-TSK-009-05
CI evidence: TBD-TSK-009-05
Scope
React, Worker, scripts TypeScript 코드의 coverage gate를
statements,branches,functions,lines각각 95% 이상으로 올리고,npm.cmd run test:coverage:ts가 95% threshold를 실제로 통과하도록 만든다.이 child issue는 TypeScript coverage hard gate만 소유한다. Python coverage는 #329, QA Wiki traceability는 #330, 배포 확인과 UI/UX 기능 변경은 이 범위가 아니다.
Core Classification
Core: TSK-009-00
Parent Issue: #323
Rationale: UI/UX expectation tracking and 95% coverage gate parent 아래의 TypeScript coverage hard gate 실행 단위다.
Misroute blocked: Python coverage(#329), QA Wiki traceability(#330), UI/UX feature work, deployment debugging은 이 child issue 범위가 아니다.
문제 정의
test:coverage:ts는 실행 통과 상태지만 95% 목표에는 미달결정 사항
typescript-coverage-95Out Of Scope
Public Behavior And Interface / Data Flow Impact
Public behavior:
npm.cmd run test:coverage:ts는 TypeScript coverage 네 지표가 모두 95% 이상일 때만 성공해야 한다.Interface: Vitest coverage 설정과 test suite만 변경한다. production API/public response contract는 변경하지 않는다.
Data flow: Vitest coverage provider가
src,scripts,deploy/api-worker-shellproduction TypeScript를 측정하고 coverage summary를 출력한다.Failure mode: 새 production TypeScript 코드가 coverage를 떨어뜨리면 coverage command가 실패해야 한다. coverage 달성을 위해 behavior 변경, API 변경, exclude 확대가 필요하면 중단한다.
Validation target: Statements >= 95%, Branches >= 95%, Functions >= 95%, Lines >= 95%.
Target Design
Architecture Boundary Gate
Durability: durable
Architecture profile: Vitest config, public tests, script command boundary.
Responsibility map: coverage config는 threshold policy를 소유하고, 테스트 파일은 public behavior와 stable boundary를 검증한다.
Dependency direction: production code는 test helper에 의존하지 않는다. 테스트만 production public exports와 DOM/API/Worker/script boundary를 호출한다.
External dependency boundary: external network and browser APIs are mocked or isolated through existing test seams.
Validation seam: unit, integration, regression, e2e, and coverage tests use mocked DOM/API/Worker/script boundaries. Coverage is proven without live external services as the only proof.
Scope map: coverage 미달 보강은 TypeScript tests/config/scripts 범위에 한정한다.
Architecture risk: coverage 수치만 맞추기 위한 private implementation monkey patch나 무의미한 import-only 테스트를 금지한다.
Single-file exception: none expected.
Issue Structure
Parent issue:
Sub-issue:
현재 coverage snapshot
npm.cmd run test:coverage:ts95.45%(5416/5674)85.63%(3332/3891)96.41%(1588/1647)95.60%(5005/5235)116 passed607 passed9571ef5 test: raise TypeScript branch coverageRefactor-First Coverage Checklist
reviews.tsreview read flow의 반복 조립을 domain-local read context helper로 추출한다.useNaverFestivalMarkers의 marker lifecycle과 selection style update를 local planner/controller seam으로 분리한다.useAppReviewCrudActions의 API 이후 collection/cache/my-page 갱신을 pure helper로 분리한다.festival-domainread/import policy의 source 없음, empty items, stale cleanup, date/window branch를 service boundary로 고정한다.numeric-literal-audit와 event normalize script의 IO와 pure classification/compare logic을 분리한다.base-data-mappers,festival-series, simple mapper/component branch는 리팩터링 없이 테스트 추가로 처리한다.95로 설정하고npm.cmd run test:coverage:ts가 실제 threshold 기준으로 통과하게 고정한다.Coverage Slice Checklist
src/hookscoverage slice: app navigation, review/comment action, feedback/bootstrap effect, route query branch를 public hook/helper 기준으로 테스트하고 coverage summary를 기록한다.src/components/naver-mapcoverage slice: marker sync, selection sync, viewport sync, overlay fallback을 SDK local mock boundary로 테스트하고 coverage summary를 기록한다.src/apicoverage slice: API core cache/error/body parsing, reviews client 실패/성공 branch, bootstrap/tourism edge response를 테스트하고 coverage summary를 기록한다.Worker servicecoverage slice: auth/session/social-user, notification/review handlers, festival/tourism read-service/repository, route handler branch를 Request/Response boundary로 테스트하고 coverage summary를 기록한다.Final hard gateslice: Vitest coverage threshold를 statements/branches/functions/lines95로 설정하고npm.cmd run test:coverage:ts가 실제 threshold 기준으로 통과하게 고정한다.구현 순서
Behavior Preservation Rules
Test Gate
Coverage hard gate 변경이므로 최소
check:numeric-literals,lint,typecheck,test:unit,test:integration,test:regression,test:e2e,test:coverage:ts,build,git diff --check, UTF-8 integrity check가 필요하다.Completion Evidence
Handoff Checklist
typescript-coverage-95.Canonical Skill / Policy Source
llm-code-generation-protocoltddAGENTS.mdVerification Contract
required commands:
npm.cmd run check:numeric-literals;npm.cmd run lint;npm.cmd run typecheck;npm.cmd run test:unit;npm.cmd run test:integration;npm.cmd run test:regression;npm.cmd run test:e2e;npm.cmd run test:coverage:ts;npm.cmd run build;git diff --check; UTF-8 integrity check.source-of-truth readback: #328 issue checklist, #323 parent checklist, PR diff/body, GitHub Actions checks, changed test/config readback, coverage summary readback.
required evidence: PR URL, main merge SHA, CI/CodeQL result links, local validation command results, coverage summary showing statements/branches/functions/lines >= 95%, UTF-8 readback result.
fail-closed failure modes: parent/child checklist missing; any coverage metric below 95%; threshold passes by widening exclude scope instead of adding meaningful tests; API/DB/OAuth contract change required; user-facing copy scope exceeded; UTF-8 or Markdown structure corruption.