Skip to content

캘린더 정본 프로토콜의 안전성과 편집 경로 일관성을 완성한다 #743

Description

@developer-1px

목적

캘린더가 기존 정본 모듈을 소비하면서 입력·편집·선택·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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions