2026-10-12
한국 시간(KST) 기준으로 하루를 나눴습니다. 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 조회: 2026-10-13 KST. 공개 저장소에서 조회한 활동만 포함합니다.
요약 (AI 작성)
maru에서는 9월 23일에 연 #3867이 아침 7시쯤 main에 병합됐습니다. 기능 브랜치 docs/web-panel-osr-backend를 main으로 합치는 PR로, 그동안 이 브랜치에 병합된 Chromium 웹 패널(OSR 백엔드) 작업이 이때 main에 반영됐습니다. 본문에 따르면 약 280개 커밋을 main 위로 rebase했고, 이날 공개 커밋 326개 중 282개가 이 병합으로 들어온 rebase 커밋입니다(작성일은 9월 23일부터 10월 11일). CEF가 필요한 부분은 opt-in 빌드(-Dcef-sdk)라 기본 빌드·앱에는 들어가지 않고, 기본 웹 백엔드는 WKWebView로 둡니다. 병합 뒤에는 로케이터로 보이기를 기다리고 숨은 탭에서도 질의에 답하게 하는 W9b②-3 #4364가 main을 대상으로 병합됐습니다.
편집기 쪽에서는 전날 밤 연 PR이 이어서 병합됐습니다. ⌘S가 설정한 code action(source.organizeImports 등)을 그 문서에만 적용한 뒤 포맷·저장하는 #4350(기본 끔), 프로젝트 바꾸기의 파일·일치 선택 #4347, 적용·저장 실측 기준선 #4351입니다. 로컬 저장은 자료·쓰기·완료 단계를 나누고(#4360) 저장 worker를 구현했으며(#4372), 저장 요청 큐 #4378은 이날 열려 다음 날 0시 넘어 병합됐습니다. 신뢰한 저장소에서 ⌘S·⇧⌥F가 저장소가 고른 Prettier를 실행하는 외부 포매터 EF1 #4384도 이날 열려 다음 날 병합됐고, Biome·oxfmt·ruff·black·rustfmt·zig fmt·사용자 명령으로 넓히는 EF2 #4388은 아직 열려 있습니다. 신뢰 결정이 언제·어디서 바뀌었는지 남기고 신뢰 목록에 보이는 감사 기록 TA1 #4362와 이를 maru editor lsp trust log로 조회하는 TA2 #4369도 병합됐습니다.
에이전트 로그와 이미지 채널도 이어졌습니다. 호스트 재접속·업그레이드에도 훅 형식을 지키는 #4348(10월 11일 열림)과 준비된 로컬 런타임에서 native 훅을 켜는 #4355에 이어, SSH의 새 프로세스만 native v2 로그로 점진 이행하고 실행 중인 v1 셸·tmux는 유지하는 #4368과 실제 연결 중단·자동 재접속 시험(#4377·#4379)이 병합됐습니다. 이미지 채널은 IC3a #4349(10월 11일 열림), IC3b-1 #4356과 세그먼트 해석 수정 #4365가 병합됐고, IC3b-2a #4373은 이날 열려 다음 날 병합됐습니다. IC3b-2b-1 #4375와 IC4a #4383은 열린 상태이고, IC3b-2b-2 #4380은 기능 브랜치 feat/image-channel-ic3b2b를 대상으로 열려 있어 아직 병합되지 않았습니다. 그 밖에 호스트 사이에 복사돼 있던 키 변환표·문법 이름 매핑·사이드바 세로 자리·divider 두께 같은 규칙을 중립 코드 한 곳으로 모으는 리팩터링(#4352·#4354·#4366·#4381 등)과, 쓰이는 중인 파일을 읽다 파일 감시 해시·파일 패널 미리보기가 죽던 문제의 수정(#4376)이 들어갔습니다.
zntc는 PR 94개(#5484부터 #5593까지, 중간 번호 일부 제외)를 모두 병합했습니다. 새벽에는 선택적 static 멤버 호출, 호출 결과를 받는 쪽, 깊은 optional 호출과 미해결 계산된 optional 키로 번들러가 의미 그래프를 유지하는 범위를 넓혔고(#5484부터 #5511까지), 아침부터 오후까지는 키와 인자 안의 sequence 식으로 범위를 넓히면서(#5513부터 #5547까지) --keep-names와 ES5로 내린 메서드·접근자·익명 클래스의 이름 보존을 고쳤습니다. 오후 늦게부터 저녁까지는 lexical this·arguments 캡처 이름을 SymbolId로 확정하고, 클래스 lowering·ES2020 연산자·optional catch·object spread 변환을 사전 패스로 옮겼으며, top-level await 모듈 처리를 고쳤습니다. 밤에는 의미 정보가 없는 런타임 helper와 ESM 래퍼에 SymbolId를 주고(#5588·#5591), 타입으로만 쓰인 TypeScript import 제거와 emitDecoratorMetadata 출력을 tsc에 맞췄습니다(#5589·#5592). 새 릴리스는 없습니다(최신 v0.1.10).
hwpjs는 main에 직접 커밋 35개를 올렸고, 그중 28개가 docs 커밋인 검증 기록입니다. 새벽에는 수식 재병합 회귀와 그 수정을 기록한 뒤, 고친 스냅샷에서 수식·구조 회귀 검사 72개를 확인했다고 적었습니다(594d665). 밤 9시 넘어서는 HWPX 차트 쪽 기능이 들어가 원본 역할에 따른 차트 점 라벨, 쪽으로 나눈 정규 차트 값 표, 값 표 선택을 정규 편집 양식에 잇는 연결(5e78736)이 추가됐고, 문서를 다시 열 때 남은 차트 초안을 지우는 수정과 문서를 바꾸지 않고 접두 경로를 감사하는 기능도 올라갔습니다. 밤에는 짝이 맞지 않는 필드 표지를 보호하면서 닫힌 필드를 편집하는 시제품과 그 검사를 기록했습니다. 실험용 편집 경로와 검사 확장이며 완전한 렌더링·편집 지원은 아닙니다. spinon과 블로그 저장소에는 이날 공개 활동이 없습니다.
공개 커밋 458개, 해당일 생성 또는 병합된 PR 137개를 정리했습니다. PR 생성 131개·병합 130개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/hwpjs
- docs(hwpx): verify metadata-only page number text insertion
- docs(hwpx): record inline exterior root cause and four actual edit proofs
- test(hwpx): verify closed field edits with unchanged non-target orphan markers
- docs(hwpx): record scoped closed-field prototype and completed large fixture audit
- docs(hwpx): verify scoped orphan protection and actual exterior edit preservation
- docs(hwpx): define isolated unmatched-field source envelope verification
- docs(hwpx): trace field refusal to unmatched cell fields and strict source policy
- docs(hwpx): record reference-wide prefix route refusals without masking gaps
- fix(hwpx): clear stale chart drafts and targets on document reopen
- feat(hwpx): connect chart data table selection to canonical edit form
- docs(hwpx): verify chart table canonical form integration boundaries
- docs(hwpx): link chart table UI responsibility contract
- feat(hwpx): add paginated canonical chart value table
- docs(hwpx): verify all chart points with source-role ownership
- docs(hwpx): verify chart role labels and save history in Chromium
- test(hwpx): verify route inventory scope and shared input identities
- feat(hwpx): audit prefix routes without invoking document mutators
- docs(hwpx): record normalized chart allocation failure sweep completion
- docs(hwpx): record reference-wide chart role and representative edit proof
- feat(hwpx): add source-role chart point labels with safe fallback
- docs(hwpx): verify owned chart role queries and semantic UI labels
- docs(hwpx): record unsupported chart selection reproduction and fix
- docs(hwpx): verify all chart cache points and preview module delivery
- docs(hwpx): verify explicit chart OLE policy and browser save bytes
- docs(hwpx): verify string chart editing and allocation boundaries
- docs(hwpx): record chart model and full numeric point verification
- docs(hwpx): record group allocation sweep verification
- docs(hwpx): record conditional chart anchor editing gap
- docs(hwpx): verify current artifact full public suite
- docs(hwpx): record splice regressions and allocator negative controls
- docs(hwpx): distinguish current build and pending verification gates
- docs(hwpx): record native failures and focused allocator retests
- docs(hwpx): verify full public suite on formula remerge fix
- docs(hwpx): verify 72 formula and structural regressions on corrected snapshot
- docs(hwpx): record formula remerge passthrough regression and bounded fix
ohah/maru
- refactor(render): 합성 글리프 판정을 Zig 가 셀 비트로 넘기고, 렌더러가 안 읽던 인자 넷을 뺀다
- test(ssh): exercise product automatic reconnect in CLI and GUI
- refactor(render): 래스터 배치 역할을 width.rasterFitFor 가 정해 인자로 넘긴다 — coretext_smoke.m 의 codepoint 목록을 없앤다
- refactor(render): 헤더 아이콘 줄 세로 자리를 알림 배지와 같은 값 하나로 그린다 — .m 의 origin 짐작과 띠 중앙 공식을 없앤다
- refactor(sidebar): 사이드바 셀을 모두 같은 규칙으로 놓고 렌더러 루프를 한 갈래로 줄인다
- fix(macos): 스크린샷 모드가 첫 frame 을 못 찍으면 영영 기다리지 않고 이유를 남기고 끝난다
- test(ssh): verify mixed log resume after live transport loss
- refactor(dock): divider 두께와 누르는 띠를 중립 한 곳에서 낸다 — Windows 가 띠 폭을 두께로 넘겨 10px 막대를 그렸다
- fix(cli): restore agent-events duplicate resume diagnostics
- feat(ssh): gradually enable native agent logs with one mixed stream
- fix(fs): 쓰이는 중인 파일을 크기 없이 읽는다 — 파일 감시 해시·파일 패널 미리보기가 std 크기 캐시 넘침으로 죽었다
- fix(session-host): 이미지 세그먼트 해석이 공유 메모리가 아닌 fd 에 죽지 않고, 펌프가 external 모드 Client 를 읽지 않는다
- feat(editor): 로컬 저장 worker의 자료와 완료 수명 구현
- feat(editor): 신뢰 감사 기록 조회 —
maru editor lsp trust log와 컨트롤 철회·잊기의 소켓 상대 (TA2) - fix(sidebar): 오른쪽 예약 칸을 칸 미만 여백에서 낸다 — Windows 카드 줄이 근거 없이 비우던 한 칸
- fix(web-osr): W9b②-3 적대 리뷰 5 회차 — 다음 확인 짐작은 마지막 무거운 확인까지 보고, 떼기를 못 보낸 실패는 다시 하라고 하지 않는다, kick 종류는 web_osr 가 그대로 받는다
- fix(web-osr): W9b②-3 적대 리뷰 4 회차 — hover 재시도는 다시 잰다, busy 일 때만 다시 보낸다, 기다린 시간은 확인 시간이 아니다
- fix(web-osr): W9b②-3 적대 리뷰 3 회차 — 잃은 kick 이 탭의 자리를 35 초 쥐던 것, 시한 판단·selector 마지막 확인, 누적 1/5
- fix(web-osr): W9b②-3 적대 리뷰 2 회차 — 간격은 직전 두 질의 가운데 작은 것의 네 배(상한 없이), 마감은 다음 잠까지 넣어, 시한 전 마지막 확인
- fix(web-osr): W9b②-3 적대 리뷰 1 회차 — wait 의 시간 규칙이 페이지의 긴 작업을 먹지 않게, 철회에도 묶음을 놓는다, 스모크가 숨김·wait 의 kick 을 증명한다
- feat(web-osr): W9b②-3 — wait visible(로케이터)과 숨은 탭 kick(질의·포인터 이동이 숨은 탭에서도 답한다)
- docs(sidebar): 없어진 sidebarBandCell 을 현재형으로 설명하던 주석·문서를 고친다
- fix(sidebar): sync hold 중 기하가 바뀌면 사이드바만 다시 그리지 않는다 — 글자만 새 스크롤로 가고 밴드가 남았다
- test(editor): 심링크 재판정 신뢰 확인창의 비동기 도착 대기
- refactor(editor): 로컬 저장의 자료 쓰기 완료 단계 분리
- test(live-pty): 자라는 파일을 크기 없이 읽는다 — readFileAlloc 의 size-pos 넘침 패닉이 판정자를 5% 죽였다
- feat(editor): 신뢰 감사 기록 — 결정이 언제·어디서 바뀌었나를 lsp-trust-log 에 남기고 신뢰 목록 행에 보인다 (TA1)
- refactor(sidebar): 세로 자리를 listToScreenY 하나로 모은다 — 렌더러·밴드 quad·caret·Windows 의 헤더−스크롤 사본을 없앤다
- test(session-host): CR4 fixture 가 hook_log_profile 을 세운다 — ReleaseFast 쓰레기가 AgentLogFormatChanged 로 읽혔다
- feat(session-host): 이미지 채널 IC3b-1 — 앱이 받은 세그먼트 fd 를 표에 쥐고 해석·정리·반환한다
- fix(sidebar): 카드 글자의 반 칸 여백을 Columns 가 소유한다 — 그린 ✕ 와 누르는 칸·IME caret 이 맞는다
- fix(ssh): select remote agent log directory from confirmed profile
- feat(editor): 저장 시 code action — ⌘S 가 설정한 kind(source.organizeImports 등)를 묻고 그 문서에만 적용한 뒤 포맷·저장한다 (기본 끔)
- refactor(render): 사이드바 에이전트 심볼의 죽은 1.1× 분기를 지운다 — .m 이 아이콘을 codepoint 로 고르는 자리가 0 이 된다
- refactor(render): 헤더 아이콘 배율을 Zig 가 role 로 내려 보낸다 — Metal 의 codepoint·1.7f 사본을 없앤다
- docs(editor): 비동기 저장의 경합과 완료 판정 누락 기록
- perf(editor): 프로젝트 바꾸기 적용과 저장의 실측 기준선 기록
- test(golden): 브라우저 권한 동의문 골든을 「하위 도메인 포함」 문구로 다시 만든다
- fix: main 기준 rebase 적대 리뷰 5 회차 — p5d 업로드 시험 artifact 도 IOSurface 를 링크한다
- fix: main 기준 rebase 적대 리뷰 3·4 회차 — 시험 수를 못박은 CI 단계, IOSurface 링크, 닫기 계약 판정자, 예외 번호
- fix: main 기준 rebase 적대 리뷰 2 회차 — 창 0 개 앱의 App Nap·단축키·숨긴 세션의 종료 모달, base ABI 태그 +5
- fix: main 기준 rebase — main 이 바꾼 API·고정 문자열에 base 를 맞추고, 손으로 합친 종료 갈래의 결함을 고친다
- chore: main 기준 rebase — base 의 ABI 번호(주석·문서)를 main 뒤로 +5
- test(web-osr): W9b②-2 변이로 찾은 빈 곳 — 투명 radio 요금제 카드·iframe 덮개·그려지지 않은 일치의 hint·nth 넘음 스모크
- fix(web-osr): W9b②-2 적대 리뷰 5 회차 — 맞은 것에서 대상까지 다른 링크·버튼을 지나면 covered, label 바꾸기는 다른 컨트롤을 품지 않을 때만
- fix(web-osr): W9b②-2 적대 리뷰 3·4 회차 — 덮임 검사는 가장 가까운 조작 가능한 조상 A 까지만, label·control 은 같은 것, 짠 글 반복·exact 하한
- fix(web-osr): W9b②-2 적대 리뷰 2 회차 — 짠 글은 요소마다 한 번, display:contents·br·textarea, aria-hidden 아이콘 글자를 뺀 exact
- fix(web-osr): W9b②-2 적대 리뷰 1 회차 — host·SVG 는 그려지는 글로, 아주 작은 글만 조상으로 바꿔 누른다, 숨은 일치는 세고 조상은 그것을 뺀 글로
- feat(web-osr): W9b②-2 — text·label 로케이터(격리 world 의 JS 로, Chromium 탭)
- test(web-osr): W9b②-1 — 긴 이름 시험의 글자를 한국어에서 é 로(i18n 리터럴 검사 — 시험 밖 도우미 함수라 잡혔다)
- fix(web-osr): W9b②-1 적대 리뷰 5 회차 — 줄은 블록마다 줄 조각의 제곱 합, 글 노드 수도, 보이지 않는 글은 세지 않는다
- fix(web-osr): W9b②-1 적대 리뷰 4 회차 — 라벨 컨트롤·글 노드 줄 수도 세고, # 링크는 Chromium 처럼 판정, 상한은 비율의 합
- fix(web-osr): W9b②-1 적대 리뷰 3 회차 — 비용은 역할이 아니라 페이지 구성이 정한다, 그 구성을 질의 전에 센다
- fix(web-osr): W9b②-1 적대 리뷰 2 회차 — link 후보 상한, matched 이름 자르기, 정규화 이름 시험
- fix(web-osr): W9b②-1 적대 리뷰 1 회차 — exact 는 받은 뒤 거른다, shadow root 까지 센다, 페이지 글은 표시 안전하게
- feat(web-osr): W9b②-1 — role 로케이터(역할·이름으로 요소를 가리킨다, Chromium 탭)
- fix(web-osr): W9b①b-2 적대 리뷰 5 회차 — 앞선 실패 이유를 지키고, Delete 떼기·떼기 실패·노드 잡기 실패도 정리
- fix(web-osr): W9b①b-2 적대 리뷰 4 회차 — 놓기 실패는 동작의 결과로, 못 보낸 떼기는 다시, 묶음 쥔 단계의 실패도 놓기
- fix(web-osr): W9b①b-2 적대 리뷰 3 회차 — 확실히 못 보낸 누름은 떼지 않는다, 위 글자는 언제나 shiftKey
- fix(web-osr): W9b①b-2 적대 리뷰 2 회차 — iframe 요소는 frame 으로, 대문자·위 글자에 shiftKey, 누름 실패 뒤에도 떼기
- fix(web-osr): W9b①b-2 적대 리뷰 1 회차 — Shift 는 US 배열, 키 이름 대소문자·별칭, 초점 검사 예외, 시한에도 묶음 놓기
- feat(web-osr): W9b①b-2 — Chromium 탭의 hover·press(진짜 포인터 이동·키 입력)
- fix(web-osr): W9b①b-1 적대 리뷰 2~4 회차 — 짝 없는 서로게이트 정화, 창 없을 때 wait 깨우기, type 다시 읽기를 해시로, 닫힌 shadow root 초점
- fix(web-osr): W9b①b-1 적대 리뷰 1 회차 — wait 는 앱이 되풀이 확인(이동·숨긴 탭·철회), type 초점 확인·다시 읽기, snapshot 한도
- feat(web-osr): W9b①b-1 — Chromium 탭의 snapshot·type·scroll·wait(DevTools)
- fix(web-osr): W9b①a 적대 리뷰 3 회차 — 덮임 검사를 DOM clobbering 에서 막는다, 검사·누름 오류에도 놓기
- test(control-plane): W9b①a — back 을 「모르는 메서드」로 보던 옛 시험 둘과 CLI 도움말 스냅샷을 새 메서드에 맞춘다
- fix(web-osr): W9b①a 적대 리뷰 2 회차 — 누름 시한에도 떼기, 다른 frame 거절·slot 판정, 보이는 상자, 재허가 시험
- fix(web-osr): W9b①a 적대 리뷰 1 회차 — 덮임 검사는 격리 world 에서, 누른 뒤 떼기 보장, 같은 탭 op 은 하나씩
- feat(web-osr): W9b①a — Chromium 탭의 진짜 클릭·뒤로·앞으로·새로고침(DevTools)
- test(web-osr): W9-0b 변이 생존 셋을 잡는 시험 — maru 가 닫은 탭·pump 끝 알림·관찰자 없는 탭 닫힘
- fix(web-osr): W9-0b 적대 리뷰 2 회차 — DevTools 콜백은 tick 끝에, 앱 종료에도 알림, 주기 정리 등록 실패 처리
- feat(web-osr): W9-0b — sidecar wire 에 DevTools 호출(인자·결과 조각, 상한·시한·정리)
- fix(control-plane): W9-0a 적대 1·2회차 — 브라우저 탭이 아닌 web 패널은 controllable:false, 실행 단계도 -32008
- feat(web-osr): W9-0a — browser.list 에 엔진·지원 명령, 지원하지 않는 명령은 확인 모달 전에 답한다
- fix(control-plane): 1g 적대 리뷰 4 회차 — 스모크 XDG 격리, 거절 안내, 진단 문구, pid 불일치 시험
- fix(control-plane): 1g 적대 리뷰 3 회차 — Linux 교차 컴파일, doc comment 자리, 1g 뒤 문단 정합
- docs(web-osr): 1g 적대 리뷰 회차·변이 결과를 계획 W9 에
- fix(control-plane): 1g 적대 리뷰 2 회차 — 처음 만난 터미널의 세션을 벗어나면 멈춘다, 진단 범위, 스모크 거절 판정
- fix(control-plane): 1g 적대 리뷰 1 회차 — foreground 작업의 자손이면 통과(Codex 의 새 process group), 재처리 재확인, 진단
- feat(control-plane): 1g — 서버가 붙은 프로세스의 출처에서 pane 을 스스로 찾는다(셀렉터를 믿지 않는다)
- test(session-host): 적대 리뷰 2 회차 — 끝난 셸 길의 전제를 가르고, 셸 수 표본을 넓히고, 문서·주석 정정
- fix(session-host): 적대 리뷰 1 회차 — 종료가 취소되면 창이 다시 돌게, 끝난 runtime 만이면 deadline 을 세우지 않게
- fix(session-host): 「종료 및 세션 끝내기」가 끝난 셸·여러 셸·승인 뒤 tick 에서 proof_loss(86)로 끝나던 것을 고친다
- test(session-host): 적대 리뷰 5 회차 — 실패 정리에서 멈추지 않게, 스모크 진단 순서, 주석
- test(session-host): 적대 리뷰 4 회차 — 해제된 Term 을 읽던 시험을 uptime 단언으로, ended_seen_ns 는 0 일 때만
- fix(session-host): 적대 리뷰 3 회차 — finish 기록을 실제 셸로 시험하고, uptime 은 처음 끝을 본 시각으로
- test(session-host): 적대 리뷰 2 회차 — 창 닫기 가드를 실제 길로, 조건마다 대조, 살아 있는 원격 Term 대조
- fix(session-host): 셸이 끝난 원격 Term 에 정리가 다른 종류의 close 를 보내 앱 종료가 proof_loss(86)로 끝나던 것을 고친다
- docs(web-osr): W10e 변이 결과
- fix(web-osr): W10e 적대 리뷰 2 회차 — 쥔 동안 또 끝난 셸도 같이 쥐고, quick 종료·보호 패널에서 끝내지 않음, 스모크 시간·86 사유
- fix(web-osr): W10e 적대 리뷰 1 회차 — 숨긴 끝난 세션은 windows 밖에 쥐고 앱이 끝날 때만 정리, 정상 종료에만, App Nap·유예·목록 갱신
- feat(web-osr): W10e — 마지막 셸이 끝나도 받는 중이면 창만 닫고 다 받을 때까지 남는다(ABI 216)
- docs(web-osr): W10d 변이 결과
- fix(web-osr): W10d 적대 리뷰 2 회차 — 형제는 Chromium 이 지운다(판정 dl-crash-restart), 링크된 다운로드 폴더, 기록 잠금·재시도 상한
- fix(web-osr): W10d 적대 리뷰 1 회차 — Chromium 은
(1)형제에 받는다(W10a 정정), 정리는 작업 스레드·형제까지·부모 폴더 기준, 유일한 탭은 새 빈 탭으로 - feat(web-osr): W10d — 받는 중 스스로 닫는 페이지는 남겨 주차, 고른 폴더 완료는 작업 스레드, 남은 임시 파일은 다음 실행이 지운다
- test(web-osr): W10c 3~5 회차 변이 — 감시가 주차를 비우면 sidecar 를 내리는지 시험, 변이·검증 결과를 계획 문서에
- fix(web-osr): W10c 적대 리뷰 3~5 회차 — 주차 감시·시한·상한, 주차 때 쌓인 요청에 답, 보류는 탭과 함께 끝, 종료 문장은 「취소됩니다」
- test(web-osr): W10c 변이 — sidecar 를 잃으면 주차 목록도 비우는지 시험, 변이 결과를 계획 문서에
- fix(web-osr): W10c 적대 리뷰 2 회차 — 주소창 이동·되살린 빈 탭은 「페이지가 연 탭」이 아니고, 판정자는 마지막 느린 연결만 센다
- fix(web-osr): W10c 적대 리뷰 1 회차 — 마지막 창의 유일한 탭은 살아 있는 브라우저를 되살리지 않고, 묻기 저장 창이 뜬 뒤 빈 탭을 닫으며, 빈 탭은 주소로 가른다
- feat(web-osr): W10c — 받는 중 닫은 탭은 숨겨 끝까지 받고, 종료 확인에 다운로드 수, 빈 다운로드 탭은 닫는다
- test(web-osr): W10b 적대 리뷰 10 회차 — 업로드 창의 처음 경로 판정(
dl-upload-default), 주석 자리·문서 - fix(web-osr): W10b 적대 리뷰 9 회차 — 긴 고른 경로는 다시 묻기, 받아 둔 양은 포화 덧셈, staging 은 지운 것이 있으면 다시 돈다
- fix(web-osr): W10b 적대 리뷰 8 회차 — 멈춤 문구는 합, 쓸 수 있던 폴더만 기억, 묻기를 끄면 맡지 않은 묻는 행은 보류로
- fix(web-osr): W10b 적대 리뷰 7 회차 — 프로필 잡음은 브라우저가 만들어졌을 때, 막힌 두 번째 host 는 비우지 않는 판정, 빈 시험 채우기
- fix(web-osr): W10b 적대 리뷰 6 회차 — ⌘A·두 겹 sheet, 프로필 잡음은 sidecar 마다, 상한은 가장 크게 받아 둔 행부터
- fix(web-osr): W10b 적대 리뷰 5 회차 — 목록 창의 저장 창에서 ⌘W 가 터미널로 가지 않게, 시험이 실제 프로필을 비우지 않게, 상한은 가장 큰 보류 행부터
- fix(web-osr): W10b 적대 리뷰 4 회차 — 묻기 설정은 읽을 때만, 출처는 끝을 남기고, 받아 두기는 전체로 4 GB, 보이지 않는 빈칸
- fix(web-osr): W10b — 보류된 보통 파일에 「실행될 수 있는 파일」이라 하지 않는다
- docs(mobile): W10b — browser.download-ask 는 Chromium 사이드카 전용(모바일 키 판정)
- fix(web-osr): W10b 적대 리뷰 3 회차 — 긴 고른 이름은 다 다듬은 뒤 확장자를 지키며, 번호도 255 안에, 쓸 수 없는 답은 다시 묻기
- fix(web-osr): W10b 적대 리뷰 2 회차 — 받아 두기 상한은 아무도 보지 않는 행에만(4 GB), Intel readdir, 묻기 시각
- fix(web-osr): W10b 적대 리뷰 1 회차 — ABI 골든, 맡을 곳 없는 묻기는 목록 창으로, 결정 전 256 MB 상한, 고른 이름의 앞 점
- feat(web-osr): W10b — 다운로드 「매번 묻기」(browser.download-ask): 저장 창이 고른 곳에, 결정 전 데이터는 프로필 안에
- chore(web-osr): W10a — 팔레트 검색 별칭 원장 +1, 판정자 수를 실제(247)로
- fix(i18n): W10a 상태 줄 — 한국어 표에 한글이 없는 틀(
{0} — {1})을 상태별 완성 문장으로 - fix(web-osr): W10a 적대 리뷰 4 회차 — 다운로드만의 사용자 동작 시각으로 제안 목록 막음을 되돌리고, 종료 때 임시 파일을 다 거둔다
- fix(web-osr): W10a 적대 리뷰 3 회차 — 종료 때 임시 파일 정리, 팝업·주소창 다운로드의 사용자 동작, 보류 행의 출처
- fix(web-osr): W10a 적대 리뷰 2 회차 — 목록 창에서 ⌘V 가 셸로 가지 않게, 새 문서 표지
page_started, Zig 상태 줄 - fix(web-osr): W10a 적대 리뷰 1 회차 — 탭을 다 닫으면 다운로드를 끝내고, 이동 전 누름은 새 페이지의 동작이 아니다
- feat(web-osr): W10a — Chromium 탭 다운로드: ~/Downloads 에 안전하게 받고, 목록 창(⇧⌘J)·보류·취소
- docs(web-osr): W6m③ — 열린 shadow DOM·iframe 안의 칸, 설계 결정·적대 검토·변이(27 중 16)·남은 것
- fix(web-osr): W6m③ 적대 리뷰 3 회차 — 조합·붙여넣기·끌어 놓기도 사용자 입력, 확대 판정 두 번, 크기 바뀜, 뜬 직후 누르기 무시
- fix(web-osr): W6m③ 적대 리뷰 2 회차 — iframe 글자 목록은 그 프레임의 신뢰된 키 누름 뒤에만, 확대 판정은 이어진 20 px 움직임으로
- fix(web-osr): W6m③ 적대 리뷰 1 회차 — 초점 프레임만, 바깥 휠도 스크롤로, 확대한 iframe 원점 버림, 주 프레임 사슬 확인
- feat(web-osr): W6m③ 열린 shadow DOM·iframe(같은·다른 출처) 안의 칸에도 제안 목록을 띄운다
- fix(web-osr): 제안 목록 적대 검증 5 차 — 키를 잃은 창의 목록 창 거둠, 메뉴 답·끌어 놓기도 사용자 입력, 칸 안 누름은 둠, sheet 뒤에 봄 + 문서
- test(web-osr): dl-auto 는 본문을 눌러 탭을 키 대상으로 둔 뒤 창 밖에서 넣는다 — 안 그러면 판정이 아무것도 보지 못했다(문 빼기 변이가 살았다)
- fix(web-osr): 제안 목록 적대 검증 4 차 — 목록용 send 분리, 사용자 입력 직후만, 본문 누름에 닫기, sheet 위 금지
- fix(web-osr): 제안 목록 적대 검증 3 차 — 화면 밖 칸, 판이 다른 고르기의 닫기, 못 보낸 Enter, tick 실패, 들어옴 강조
- fix(web-osr): 제안 목록 창 적대 검증 2 차 — 못 띄운 목록 기억, 숨으면 hover 강조 지움, hover 는 굴리지 않음, 스냅숏은 차이로
- docs(web-osr): W6m② 를 네이티브 창으로 다시 적는다 — 동작·스모크 8·적대 검증·변이(17 중 10 + 후속 2)·남은 것
- fix(web-osr): 제안 목록 창 적대 검증 1 차 — 크기는 실을 때만, 누름은 세대와 함께, 칸이 있는 화면, quick 정리, 휠 뒤 hover
- feat(web-osr): 제안 목록을 macOS 네이티브 창으로 띄운다 — 키 초점 없는 자식 창 안의 표 (W6m②, 사용자 결정)
- docs(web-osr): W6m② — maru 가 그리고 고르는 제안 목록, 적대 검증·변이
- test(web-osr): W6m② 스크린샷 실행을 단계 끝으로 — 빌드 직후 첫 실행은 목록이 열리기 전에 찍히기도 했다
- fix(web-osr): W6m② 적대 검증 2차 — 본문 안에 다 들어갈 때만 그림, 누름 붙잡기는 그 버튼만·제스처 취소가 풂·고르기는 누를 때 정함, 휠은 터미널과 같은 환산
- test(web-osr): W6m② 강조 없는 Enter 는 열린 목록에서 본다(닫힌 목록에서만 보면 첫 항목을 고르는 변이가 산다)
- fix(web-osr): W6m② 적대 검증 1차 — 남은 상자 자리·보이지 않는 목록이 입력을 먹지 않게, 왼쪽 뗌에서 고르고 누름은 붙잡기, 본문 안에만 놓기, 트랙패드 누적, hover 강조 지우기
- feat(web-osr): W6m② maru 가 제안 목록을 칸 아래에 그리고 ↑↓·Enter·Esc·hover·누르기로 고른다 (ABI 213)
- wip(web-osr): W6m② maru 가 제안 목록을 그리고 키·마우스로 고른다
- docs(web-osr): Chrome 154 datalist 2 차 실측 — 단어마다 거르기·형식 무관·readonly·열린 목록의 키·스크롤
- fix(web-osr): W6m① 거르기를 Chrome 154 처럼 단어마다 — 빈칸으로 나눈 단어가 값이나 레이블에 모두 있어야, 빈칸만이면 전부
- docs(web-osr): W6m① 적대 검증·변이 — 판정 219
- fix(web-osr): W6m① 적대 검증 2차 — 칸 자신의 가로 스크롤에는 닫지 않음, 은퇴 표식은 한 번만, 글 예산은 JSON 길이로
- fix(web-osr): W6m① 적대 검증 1차 — 사용자 사건·초점·readonly 만, 그 칸을 품은 스크롤만, 넘치거나 막힌 보이기는 닫기로, 원형 없는 객체, 떠난 문서의 늦은 보이기
- docs(web-osr): W6m① — 제안 목록 sidecar·프로토콜, 판정 216
- feat(web-osr): W6m① 제안 목록(datalist)을 sidecar 가 maru 로 보낸다 — 칸의 자리와 Chrome 처럼 거른 항목, 고른 값 넣기 (wire 14)
- docs(web-osr): 화면 실측 넷 — 날짜 선택 창은 앱에서 열리고, datalist 는 Chrome 동작을 쟀고, Finder 같은 이름·파일 약속은 Chrome 도 같다
- docs(web-osr): W6n 적대 검증 — hover 문의 주석을 모달 판정으로, 토스트 상자 아래 hover 는 남은 것으로
- fix(web-osr): 안내 토스트가 떠 있는 동안에도 hover 가 페이지로 간다 — 툴팁·링크 강조가 사라지던 것 (W6n)
- fix(web-osr): W6l② 적대 검증 — 그림 대기를 들어올 때·나갈 때 비우고 본문 판정은 실은 끌기에서만, 파일 약속 끌기 제외, 받지 않은 그림 파일 지우기, file:// 주소·빈 글은 막지 않기, TIFF 스모크
- feat(web-osr): W6l② 그림 데이터를 파일로 놓기 — 본문에 들어올 때 image.png 로, 글이 함께면 붙이지 않는다 (ABI 212)
- fix(web-osr): W6l① 적대 검증 — ABI 헤더 골든, 손잡이·이름 칸 제외, 안내 토스트 닫기, 복원 주소가 놓은 주소를 덮지 않게, 스모크가 어느 탭이 남고 바뀌었나까지
- feat(web-osr): W6l① 링크를 탭 막대·주소 띠에 놓기 — 웹 탭 머리는 그 탭, 빈 탭 막대는 새 웹 탭, 주소 띠는 그 탭 (ABI 211)
- test(web-osr): W6j 스모크의 시험 시간을 26 초로 — 대본이 약 21 초라 끝 표시 전에 앱이 끝날 수 있었다
- test(web-osr): W6j 스모크의 「닫힌 뒤 신호 없음」 기준을 떠나기 시점(약 2.9 초)에 맞춘다
- test(web-osr): W6j 스모크가 질문 sheet 의 입력 보호(0.5 초)가 지난 뒤 답한다 — sheet 가 늦게 뜨면 답이 무시됐다
- fix(web-osr): W6k 적대 검증 2 — 종료 확인이 떠 있으면 두 번째 ⌘Q 는 무시, sheet 가 없으면 곧바로 종료, 파일 패널 보호여도 치움, 보류 해제에 차례, 문서는 실측 그대로(Dock·로그아웃은 남은 것)
- fix(web-osr): W6k 메뉴 종료(⌘Q)가 먼저 대화상자를 치우고 다음 루프에서 종료한다 — sheet 가 떠 있으면 AppKit 이 종료 위임을 부르지 않았다
- fix(web-osr): W6k 의 보류 호출을 L1 경계 시험이 고정한 줄 밖으로
- fix(web-osr): W6k 적대 검증 — 정해진 종료에서 다시 보류·치움, 곧바로 거절되는 종료는 그대로, 권한은 무시로, macOS 안내도 보류, 스모크는 종료 코드까지
- fix(web-osr): 대화상자가 떠 있을 때의 종료 — 종료를 고르면 페이지 대화상자를 먼저 치운다 (W6k)
- test(web-osr): W6i 스모크가 첫 창의 페이지를 시각이 아니라 처음 요청한 페이지로 가린다 — 화면이 잠기면 늦게 떴다
- test(web-sidecar): 정의되지 않은 tag 시험을 58 로 — 31 은 W6j 의 close_asking 이다
- docs(web-osr): W6j 탭 닫기의 떠나기 확인 — 계획 W6 행·§7, 판정 205, 스모크 W6j
- test(web-osr): W6j 탭 닫기·창의 마지막 탭 단위 시험과 스모크(둘째 창의 유일한 웹 탭을 닫으면 그 창이 닫힌다)
- fix(web-osr): W6j 적대 검증 1 회차 — 창의 마지막 탭은 창 닫기로, 탭 닫기만 묻기, 치워진 질문은 머무름
- feat(web-osr): W6j 탭 닫기의 떠나기 확인 — maru 확인 뒤 페이지에 묻고, 머무르기면 탭이 남는다 (wire 13)
- fix(web-osr): W6i 스모크가 요약 출력과 한 줄에 섞인 보고도 찾는다
- fix(web-osr): W6i 적대 검증 — 첫 창의 페이지가 남는지까지 보고, 창 정리 단위 시험, 복원 주소 누수, closewindow 가드
- fix(web-osr): 닫은 창의 Chromium 탭이 앱이 끝날 때까지 돌던 것 — 창 정리에서도 브라우저를 닫는다 (W6i)
- fix(web-osr): W6h② 적대 검증 5 회차(시험·문서) — 판정 대기·자리 바뀜 시험을 단단히, 불러오지 못한 오디오 판정, 출처의 userinfo
- fix(web-osr): W6h② 적대 검증 4 회차(순서·경쟁) — 출처로 비교, 노드를 못 얻으면 하지 않음, 렌더러가 죽으면 진행 놓기
- fix(web-osr): W6h② 적대 검증 3 회차(악용) — 메뉴의 문서만, 응답 상한, strict·try, 허용한 명령에만 장
- fix(web-osr): W6h② 적대 검증 2 회차(앱 동작) — 보인 체크의 반대값, 저장 가능한 미디어만 새 탭, 오류면 연속 재생 끔
- fix(web-osr): W6h② 적대 검증 1 회차(수명·자원) — 긴 주소의 DevTools 경로, 쥔 객체 놓기, agent 떨어짐
- fix(web-osr): W6h② 적대 검증 — 스크롤한 페이지의 좌표, 주소 확인, 같은 주소 판정, 링크 안 미디어
- feat(web-osr): W6h② 동영상·오디오 우클릭 메뉴 — 연속 재생·모든 제어 기능 표시·새 탭·주소 복사(wire 12, ABI 210)
- fix(web-osr): W6h① 적대 검증 — 모바일 설정 판정·검색 틀 검증·새 창 세션 확인·tick 할당
- feat(web-osr): W6h① 우클릭 메뉴 빈칸 — 새 창에서 링크 열기·새 탭에서 이미지 열기·선택한 글 검색(wire 11, ABI 209)
- docs(web-osr): W6 감사 — 낡은 서술·검증 수·표 깨짐을 고치고, 없는 기능과 W6 남은 틈의 실측을 §7 로
- test(web-osr): W6g 적대 검증 3 차 — 누름 앞단·추가 버튼이 그 view 의 창 세션에서 불리는지 IME 하네스
press로 지킨다 - fix(web-osr): W6g 적대 검증 2 차 — 누름 앞단(창 크롬·URL 클릭·추가 버튼)도 그 view 의 창 세션으로, 두 창 스모크가 실제로 회귀를 잡게
- test(web-osr): W6g — 두 창·알림 토스트의 첫 누름을 스모크로 지키고, IME 하네스가 handleMouse 감싸개를 따라간다
- fix(web-osr): W6g 적대 검증 1 차 — 첫 누름은 그 view 의 창 세션으로 묻고 처리, 토스트가 떠 있으면 넘기지 않음
- feat(web-osr): W6g 창이 뒤에 있을 때 Chromium 탭 본문의 첫 누름도 페이지로(Chrome 처럼, ABI 208) + W6d 실제 끌기 실측 기록
- test(web-osr): W6f② — 닫힌 브라우저로 청하지 않는 것에 맞춰 W6d③ 시험을 고치고, 경쟁 탓에 흔들린 「스스로 닫는 보통 탭」 스모크를 뺌
- test(web-osr): W6f② 적대 검증 6 차 — 시험이 고친 동작을 잡게: 보내는 frame·주소 미리 채우지 않음·닫힌 브라우저·되살리기, 스모크에 연 탭 돌아가기·스스로 닫힘
- fix(web-osr): W6f② 적대 검증 5 차 — 붙일 때 크기 맞춤, maru 의 장은 개수로, 닫힌 브라우저로 보내지 않음, 낡은 기다림 정리
- fix(web-osr): W6f② 적대 검증 4 차 — 팝업 주소를 미리 보이지 않음, Esc 판정을 macOS 키 코드로, 장은 5 초, 스스로 닫힌 탭
- fix(web-osr): W6f② 적대 검증 3 차 — 페이지가 닫은 팝업 뒤 연 탭으로 돌아감, 남은 조합 버림, 되살린 탭의 주소 지움
- fix(web-osr): W6f② 적대 검증 2 차 — 유일한 탭으로 남긴 팝업은 빈 보통 탭으로 새로, 멈춘 sidecar 에서도 붙이지 못한 팝업 정리
- fix(web-osr): W6f② 적대 검증 1 차 — 유일한 탭인 팝업은 페이지가 닫아도 남김, sidecar 를 내리면 맡긴 번호를 잊음, 등록 실패는 번호를 거둠
- feat(web-osr): W6f② 원래 페이지와 이어진 팝업을 maru 탭으로 — 번호 맡기기, 먼저 온 링 쥐기, 그 번호로 탭 붙이기, 페이지가 닫으면 탭 닫기
- test(web-osr): W6f① 판정 보강 — maru 가 직접 쓴 번호는 팝업에 쓰지 않음, 종료 판정은 시간 대신 「유예가 다 갔다」 로그로(부하에서 CEF 가 끝나는 데 9 초)
- fix(web-osr): W6f① 적대 검증 1 차 — 긴 주소 거절, 목록이 차면 주소로, 연 브라우저로 짝짓기·닫힐 때 정리, 종료 중 팝업 닫기
- feat(web-osr): W6f① 팝업을 원래 페이지와 이어진 채 만들기 — maru 가 맡긴 번호로 등록(wire 10, maru 는 아직 맡기지 않음)
- test(web-osr): W6e 놓기 판정 보강 — 받은 놓기에 링크 주소를 놓고, 같은 주소도 2 초 뒤면 새 탭(변이 2 회차의 생존 둘)
- fix(web-osr): W6e 적대 검증 2 차 — 닫기 확인 중 새 탭을 미룸, 놓기 이동은 놓은 그 주소만, maru 도 입력마다 한 장
- test(web-osr): W6e 스모크의 뒤 탭 링크를 5000 자 주소로 — 복원 경로의 4 KiB 상한에서 버려지지 않는지
- feat(web-osr): W6e 페이지가 연 새 탭을 maru 탭으로 — target=_blank·window.open·⌘/가운데 클릭·메뉴 「새 탭에서 링크 열기」(wire 9)
- test(web-osr): W6d 스모크의 첫 끌기를 9 초 뒤로 — 화면이 잠긴 때 7 초로는 페이지가 첫 끌기에 답하지 않은 적이 있다
- fix(web-osr): W6d③ 적대 검증 2 차 — 받는 동안 한 번에 더 읽기, 같은 이름은 「cat 2.png」, 실패·취소의 버퍼 놓기, main 방어
- refactor(web-osr): W6d③ 파일 내용은 Finder 가 청할 때만 — 끌기마다 미리 보내 큰 이미지에서 탭이 멈췄다(ABI 207)
- feat(web-osr): W6d③ 이미지를 Finder 로 끌어내 파일로 — 파일 약속, 안전한 이름, 덮어쓰지 않음, 내려받은 파일 표지(wire 8)
- style(web-osr): W6d② ABI 서식(zig fmt)
- fix(web-osr): W6d② 적대 검증 2 차 — 끌기가 살아 있는지 Zig 가 판정, 시작 자리 표시는 NaN, 다른 앱 끌기는 copy 그대로
- fix(web-osr): W6d② 적대 검증 1 차 — 표지 확인, 세션이 열린 뒤에만 제스처 끝내기, 앞 끌기 취소 순서, 터미널 경로 동작
- feat(web-osr): W6d② Chromium 탭에서 끌어내기 — 페이지 끌기를 macOS 끌기 세션으로, maru 안 놓기는 원래 데이터로(ABI 206·wire 7)
- fix(web-osr): W6d① hello 바이트 골든을 wire 6 으로 — 버전만 올리고 골든을 안 고쳤다(CI 가 잡았다)
- style(web-osr): W6d① 판정자 끌기 페이지 서식(zig fmt)
- fix(web-osr): W6d① 적대 검증 2 차 — 1 MiB 넘는 글을 글자 경계에서, wire 6, 거절로 바뀐 놓기·싣지 않은 끌기, 옛 경로 목록
- feat(web-osr): W6d① 밖에서 Chromium 탭으로 끌어 놓기 — 파일·폴더·글·주소, 페이지가 정한 동작(ABI 205)
- test(web-osr): W6c② 4 차 리뷰 — 왼쪽까지 누른 채 연 메뉴의 떼기 뒤 명령, 띄운 메뉴만 열림 단위 시험
- fix(web-osr): W6c② 적대 검증 2·3 차 — 대본 명령 이름 충돌·「찾기」 앞 빈칸·창 닫힘·키 창·떼기 순서 판정
- feat(web-osr): W6c② Chromium 탭 우클릭 메뉴를 macOS 메뉴로 띄운다 — Chrome 154 항목·문구, 찾기·음성·서비스·이모티콘(ABI 204)
- feat(web-osr): W6c① Chromium 탭 우클릭 메뉴 — sidecar 가 자리 정보를 알리고 고른 명령을 실행·복사한다(wire 5)
- docs(web-osr): W6b 툴팁이 안 뜨던 원인을 수정 전 코드로 재현했다 — 추적 영역 전부 지우기(맨 앞 실측 두 번)
- chore(web-panel): main 기준 리베이스 정리 — ABI 표기 v191~v201 → v193~v203(main 이 191·192 를 가져갔다)
- docs(web-osr): main 기준 리베이스(2026-10-02) — Chromium 탭 갈래를 IME 확정 승인에 맞춘 것과 남은 틈을 W4c 행에 적는다
- fix(web-osr): W6b 툴팁 영역을 hover 탭 본문으로, 퀵 패널이 키를 잃으면 hover 를 푼다 (적대 검증 3 차)
- feat(web-osr): W6b Chromium 탭 툴팁을 macOS 툴팁으로 — sidecar 가 title 글을 정리해 보내고 maru 가 AppKit 툴팁을 단다(wire 4·ABI 201)
- docs(web-osr): W6a② 5차 적대 검증 — 닫힌 팝업 주석을 4차 동작에 맞추고, 해제 연결부 시험 공백·renderer 캐시를 적는다
- fix(web-osr): W6a② 4차 적대 검증 — 그릴지·닫힌 링을 놓을지를 순수 함수로, 닫힌 목록의 링은 GPU 가 끝난 뒤 놓는다
- feat(web-osr): W6a② 앱이 <select> 목록을 그린다 — 팝업 링 보일 장 고르기·본문 위 quad, 열린 목록의 키는 입력기 없이(ABI 200)
- fix(web-panel): main 의 unmarkText 즉시 확정이 Chromium 탭 조합을 두 번 보내지 않게 — 웹 탭은 조합 지우기만, 판정은 Zig
- chore(web-panel): main 기준 리베이스 정리 — ABI 표기 v189~v197 → v191~v199, CEF 의존성 예외 ③ → ④
- fix(web-osr): W6a① 적대 검증 1~7 차 — 팝업 세대를 브라우저마다 잇고 첫 세대를 싣는다, 닫힘·늦은 그림·렌더러 사망 방어, 판정 8 개
- feat(web-osr): W6a① <select> 팝업 — sidecar 가 popup_changed 와 따로 된 팝업 링(MWBP)으로 보낸다, 판정 여섯
- fix(web-panel): 카메라 utility 16차 적대 검증 — 판정 공통 도구로 정리, 정상 종료 판정이 카메라 utility 를 대상에 넣어야 통과, C1 정리
- fix(web-panel): 카메라 utility 15차 적대 검증 — 고아 판정이 host SIGKILL 직전 자식 전부를 본다, 놓치는 반복 문턱 정정
- fix(web-panel): 카메라 utility 14차 적대 검증 — host 가 SIGKILL 로 죽어도 고아가 남지 않는지 판정, 끝내기 직전 샌드박스 밖 helper 모두 확인
- fix(web-panel): 카메라 utility 13차 적대 검증 — 판정이 그것이 카메라 utility 인지(실행 인자)·host 뒤 고아 아님을 본다, 장치 목록만으로 시작됨 실측
- fix(web-panel): 카메라 utility 를 helper 가 끝내 Chromium 이 초당 수백 번 다시 띄우던 것 — 그 utility 만 샌드박스 밖 허용
- fix(web-osr): W7b 10차 적대 검증 — ibeam 이 안 오면 「준비 안 됨」으로 바로 끝낸다, 9차 기록의 과장 정정, video_capture 재시작 반복 발견 기록
- fix(web-osr): W7b 9차 적대 검증 — 키 판정은 입력 준비(ibeam)를 확인한 뒤 한 번만 누른다, 자체 시험 Intel·권한 비트 보강
- fix(web-osr): W7b 8차 적대 검증 — 네이티브 host 는 첫 클릭에 초점이어야(Rosetta 만 다시 누름), 자체 시험이 dylib 서명·ID 확인을 본다
- fix(web-osr): W7b 7차 적대 검증 — x86_64 키 판정은 판정의 클릭 시각 탓(다시 누름), formula helper 확인을 0·샌드박스 문구로
- fix(web-osr): W7b 6차 적대 검증 — 링크는 /System/Library·/usr/lib 만, formula test 가 host·helper 를 띄운다, 여러 아키텍처 거절
- fix(web-osr): W7b 5차 적대 검증 — x86_64 host 서명이 코드를 덮어쓰던 것(headerpad), 링크 경로 가드, 짧은 이름 안내
- fix(web-osr): W7b 4차 적대 검증 — maru 설치 안내 전체 이름, @ 링크 금지, --debug-symbols 금지, audit 주장 정정
- feat(web-osr): W7b — maru-chromium formula · 설치물 Mach-O 를 @rpath 로 바꿔 재서명해 Homebrew 가 고칠 것이 없게
- fix(chrome,web-panel): 긴 안내를 박스 안에서 여러 줄로 · codesign 확인 못 함을 깨짐과 가름
- fix(web-panel): W7a2 후속 — codesign 기한 2 초·kevent·UPTIME_RAW, 시작 실패 안내, 스모크·시험·문서 정정
- feat(web-panel): W7a2 — sidecar 실행 전 검증·실행 사본·릴리스 환경변수 차단·크래시 좀비
- test: W7a1 후속 — 살아남은 변이 셋을 잡는 시험, 7~10 차 기록
- fix: W7a1 적대 검증 9·10 차 — 두 줄 macOS if 게이트·TMPDIR 검증·남은 고정 경로·중복 정리
- fix(test): git 시험 픽스처가 개발자 워크트리를 건드리지 않게 — 워크트리 밖 유일 임시 저장소·git -C 에 --git-dir
- fix(web-panel): W7a1 적대 검증 7·8 차 — 탭별 멈춤 안내·권한 문구·CI 짝·entitlements 검사 자체 시험
- fix(web-panel): W7a1 적대 검증 2~6 차 반영 — 거둔 pid 재사용 방지·끝남 뒤 마지막 frame·검사 강화
- feat(web-panel): W7a1 — 제어 채널 버전 불일치 안내·maru-chromium 설치물·라이선스·Maru.app entitlements
- feat(web-panel): W5c — Chromium 탭의 웹 알림을 maru 알림으로(렌더러 처리기 중계)
- feat(web-panel): W5b2 — Chromium 탭의 위치를 Maru 의 CoreLocation 좌표로(DevTools 덮어쓰기)
- feat(web-panel): W5b1 — Chromium 탭의 권한 요청을 maru 창에 붙는 sheet 로(허용·차단은 Chromium 이 기억)
- feat(web-panel): W5a — Chromium 탭의 JS 대화상자·떠나기 확인·파일 선택을 maru 창에 붙는 sheet 로
- docs(web-panel): W5 결정 보강 — 위치·웹 알림도 W5, 알림은 CDP 대리 스크립트로 maru 가 띄운다, 세 PR 로 나눈다
- docs(web-panel): W5 착수 전 실측과 결정 — Chromium 기본 대화상자는 maru 창 뒤에 숨는다, 네이티브 sheet 로 간다
- fix(web-panel): W4d② 2차 적대 검증 — 자리 비움 모드가 시작도 못 하던 것과 되돌리기·권한·시간 제한을 고친다
- feat(web-panel): W4d② 앱 안 시험기 — Chromium 탭 입력을 AppKit 한 겹부터 넣고 페이지 DOM 이벤트로 판정한다(자리 비움 모드 포함)
- docs(mobile): browser.engine 을 모바일에 안 싣는 이유를 적는다 — 키 판정 게이트
- feat(web-panel): W4d① — 설정 browser.engine 으로 Chromium 엔진을 켠다(maru-chromium 설치 찾기·재시작 후 적용)
- feat(web-panel): W4c — Chromium 탭 키보드·한글 입력·편집 명령을 Zig 가 라우팅한다
- docs(web-panel): 추가 마우스 버튼의 터미널 쪽 동작을 후속으로 적는다(지금은 무시 — 사용자 결정)
- feat(web-panel): W4b — Chromium 탭 포인터(클릭·끌기·hover·휠·커서·뒤로/앞으로 버튼)를 Zig 가 라우팅한다
- fix(web-panel): W4a 적대 검증 — IME 바꿀 범위·글 규칙·클릭 수 상한을 풀고, 판정 input-routed 가 새는 것을 놓치지 않게 한다
- feat(web-panel): W4a — 입력 메시지와 sidecar 의 CEF 입력(마우스·휠·키·IME·편집 명령·커서·우클릭 메뉴 억제)
- fix(web-panel): W3c — OSR 본문은 이미 premultiplied 라 kitty 셰이더의 알파 곱을 쓰지 않는다(전용 fragment)
- feat(web-panel): W3c — Chromium 탭 본문을 Metal 로 그린다(IOSurface 텍스처·보일 링 고르기·GPU 소비자 규칙)
- fix(web-panel): W3b — pump 이 sidecar 를 비우는 사이 끝나거나 다시 뜨면 옛 프로세스 결과를 쓰지 않는다
- feat(web-panel): W3b ② — 앱이 Chromium sidecar 를 띄워 browser 탭을 맡긴다(개발용 환경변수)
- feat(web-panel): W3b ① — codec 탐색 확장(뒤로·앞으로·새로고침·멈춤, 주소·탐색 상태 알림)과 D9 거부 신호
- feat(web-panel): W3a — WKWebView 로그인 유지(macOS 14+)와 쿠키 권한을 허용한 사이트에 묶기
- fix(web-panel): W2 적대 검증 — 슬롯·형식·머리 검증, 시간 초과 권리 반환, 못 알린 링 보관과 재알림
- docs(plans): W2 구현됨 — C3 를 port·토큰·제어 블록·CPU 복사로, 이름은 비밀이 아니다(적대 검증), 크기 변경 전환 프레임
- feat(web-panel): W2 — 픽셀 링(IOSurface 세 장·mailbox 원자 워드)과 mach port 전달, 토큰 인증·적대 메시지 방어
- fix(web-panel): W1c 적대 검증 — 인쇄·JS 대화상자 창 차단, 종료 감시견, 제목 범람 조절, 프로필 거절 강화
- docs(plans): W1c 판정 조정 두 가지(입력→W4, 픽셀→W2)를 사용자 확인으로 기록
- docs(plans): W1c 구현됨 — 착수 전 공격(재실행 Chrome 창), 판정 조정, 별도 formula maru-web 결정, 사라진 실험 자산
- feat(web-panel): W1c — 실제 브라우저(생성·이동·숨김·크기·파괴·N 개), 재실행 Chrome 창 차단, 프로필 백업 제외
- fix(web-panel): W1b 적대 검증 — shutdown 뒤 명령, helper 샌드박스 확인, 부모 종료 감시, stdio 경계, SDK 잠금
- fix(web-panel): W1b 를 경계 게이트에 맞춘다 — 반사 제거, 진단 문구 영어, 빌드 그래프 수
- docs(web-panel): W1b 구현됨 — 판정·실측(helper 셋 모두 샌드박스, stdout 0 바이트)과 구조·명령 문서
- feat(web-panel): W1b ② — maru-web-host·maru-web-helper(CEF sidecar 뼈대)와 판정자, opt-in SDK 받기
- feat(web-panel): W1b ① — sidecar 명령 상자·명령 처리(CEF 없이 기본 test 에서 시험)
- fix(web-panel): W1a 적대 검증 — feed 는 받은 만큼만, 오류 잠금, 제어 문자 거절, 경계 시험
- refactor(web-panel): W1a codec 을 session/web_sidecar/ 여섯 파일로 나눈다 — session/ssh 선례
- feat(web-panel): W1a — 웹 OSR sidecar 제어 채널 wire codec(순수 Zig, CEF 없음)
- docs(plans): W1 착수 전 공격 — 제어 채널을 Mermaid helper 틀로, W1 을 W1a·W1b·W1c 로 나눈다
- docs(web-panel): 적대 검증 반영 — GPU 완료 조건, 샌드박스 배치 과장, 옛 링·배포 서술, D6 과 control-plane, D9(GPU 폴백)
- docs(rules): 런타임 의존성 예외 ③ CEF — 앱에 링크하지 않는 sidecar 전용, 빌드 opt-in, 헤더 비반입
- docs(plans): D2 확정 — OSR 은 선택형 백엔드, 기본은 WKWebView, 기본값 전환은 W8 뒤
- docs(plans): W8 을 추가형 단계로 — 제어 채널에 접근성 메시지를 더할 자리, terminal-browser 도 접근성 없음
- docs(plans): D7 확정 — CEF 는 계속 mock keychain, 프로필은 0700·백업 제외
- docs(web-panel): D7 — mock keychain 의 대가와 서명 고정(Developer ID)으로 풀리는 것·안 풀리는 것
- docs(web-panel): §13.1 13 차 적대적 검증 — Keychain 없으면 쿠키가 저장되지 않는다, 로그인 유지 결정(D6)
- docs(plans): D1 확정 — 브라우저 sidecar 는 항상 maru 앱이 도는 기계에서 돈다
- docs(plans): 웹 OSR 백엔드 구현 계획(W1~W8) — §13.1 실측을 결정·계약·단계로 옮긴다
- docs(web-panel): §13.1 12 차 적대적 검증 — PoC 는 샌드박스 없이 돌았다, 번들 없이도 샌드박스가 되는 배치를 실측
- docs(web-panel): §13.1 구현 전 사전 확인 — 링·보안 전달·대화상자·파일 선택을 실측, 파일 선택 「안 열림」은 PoC 버그였다
- docs(web-panel): §13.1 11 차 적대적 검증 — 시험 페이지 오염을 걷어내고 재측정(25/25), 파일 선택 원인을 좁힌다
- docs(web-panel): §13.1 10 차 적대적 검증 — 숨긴 탭의 JS 는 돈다, confirm 도 멈추고 파일 선택은 조용히 안 열린다
- docs(web-panel): §13.1 9 차 적대적 검증 — 헤더로만 믿던 CEF API 를 돌려 본다, alert 는 페이지를 멈춘다(⑨ 필수)
- docs(web-panel): §13.1 8 차 적대적 검증 — sidecar 하나에 브라우저 N 개를 실측, seed 훅은 정적 페이지에서 비용 0
- docs(web-panel): §13.1 7 차 적대적 검증 — ⑩ 을 IOSurface seed 확인으로 해결 확인, 복사 횟수·브라우저 N 개를 실측 범위로 좁힌다
- docs(web-panel): §13.1 6 차 적대적 검증 — pane 에 보이는 웹은 초당 2~8 회만 바뀐다(⑩ 새 프레임 신호)
- docs(web-panel): §13.1 ⑧ — CEF 154 에서 <select> 팝업 합성을 PoC 로 확인, 목록이 보이고 선택·닫힘 복원까지 된다
- docs(web-panel): §13.1 CEF 154(최신 안정판)로 전부 다시 잰다 — PoC 수치·pane 입력 계약 23 항목 통과, 한글 IME 자동 판정
- docs(web-panel): §13.1 5 차 적대적 검증 — 146 에서 잰 헤더·용량을 154 로 다시 맞춘다
- docs(web-panel): §13.1 4 차 적대적 검증 — CEF 154 에서는 <select> 가 열린다, terminal-browser 인용을 #104 직전으로 고정
- docs(web-panel): §13.1 3 차 적대적 검증 — ⑧ 근거를 146 트리 전체로 넓히고, bootstrap 잔류를 IOSurface port 로 좁힌다
- docs(web-panel): §13.1 ⑧ 을 알려진 문제로 — 기본 <select> 는 CEF 가 ForbidExternalPopupMenus 를 안 불러 안 열린다
- docs(web-panel): §13.1 2 차 적대적 검증 — <select> 가 안 열리고, PoC 의 port 공유는 보안 구멍이다
- docs(web-panel): §13.1 미해결을 부류로 가르고 적대적으로 다시 잰다 — 막는 것은 없고 가장 큰 공사는 VoiceOver
- docs(web-panel): §13.1 을 pane 안 실측·적대적 시험기로 정정한다 — 복사 1 회·버퍼 소유권·호스트 라우팅 여섯 축
- docs(web-panel): §13.1 의 동기를 실측으로 고치고, 입력 주입·terminal-browser 가르기를 판별자와 함께 적는다
- docs(web-panel): §13 을 OSR sidecar 축으로 갱신 — PoC 가 z-order·plugin ABI·공증 전제 셋을 뒤집었다
- feat(agent): enable native hooks for prepared local runtimes
- feat(editor): 프로젝트 바꾸기의 파일과 일치 선택 연결
- feat(session): 이미지 채널 IC3a — 조립기가 image_ref 를 필수 resolver 로 해석하고 매핑을 주입된 해제 함수로 푼다
- refactor(syntax): 문법 이름 매핑을 syntax.languageFor 하나로 — 호스트 사이의 사본을 없앤다
- feat(agent): preserve immutable hook format across host attach and upgrade
- docs(layering): 호스트 사본 훑기에서 남은 후보를 적는다
- refactor: 호스트 사이의 사본 셋을 중립 하나로 — 키 변환표 · divider 잡기 오프셋 · 에이전트 도크 그리기 예산
ohah/zntc
- refactor(bundler): remove obsolete wrapper name fallback
- fix(transformer): match tsc emitDecoratorMetadata output
- fix(bundler): assign SymbolIds to semantic-less ESM wrappers
- fix(bundler): keep asset wrapper names aligned with symbols
- fix(bundler): drop TypeScript imports used only as types like tsc
- fix(bundler): assign SymbolIds to semantic-less runtime helpers
- test(symbols): cover exact identity diagnostics
- fix(bundler): trigger identity prepass for new.target
- fix(bundler): remove module-wide static-field Object veto
- fix(bundler): evaluate modules of unused or inlined JS imports
- fix(bundler): scope class method Object shadow checks
- fix(transformer): keep top-level await modules unsplit in async esm factories
- fix(bundler): scope JSX spread Object shadow checks
- fix(bundler): retain unrelated Object spread graphs
- test(transformer): pin exact reference count invariants
- fix(bundler): reject exported top-level await without async functions
- fix(bundler): retain exact graph for new.target lowering
- fix(bundler): keep module code when lowering top-level await
- fix(transformer): prepass object spread lowering
- fix(transformer): prepass optional catch lowering
- fix(transformer): prepass ES2020 operator lowering
- fix(transformer): gate class lowering pre-pass by feature
- fix(bundler): retain exact IDs for captured arrows
- test(integration): fix local-only watch memory and Hermes timeout failures
- fix(transformer): declare native parameter initializer temps outside the body
- fix(transformer): preserve captures around dynamic eval
- fix(transformer): keep the source reference for block-renamed object shorthands
- fix(bundler): preserve CJS script mode during resync
- fix(transformer): name values after runtime computed keys
- fix(transformer): guard lexical captures in with scopes
- fix(transformer): finalize lexical arguments capture names by SymbolId
- fix(transformer): finalize lexical this capture names by SymbolId
- fix(transformer): track generated super assignments by node identity
- perf(transformer): name ES5-lowered methods with their own function names
- fix(bundler): retain nested optional key arguments
- fix(bundler): retain two-level computed key arguments
- fix(bundler): retain bounded nested optional key calls
- test(symbol): accept generated function-expression self-name scopes in the exact gate
- fix(bundler): keep nested member optional key calls
- feat(bundler): retain nested optional key calls
- fix(transformer): register __name for ES5 object literals with computed keys
- fix(transformer): name ES5-lowered methods, accessors and object members
- feat(bundler): retain bounded optional key arguments
- feat(bundler): retain optional member-read sequence keys
- feat(bundler): retain optional nested sequence calls
- feat(bundler): retain nested sequence call arguments
- feat(bundler): retain bound call argument sequences
- feat(bundler): retain bound optional sequence keys
- fix(transformer): keep private statics, new.target and field function names
- feat(bundler): retain one nested computed key argument
- feat(bundler): retain bound computed reads in sequence arguments
- fix(transformer): canonical numeric class keys, useDefine static blocks, empty CLI args
- feat(bundler): retain computed-member key arguments
- fix(transformer): keep anonymous class names under class lowering
- feat(bundler): retain bounded computed member key arguments
- feat(bundler): retain bounded ordinary key call arguments
- feat(bundler): retain bounded optional key call arguments
- feat(bundler): retain exact-bound optional call keys
- fix(bundler): keep static name members and reserve the --keep-names helper
- feat(bundler): retain bound computed call keys
- fix(transformer): keep inferred names of ES5-lowered defaults and renamed bindings
- docs: record PR 5520 sequence-call boundary
- feat(bundler): retain safe computed sequence calls
- docs: record PR 5518 symbol sequence boundary
- feat(bundler): retain exact-bound call sequence results
- fix(codegen): restore --keep-names names where each value is created
- feat(bundler): retain bound member values in sequences
- fix(bundler): keep inferred function names through inlining and ES5 renames
- feat(bundler): retain bounded effectful argument sequences
- feat(bundler): retain bounded effectful sequence keys
- feat(bundler): retain unresolved computed optional keys
- test(bundler): cover unresolved optional call keys
- fix(bundler): retain unresolved deep optional calls
- test(bundler): cover unresolved deep optional calls
- test(bundler): enforce zero SymbolId debt fingerprint
- fix(transformer): preserve deep optional method call guards
- fix(bundler): retain bound deep optional member receiver calls
- fix(bundler): retain nested bound call-result member receivers
- fix(bundler): retain bound call-result optional member calls
- fix(bundler): retain bound call-result optional reads
- fix(bundler): retain bound call-result static reads
- fix(bundler): retain bound call-result member invocations
- fix(bundler): retain bound call-result optional invocations
- fix(bundler): retain unresolved optional receiver invocations
- fix(bundler): retain bound optional receiver invocations
- fix(bundler): retain unresolved optional member invocations
- fix(bundler): retain bound computed optional invocations
- fix(bundler): retain bound optional member invocations
- fix(bundler): retain unresolved optional static calls
- fix(bundler): keep switch block-function names and discriminant reads exact
- fix(bundler): retain bound optional static calls
- fix(bundler): retain optional computed static field names
- fix(bundler): retain nested optional initializer calls
- fix(bundler): retain optional static member calls
- fix(codegen): lower strict switch-case functions for sloppy output
- fix(bundler): retain unresolved static initializer roots
- fix(bundler): retain unresolved optional static keys
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.