Skip to content

fix: v1.3.0 검증 후속 조치 (V13-1/2/3)#159

Merged
haksungjang merged 1 commit into
mainfrom
fix/v13-verification-followups
Jun 15, 2026
Merged

fix: v1.3.0 검증 후속 조치 (V13-1/2/3)#159
haksungjang merged 1 commit into
mainfrom
fix/v13-verification-followups

Conversation

@haksungjang

Copy link
Copy Markdown
Member

검증팀 v1.3.0 재검증 리포트(bug-hunter/reports/sbom-tools/v1.3.0/)의 신규 결함 3건을 조치한다.

V13-3 — 웹 UI 접근성 3건

  • 실행 로그 진행 표시줄에 aria-label 부여 (aria-progressbar-name).
  • 로그 스크롤 영역을 role="log" + tabIndex={0}으로 키보드 포커스 가능하게 함 (scrollable-region-focusable).
  • aria-valid-attr-value(F3)의 근본 원인은 콜론 id가 아니라 InputTypeSelectorTabsContent 없이 Tabs를 써서 aria-controls가 존재하지 않는 패널을 가리킨 것이다. 패널이 정상인 ResultDashboard 탭이 같은 콜론 id를 쓰는데도 지적되지 않은 점이 이를 뒷받침한다. 패널 없는 선택기를 role="group" + aria-pressed 토글 버튼으로 교체해 dangling 참조를 제거했다.

V13-2 — 라이선스 오표기가 신규 UI 표면으로 전파

  • generate-notice.sh에만 있던 SPDX 정규화 맵을 spdx-normalize.jq로 분리해 단일 출처로 만들고, normalize-sbom.sh가 bom.json 컴포넌트 라이선스에도 적용한다. 신규 UI(라이선스 필터·분포 카드·의존성 트리)가 NOTICE와 같은 분류를 읽는다.
  • "Expat license" 같은 비SPDX 자유 텍스트는 SPDX license id로 승격한다. 0BSD는 cdxgen FETCH_LICENSE가 .license.id에 넣은 유효하지만 틀린 값(url까지 동봉)이라 데이터만으로 올바른 라이선스를 알 수 없어 추정 교정하지 않고 보존한다. 매핑 불가한 "Dual License"와 compound 표현도 그대로 둔다. 근본 원인은 cdxgen 신뢰도다.
  • byte-stable과 멱등성은 유지된다.

V13-1 — 문서 내부 앵커 5건

  • 게시 사이트 기준 오탐이다. 사이트의 slugify는 pymdownx(case=lower)로, 헤딩의 em-dash()·화살표()를 지운 뒤 양옆 공백이 이중 하이픈(--)으로 남아 링크와 정확히 일치한다. 생성된 HTML에서 5건 모두 실제 앵커가 존재함을 확인했고 mkdocs build --strict가 통과한다. 검증기는 하이픈을 단일로 축약하는 slugify를 써서 어긋났다. internal/ 2건은 사이트 빌드에서 제외되는 문서다.
  • 링크를 바꾸면 사이트가 오히려 깨지므로, mkdocs.ymlvalidation.anchors: warn을 추가해 --strict가 사이트의 실제 slugify로 앵커를 검증하도록 했다. 오탐 없이 향후 실제 깨짐만 차단한다.

회귀 방어

  • tests/test-postprocess.sh에 bom.json 라이선스 승격과 "보존하되 추정하지 않는" 케이스 6건을 추가하고 license-aliases.json 픽스처를 확장했다. No-Docker로 17/17 통과.

검증

  • tests/test-postprocess.sh 17/17 통과
  • 프런트엔드 tsc --noEmit 통과
  • mkdocs build --strict exit 0 (앵커 검증 활성화)

V13-3 (a11y): give the progress bar an accessible name, make the run-log
scroll region keyboard focusable (role=log, tabindex), and replace the
input-type selector's panel-less Tabs with an aria-pressed toggle group so
it no longer emits an aria-controls pointing at a tabpanel that is never
rendered (axe aria-valid-attr-value).

V13-2 (license): extract the SPDX alias map into a shared spdx-normalize.jq
used by both generate-notice.sh and normalize-sbom.sh, and normalize the
bom.json component licenses so the web UI license filter, distribution card,
and dependency tree group identically to the NOTICE. Free-text aliases such
as "Expat license" are promoted to a proper SPDX license id; a valid-but-wrong
upstream id (cdxgen mislabeling a package 0BSD) and unmappable strings are
left untouched rather than guessed. Output stays byte-stable and idempotent.

V13-1 (docs): the 5 flagged anchors resolve correctly on the rendered site —
the site's pymdownx slugify keeps the double hyphen left by a removed em-dash,
which a hyphen-collapsing checker disagrees with. Add validation.anchors=warn
so `mkdocs build --strict` validates anchors against the site's own slugify,
catching real breaks without that false positive.

Regression: extend tests/test-postprocess.sh and the license-aliases fixture
to cover bom.json license promotion and the preserve-don't-guess cases.
@haksungjang haksungjang merged commit e98223f into main Jun 15, 2026
24 checks passed
@haksungjang haksungjang deleted the fix/v13-verification-followups branch June 15, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant