Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@
## 2024-07-13 - 빈 디렉토리 μƒνƒœμ˜ μ ‘κ·Όμ„±(Accessibility) κ°œμ„ 
**Learning:** 정적 파일 μ„œλ²„μ˜ 빈 디렉토리 μƒνƒœλŠ” 슀크린 리더 μ‚¬μš©μžμ—κ²Œ 컨텐츠 λˆ„λ½μœΌλ‘œ μ˜€ν•΄λ°›μ„ 수 있으며, μ‹œκ°μ μœΌλ‘œλ„ 일반 리슀트 μ•„μ΄ν…œκ³Ό 정렬이 λ§žμ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
**Action:** 빈 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μš”μ†Œμ— `role="status"`λ₯Ό μΆ”κ°€ν•˜μ—¬ 슀크린 리더가 λͺ…ν™•ν•˜κ²Œ 인지할 수 μžˆλ„λ‘ ν•˜κ³ , μ•„μ΄μ½˜κ³Ό flex λ ˆμ΄μ•„μ›ƒμ„ 톡해 λ‹€λ₯Έ 리슀트 μ•„μ΄ν…œκ³Ό μΌκ΄€λœ μ‹œκ°μ  흐름을 μ œκ³΅ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
## 2026-08-08 - κΈ΄ 디렉토리 이름 μ€„λ°”κΏˆ 처리
**Learning:** λͺ¨λ°”일 κΈ°κΈ° λ“± 쒁은 ν™”λ©΄μ—μ„œ 곡백이 μ—†λŠ” κΈ΄ 디렉토리 이름이 h1 νƒœκ·Έμ— ν‘œμ‹œλ  λ•Œ, μ€„λ°”κΏˆμ΄ λ˜μ§€ μ•Šμ•„ λ ˆμ΄μ•„μ›ƒμ΄ 깨질 수 μžˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. overflow-wrap: anywhere 및 word-break: break-all 속성을 톡해 ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
**Action:** κΈ΄ λ¬Έμžμ—΄μ΄ ν‘œμ‹œλ˜λŠ” 제λͺ©μ΄λ‚˜ ν…μŠ€νŠΈ μš”μ†Œμ—λŠ” λͺ¨λ°”일 ν˜Έν™˜μ„±μ„ μœ„ν•΄ ν…μŠ€νŠΈ μ€„λ°”κΏˆ CSS 속성을 기본적으둜 μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
19 changes: 1 addition & 18 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,4 @@ All notable changes to this project are documented in this file.

### Fixed

- Generate the inline-style Content Security Policy SHA-256 source expression
from the exact normalized UTF-8 stylesheet bytes emitted into each generated
`index.html` file, preventing template whitespace from invalidating the policy.

### Tests

- Add a real generated-file regression test that independently recomputes the
declared style hash from the emitted `<style>` text.
- Add generated-page regressions for row ordering, empty-state semantics, CSS
cascade ordering, reduced-motion retention, text-only decoration, and numeric
text/focus contrast thresholds.

### Documentation

- Record the CSP byte-identity decision, threat boundary, verification contract,
and current W3C Working Draft reference in `docs/doctoring`.
- Record the generated-index readability decision, WCAG 2.2 engineering basis,
contrast calculations, scope boundaries, and verification contract.
- 곡백이 μ—†λŠ” κΈ΄ 디렉토리 μ΄λ¦„μœΌλ‘œ 인해 λͺ¨λ°”일 κΈ°κΈ°μ—μ„œ λ ˆμ΄μ•„μ›ƒμ΄ κΉ¨μ§€λŠ” ν˜„μƒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄, μƒμ„±λœ `h1` νƒœκ·Έμ— `overflow-wrap: anywhere` 및 `word-break: break-all` 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
4 changes: 4 additions & 0 deletions src/main/kotlin/html4tree/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ main {
max-width: 800px;
margin: 0 auto;
}
h1 {
overflow-wrap: anywhere;
word-break: break-all;
}
ul {
list-style-type: none;
padding-left: 0;
Expand Down
9 changes: 9 additions & 0 deletions src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,13 @@ class GeneratedIndexReadabilityTest {
}
return (0.2126 * channels[0]) + (0.7152 * channels[1]) + (0.0722 * channels[2])
}

@Test
fun generatedH1PreventsMobileLayoutBreakage() {
process_dir(temporaryDirectory, setOf("index.html"), emptyArray())
val style = emittedStyle()
assertTrue(style.contains("h1 {"))
assertTrue(style.contains("overflow-wrap: anywhere;"))
assertTrue(style.contains("word-break: break-all;"))
}
}
Loading