Skip to content

JSON Document의 편집 정확성과 구현체 교체 적합성을 보강한다 #707

Closed

Description

@developer-1px

Goal Anchor

  • Outcome: JSON Document 표준 후보 리뷰에서 재현된 정확성·교체 호환성·협업 지속 편집·적합성 증거의 공백을 정본 모듈에서 해결합니다.
  • Done: 정상 Patch 배치의 undo가 원본을 복구하고, 객체/배열을 구분한 위치 추적과 원격 구조 이동 추적이 정확하며, 복사 snapshot 구현체에서도 공식 Editing/React 소비자가 작동합니다. 누적 협업 이력을 받은 뒤 새 actor가 편집을 계속할 수 있고, 독립 구현의 전체 필수 적합성과 공개 표면 선언을 실제 검사로 증명합니다.
  • Don't: 여섯-member JSONDocument, JSON Patch의 순차·원자적 의미, 기존 wire/checkpoint 형식과 패키지 책임 경계를 유지합니다. unrelated Calendar·Database·Annotation 작업을 흡수하거나 merge/publish를 수행하지 않습니다.

재현 근거와 범위

  1. EditingSession: 기존 객체 속성에 add, 동일 배열 인덱스의 연속 remove, 삽입 후 이동된 인덱스의 replace를 undo하면 성공을 반환하며 잘못된 값을 복구합니다.
  2. trackPointer: 숫자 객체 key를 배열 index로 추정합니다. Collaboration의 원격 move는 값별 replace로 통지되어 동일 항목 추적을 잃습니다.
  3. 명세상 허용된 복사 snapshot 구현체에서 EditingSession은 읽기만 해도 history를 지우고 React Connector는 snapshot 안정성 계약을 충족하지 못합니다.
  4. 단일 scalar 문서에서도 다른 actor의 이력 1,000건 이후 commit에 139~269ms가 걸렸고 3,000건 이후 첫 새 actor commit이 재귀 stack overflow로 실패했습니다(Node 20.11.1 진단).
  5. 독립 구현은 유효한 JSONPath 음수 index·descendant·slice를 거부하지만 일부 suite만 실행하므로 stable 검사를 통과합니다. 실제 23개 export를 검사 결과는 21개로 표시합니다.

완료 증거

  • 수정 전 실패를 구별하는 회귀 fixture와 순차 배치 undo/redo 검증.
  • 문맥을 제공하는 위치 추적 public API, 기존 호출 호환성 설명, 정본 사용 예제·API 문서·source registration.
  • 같은 editor/consumer의 reference·복사 snapshot 동작 검증 및 로컬/협업 구조 이동 검증.
  • 긴 remote 이력 ingest 후 local commit·재동기화의 정확성과 지속 편집 성능 검증.
  • reference와 독립 구현의 필수 JSON Document·JSONPath·Patch 적합성 검증, 선언/검사 결과 동기화.
  • 영향 패키지 test/typecheck/build, 문서·규범 검사, 소비 경로 검증.

경계

현재 문서가 구분하는 local inverse history와 actor-local selective history의 의미는 보존합니다. 새로운 범용 history/selection 프로토콜, 외부 팀 도입 실험, 공개 배포와 merge는 이번 결함 수정의 완료 조건이 아닙니다.

Activity

  1. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    구현 계획

    Goal Anchor는 본문의 Outcome·Done·Don't를 그대로 유지합니다.

    1. Core 위치 추적의 문맥 확장과 Editing 순차 역연산·snapshot 관찰 회귀를 닫습니다.
    2. Collaboration 정본 tree identity를 사용한 원격 구조 변경 통지와 긴 이력 이후 지속 편집을 고칩니다.
    3. 독립 구현에 전체 필수 적합성을 연결하고 명세·공개 문서·Usage·source registration을 일치시킵니다.
    4. 영향 패키지 및 실제 소비 경로를 검증하고 PR을 엽니다.

    정본 owner는 기존 Core Pointer/Patch, EditingSession, React Connector, Collaboration materialization/notification, standards conformance입니다. Host 우회 구현이나 새로운 범용 editor protocol을 도입하지 않습니다.

    기준은 origin/main 2bd2b053bd4192539aece9c15872c222f69bd25b입니다. #704 Calendar는 이번 구현 파일과 독립입니다. #587 Database와 #589 Annotation은 EditingSession 소비와 문서/source registry에서 병렬 호환 대상으로 분류했으며 게시 전 최신 head를 확인하고 결합 검증합니다. 기존 두 worktree는 수정하지 않고 전용 codex/issue-707-protocol-conformance worktree에서 작업합니다.

    호환성 gate: 기존 두 인자 Pointer 호출과 새 문맥 제공 호출을 함께 검증하며 wire/checkpoint 형식은 유지합니다. 복구는 기존 저장 형식을 유지하는 코드 rollback으로 가능합니다. 운영 gate: 긴 이력 ingest 뒤 commit 및 재동기화 benchmark를 추가합니다. 협업 변경의 전문 검토는 merge 시 필요한 증거이며 이번 작업은 PR까지입니다. 완료 조건은 동작과 검사로 판정하며 별도 시각 디자인 승인은 필요하지 않습니다.

  2. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    중간 검증

    Goal Anchor는 유지합니다. 재현된 동작을 정본 owner에서 수정했습니다.

    • Editing 순차 undo 및 서로 다른 경로의 historyGroup: 수정 전 새 회귀 6개 실패 → 수정 후 12개 전체 통과. 복사 snapshot의 history 유지도 포함합니다.
    • Pointer: 숫자 객체 key·상위 add 교체 회귀는 수정 전 실패 → 문맥 인자 추가 후 통과. 기존 두 인자 호출을 보존합니다.
    • React: fresh-copy getter 구현으로 실제 렌더링·commit 후 재렌더링을 확인했습니다.
    • Collaboration: 6,000 causal changes 이후 새 actor commit의 stack overflow를 수정 전 재현했습니다. 수정 후 commit·checkpoint restore·재동기화를 포함해 130개 통과했습니다. 구조 이동 회귀 8개는 수정 전 전부 실패했고 현재 root 이동까지 포함해 통과합니다.
    • 독립 구현: 전체 JSONPath CTS를 연결하자 기존 구현은 703개 중 184개만 통과했습니다. test-only 외부 parser/evaluator와 독립 static type checking으로 현재 703개 및 RFC 6902 실행 대상 110개를 모두 통과하며 protocol suite도 실행합니다. Corpus 예외를 늘리지 않았습니다.
    • 표준 검사: 실제 source export에서 23개를 계산하고 profile counts와 비교합니다. standard:check 345 passed / 4 skipped(각 구현의 원본 중복 op fixture 2개)입니다.
    • Node 24.16.0, 3 rounds/1 warmup, scalar 누적 history benchmark에서 첫 새 actor commit p50은 1,000건 2.112ms, 3,000건 6.245ms, 6,000건 12.448ms였습니다. 전체 이력 비용이 사라졌다는 주장은 아니며, 대규모/많은 actor/history-control 비용은 별도 한계입니다.
    • 협업 soak 24×96 steps 및 docs:evaluate 통과했습니다.

    진행 중: 전체 28개 library verify, 사이트 Usage/source registration과 브라우저 검증, 최신 main/병렬 PR 결합 점검. JSONDocument 여섯 member와 wire/checkpoint 형식은 바꾸지 않았습니다.

  3. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    구현 완료 · PR 오픈

    PR: #708

    • Goal Anchor의 여섯 완료 증거를 실제 PR diff와 검증 결과에 대응시켰고, PR의 모든 변경이 이슈 범위에 속함을 원격 본문·파일 목록으로 재확인했습니다. PR은 Closes #707로 이 이슈를 연결합니다.
    • 원격 PR head와 로컬 HEAD는 688a889439ec20b510ae46c1a17b4be271dd2c02, tree는 7d3f97d39415670dcdc8ec2ff05edaf515810806로 같습니다. base 2bd2b053bd4192539aece9c15872c222f69bd25b도 최신임을 다시 확인했고 worktree는 clean입니다.
    • 28개 library verify, 전체 1,175 tests(4 corpus skip), 협업 soak, 사이트 typecheck·119 tests·pages build/HTTP, 문서/표준/API 검사를 통과했습니다. 마지막 Usage/source registration assertion은 해당 test를 추가 재실행해 통과했습니다.
    • 기존 Chrome profile에서 숫자 객체/배열 위치 추적, 편집/undo, 표시되는 버튼 문구를 검증했습니다. old/new Collaboration bundle·역방향 편집·checkpoint restore 양방향 호환 검사도 통과했습니다.
    • 추가 Editing benchmark(1,000/10,000 items, 3 rounds/1 warmup)도 통과했습니다. 10,000 items의 sheet leaf commit p50은 0.166ms였습니다.
    • push 시 저장소 pre-push build도 통과했습니다. GitHub CI는 시작된 상태로, 완료를 주장하지 않습니다.

    남은 merge 전 확인은 Collaboration 전문 리뷰와 CI입니다. #704/#587/#589는 이미 base와 충돌하며 이 candidate가 충돌 경로를 추가하지 않았지만 combined runtime 검증은 불가능했습니다. 해당 PR 갱신/통합 시 재검증이 필요합니다. 외부 채택 실험과 범용 history/selection protocol은 명시한 대로 범위 밖입니다.

    merge/publish는 하지 않았으며 이슈는 PR 병합 전까지 open으로 유지합니다.

  4. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    병합 전 확인

    사용자의 후속 요청 “merge하고 계속해봐”에 따라 이번 PR의 merge와 workflow 소유 worktree 정리를 승인된 범위에 추가합니다. 기존 Outcome·Done과 wire/checkpoint·패키지 경계 불변식은 유지하며 npm publish와 다른 PR의 병합은 포함하지 않습니다.

    • 기준 main 2bd2b053bd4192539aece9c15872c222f69bd25b, candidate 688a889439ec20b510ae46c1a17b4be271dd2c02는 원격과 일치합니다.
    • CI Plan·Package·Site·External kit 모두 통과했습니다. PR은 충돌 없이 병합 가능합니다.
    • 변경된 Pointer/Patch·Editing history·React snapshot·Collaboration 통지·독립 적합성 책임을 한정하여 정본 owner와 공개 경계를 재검토했습니다. 새 public facade나 Host 우회 구현은 추가하지 않았고 Pointer Usage의 정본 source 등록도 확인했습니다. 저장소 전체의 무결성 감사라는 주장은 아닙니다.
    • Node 24.16.0의 빌드된 public package로 추가 진단을 실행했습니다. seed 707, 100 trials × 10 batches × 5 moves에서 배열 간/내 이동 5,000회의 원격 값과 모든 기존 항목의 Pointer 추적을 대조하여 통과했습니다. candidate 코드는 변경하지 않았습니다.
    • 버전 혼용·복구·운영 측정 증거는 동일 candidate에 유효합니다. 병렬 캘린더 콘텐츠와 플로팅 컨트롤 레이어를 분리한다 #704/Database saved-view와 편집 표현 책임을 정본화한다 #587/refactor(annotation): 선택·gesture·출력의 정본 경계 통합 #589 head도 변하지 않았습니다.

    남은 병합 조건은 인과 순서·identity 통지 변경의 독립 전문 리뷰입니다. 현재 등록된 리뷰가 없으며 자체 점검을 전문 리뷰로 간주하지 않습니다. 저장소 소유자에게 전문 리뷰 진행 또는 이번 PR의 명시적 리뷰 예외 승인 중 방향을 요청했습니다. 이 조건이 해소되기 전에는 merge나 worktree 삭제를 수행하지 않습니다.

  5. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    승인된 리뷰 조건 변경

    사용자가 “self review하고 merge해 그러면”이라고 명시적으로 승인했습니다.

    • 이전: 인과 순서·identity 통지 변경에 독립 전문 리뷰를 받은 뒤 병합.
    • 이번 PR의 승인된 변경: 구현자의 self-review와 기존 객관적 검증을 완료한 뒤 병합.
    • 이유와 한계: 독립 리뷰가 없는 상태에서 사용자가 이번 PR의 리뷰 방식을 직접 지정했습니다. 이는 독립 전문 리뷰를 받았다는 뜻이 아니며, 저장소 전체의 리뷰 정책을 바꾸거나 향후 PR에 자동 적용하지 않습니다.

    기존 Outcome·Done, JSONDocument 여섯 member, ordered atomic Patch와 wire/checkpoint 형식은 그대로 유지합니다. 저장소의 강제 보호 규칙·CI를 우회하지 않습니다. 최종 self-review 결과를 #708에 기록하고 정확한 candidate를 병합한 뒤 이번 workflow 소유 worktree만 정리합니다.

  6. developer-1px commented on Sep 7, 2026

    @developer-1px
    OwnerAuthor

    병합·정리 완료

    상태: landed-clean

    • PR #708이 main에 squash merge되었습니다. merge commit은 276c955eaad57ef1dbfec4e0462a7540c29f8c4d이며 이슈는 자동으로 closed 상태가 되었습니다.
    • merge된 main tree와 self-review candidate tree가 모두 7d3f97d39415670dcdc8ec2ff05edaf515810806로 같음을 확인했습니다. 병합 과정에서 검증하지 않은 파일 변경은 추가되지 않았습니다.
    • 사용자가 승인한 self-review 결과는 PR comment에 기록했습니다. 전체 1,175 tests, 표준 적합성 345 tests, 협업 soak와 추가 commit/undo/redo/atomic notification 시나리오가 통과했고 GitHub CI 네 항목도 모두 성공했습니다.
    • clean 상태의 workflow 소유 json-document-issue-707 worktree와 로컬 issue branch를 제거하고 등록·디스크 경로의 제거를 검증했습니다. 이 worktree에서 띄운 임시 Vite 서버도 종료했습니다. 원격 issue branch와 PR에 원래 세 commit의 이력이 남아 있어 복구할 수 있습니다.
    • 기존 Calendar worktree 및 그 untracked 파일은 보존했습니다. main checkout인 json-document-issue-705는 다른 workflow 소유이므로 working branch를 갱신하지 않았습니다. origin/main만 최신 merge commit으로 fetch했습니다.
    • npm publish, 다른 PR의 병합·충돌 해결, 외부 채택 실험은 수행하지 않았습니다.

    이 이슈의 승인된 구현·검증·self-review·병합·정리는 완료했습니다.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions