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
4 changes: 0 additions & 4 deletions .jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,3 @@
## 2024-08-01 - λ„€μ΄ν‹°λΈŒ λΈŒλΌμš°μ € UI의 닀크 λͺ¨λ“œ 지원 κ°•μ œ
**ν•™μŠ΅:** CSS λ―Έλ””μ–΄ 쿼리(`@media (prefers-color-scheme: dark)`)λ₯Ό 톡해 닀크 λͺ¨λ“œλ₯Ό μ§€μ›ν•˜λ”λΌλ„, λΈŒλΌμš°μ €μ˜ λ„€μ΄ν‹°λΈŒ UI μš”μ†Œ(μŠ€ν¬λ‘€λ°”, κΈ°λ³Έ 폼 컨트둀, κΈ°λ³Έ λ°±κ·ΈλΌμš΄λ“œ λ“±)λŠ” ν…Œλ§ˆ 변경을 μΈμ‹ν•˜μ§€ λͺ»ν•΄ μ–΄λ‘μš΄ ν…Œλ§ˆ ν™˜κ²½μ—μ„œ 밝은 μŠ€ν¬λ‘€λ°”κ°€ ν‘œμ‹œλ˜λŠ” λ“± μ‹œκ°μ  뢈일치λ₯Ό μ΄ˆλž˜ν•©λ‹ˆλ‹€.
**쑰치:** 항상 HTML λ¬Έμ„œμ˜ `<head>` μ˜μ—­μ— `<meta name="color-scheme" content="light dark">` 메타 νƒœκ·Έλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μΆ”κ°€ν•˜μ—¬ λΈŒλΌμš°μ € μˆ˜μ€€μ—μ„œ μ‚¬μš©μžμ˜ μ‹œμŠ€ν…œ ν…Œλ§ˆ(닀크 λͺ¨λ“œ λ“±)λ₯Ό μ™„μ „νžˆ 상속받아 일관성 μžˆλŠ” λ„€μ΄ν‹°λΈŒ UIλ₯Ό λ Œλ”λ§ν•˜λ„λ‘ 보μž₯ν•˜μ‹­μ‹œμ˜€.

## 2024-07-13 - 빈 디렉토리 μƒνƒœμ˜ μ ‘κ·Όμ„±(Accessibility) κ°œμ„ 
**Learning:** 정적 파일 μ„œλ²„μ˜ 빈 디렉토리 μƒνƒœλŠ” 슀크린 리더 μ‚¬μš©μžμ—κ²Œ 컨텐츠 λˆ„λ½μœΌλ‘œ μ˜€ν•΄λ°›μ„ 수 있으며, μ‹œκ°μ μœΌλ‘œλ„ 일반 리슀트 μ•„μ΄ν…œκ³Ό 정렬이 λ§žμ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
**Action:** 빈 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μš”μ†Œμ— `role="status"`λ₯Ό μΆ”κ°€ν•˜μ—¬ 슀크린 리더가 λͺ…ν™•ν•˜κ²Œ 인지할 수 μžˆλ„λ‘ ν•˜κ³ , μ•„μ΄μ½˜κ³Ό flex λ ˆμ΄μ•„μ›ƒμ„ 톡해 λ‹€λ₯Έ 리슀트 μ•„μ΄ν…œκ³Ό μΌκ΄€λœ μ‹œκ°μ  흐름을 μ œκ³΅ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
8 changes: 0 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,3 @@ other coding agent). html4tree is a Kotlin CLI (Gradle build) that generates
code-review-graph MCP tools β€” BEFORE grep/find, since it surfaces
callers/callees/impact that text search misses.
<!-- END cwl-agent-guidance -->

## Code-owner review gates β€” disabled (on hold)

As of 2026-08-04, code-owner review requirements (`require_code_owner_reviews` in branch
protection, `require_code_owner_review` in rulesets) are disabled across the ContextualWisdomLab
org: there is a single maintainer (solo developer), so a code-owner approval gate can never be
satisfied. This is ON HOLD until the org has multiple maintainers β€” do NOT re-enable these
settings or add CODEOWNERS-based merge gates before then.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ repositories {

dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile 'junit:junit:4.13.2'
testCompile 'junit:junit:4.11'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟑 Minor | ⚑ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

# JUnit 버전과 ν…ŒμŠ€νŠΈ API μ‚¬μš©μ„ ν™•μΈν•©λ‹ˆλ‹€.
rg -n -- 'junit:junit:' build.gradle
rg -n --glob '*.kt' \
  'Assert\.assertThrows|assertThrows|ExpectedException|`@RunWith`|`@Rule`|`@ClassRule`' .

# ν•„μˆ˜ Security Scan gate와 Trivy 섀정을 ν™•μΈν•©λ‹ˆλ‹€.
fd --hidden --exclude .git -t f -e yml -e yaml . |
  xargs -r rg -n \
    'osv-scan|dependency-review|trivy-fs|--download-db-only|merge.*ref|base\.sha|continue-on-error|if:\s*false'

Repository: ContextualWisdomLab/html4tree

Length of output: 205


🏁 Script executed:

#!/usr/bin/env bash
set -u

printf '%s\n' '--- build.gradle ---'
cat -n build.gradle

printf '%s\n' '--- relevant diff ---'
git diff --unified=20 -- build.gradle

printf '%s\n' '--- JUnit-related test usage ---'
rg -n --glob '*.{java,kt,groovy}' \
  '(^|[^A-Za-z])(Assert\.)?(assertThrows|assertThat|assertTimeout|assertAll|assertDoesNotThrow|assertSame|assertNotEquals|assertArrayEquals|fail)\b|`@RunWith`|`@Rule`|`@ClassRule`|ExpectedException|org\.junit' . || true

printf '%s\n' '--- workflow and dependency files ---'
find . -path './.git' -prune -o -type f \( -name '*.yml' -o -name '*.yaml' -o -name 'build.gradle' -o -name 'gradle.properties' \) -print

printf '%s\n' '--- security workflow references ---'
find . -path './.git' -prune -o -type f \( -name '*.yml' -o -name '*.yaml' \) -print0 |
  xargs -0 -r rg -n -i \
  'osv[-_ ]scan|dependency[-_ ]review|trivy[-_ ]fs|download-db-only|merge[-_ ]ref|base\.sha|continue-on-error|if:\s*false' || true

printf '%s\n' '--- test files ---'
find . -path './.git' -prune -o -type f \( -name '*.java' -o -name '*.kt' \) -print

Repository: ContextualWisdomLab/html4tree

Length of output: 3695


🏁 Script executed:

#!/usr/bin/env bash
set -u

printf '%s\n' '--- CI workflow ---'
cat -n .github/workflows/ci.yml

printf '%s\n' '--- complete test imports and JUnit calls ---'
rg -n --glob '*.kt' \
  '^(import org\.junit|import kotlin\.test)|\b(assert[A-Za-z]+|fail|Assume\.[A-Za-z]+)\s*\(' \
  src/test

printf '%s\n' '--- repository state ---'
git status --short
git branch --show-current
git diff --stat

printf '%s\n' '--- Kotlin test JUnit POM ---'
curl -fsSL \
  'https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.3.72/kotlin-test-junit-1.3.72.pom' |
  sed -n '1,220p'

printf '%s\n' '--- JUnit 4.11 POM ---'
curl -fsSL \
  'https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.pom' |
  sed -n '1,180p'

Repository: ContextualWisdomLab/html4tree

Length of output: 26306


🏁 Script executed:

#!/usr/bin/env bash
set -u

printf '%s\n' '--- OSV findings for junit:junit ---'
curl -fsS -X POST 'https://api.osv.dev/v1/query' \
  -H 'Content-Type: application/json' \
  --data '{"package":{"ecosystem":"Maven","name":"junit:junit"},"version":"4.11"}' |
  jq -r '.vulns[]? | [.id, .summary, (.affected[].ranges[]?.events[]? | to_entries[] | "\(.key)=\(.value)")] | `@tsv`' || true

printf '%s\n' '--- OSV findings for junit:junit 4.12 ---'
curl -fsS -X POST 'https://api.osv.dev/v1/query' \
  -H 'Content-Type: application/json' \
  --data '{"package":{"ecosystem":"Maven","name":"junit:junit"},"version":"4.12"}' |
  jq -r '.vulns[]? | [.id, .summary, (.affected[].ranges[]?.events[]? | to_entries[] | "\(.key)=\(.value)")] | `@tsv`' || true

printf '%s\n' '--- Gradle wrapper version ---'
cat gradle/wrapper/gradle-wrapper.properties 2>/dev/null || true

printf '%s\n' '--- all GitHub workflow files ---'
find .github -type f -maxdepth 3 -print 2>/dev/null

Repository: ContextualWisdomLab/html4tree

Length of output: 896


🏁 Script executed:

curl -fsS 'https://api.osv.dev/v1/vulns/GHSA-269g-pwp5-87pp' |
  jq '{id, summary, severity, database_specific, affected}'

Repository: ContextualWisdomLab/html4tree

Length of output: 1616


JUnit μ˜μ‘΄μ„±μ„ 4.13.2 μ΄μƒμœΌλ‘œ μœ μ§€ν•˜μ„Έμš”.

junit:junit:4.11κ³Ό kotlin-test-junit:1.3.72κ°€ μš”κ΅¬ν•˜λŠ” 4.12λŠ” GHSA-269g-pwp5-87pp의 영ν–₯ λ²”μœ„μ— μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ • 버전은 4.13.1μž…λ‹ˆλ‹€. build.gradle:26을 4.13.2둜 λ³€κ²½ν•˜μ„Έμš”. λ˜ν•œ CI에 osv-scan, diff-scoped dependency-review, merge ref λŒ€μƒ repo-wide trivy-fs Security Scan gateλ₯Ό μΆ”κ°€ν•˜μ„Έμš”.

πŸ€– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@build.gradle` at line 26, Update the JUnit dependency in the build.gradle
testCompile declaration from 4.11 to 4.13.2 or newer, preserving compatibility
with kotlin-test-junit. Also add CI security gates for osv-scan, diff-scoped
dependency-review, and repo-wide trivy-fs scans against the merge ref.

Source: Coding guidelines

testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
compile "com.github.ajalt:clikt:2.7.1"
}
Expand Down
7 changes: 3 additions & 4 deletions src/main/kotlin/html4tree/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -304,9 +304,6 @@ fun process_dir(curr_dir: File, excludeSet: Set<String>? = null, dirFiles: Array
}
}
.empty-dir {
display: flex;
align-items: flex-start;
gap: 0.5rem;
padding: 0.5rem;
opacity: 0.7;
font-style: italic;
Expand All @@ -330,6 +327,8 @@ ${cssContent} </style>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src '${styleHash}'; base-uri 'none'; form-action 'none';">
<!-- λ³΄μ•ˆ ν–₯상: 리퍼러λ₯Ό ν†΅ν•œ 디렉토리 경둜 λ…ΈμΆœ λ°©μ§€ -->
<meta name="referrer" content="no-referrer">
<!-- λ³΄μ•ˆ ν–₯상: 검색 엔진을 ν†΅ν•œ 디렉토리 ꡬ쑰 λ…ΈμΆœ λ°©μ§€ -->
<meta name="robots" content="noindex, nofollow">
<title>${curr_dir.getName().escapeHtml()}</title>
${css}
</head>
Expand Down Expand Up @@ -373,7 +372,7 @@ ${cssContent} </style>
}

if(l.isEmpty()){
l.append(""" <li><div class="empty-dir" role="status"><span class="icon" aria-hidden="true">&#8505;</span> <span>이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.</span></div></li>""")
l.append(""" <li><div class="empty-dir">이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.</div></li>""")
l.append('\n')
}

Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/html4tree/MainTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ class MainTest {
val htmlContent = indexFile.readText()
assertTrue(htmlContent.contains("<html lang=\"ko\">"))
assertTrue(htmlContent.contains("이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€."))
assertTrue(htmlContent.contains("role=\"status\""))
assertTrue(htmlContent.contains("role=\"list\""))
}

Expand Down Expand Up @@ -310,6 +309,7 @@ class MainTest {
val htmlContent = indexFile.readText()
assertTrue(htmlContent.contains("<html lang=\"ko\">"))
assertTrue(htmlContent.contains("<meta name=\"color-scheme\" content=\"light dark\">"))
assertTrue(htmlContent.contains("<meta name=\"robots\" content=\"noindex, nofollow\">"))
assertTrue(htmlContent.contains("<nav aria-label=\"디렉토리 λͺ©λ‘\">"))
assertTrue(htmlContent.contains("role=\"list\""))
assertTrue(htmlContent.contains("<main>"))
Expand Down
Loading