Crowny Office — 포커스(Focus/GTD) 모듈 신설 (B-포커스)
개요
설계 6번 모듈 "포커스 Focus — GTD 할 일 관리"를 신규 구현. CrownyShell API v1
계약(registerModule/registerCommand)에 맞춘 독립 모듈이며, 신규 파일만 추가
(라이브 파일 무접촉).
무엇을 했는지
focus.js: 브라우저 UI + 순수 Core 로직(듀얼 익스포트 — Node module.exports
와
window.CrownyFocusCore 동시 노출).
자연어 날짜 파서(한/영): 오늘/내일/모레, 요일명(한글 전체·약어 + 영문 전체·약어),
"매주 <요일>"/"every <weekday>", "매일"/"every day", 시각("3시","오후 3시",
"3시 30분","3pm","9am","3:30pm","15:00"). 오전/오후 미지정 1~6시는 오후로 간주하는
휴리스틱(회의 예약 관례) — focus.한선과 동일 규칙.
GTD 퍼스펙티브: 인박스/오늘(지남+오늘 그룹)/예정/플래그/프로젝트/태그/리뷰.
단일 키 액션(선택 상태): Space=완료, F=플래그, T=오늘로, D=마감(프롬프트, 자연어
파싱), P=프로젝트(프롬프트), N=새 작업.
인스펙터 패널: 연기일/마감일/반복/플래그/연결된 문서.
리뷰 퍼스펙티브: 프로젝트별 리뷰 주기 + 기한 도래 배지 + "리뷰 완료" 버튼.
window.CrownyFocus.quickCapture(text) 공개(셸 ⌃Space 전역 수집이 호출),
window.CrownyFocus.renderTodayInto(el) 공개(홈 모듈의 "오늘" 읽기전용 임베드,
체크박스로 즉시 완료 반영).
저장: localStorage.crowny-focus(작업+프로젝트) / crowny-docindex에 프로젝트를
문서 엔티티로 등록(
focus-project-<id>).
디자인: office-design-tokens.css의 od- 토큰만 사용(임의 팔레트 없음), 모듈
식별색
--od-mod-focus(#A34A5E)는 탭/점/선택 테두리에만 사용.
focus.한선: 파서(요일인덱스/다음요일오프셋/시각파싱/자연어날짜파싱)와 상태전이
(작업생성/작업완료토글/작업플래그토글/작업오늘로/작업마감설정/작업프로젝트설정/
다음반복오프셋/작업분류)를 실구현. 달력 산술 함정(윤년 등) 회피를 위해 날짜를
"오늘로부터 며칠"(dayoffset) 정수로 표현 — 실제 캘린더 변환은 JS Date가 담당하는
역할분리 설계.
검증
node --check focus.js → 통과.
focus.한선: CROWNY_STRICT=1 ./hanseonc_high focus.한선 > /tmp/focus.toau (경고 0) →
./crownyc run /tmp/focus.toau → 자체시험 41/41 통과(
ALL_PASS).
focus.js Core: Node 하네스(scratchpad/focus.test.js) 44 assert 전체 통과
(한국어 9종 + 영어 8종 자연어 날짜, 반복 전진, 상태전이, 그룹핑, 리뷰주기).
- 크라우니코드: lookup
할일관리GTD 계열 HIT 0건(범용 뼈대 코드만 존재, 실제
파서/상태전이 로직 없음 확인 후 신규 작성) → MISS 2건(생성) → learn add 2건
(
포커스GTD자연어날짜파서,
포커스GTD작업상태전이).
관련 파일
/Users/ef/CrownyDoc/한선씨/정적/focus.js
/Users/ef/CrownyDoc/한선씨/정적/focus.한선
- (테스트 하네스, 비영속)
scratchpad/focus.test.js
잔여 이슈
window.CrownyShell 자체는 이 세션 시점에 아직 다른 빌더가 구현 중(코드베이스에
미존재 확인) — 계약(registerModule/registerCommand/gotoModule/setStatus/
openQuickCapture)대로 호출만 해둔 상태. 셸이 배선되면 별도 검증 없이 바로 연동될
것으로 예상되나, 실제 셸 완성 후 라이브 통합 스모크가 필요.
- D/P 단일 키 액션은
window.prompt 기반(경량 구현) — 셸에 표준 모달 컴포넌트가
생기면 인라인 인스펙터 필드 포커스로 교체 여지.
focus.test.js는 focus.한선의 자체시험과 동일 로직을 재검증하는 성격이라 별도
.한선 동반을 만들지 않음(신규 로직 아님, scratchpad 임시 테스트 도구).