2026-09-04
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
maru에서 영속 터미널이 기본이 된 날입니다. keep-alive 기본값을 true로 전환하면서 그 전환이 드러낸 테스트의 프로세스 전역 누수를 걷었고(#3170), 문서의 값 서술을 단일 출처로 되돌렸습니다(#3190). session-host는 쓸 수 있는 backend가 있으면 래치를 풀어 붙어 있는데도 원격으로 안 열리던 것을 고치고(#3169), 소켓이 끊겨 닫은 것과 앱이 닫은 것을 갈랐으며(#3196), 5초 마감을 근거와 함께 확정했습니다(#3175). SSH는 「빠른 여닫기」에서 터지는 세 원인 때문에 세션을 바꿀 수 없던 문제를 고쳤습니다(#3198).
원격 감시는 정직해졌습니다. 감시를 포기했으면 화면이 말하게 하고(RW6, #3173), macOS 원격이 「감시하는 척」하던 것을 못 하면 못 한다고 말하게 고쳤으며(#3179), 도크 토글이 RW5를 풀던 「잠시 멈춤」과 「놓아줌」을 갈랐습니다. 이어 RW7 설계대로 macOS·BSD 원격을 폴링으로 되살리고(#3194), 한도에서 포기 대신 폴링으로 내려가며(#3201), 폴링 다이제스트가 화면의 숫자까지 보게 했습니다. status마다 도는 core.fsmonitor 실행 벡터를 닫고(#3188), filter는 닫으면 안 되는 문이라 선을 그었습니다(#3191). 편집기 Term은 자기 키 컨텍스트를 얻어 전역에 못 넣던 chord를 그 Term 안에서 세우고(#3187), ⌘D를 확정 자리로 옮기되 비교 뷰에서는 전역으로 돌려줬습니다(#3199). sync(2026) 어긋남의 원인이 청크 통째 적용이었음도 고쳤습니다(#3192).
모바일은 U2 전환 손짓을 「덮개」로 정하고 돌아온 세션이 빈 화면부터 다시 쌓지 않게 했으며(#3177), 든 세션에 상한과 버림 표시를 두고(#3180) 원격 화면에 뒤로가기를 그렸습니다. 컨트롤 축의 정책은 host에서 코어로 옮겼습니다. 릴리스 쪽은 전날 열린 codesign 검증 수정 #3168을 병합하고, 같은 버전을 두 번 빌드하면 마지막 한 줄이 릴리스를 죽이던 CI를 고쳤으며(#3203), 셸 단계가 게이트를 조용히 깨는 것을 원장으로 막았습니다(#3171). session-host는 릴리스 Zig 실행 권위, baseline production runner·app 권위·준비 조율·트랜잭션, candidate publication 트랜잭션과 제품, prerequisite 트랜잭션과 제품, release ordering, trusted source directory, candidate release driver(#3208)까지 세웠습니다. @ohah/pdf는 Type3 글리프 스트림을 쪽 단위로 들고 낸 명령을 되풀이하게 했고, 파싱에서 파일을 통째로 훑던 두 자리를 걷어냈습니다.
공개 커밋 84개, 해당일 생성 또는 병합된 PR 41개를 정리했습니다. PR 생성 40개·병합 41개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/maru
- feat(session-host): add candidate release driver
- test(session-host): require candidate release driver
- docs(session-host): define candidate release driver
- feat(session-host): add trusted source directory owner
- test(session-host): require trusted source directory owner
- docs(session-host): define trusted source directory owner
- feat(session-host): add candidate release bootstrap contract
- test(session-host): require candidate release bootstrap contract
- docs(session-host): define candidate release bootstrap contract
- feat(session-host): wire candidate release product owner
- test(session-host): require candidate release product owner
- docs(session-host): define candidate release product owner
- fix(ci): 같은 버전을 두 번 빌드하면 마지막 한 줄이 릴리스를 죽였다
- feat(session-host): own candidate release ordering
- test(session-host): require candidate release transaction
- docs(session-host): define candidate release transaction
- refactor(mobile): 컨트롤 축의 «정책» 을 host 에서 코어로 옮긴다
- fix(scm): 판 번호를 박아 둔 «세 번째» 자리를 고친다
- feat(scm): 한도에서 포기 대신 폴링으로 내려간다 (RW7d)
- feat(session-host): share candidate release deadlines
- test(session-host): require shared release deadlines
- docs(session-host): define shared release deadline entrypoints
- feat(input):
⌘D를 확정 자리로 옮긴다 — 비교 뷰에서는 전역으로 돌려준다 - feat(session-host): 소켓이 끊겨 닫은 것과 앱이 닫은 것을 가른다
- fix(ssh): 세션을 바꿀 수가 없었다 — 원인이 셋이고 셋 다 「빠른 여닫기」에서 터진다
- docs(mobile): U2 를 실기로 확인하고, 그 회차가 찾은 「전환이 막힌다」를 적는다
- fix(scm): 폴링 다이제스트가 «화면의 숫자» 까지 본다 — §3 이 이미 잰 구멍
- feat(session-host): own candidate prerequisite product
- test(session-host): require candidate prerequisite product owner
- docs(session-host): define candidate prerequisite product owner
- feat(scm): macOS·BSD 원격을 폴링으로 되살린다 (RW7a·b·c)
- feat(session-host): own candidate prerequisite transaction
- test(session-host): require candidate prerequisite transaction
- docs(session-host): define candidate prerequisite transaction
- fix(render): 판정자의 lock 관용구를 맞춘다 — mutex.lock 은 오류 합집합이다
- fix(render): sync(2026) 어긋남의 원인은 게이트가 아니라 «청크 통째 적용»이었다
- fix(scm): filter 는 «닫으면 안 되는» 문이다 — 선을 긋고 못 박는다
- docs(session-host): 기본값 전환 완료를 문서에 반영하고 값 서술을 단일 출처로 되돌린다
- feat(session-host): bind candidate publication product
- test(session-host): require candidate publication product owner
- docs(session-host): define candidate publication product owner
- fix(scm): status 마다 도는 실행 벡터를 닫는다 — core.fsmonitor
- test(session): 기본값 전환이 드러낸 프로세스 전역 누수를 걷는다
- feat(session): keep-alive 기본값을
true로 전환한다 — 영속 터미널이 기본이 된다 - feat(input): 편집기 Term 키 컨텍스트 — 전역에 못 넣던 chord 를 그 Term 안에서 세운다
- feat(session-host): own candidate publication transaction
- test(session-host): require candidate publication transaction
- docs(session-host): define candidate publication transaction
- docs(scm): RW7 설계 — macOS·BSD 를 폴링으로 되살린다
- feat(session-host): wire baseline production transaction
- test(session-host): require baseline production transaction
- docs(session-host): define baseline production transaction
- fix(mobile): 나가는 자리가 둘인데 하는 일이 달랐다 — 뒤로가기를 그리고 길을 하나로 (U2)
- fix(mobile): 원격 화면에서 나갈 자리가 없었다 — 덮개로 바꾸려면 돌아갈 수 있어야 한다 (U2)
- feat(session-host): orchestrate baseline preparation
- test(session-host): require baseline preparation transaction
- docs(session-host): define baseline preparation transaction
- feat(session-host): bind baseline app authority
- test(session-host): require bounded baseline app binding
- docs(session-host): define baseline app authority binding
- docs(mobile): U2 세 슬라이스를 완료로 적고 남은 것을 실기로 좁힌다
- feat(mobile): 든 세션에 상한과 버림을, 목록에 그 표시를 (U2b·U2c)
- fix(scm): macOS 원격은 «감시하는 척» 하고 있었다 — 못 하면 못 한다고 말한다
- feat(mobile): 다른 세션을 봤다 돌아와도 빈 화면부터 다시 쌓지 않는다 (U2a)
- docs(mobile): U2 의 전환 손짓을 «덮개» 로 정하고 슬라이스를 쪼갠다
- feat(session-host): compose baseline production runner
- test(session-host): specify baseline production runner
- docs(session-host): define baseline production runner
- fix(scm): 「잠시 멈춤」과 「놓아줌」을 가른다 — 도크 토글이 RW5 를 풀었다
- fix(agent): 화면이 어느 규칙으로 그 상태를 냈는지 남긴다 — 물을 수단이 없었다
- docs: 5초 마감을 확정하고 그 근거를 적는다 — 옛 문장은 결정이 아니었다
- docs(control-plane): §4a 가 정한 두 가지가 코드와 어긋나 있었다
- fix(build): 원장이 첫날에 하나를 잡았다 — baseline-child-paths 를 가린다
- fix(build): 셸 단계가 게이트를 조용히 깨는 것을 원장으로 막는다
- feat(scm): 감시를 포기했으면 화면이 말한다 (RW6)
- feat(session-host): bind release Zig authority
- test(session-host): pin release Zig authority
- docs(session-host): define release Zig authority
- fix(session-host): 쓸 수 있는 backend 가 있으면 래치를 푼다 — 붙어 있는데도 원격으로 안 열렸다
- fix(ci): 떼어낸 main executable 에 건 codesign 검증이 릴리스를 매번 막았다
ohah/pdf
- chore: 실수로 커밋된 찌꺼기 x 를 지운다
- perf: 파싱에서 파일을 통째로 훑던 두 자리를 걷어낸다
- perf: Type3 글리프가 낸 명령을 받아 적어 두고 되풀이한다
- perf: Type3 글리프 스트림을 쪽 단위로 들고 있는다
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.