🏗️ 패키지 레이어링 + 보안 강화
96개 커밋, 296개 파일, +12.8k / -4.3k 줄. 이 릴리즈는 두 개의 새로운 워크스페이스 패키지(rules-core, ast-grep-mcp)를 추출하고, 규칙 파일 발견에서 보안 허점을 해결하며, v4.2.0의 게이트 이후 여전히 불안정했던 모든 내부 프롬프트 디스패치 경로를 강화합니다.
📦 두 개의 새로운 워크스페이스 패키지
packages/rules-core — 규칙 발견, 매칭, 캐싱, 중첩된 AGENTS.md 컨텍스트 해석이 모놀리식 구조에서 추출되어 하네스 임포트가 없는 독립형 패키지가 되었습니다. 이는 ROADMAP 멀티 하네스 리팩터링의 첫 번째 구체적 단계입니다: 이제 rules-core는 OpenCode뿐만 아니라 모든 에이전트 하네스에서 사용할 수 있습니다.
packages/ast-grep-mcp — 네이티브 src/tools/ast-grep 도구(NAPI 바이너리 의존성 포함)가 제거되었습니다. AST-grep은 이제 기본 제공 MCP 서버로 제공됩니다. 사용자 대면 도구 이름(ast_grep_search / ast_grep_replace)과 disabled_tools 설정은 유지되므로 사용자 측에서는 아무것도 변경되지 않지만, 바이너리 부트스트래핑이 더 깔끔해지고 도구가 자체 프로세스에서 실행됩니다.
🔒 심링크 이스케이프 보안 수정
규칙 파일 발견(findRuleFiles)은 이제 해결된 모든 경로가 워크스페이스 경계 내에 머물러 있는지 검증합니다. 악의적인 리포지토리는 이전에 심링크를 통해 .github/copilot-instructions.md 또는 .omo/rules/*를 임의의 호스트 파일(예: ~/.ssh/id_rsa)로 지정할 수 있었습니다. 개별 파일 및 디렉토리 스캔 경로 모두 이제 보호됩니다.
🧠 프롬프트 게이트 & 런타임 폴백 강화
v4.2.0에서 도입된 프롬프트 비동기 게이트가 전체 두 번째 패스를 거쳤습니다:
DEFAULT_PROMPT_ASYNC_POST_DISPATCH_HOLD_MS가 250ms에서 2,000ms로 상향 조정됨 — 원본 윈도우가 놓친 느린 프로바이더 session.error 도착을 포착
- 런타임 폴백이 이제 모든 OpenCode 진행 이벤트 형태를 인식함(
message.part.updated, 델타, 완료 마커) — 실제로 진행 중인 세션에서 더 이상 거짓 음성 재시도 트리거 없음
- 팀 모드 메시지 전달 경합 해결: 모호한 실패 시 예약 해제, 프롬프트 실패 후 라이브 전달 홀드 유지
- 컨텍스트 복구가 유휴 세션을 처리함; 합성
status: idle 이벤트가 이제 유휴 후크를 올바르게 트리거함
🌐 웹 오버홀
마케팅 사이트(packages/web/)가 전체 분해 및 다듬기 패스를 거쳤습니다: 832줄 랜딩 페이지를 10개 컴포넌트로 분할, 358줄 선언문을 9개로 분할, 디자인 시스템 토큰을 DESIGN.md로 추출, WCAG 1.3.1 수정(중첩된 <main>), 영웅 CTA가 이제 설치 문서로 링크, 6개 뷰포트 x 4개 로케일 x 2개 페이지를 커버하는 반응형 테스트 매트릭스.
📝 기타
- 주석 검사기가 이제
apply_patch 페이로드를 파싱함(순수 쓰기뿐만 아니라 패치 스타일 편집에서 AI 슬롭 캐치)
- 규칙 주입기 트랜스크립트 수화: 세션 트랜스크립트에서 시드된 중복 제거 캐시가 압축 후 중복 주입 방지
.sisyphus/rules 발견이 지원 중단 경고와 함께 복구됨(v4.3.0에서 계획된 제거)
- CLI 바이너리를 사용할 수 없을 때 LSP MCP 부트스트랩 폴백
부 호환성 및 안정성 릴리즈
이 릴리즈는 호환성 대면 동작 변경 및 운영 강화를 포함합니다. 업그레이드하거나 게시하기 전에 아래 요약을 읽어보세요.
- 패키지 감지, 플러그인/구성 호환성, 설치 표면에 걸쳐 이름 변경 전환 업데이트.
- 위임 작업 계약 및 런타임 등록 동작을 포함한 작업 및 도구 동작 업데이트.
- 생략된 구성이 런타임 경로에 걸쳐 일관되게 동작하도록 작업 시스템 기본 동작 정렬.
- 더 안전한 릴리스 시퀀싱 및 패키지/설치 수정을 포함한 설치 및 게시 워크플로우 강화.
커밋 요약
- 4e4bb36 docs(release): finalize v4.2.3 release notes
- fbcc143 fix(runtime-fallback): recognize completion progress events
- 2f5fc7c fix(rules-core): block symlinked rule directory escapes
- 330e437 docs(agents): regenerate hierarchical AGENTS.md for 2026-05-20
- 39aadbf fix(context-recovery): handle idle sessions
- caa751a @jeongjin0 has signed the CLA in #4206
- c197c24 docs(agents): require merge commits for PRs
- 2339606 docs(release): expand v4.2.3 CHANGELOG and add OmO logo to README.ru.md
- a0d75d1 docs(prompt-gate): document DEFAULT_PROMPT_ASYNC_POST_DISPATCH_HOLD_MS 250 -> 2000
- b24dc6e fix(rules-core): isolate package + block symlink escape from rule sources
- 89f6902 Merge pull request #4205 from code-yeongyu/fix/comment-checker-apply-patch-payloads
- b527725 Merge pull request #4203 from code-yeongyu/fix/continuation-prompt-dispatch-20260520051014
- 3bd6302 fix(comment-checker): handle apply_patch payloads
- 7d9cc4f Merge pull request #4204 from code-yeongyu/hotfix/og-static-deploy-fix
- 6fd5e7c fix(web): switch OG image from next/og to static PNG file convention
- 5154ab4 Merge pull request #4202 from code-yeongyu/feature/web-portfolio-refinement-20260520
- e9c44dd fix(web): drop nested on manifesto (WCAG 1.3.1)
- f5d5e98 fix(web): hero Get Started CTA -> /docs#installation (closes #3848)
- 0ebba9e fix(rules-injector): retry storage writes after cleanup race
- 4a72729 fix(plugin): run idle hooks for synthetic status idle
- 64997d5 test(web): responsive matrix — 6 viewports x 4 locales x 2 pages
- 623af75 feat(web): dynamic OG + Twitter card images via next/og
- 022eb78 refactor(web): decompose 358-LOC manifesto into 9 section components
- 4d5f58f refactor(web): decompose 832-LOC landing into 10 section components
- 78ca837 style(web): extract design system tokens + DESIGN.md
- 7e0406f fix(web): UX/a11y polish + middleware metadata route fix
- 68b80e0 perf(web): optimize CI + build pipeline
- 9799c54 chore(web): remove dead deps + safe version bumps
- faf2b02 fix(lsp): update lsp-tools-mcp cleanup
- 18b5891 docs(reference): cross-module rules injection comparison report
- fbe423a feat(rules-injector): hydrate dedup cache from session transcript
- 4de2782 Merge pull request #4201 from code-yeongyu/fix/test-isolation-cross-test-state-leak
- f8d04d7 fix(test-isolation): isolate rules injector storage and fixture home
- c6dc266 test(test-isolation): add diagnostic regression test for cross-suite leak
- 504a777 Merge pull request #4200 from code-yeongyu/fix/rules-core-restore-sisyphus-with-deprecation-warning
- dd9dd42 Merge pull request #4199 from code-yeongyu/fix/parent-wake-same-source-reservation-requeue
- 12aaff2 test(rules-core): isolate sisyphus deprecation warning assertion
- 53ddc47 test(rules-injector): align duplicate-cache mock types
- d92894a docs(changelog): document .sisyphus/rules restoration and planned removal in v4.3.0
- 1bab6ec fix(rules-core): restore .sisyphus/rules discovery with deprecation warning (planned removal v4.3.0)
- 7ffe823 test(rules-core): add red tests for restored .sisyphus/rules discovery + deprecation warning (BUG-G)
- 11d2cfb fix(background-agent): re-enqueue parent wake on same-source reservation instead of dropping
- ee8b80a test(background-agent): add red test for parent-wake drop on same-source reservation hold (BUG-E)
- 1760ffb Merge pull request #4196 from code-yeongyu/fix/rules-core-fallback-to-workspace-when-no-project-root
- 1f9a581 fix(rules-core): fall back to workspace directory when no project root marker is found
- 2c62e72 test(rules-core): add red test for project rule discovery in markerless workspaces (BUG-F)
- 913cc08 Merge pull request #4198 from code-yeongyu/fix/ast-grep-mcp-allow-absolute-paths-inside-workspace
- 4c7d7e8 Merge pull request #4197 from code-yeongyu/fix/prompt-gate-event-shapes-and-finish-marker
- bd2823e Merge pull request #4195 from code-yeongyu/fix/team-send-message-ambiguous-delivery-loss
- 9cdcb42 revert(agents-md): restore ROADMAP warning banner unrelated to this PR
- 2ea2159 fix(ast-grep-mcp): allow absolute paths whose realpath is inside the workspace
- b2e42e1 test(ast-grep-mcp): add red test for absolute paths inside workspace
- f8f4b57 fix(runtime-fallback,prompt-gate): recognize all OpenCode progress event shapes and boolean/completed finish markers
- 20efb79 test(runtime-fallback,prompt-gate): add red tests for event-shape and finish-marker blind spots (BUG-C+D)
- da5aa7f test(team-mode): allow reclaimed reservations to stay readable
- 579b8c3 docs(AGENTS.md): add aggressive refactoring-in-progress warning
- f79da77 test(team-mode): decouple resume history fixture from session routing
- af42f0a (이하 생략)