Skip to content

편집 프로토콜의 정확성과 독립 구현 적합성을 보강한다 - #708

Merged
developer-1px merged 3 commits into
mainfrom
codex/issue-707-protocol-conformance
Sep 7, 2026
Merged

편집 프로토콜의 정확성과 독립 구현 적합성을 보강한다#708
developer-1px merged 3 commits into
mainfrom
codex/issue-707-protocol-conformance

Conversation

@developer-1px

Copy link
Copy Markdown
Owner

목적

Closes #707

편집 프로토콜 리뷰에서 재현된 정확성·구현체 교체·협업 지속 편집·적합성 증거의 공백을 정본 owner에서 해결합니다. JSONDocument의 여섯 member, ordered atomic JSON Patch, wire/checkpoint 형식은 유지합니다.

변경과 완료 근거

이슈의 Done 구현 및 검증
정상 배치 undo가 원본 복구 EditingSession이 각 operation 직전 상태에서 역연산을 계산합니다. 기존 객체 속성 add, 연속 배열 삭제, 삽입 후 replace, root add, 여러 경로의 historyGroup round trip을 검증했습니다. 새 Editing 회귀는 수정 전 6개 실패했습니다.
객체/배열 및 원격 이동 위치 추적 trackPointer(pointer, applied, before?)가 중간 상태의 컨테이너를 구분합니다. 기존 두 인자 호출의 legacy 의미를 유지합니다. Collaboration 통지는 visible tree member identity로 move/add/remove를 컴파일하며 객체 rename/swap, 배열 삽입·삭제·재정렬, 컨테이너 간 이동, root 이동, 이동 후 편집 및 동시 편집을 검증합니다. 첫 구조 이동 회귀 8개는 수정 전 모두 실패했습니다.
복사 snapshot 구현체 소비 EditingSession은 JSON equality로 실제 외부 변경만 감지하고 React Connector는 equal snapshot을 안정화합니다. fresh-copy getter의 history 유지 및 실제 React 렌더/commit 갱신을 검증했습니다.
긴 remote 이력 이후 지속 편집 재귀 ancestry 탐색을 actor frontier로 바꾸고 순서가 같은 data-only prefix의 materialization을 재사용합니다. 재정렬/history control은 기존 full replay를 유지합니다. 수정 전 6,000건 뒤 첫 새 actor commit이 stack overflow였으며, 현재 commit·checkpoint restore·재동기화가 통과합니다.
독립 구현의 필수 적합성 전체 JSONPath·RFC 6902·protocol suite를 독립 구현에도 연결했습니다. 기존 JSONPath는 703개 중 184개만 통과했습니다. test-only jsonpath-js@0.3.1의 public parser/evaluator와 독립 RFC 9535 함수 타입 검사로 전체 CTS를 통과합니다. reference/private import 방지도 독립 구현 디렉터리 전체로 확장했습니다.
공개 계약·문서·Usage source에서 실제 23개 export를 계산하여 profile count와 대조합니다. owning-package README/API reference, public 문서, 실제 사이트 Usage와 trackPointer 정본 source registration을 함께 갱신했습니다.

검증

환경: Node 24.16.0, 이 worktree에서 설치한 lockfile 의존성.

  • npm run verify:libraries: 28개 library의 typecheck·test·build, Core layer/package smoke 통과.
  • npm run test:projects: 129 files, 1,175 passed / 4 skipped. 마지막 source registration assertion은 같은 test를 좁게 재실행하여 통과했습니다.
  • npm run standard:check: 345 passed / 4 skipped. reference와 독립 구현 각각 JSONPath 703개, RFC 6902 실행 대상 110개를 검사합니다. skip은 각 구현에서 JSON object parsing 이후 표현할 수 없는 원본 중복 op fixture 2개이며 추가 예외는 없습니다.
  • Collaboration 최종 134개, Editing 168개, React 26개, 사이트 119개 통과.
  • npm run test:collaboration:soak: 24×96 steps 통과.
  • workspace:check, docs:evaluate, docs:api:check, 사이트 typecheck 및 site:verify:pages 통과.
  • 사용자 기존 Chrome profile에서 실제 React Connector 경로의 array → numeric object key → array 추적 결과(/items/2/items/1/items/2), 텍스트 편집 → undo, 표시되는 버튼 문구를 확인했습니다. 이 흐름의 browser error/rejection은 0건입니다.
  • 정확한 base commit의 Collaboration 소스를 별도로 bundle하여 old→new / new→old bundle 수신, 역방향 편집, checkpoint restore를 실행했고 모두 통과했습니다. 형식 migration은 없습니다. 구버전 자체의 긴 이력 stack overflow까지 없어지는 것은 아니므로 해당 workload는 수정 버전이 필요합니다.

지속 편집 측정

scalar 문서, 3 rounds / 1 warmup. benchmarks/runtime.mjs에 ingest 이후 새 actor commit 측정을 추가했습니다.

기존 이력 ingest p50 첫 새 actor commit p50
1,000 6.102ms 2.112ms
3,000 18.779ms 6.245ms
6,000 43.521ms 12.448ms

전체 이력 비용이 상수 시간이 되었다는 주장은 아닙니다. 많은 actor, history control, 큰 문서는 별도의 비용을 유지합니다.

기준과 병렬 변경

한계와 merge 전 확인

local inverse history와 actor-local selective history는 기존 구분을 유지합니다. 새로운 범용 history/selection protocol이나 외부 팀의 채택 실험은 포함하지 않습니다. 저장소 내부의 두 구현 적합성 통과가 생태계 표준 채택의 증거는 아닙니다.

Collaboration 변경은 merge 전 인과 순서·identity 통지에 대한 전문 리뷰가 필요합니다. 이 PR은 구현·검증 후 리뷰를 위한 상태이며 merge/publish는 수행하지 않았습니다.

@developer-1px

Copy link
Copy Markdown
Owner Author

Self-review 완료

사용자의 명시적 요청 “self review하고 merge해 그러면”에 따른 구현자 self-review입니다. 독립 전문 리뷰로 표시하지 않습니다. 리뷰 조건 변경의 범위와 한계는 #707의 승인 기록에 남겼습니다.

판정

candidate 688a889439ec20b510ae46c1a17b4be271dd2c02, tree 7d3f97d39415670dcdc8ec2ff05edaf515810806, base 2bd2b053bd4192539aece9c15872c222f69bd25b에서 추가 수정이 필요한 결함을 발견하지 못했습니다. 이번 리뷰로 소스 변경은 하지 않았습니다.

확인한 위험과 근거

  1. Editing 역연산: 각 operation 직전 상태를 읽고 역순으로 되돌립니다. 객체 add의 overwrite와 배열 insert를 구별하며 grouped inverse의 순서도 확인했습니다. move/copy의 기존 root snapshot fallback은 그대로입니다.
  2. Pointer: 전달된 이전 snapshot을 매 operation마다 전진시켜 숫자 객체 key를 배열 index와 구별합니다. 기존 두 인자 호출 및 replace/drop 의미를 보존합니다.
  3. React: document별 store에서 JSON equality로 snapshot을 안정화하고 document 교체 때 subscription/getSnapshot도 교체됩니다. fresh-copy 구현 회귀를 포함한 실제 React test가 통과합니다.
  4. Collaboration 인과 순서: actor frontier가 전제하는 양의 연속 counter와 같은 actor의 직전 dependency는 change.ts에서 검증합니다. prefix 재사용은 동일 change 객체의 data-only prefix에 한정하며 재정렬/history control은 full replay합니다. 이전 tree는 clone하여 보존합니다.
  5. Collaboration 통지: object winner와 array order는 기존 tree owner에서 얻습니다. shadow tree는 RFC 6902의 remove 이후 destination 해석을 따릅니다. staging은 atomic batch 내부에만 존재하며 최종 문서만 통지됩니다.
  6. 적합성·공개 계약: independent binding이 JSONDocument·pressure·protocol·RFC 6902·JSONPath 전체 suite를 실행하고 reference/private import가 금지됩니다. test-only JSONPath 의존성은 Core runtime dependency가 아니며 기존 23개 export와 optional Pointer 인자를 문서·검사·Usage에 일치시켰습니다.

정본 모듈·복잡성 감사

감사 분모는 이번 PR의 36개 변경 파일과 변경된 runtime의 직접 호출 관계입니다. 전체 생태계를 전수 감사했다는 주장은 아닙니다.

  • Pointer public wrapper → Core tracking, Editing batch working document → Core JSONDocument, React snapshot → Core JSON equality는 canonical consumer입니다.
  • Replica·History·Text의 원격/재물질화 통지 3개 호출은 하나의 document-patch.ts를 소비합니다. tree visibility는 기존 tree.ts가 소유합니다. 옛 value-only 통지 구현은 제거되어 병렬 구현으로 남지 않습니다.
  • PointerTrackingLab는 fixture 선택과 public API 실행 순서만 소유하는 Host composition입니다. Usage와 정본 source registration을 확인했습니다.
  • 독립 conformance 구현은 호환성 증명을 위한 test support이며 production owner를 우회하는 Host가 아닙니다.
  • doubt 관점에서 batch working state, React snapshot 안정화, identity shadow tree, actor frontier, 독립 함수 타입 검사에는 각각 재현된 정확성/성능 근거가 있습니다. 별도 facade·runtime flag·public 개념을 추가하거나 검증된 경계를 단순화 명목으로 제거하지 않았습니다.

이번 self-review에서 재실행한 검증

  • npm run test:projects: 129 files, 1,175 passed / 기존 4 skipped.
  • npm run standard:check: 345 passed / 기존 4 skipped, 23 exports·6 members·0 runtime peers.
  • npm run test:collaboration:soak: 24 cases × 96 steps 통과.
  • 빌드된 public package로 strict object swap, array move, ancestry reversal, replaced container에서 자손 이동을 실행했습니다. 4개 시나리오 모두 commit → remote ingest → undo → ingest → redo → ingest에서 값·Pointer·atomic notification이 일치했습니다. strict schema에서는 staging이 최종 통지에 노출되지 않고 전 과정 통지 횟수가 정확히 3회였습니다.
  • git diff --check origin/main...HEAD 통과.
  • 직전 동일 candidate의 구조 이동 5,000회 진단, old/new bundle·checkpoint 양방향 호환, browser 검증도 source/base 변경이 없어 유효합니다.
  • GitHub Plan·Package·Site·External kit 모두 통과했습니다.

유지되는 한계

많은 actor·긴 history-control 이력의 full replay 비용, JSON-equal 전환의 무통지, root replacement 시 자손 추적 해제는 문서에 명시한 경계입니다. 외부 팀의 채택 증거를 얻었다는 주장은 하지 않습니다. #704/#587/#589는 기존 base 충돌로 combined runtime을 실행하지 못했으며 이 PR에서 흡수하지 않습니다.

결론: 사용자가 승인한 self-review 조건과 객관적 검증을 충족했습니다. 정확한 candidate를 일반 병합 절차로 반영합니다.

@developer-1px
developer-1px merged commit 276c955 into main Sep 7, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant