Repository navigation
Closed
Labels
enhancementNew feature or requestNew feature or requestready-for-agentFully specified, ready for an AFK agentFully specified, ready for an AFK agent
Description
Goal Anchor
- Outcome: Annotation을 생태계의 정본 API만으로 구성하고 Demo에는 fixture, copy, layout, 제품 정책과 조합만 남긴다.
- Done: Editing의 selector geometry API와 하나의
@interactive-os/json-document-annotation공개 패키지로 Annotation Hand를 제공하고, Demo의 재사용 UI·gesture·projection·serialization 구현을 제거한다. 공개 API, 소유 패키지 API 문서, site Usage, source registration, owner 테스트와 실제 Demo 검증을 갖추며 영향 범위 production source LOC를 현재 1,168 LOC보다 줄인다. - Don't: 현재 6개 도구, comment/reaction, move/resize, undo/cancel, raster 동작과 minimalist 시각 결과를 바꾸지 않는다. Host의 fixture,
createId, 활성 도구, 문구, 스타일 토큰, 배치, output 조합 정책을 package가 소유하지 않는다.json-document-react에 Annotation 도메인 책임을 추가하지 않는다. merge는 이 이슈 범위가 아니다.
확정한 정본 경계
@interactive-os/json-document-editing: selector 변환, annotation bounds, resize-handle geometry의 정본.@interactive-os/json-document-affordance: gesture lifecycle 정본을 유지한다.@interactive-os/json-document-web: pointer capture, SVG 좌표 변환, raster decode/rendering 정본을 유지한다.- 신규
@interactive-os/json-document-annotation: tool descriptor, gesture→Intent orchestration, SVG shape projection, transient preview, resize handles, comment composer/preview, 접근 가능한 기본 Annotation Hand UI를 소유한다. - Demo: fixture,
createId, 활성 도구, 제품 문구, 스타일 토큰, layout, output 조합만 주입한다. - Structured output은 정확한
AnnotationDocument를 표시하고 selection을 document serialization에 합치지 않는다. - headless/React 패키지를 둘로 나누지 않고 신규 패키지 하나로 닫는다.
구현 순서
- Editing geometry 공개 API와 owner 테스트
- Annotation Hand 패키지와 contract 테스트
- 소유 패키지 API reference, site Usage, source registration
- Demo consumer migration과 route-local 중복 삭제
- production source LOC, package 검증, site typecheck/test/build, 실제 Demo 상호작용 검증
실패 및 재계획 조건
- Demo에 shape, gesture, comment 동작 구현이 남는다.
- preview와 commit이 서로 다른 selector 계산을 사용한다.
json-document-react가 Annotation 도메인 타입이나 동작을 알게 된다.- 영향 범위 production source LOC가 1,168 LOC 미만이 되지 않는다.
- 기존 도구와 편집·취소·raster 동작 또는 minimalist 시각 결과가 달라진다.
제외
- W3C JSON-LD 모델 도입
- 네트워크 저장·협업 기능
- Database 또는 다른 Demo 변경
- PR merge와 worktree 정리
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestready-for-agentFully specified, ready for an AFK agentFully specified, ready for an AFK agent
Activity
developer-1px commentedon Aug 26, 2026
작업 계획
Goal Anchor
단계
위험과 재계획 조건
Database 작업은 별도 worktree/PR에서 진행 중이며 이 이슈에서는 변경하지 않는다. merge와 정리는 제외한다.
developer-1px commentedon Aug 26, 2026
구현 진행
완료된 경계:
transformAnnotationSelector를 사용합니다.AnnotationHand공개 API, owner test, README, 생성 API reference, site Usage와 source registration을 연결했습니다.AnnotationDocument입니다.남은 작업은 최종 diff 감사, 커밋·푸시, PR correlation입니다.
developer-1px commentedon Aug 26, 2026
PR 생성 및 최종 검증
issue-588-annotation-canonical-handbbd8552f,db517769남은 항목은 GitHub CI 완료와 별도 승인이 필요한 merge뿐입니다.
developer-1px commentedon Aug 26, 2026
CI 보정
첫 Site job은 새 workspace의 source alias가 site TypeScript/Vite 설정에 누락되어 실패했습니다.
site/tsconfig.json과json-document-source-aliases.ts에 정본 source 경로를 등록하고, packagedist를 지운 깨끗한 상태에서 site typecheck와 production build를 다시 통과시켰습니다.4c89fbc7/demo/annotation을 다시 열어 Annotation Hand 상호작용 확인 완료developer-1px commentedon Sep 8, 2026
후속 실행 계획 — #725 건강도 감사의 Annotation 단계
사용자의 “좋아 다음” 요청으로 기존 #588 / #589를 이어간다. 원격 PR은 2026-08-26 이후 변경되지 않았고, 기존 worktree 등록은 없다. 별도 이슈/PR로 구현을 복제하지 않는다.
Goal Anchor
이번에 닫을 기존 계약의 누락
AnnotationSelection형태, 선택한 순서, primary 및 Undo/Redo 복원 결과를 보존한다. 새 Selection family나 공개 명령은 도입하지 않는다.검증과 경계
developer-1px commentedon Sep 8, 2026
중간 기록 — 재사용과 호환성을 함께 닫는 기준
이번 통합에서 같은 선택 엔진을 쓴다고 모든 도메인의 순서를 같게 만들면 안 된다는 점을 확인했습니다.
ids는[C,A]입니다.최신 main의 변경도 기존 계약에 포함해 보존하고 있습니다.
useInteractionHandle→ Affordance/WebcreateId, 활성 도구useAnnotationOutput→ Core/Web기존 PR 이후 main에 추가된 복사 가능한 출력 패널과 Save/Restore/Image UI를 제거하면 기능 보존 계약을 위반합니다. 그래서 출력 lifecycle을 같은 Annotation 패키지의 hook으로 제공하고, 화면 조합은 Host에 유지했습니다. 이 hook은 새로운 편집 명령이 아니며 기존 Core commit과 Web raster API를 조합합니다. Structured JSON은 selection을 섞지 않은 정확한
AnnotationDocument입니다.읽을 코드와 검증 사례:
packages/json-document-editing/src/annotation-selection.ts: 도메인 표현과 정본 선택 엔진의 경계packages/json-document-editing/tests/annotation-editor.test.ts: 역순 다중 선택, 삭제 reconcile, Undo/Redo 선택 복원, 퇴화한 arrow 거부packages/json-document-annotation/src/annotation-hand.tsx: Host-controlled tool과 정본 handle/keyboard 소비packages/json-document-annotation/tests/annotation-output.test.tsx: 문서 owner가 바뀌었을 때 저장 상태 격리, 늦게 도착한 raster 결과 무시현재 owner 검증과 site guard를 실행 중이며, 아직 최종 완료 보고는 아닙니다.
developer-1px commentedon Sep 8, 2026
PR 갱신 및 검증 기록 —
37f6702csrc, Editingannotation*, Annotation Demo 파일 전체 기준 710 LOC입니다. 줄 수 외에도 route-local 선택·gesture·geometry·직렬화 구현을 제거했는지 확인했습니다.계약별 증거
tool/onToolChange,createId, style/labels 주입; 제어된 도구 및 수정키/IME 테스트검증 한계
ENOSPC로 중단됐습니다. 검증 스크립트의 임시 디렉터리는 자동 정리됐으며, 당시 디스크 여유는 약 296 MiB였습니다. 사용자의 파일이나 기존 작업 트리는 정리하지 않았습니다. 설치·실행 완료 여부는 원격External kitjob으로 확인 중입니다.읽을 순서
이번 단계에서 Core의 공개 명령이나 Selection family는 늘지 않았습니다. Annotation-specific UI 계약을 기존 공통 편집 문법의 소비자로 연결한 변경입니다. merge는 수행하지 않았습니다.
developer-1px commentedon Sep 8, 2026
CI 후속 확인 —
37f6702c로컬 디스크 공간 부족으로 끝내지 못했던 외부 소비자 설치·실행 검증은 원격 External kit에서 통과했습니다.
현재 Plan / External kit는 성공이며 Package / Site의 전체 검증이 진행 중입니다. PR 본문에도 원격 증거를 반영했습니다. 로컬 작업 트리는 clean이고 PR은 열린 상태이며 merge하지 않았습니다.
developer-1px commentedon Sep 8, 2026
완료 조건 보완 — 실제 source 탭 연결
최종 공개 surface 감사에서 등록 데이터와 실제 탐색 결과를 대조했습니다.
annotation-selection.ts를 raw source로 등록하는 것만으로는 Usage의 탭에 나타나지 않았습니다. 현재 source 탐색기는 package 내부의 상대.jsimport를 자동으로 따라가지 않기 때문입니다.이는 #588의 “site Usage와 정본 implementation source 연결” Done에 직접 해당하는 누락입니다. 전체 source 탐색기의 정책은 변경하지 않고, 기존 공개 API 등록 방식으로
createAnnotationEditor의 구현을 구성하는 domain projection과 Key owner를 연결했습니다. geometry 공개 API들도 자기 소유 파일에 연결했습니다.discoverDemoSources결과에서 Hand, output, geometry, selection projection, Key owner 및 API Reference 경로를 확인등록 파일의 존재와 사용자가 구현까지 찾아갈 수 있다는 것은 별개의 검증이라는 점이 이번 보완의 핵심입니다.
developer-1px commentedon Sep 8, 2026
최신 PR HEAD —
ba163a3f37f6702c의 전체 CI는 Plan / Package / Site / External kit 모두 성공했습니다.ba163a3f는 Usage source 등록과 검증 3개 파일만 변경합니다. 편집 동작·패키지 API는 동일합니다.source 탭에서도
annotation-selection.ts→ Key owner 구현까지 읽을 수 있습니다. PR은 열린 상태로 유지하며 merge는 수행하지 않았습니다.developer-1px commentedon Sep 8, 2026
머지 완료
사용자의 이번
merge요청에 따라 PR #589를 squash 머지했습니다.ba163a3ffc2bbd95a6c916ce4ae113a2085c149802741ec3c49a502c628704ed676fd406bbe0cf19MERGED, 이슈 Annotation Hand 책임을 정본 모듈로 수렴한다 #588 상태CLOSED검증한 PR HEAD와 머지된 main의 Git tree가 동일함을 확인했습니다. squash가 커밋 이력을 정리한 뒤에도 실제 파일 내용은 검증한 결과와 같습니다.
이번 작업의 미리보기 서버, worktree, 작업용 clone의 로컬 branch와 원격 branch를 정리했습니다. 작업용 clone의 main ref는 머지 커밋으로 fast-forward했습니다. 다른 PR의 작업 트리와 원본 checkout의 미커밋 변경은 보존했으며, 원본 checkout의 main은 이동하지 않았습니다.
최종 상태:
landed-clean.