Repository navigation
Description
목적
캘린더가 기존 정본 모듈을 소비하면서 입력·편집·선택·gesture·clipboard·조회·문서 계약을 일관되게 지키도록 한다. 앞선 구조 감사와 프로토콜 안정성 감사의 발견을 이 이슈의 실행 범위로 보존한다.
Outcome
동일한 Calendar 편집은 입력 경로와 preview/commit에 관계없이 같은 의미를 갖고, 잘못되거나 오래된 요청은 해당 요청의 문서·선택·History·성공 후처리를 남기지 않는다. Host에는 조합·제품 정책·fixture·표현만 남긴다.
Done / 수용 기준
- 알 수 없는 런타임 Intent가 삭제로 떨어지지 않고 안전하게 거절된다.
- 생성·수정·반복 편집·붙여넣기가 같은 Calendar 유효성 규칙을 지키며 성공한 문서를 다시 열고 조회할 수 있다. 잘못된 종료 시각, 소속 calendarId, 비정수 반복 간격을 검증한다.
- clipboard parser와 paste가 잘못된 구간을 거절한다. 다른 문서의 calendarId는 기본적으로 거절하고 명시적인 대상 소속 정책만 기존 도메인 API로 처리한다.
- drag capture 이후 대상 변경·삭제를 실행 전에 재검증하여 길이 덮어쓰기와 삭제된 발생분 재생성을 막는다.
- Cut은 clipboard에 확정한 대상을 제거한다. clipboard writer 재진입으로 선택이 바뀌어도 다른 대상을 삭제하지 않는다.
- 종일 반복 일정 전체 resize의 Inspector/pointer 의미를 일치시키고 preview/commit의 반복 범위 계산을 정본 도메인에서 공유한다.
- 단일 반복 일정 drag의 this/this-and-following/all 회귀를 복구하고 그룹 반복 이동의 범위·중복 시리즈 처리 정책을 명시하고 검증한다.
- pointer 편집은 기존 commitIntent의 성공 후처리 계약을 사용한다.
- selection 이동 planner의 uniqueId 우회를 기존 createEditingIdAllocator로 이행하고 충돌 반복이 유한하게 끝난다.
- 반복 projection의 숨겨진 400회 제한을 없애고 요청 구간 기준 계산으로 먼 미래에도 결과가 누락되지 않는다. 성능을 위해 의미를 조용히 바꾸지 않는다.
- Calendar binding의 hit target과 resize 측정을 해당 인스턴스로 제한하고 너비가 다른 두 인스턴스를 검증한다.
- README의 selection.set / keyboard / nullable clipboard 예제를 현재 공개 API와 일치시키고 Temporal 직접 의존성을 선언한다.
- 현재 Calendar profile에 시간 단위·exclusive end·반복 범위·실패·stale·clipboard 호환성과 지원 범위를 owner 위치에 기록한다. 공개 API reference·site Usage·source registration이 실제 구현에 연결된다.
- 관련 owner 행동 테스트, 타입·빌드·문서 검사, 실제 Calendar 경로 검증, 최종 diff 검토 후 PR을 연다. 사용할 수 없는 검사는 통과로 기록하지 않는다.
원인과 정본 위치
- Editing/Calendar: 도메인 유효성, 반복 의미와 순수 계획, source 재검증, clipboard, projection, 공통 ID 할당기 소비.
- Calendar Hands: 성공 후처리, 캡처한 Cut 대상 연결, scoped Web binding, 제품 표면의 실패·미지원 전달.
- Web / Affordance / Selection / EditingSession / Core: 기존 정본과 공통 보장을 재사용한다.
Don't / 제외
Core API·계층, 전역 command bus/registry, 공통 version envelope를 새로 만들지 않는다. AI·협업 wire protocol·영속화·외부 캘린더 연동을 추가하지 않는다. 자동 전체 CI를 되살리거나 수동 CI를 관례적으로 실행하지 않는다. 기존 사용자 checkout의 수정과 별도 PR #740, #734, #730, #726, #587을 보존하며 임의로 병합하지 않는다. 이번 인계의 종료점은 PR 생성이며 merge는 별도 요청에 따른다.
기준과 검증 증거
감사 기준 main: dabbe80.
기존 관련 59개 파일 886건 통과·4건 skip, Calendar React 9개 파일 40건 소스 진입점으로 통과. 통과 여부와 별개로 공개 API 메모리 fixture에서 unknown Intent 삭제, stale drag 길이 덮어쓰기/발생분 재생성, Cut 대상 불일치, 잘못된 clipboard 구간, 반복 간격 1.5, 400회 이후 조회 누락을 재현했다.
구현에서는 이 반례를 owner 회귀 테스트로 남기고 실제 consumer 경로와 함께 검증한다. 외부 History 및 브라우저 증거의 범위를 과장하지 않는다.
Activity
developer-1px commentedon Sep 9, 2026
구현과 로컬 검증을 진행했습니다. unknown Intent, 입력 유효성, stale drag, 캡처 cut, 반복 범위/preview 정본화, 인스턴스별 DOM 범위, bounded ID 할당, 400회 조회 제한을 회귀 테스트로 닫았습니다. 그룹 following은 시리즈별 가장 이른 선택 발생분을 기준으로 하고 종료일/이후 제외 날짜를 보존합니다.
관련 owner 테스트 972건 통과·기존 4건 skip, site 141건 통과, owner/site 타입 검사와 빌드·API reference·문서 검사를 확인했습니다. 추가 점검에서 JSON 확장 metadata를 가진 발생분 분리도 재현하여 보존 테스트를 더했습니다. 기존 Chrome의 실제 Calendar 경로에서 편집/거절/이력 흐름을 확인 중이며, 독립 tarball 설치에서 Temporal 직접 의존성과 public import도 통과했습니다. 자동/수동 원격 전체 CI는 실행하지 않았습니다.
developer-1px commentedon Sep 9, 2026
구현·검증 완료
PR #744: #744
ba323d53e7eae70b18cf733df0248622826224e2. 로컬 worktree와 원격 PR head가 일치하고 worktree는 깨끗합니다.PR은 열려 있고 병합하지 않았습니다. 이 이슈는 PR 병합 시 닫히도록 연결했습니다.