2026-07-02

요약 (AI 작성)

오늘은 maru의 앱 시작·생명주기 안정성에 집중한 날이었습니다. 비정상 시작으로 프로세스가 죽어도 앱을 종료하지 않고 창을 유지하도록 lifecycle 루트커즈를 잡고, 시작-hold를 exit-code 게이트·grace window·죽은 입력 가드·좀비 reap으로 강화했습니다. 여기에 held 창 UX(재시도 ⏎·지속 안내·config 노브)를 얹고, 잘못된 shell.command로 앱이 크래시하던 문제는 기본 셸 폴백으로 막았습니다. 시작 디렉터리(workspace.root)를 GUI 필드로 노출해 셸 경로 오용 트리거를 없애고, PTY login 래퍼가 셸 경로·인자를 작은따옴표로 감싸 공백 경로 word-split도 방지했습니다.

렌더링 쪽에서는 사이드바 스피너를 sync(2026) 게이트에서 독립적으로 present하도록 분리하고, ESU edge로 폴링이 놓친 완성 프레임을 flush하도록 고쳤으며, 관측 로거를 .sync로 승격했습니다. 워크스페이스 직렬화 리더를 key-addressed 방식으로 전환해 스칼라 필드의 additive 하위호환을 확보하고 진화 계획도 문서로 남겼습니다. 이 밖에 사이드바 카드별 좌측 accent 막대색을 우클릭 메뉴로 배경색과 별도 지정할 수 있게 하고, 데스크톱 알림 제목에 발신 위치(탭 › 팬)를 접두하는 등 UX 다듬기도 이어졌습니다.

커밋

ohah/maru

PR (해당일 생성/머지)

repo#상태제목
ohah/maru#1153mergedfeat(observability): sync(2026) 게이트 관측 로거 .sync 승격
ohah/maru#1152mergedfix(app): held-Enter 재시도가 rename·검색 Enter를 뺏던 회귀 수정 (#1151 리뷰 4건)
ohah/maru#1151mergedfeat(app): held 창 UX — 재시도(⏎)·지속 안내·config 노브 (#4·#5·#6)
ohah/maru#1150mergedfeat(notify): 데스크톱 알림 제목에 발신 위치(탭 › 팬) 접두
ohah/maru#1149mergedfix(pty): login 래퍼가 셸 경로·인자를 작은따옴표로 감싼다 (공백 경로 word-split 방지)
ohah/maru#1148mergedfeat(settings): 시작 디렉터리(workspace.root) GUI 필드 — 셸 경로 오용 트리거 제거
ohah/maru#1147mergedfix(app): 시작-hold 강화 — exit-code 게이트·grace window·죽은 입력 가드·좀비 reap (리뷰 5건+#1)
ohah/maru#1146mergedfeat(app): 비정상 시작 사망 시 앱 종료 대신 창 유지 (lifecycle 루트커즈)
ohah/maru#1145mergedfeat(render): 사이드바 스피너를 sync(2026) 게이트에서 독립 present
ohah/maru#1144mergedfix(config): 잘못된 shell.command에 앱 시작 크래시 방지 — 기본 셸 폴백
ohah/maru#1143mergedfix(render): sync(2026) ESU edge로 폴링이 놓친 완성 프레임 flush
ohah/maru#1142mergedfix(sidebar): code-review high 반영 — 배경 tint 카드 모양·이중 tint·파서 forward-compat 상한
ohah/maru#1141mergedfeat(workspace): 직렬화 리더 key-addressed 전환 — additive 스칼라 필드 하위호환
ohah/maru#1140mergeddocs(workspace-restore): 직렬화 진화 계획 — 스칼라 필드 key-addressed 파싱(미구현)
ohah/maru#1139mergedfeat(sidebar): 카드별 좌측 accent 막대색 — 우클릭 메뉴로 배경색과 별도 지정