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: 4 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,7 @@
## 2026-09-01 - λŒ€μš©λŸ‰ λ¬Έμžμ—΄ μ„œλΈŒμŠ€νŠΈλ§ μŠ€μΊλ‹ 루프 μ΅œμ ν™”
**Learning:** κΈ΄ ν…μŠ€νŠΈμ—μ„œ μ—¬λŸ¬ κΈ°μ€€ λ¬Έμžμ—΄(`candidate`)을 νƒμƒ‰ν•˜μ—¬ λ‹€μŒ κ΅¬μ—­μ˜ μ‹œμž‘μ μ„ 찾을 λ•Œ, ν…μŠ€νŠΈ 전체에 λŒ€ν•΄ 반볡적으둜 `text.find(candidate)`λ₯Ό ν˜ΈμΆœν•˜λ©΄ O(N)의 λΉ„νš¨μœ¨μ μΈ 쀑볡 μŠ€μΊλ‹ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 특히 κ°€μž₯ κ°€κΉŒμš΄ μ‹œμž‘μ μ„ μ°ΎκΈ° μœ„ν•΄ λͺ¨λ“  후보λ₯Ό μŠ€μΊ”ν•  λ•Œ 이 λ¬Έμ œκ°€ μ‹¬ν™”λ©λ‹ˆλ‹€.
**Action:** 기쀀점(`start`)을 μž‘μ€ ν›„, `idx = text.find(candidate, start, end)`λ₯Ό μ‚¬μš©ν•˜μ—¬ 검색 λ²”μœ„λ₯Ό λ™μ μœΌλ‘œ μΆ•μ†Œ(`end = min(end, idx)`)ν•˜μ‹­μ‹œμ˜€. μ΄λ ‡κ²Œ ν•˜λ©΄ λΆˆν•„μš”ν•œ μŠ€μΊλ‹ μ˜€λ²„ν—€λ“œλ₯Ό 막고 검색 λ²”μœ„λ₯Ό μ•ˆμ „ν•˜κ²Œ 쀄여 맀우 큰 μ„±λŠ₯ ν–₯상을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

## 2025-02-12 - [κ°„λ‹¨ν•œ 곡백 λ¬Έμžμ—΄ μ •κ·œν™” μ‹œ μ •κ·œν‘œν˜„μ‹ λŒ€μ‹  λ„€μ΄ν‹°λΈŒ split/join ν™œμš©]
**Learning:** `scripts/ci/opencode_review_normalize_output.py`의 `runtime_tool_slug` ν•¨μˆ˜μ—μ„œ λ¬Έμžμ—΄μ˜ μ—°μ†λœ 곡백을 단일 ν•˜μ΄ν”ˆ(`-`)으둜 μΉ˜ν™˜ν•  λ•Œ `re.sub(r"\s+", "-", ...)`λ₯Ό μ‚¬μš©ν•˜λ©΄ μ •κ·œν‘œν˜„μ‹ 컴파일 및 μ‹€ν–‰ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€. λ‹¨μˆœ 곡백 μ •κ·œν™” μž‘μ—…μ—μ„œλŠ” Python의 λ„€μ΄ν‹°λΈŒ λ¬Έμžμ—΄ λ©”μ„œλ“œμΈ `str.split()`κ³Ό `str.join()`을 μ‘°ν•©ν•˜λŠ” 것이 C μˆ˜μ€€μ˜ μ†λ„λ‘œ λ™μž‘ν•˜μ—¬ 훨씬 λΉ λ¦…λ‹ˆλ‹€.
**Action:** λ‹¨μˆœν•œ 곡백 λ¬Έμžμ—΄ μΉ˜ν™˜μ΄λ‚˜ μ •κ·œν™”κ°€ ν•„μš”ν•œ 경우 μ •κ·œν‘œν˜„μ‹(`re.sub`) λŒ€μ‹  `"-".join(str.split())`κ³Ό 같은 κ³ λ„λ‘œ μ΅œμ ν™”λœ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό μš°μ„ μ μœΌλ‘œ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
3 changes: 2 additions & 1 deletion scripts/ci/opencode_review_normalize_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,8 @@ def current_changed_files() -> frozenset[str]:

def runtime_tool_slug(tool_name: str) -> str:
"""Return the canonical receipt slug for a browser execution tool."""
return re.sub(r"\s+", "-", tool_name.strip().casefold())
# ⚑ Bolt: Use native string methods for whitespace normalization instead of regex
return "-".join(tool_name.casefold().split())


@lru_cache(maxsize=1)
Expand Down
Loading