Skip to content

Storage Delivery Roadmap

easylogic edited this page Oct 10, 2026 · 13 revisions

자산·복구·설치 실행 로드맵

관리자: Execute Storage (01a11b92-e103-71d3-acc3-1b22720c5a69). 현재 확인일: 2026-10-10, 한국 시간.

이전 2026-10-10 검사 준비 checkpoint의 이력: 네 제품의 asset consumer 검사 계약에 full native/독립 byte/hash seed, 정상·거부·부분 실패, 실제 owner interface를 연결했다. 기존 #416/#509/#510/#511을 유지한다. #511의 native2 copy는 applicable #513 source transport를 조건부 재사용한다. 당시 Root #503 writer fixture가 진행 중이었으며 그 현재 우선순위 표시는 아래 최신 상태로 대체한다. 1e6f4b9와 첫 실패 기록은 보존한다.

최신 checkpoint — 2026-10-10: #503 CLOSED와 fixed local develop 9ad7597d410478e0bcf0a2fd0d13fd004463d658를 확인했다. 마지막 Integration owner snapshot은 #377 통합 후보의 최종 preflight 진행과 #504 실패·재시도·재열기 검사 준비이며 그 관측으로 최종 통과를 추론하지 않는다. #412 wiring/실제 인수는 여전히 대기하며 Root가 실제 현재 serial 작업의 안전 checkpoint를 정한다. Storage는 기존 #416의 Site full-native A/B/C packet을 준비했다. 제품 source/test lease나 shared runtime을 새로 사용하지 않았다.

후속 현재 checkpoint — 2026-10-10: accepted source base54693에서 Editor/Workspace가 충돌 없는 FOUR helper 경계를 직접 확인했다. Storage candidate 51d33a7442a19292859eb0784a505118db39ad52는 원본/rendition byte·ready-receipt DATA와 공통 export path-plan source/tests만 구현했다. New13/affected40와 final unchanged preflight0. 기존 Site host/renderer/codec/index는 readonly다. Integration의 마지막 관측은 기존 재시도 시나리오의 source/compiled 결과와 남은 권한·입력 검사 기록 작업이며, 다음 Root 안전 checkpoint는 별도 확인한다. 진짜 #412 readiness와 private snapshot512KiB/full materialization interface는 여전히 남아 있다.

2026-10-10 의존성 번호 예약: Integration/Root가 #377 Workspace 준비의 0017_company_member_confirmation 다음 0018을 #412 private-assets additive migration/wiring에 예약했다. #412 후보에는 migration source나 별도 고정 ID가 없으므로 충돌하지 않는다. 최종 full ID/SQL/checksum/registration은 Root가 안전 checkpoint에서 확정한다. 현재 코드에 migration이 생겼거나 실행됐다는 뜻이 아니다. 기존 0006/0010을 유지하며 당시 #503 우선순위는 위 최신 상태로 대체한다.

사용자는 이 대화에서 이슈 완료 후 다음 이슈를 직접 찾고, 필요한 이슈가 없으면 로드맵에 맞춰 만들고, Wiki를 직접 관리하며 진행하라고 지시했다. 추가 지시에 따라 의존성이 준비되지 않은 동안에도 로드맵을 계속 보강하고 필요한 후속 이슈를 사전 생성한다. Planner에는 새로 만든 이슈의 번호·제목·링크만 알린다. 이 지시는 이 실행 영역의 다음 작업 선정과 이슈 생성에 적용한다. 기존 이슈의 원래 완료 기준과 다른 작성자의 진행 중 변경을 보존한다.

전체 목표는 제품 진행 지도와 저장소의 WP 구현 순서를 따른다. 이 페이지는 자산·복구·설치 작업의 현재 실행 순서와 증거를 관리한다.

다음 작업을 시작하는 규칙

  1. 작업을 재개할 때 최신 사용자 지시, 이슈·댓글, 열린 PR, 정확한 로컬 기준 commit과 파일 소유 범위를 확인한다.
  2. 현재 이슈의 원래 완료 기준을 모두 검증한다. 후보 구현, 단위 검사, 로컬 통합, 실제 인수 결과를 각각 기록한다. 검증이 남아 있으면 이슈를 유지한다.
  3. 완료 기준을 충족하면 이슈에 통합 commit과 실행 결과를 기록하고 닫는다. 같은 작업 턴에서 이 로드맵의 다음 실행 가능한 기존 이슈를 선택하고 시작한다. 다음 작업 선정 때문에 Planner의 일상 승인을 기다리지 않는다.
  4. 필요한 작업에 기존 이슈가 없으면 열린 이슈·닫힌 이슈와 로컬 코드를 확인한다. 확인한 구현 공백에 대해 목적, 범위, 선행 작업, 소유 파일 후보, 완료 기준, 검증 방법을 갖춘 이슈를 미리 만든다. 현재 이슈의 완료나 선행 의존성 준비까지 생성 자체를 미루지 않는다. 의존성이 남으면 WAIT_DEPENDENCY로 기록하고 이 로드맵에 링크와 선정 이유를 추가한다.
  5. 새 이슈를 만들었을 때만 Planner (01a0be9d-0a28-7741-8ce7-b500e1f41aaf)에게 번호·제목·링크를 짧게 알린다. 정기 상태 보고나 기술 승인 요청을 추가하지 않는다.
  6. 편집기·Workspace 경계의 파일 범위와 API는 해당 작성자와 직접 맞춘다. 공유 package/lock/config/migration과 로컬 develop 통합, 공유 API/PG/OIDC/S3 실행 자원은 Integration과 직접 조정한다. 동시에 같은 파일을 쓰지 않는다.
  7. 선행 작업이 미완료면 해당 의존성과 담당자, 실제 준비 조건을 기록한다. 작업을 재개하거나 계약·상태·증거가 바뀔 때 로드맵과 사전 이슈를 갱신한다. 다음 결과물·입출력 매핑·실패 시 보존할 데이터·fixture·검사 순서를 구체화한다. 현재 수행 가능한 소유 코드·검사를 진행하고 독립적으로 실행 가능한 범위도 확인한다. 변경 없는 대기 상태를 반복해서 게시하거나 중복 이슈를 만들지 않는다.

현재 순서

아래 상태는 2026-10-09 GitHub 조회 결과다. 새 이슈를 선택할 때 다시 확인한다.

순서 기존 이슈 현재 상태와 시작 조건 완료 결과
1 #412 비공개 문서 자산 진행 중. 소유 코드의 로컬 후보 준비. Integration migration/export/config/route 연결과 실제 PG/OIDC/비공개 S3 검증 필요 실제 writer/viewer 권한, 업로드·읽기, 고정 키 재시도, 장애와 API 재시작 검증
2 #416 Site 자산 사용 대기. 선행 #407은 닫힘. #412 통합 인수와 편집기 파일 범위가 준비되면 선정 실제 Site 이미지 삽입·저장·재열기, 두 계정 접근, 원본 바이트를 보존한 독립 로컬 내보내기
3 #414 DB와 자산 복구 대기. #412와 #416의 실제 자산 fixture 및 독립 복구 목적지 필요 원본을 보존한 새 DB/객체 목적지 복원, 전체 해시·상태·권한 비교, 실패 시 불완전 상태 기록
4 #419 지속 가능한 로컬 설치 대기. #412/#416/#414와 원래 제품·관리자 선행 기준 필요. #408은 닫힘. #377/#378은 열려 있음 같은 빌드 결과를 두 독립 목적지에 설치하고 일반 시작·종료·재시작 및 데이터 유지 검증
5 #417 로컬 Site 게시 후속. #416/#414와 기존 설치 우선순위 이후. 외부 alpha 추가 필수 조건으로 취급하지 않음 loopback 방문 origin의 불변 게시 결과, 원자 활성화와 이전 버전 복구
후속 #509 Word 비공개 이미지 사전 등록, WAIT_DEPENDENCY. #412/#416 통합 인수와 Word 파일 소유 범위 필요. 기존 복구·설치 우선순위를 유지 Word 실제 삽입·저장·재열기·다른 계정 읽기, 원본 이미지가 포함된 독립 native 내보내기
후속 #510 Slides 비공개 이미지·채우기 사전 등록, WAIT_DEPENDENCY. #412/#416 검증과 Slides 파일 범위 필요. #406 snapshot은 닫힘; #372 Yorkie와 구분 이미지 객체·paint fill 저장/재열기, 새 덱 복사의 대상 자산 연결, 독립 native 다운로드
후속 #511 Note 비공개 picture 사전 등록, WAIT_DEPENDENCY. #412/#416과 Note 파일 범위·지원 native mode 필요. native2는 해당 #495/#497/#507 입력·권한, 필요 시 #504 명시적 adoption 의존 picture 저장/재열기·새 Note 복사, full native/schema context 보존, 독립 native 다운로드

기존 #416/#414/#419/#417을 재사용한다. 2026-10-09에는 299개 이슈와 fixed Word source를 대조해 #509를 사전 생성했다. 이후 301개 이슈와 fixed Slides/Note source 58ba404f68eb80664541efb92afe43d69410bb08를 대조해 #510/#511을 사전 생성했다. 제품 소비자들은 같은 #412 backend를 사용하며 각자의 native mapping·복사·출력 검사를 갖는다. 새 소비자 이슈가 현재 #412/#416 및 기존 복구·설치 우선순위를 지연시키지 않는다.

의존성 대기 중 준비하는 결과

작업 필요한 입력과 담당 경계 지금 준비할 문서·검사
#412 Integration의 migration/export/config/route와 private PG/OIDC/S3 정확한 후보 commit·API·상태 계약 유지. 원본/DB/object 해시 비교, 권한 거부, 응답 유실·실패·프로세스 재시작 검사 시나리오
#416 검증된 #412 계약, Editor와 Site 파일 소유 범위 native resource와 asset 참조 매핑, 업로드→참조→snapshot 저장 순서, 늦은 응답·미해결 export fixture
#414 #412와 #416의 실제 Site fixture, Integration의 독립 복구 자원 manifest 필드·쓰기 중지 경계, ready와 unresolved 비교, 빈 목적지 거부 규칙, 중단·손상 객체 fixture
#419 원래 제품·관리자·자산·복구 인수, Integration 설치 자원 artifact 식별, 일반 start와 provisioning 분리, 두 목적지의 DB/object/IdP/port 격리 검사
#509 #412/#416 결과, Editor와 Word 파일 범위 기존 src/native 보존 매핑, local 5 MiB와 서버 4 MiB 제한 처리, 문서 교체·응답 유실·독립 native export fixture
#510 #412/#416 결과, Editor와 Slides 파일 범위 image object/paint.src 매핑, slide/component/layout/master 참조, 새 덱 복사·부분 실패·native/playback fixture
#511 #412/#416 결과, Editor/Workspace와 Note 파일 범위·실제 native mode picture.src/onFile 매핑, block/root 수명, full native2 envelope/pin 보존, 새 Note 복사·독립 native fixture

2026-10-10 추가 입력: #511이 native2 복사를 지원하면 기존 #513 copy/create-receipt transport를 재사용한다. source bebff553와 host 9b43b55f는 source/controlled 준비이며 실제 통합 인수는 남아 있다. 기존 same-tenant/workspace create·opaque attempt·GET-only historical recovery와 full native/pin rules를 보존하고 새 create protocol을 만들지 않는다. 역사적 receipt는 현재 asset/native write 권한이 아니다.

사전 생성한 이슈는 구현 착수 또는 완료를 뜻하지 않는다. 준비된 입력 계약과 파일 범위가 있으면 수행 가능한 독립 부분을 진행한다. 실제 환경이 필요한 검사는 그 환경이 준비된 후 실행하고 결과를 기록한다.

#416 독립 부분은 FOUR 신규 helper/test로 직접 합의하여 소스·검사를 완료했다. 다음은 Editor의 별도 최소 기존 exporter/renderer/test lease와 SAME completed plan 연결이다. Workspace의 binary await currentness/cancel 조건, Root의 실제 private snapshot format/hash/receipt/recovery와 #412 backend는 true dependencies다. Scope와 원래 완료 기준을 줄여 consumer 완료로 표시하지 않는다.

#416 현재 native 경계: Editor의 B 실제 consumer 검사에서 unchanged loader가 metadata.loadedAt을 모든 노드에 추가하고 root 사용자 값을 덮어써 원본과의 전체 native 대조가 exporter 전에 실패했다. 기존 이슈의 full-native/raw/hash 계약 공백으로 추적한다. Filename slice의 complete operated model/history export 전후 불변을 original load-roundtrip PASS로 바꾸지 않는다. Source/pre-load materialized/operated model/export artifact를 각각 대조하고, shared loader와 private snapshot hash domain은 Root/정확한 owner와 별도 합의한다. FOUR51d/SIX 범위 밖 loader는 수정하지 않았다.

#416 후속 Editor 범위는 EIGHT로 선언됐다. 기존 package assets/export-html/renderers/publish-commands/assets.test와 new asset-export-consumer.test의 SIX에 app.tsx/input-readiness.test.tsx TWO가 추가된다. Storage FOUR와 경로 충돌은 없다. 기존 SIX gate terminal 뒤 original App baseline5를 먼저 기록한다. Flush 후 input intent/hasPendingInput을 async plan과 package/host delivery에서 확인하는 Source 동작이며, actual private snapshot/auth/backend/shared loader 활성화는 아니다.

#416 최신 후속 범위: Editor는 실제 current reader command의 input witness를 위해 runtime.ts/runtime.test.ts TWO를 추가해 TEN을 선언했다. Atomic earlier gate와 baseline을 먼저 보존하며 public zeroarg refusal·전체 source metadata·기존 user pending input은 유지한다. Storage는 별도 NUL TWO successor51d→f421을 완료했다. Actual sanctioned runtime native import/export에는 metadata value/omission reconcile 경로가 있으므로 generic loader 실패와 product roundtrip 판정을 구분한다; 실제 baseline은 미검증이다.

후속 owner 결과: actual sanctioned B runtime에서 전체 원래 값·생략, authored loadedAt·omitted root loadedAt·반복 load/export가 도달했다. Generic loader 실패는 lower-level이며 새로운 product metadata fix로 확정하지 않는다. Raw key-order assertion의 첫 실패와 DTO/value/omission 기대값 수정은 fixed raw/server hash와 구분해 보존한다. App/runtime24와 package consumer11은 각각의 scoped 결과다. TEN amended final gate53201은 RUNNING, not PASS이며 actual private snapshot/current authority/backend 인수와 별개다. Storage는 재검사나 코드 변경 없이 owner 보고의 범위만 기록했다.

네 제품의 자산 결과물 지도

제품 이슈 실제 결과물의 범위 추가 확인할 보존 경계
Site #416 page/dataset 이미지와 self-contained native/static export pages·dataset·중첩 rich content·resource 참조와 export 이름 충돌
Word #509 이미지·새 server document 복사·self-contained native full native attrs·alt·layout/crop/caption, local/server 크기 차이
Slides #510 image object·image paint fill·새 server deck 복사·self-contained native slide/object IDs·connector·component/layout/master·text/notes·placement/crop/paint
Note #511 picture·새 server Note 복사·self-contained supported native full body/attrs/marks·block/root identity, native2이면 exact full schema bundle/pin과 현재 native write 권한

실제 유형·파일 version·지원 위치는 각 제품 착수 전에 확정한다. 기존에 지원하던 local 데이터를 서버가 받지 못하면 원본을 보존하고 제한을 표시한다. generic attachment UI, audio/video, 공유와 전체 복구의 추가 공백은 각 원래 parent·기존 이슈와 대조한 다음 별도 필요한 범위로 준비한다.

네 제품의 새 서버 문서 복사 순서

기존 #416/#509/#510/#511에 같은 필수 순서를 기록했다. #412 후보 1e6f4b9229cf8c871e52fbf8dff0a1bb2a83fb51는 현재 권한과 기존 문서를 확인한 뒤 업로드한다. 존재하지 않는 대상에 먼저 자산을 올리는 순서로 계획하지 않는다. 기존 create/copy/import/host 경로를 사용한다.

순서 반드시 확인할 결과 실패·응답 유실 시 유지할 상태
1. 대상 문서 생성 full source native revision/raw와 original bytes, 현재 source-read/destination-create-write 권한, 고정 생성 시도, 정확한 destination document 생성 receipt 같은 기존 문서 프로토콜로 생성 receipt/identity를 복구한다. 확인되지 않은 ID에 업로드하거나 재시도 때문에 다른 대상 문서를 생성하지 않는다. 원본과 copy draft를 유지한다.
2. 대상 자산 준비 #412의 fixed destination attempt, 대상 문서에 연결된 각 asset ready receipt와 independent byte-count/SHA256 pending/failed object·metadata·시도를 보존한다. source asset ID/URL을 대상 권한으로 사용하지 않는다. 같은 identity/key/bytes로 재확인한다.
3. native 참조 연결 지원 native mapping에 맞게 ready destination asset identity를 연결한 참조·full native 보존 결과 원본과 draft, 완료·미완료 연결을 구분하여 유지한다. temp URL/credential을 durable 원문으로 저장하지 않는다.
4. snapshot 확인 현재 권한에 따른 product snapshot receipt와 canonical readback 저장 응답 유실은 같은 고정 snapshot 시도를 복구한다. 앞 단계 성공만으로 whole saved/copied를 표시하지 않는다.

문서 생성·객체 저장·native 연결·snapshot은 하나의 원자 transaction이 아니다. 실제 실패, reload, response loss와 OS process restart를 각 경계에서 검사한다. source 원본, copy draft, 고정 create/asset/snapshot 요청과 부분 목적지 증거를 보존한다. 다른 입력/문서/권한으로 receipt를 재사용하지 않는다. duplicate ready assets나 우발적 publication을 만들지 않는다. 새 generic copy UI/store/protocol을 추가하지 않는다.

각 제품의 실제 복사 인수는 distinct source/destination document와 대상 자산 연결, 현재 source-read/destination-create-write, 다른 currently authorized destination reader, 독립 self-contained native export/reopen을 확인한다. Site는 static export와 carried/page/dataset/nested content도 확인한다. 동일 문서 안의 이동은 새 서버 문서 복사 검사와 구분한다. 기존 native·byte limits와 모든 원래 완료 기준을 유지한다.

이 문서·이슈 계약 준비는 Execute Storage가 맡는다. 실제 product source 변경은 Editor/Workspace와 정확한 파일 범위를 합의하고 accepted #412/#416 입력이 준비된 뒤 진행한다. #416의 범위 확인에 따라 과거 single-Execute/unassigned 문장은 책임 경로에 한해 대체한다. 공유 설정/develop/API/privatePG/browser/private-object runtime은 계속 Integration이 단독 관리한다.

단계별 결과물과 검사

각 단계는 아래 결과물을 실제로 남긴다. 원래 이슈의 모든 완료 기준도 함께 확인한다. 현재 열린 이슈의 구체 파일과 실행 환경은 착수 시점의 코드에서 확정하고 이 페이지와 이슈에 기록한다.

1. #412 — 실제 비공개 문서 자산 서비스

사용자가 받을 결과: 권한 있는 작성자는 기존 문서에 이미지와 첨부를 올린다. 권한 있는 뷰어는 같은 문서의 준비된 자산을 읽는다. 같은 시도를 재전송하면 같은 자산 결과를 받는다.

남길 결과물:

  • PostgreSQL 자산 메타데이터·문서 연결 migration과 tenant RLS. creator, attempt key, 바이트 수, SHA256, 객체 키, pending/failed/ready 상태를 보존한다.
  • 실제 비공개 S3 어댑터와 업로드·읽기 API. package export, configuration, bootstrap, route 연결까지 포함한 통합 commit.
  • 자산 계약 문서와 apps/office-service/DOCUMENT-ASSETS.md. 이미지 4 MiB, 첨부 8 MiB, MIME·바이트 검사와 오류 상태를 명시한다.
  • 실행 가능한 검사와 실행 기록. 소유 코드의 단위 검사와 실제 DB/API/OIDC/S3 검사를 구분한다. 시작·재시작·종료 명령과 정확한 실행 버전을 남긴다.

확인할 정상 흐름: 두 합성 tenant와 두 실제 인증 계정을 사용한다. 작성자가 이미지·첨부를 올리고, 원본·DB 메타데이터·회수한 객체의 크기와 SHA256을 독립 비교한다. 다른 뷰어 계정으로 읽는다. 같은 키·같은 바이트 재시도가 같은 asset ID와 문서 연결을 반환하는지 확인한다.

확인할 실패 흐름: 잘못된 타입·크기·경로, 다른 바이트를 사용한 키 재사용, viewer 업로드, 다른 문서·tenant ID, 권한 회수·만료, operator만 가진 계정, 익명 객체 접근을 거부한다. 객체 쓰기 실패, 메타데이터 commit 실패, 응답 유실 후에도 pending/failed 증거를 유지한다. 같은 DB/객체 저장소를 사용하는 API OS 프로세스를 재시작하고 동일 시도를 복구한다. 객체가 없거나 해시가 다르면 ready 성공을 반환하지 않는다.

다음 단계로 넘길 자료: 실제로 검증된 API·자산 상태·고정 시도 계약, 통합 commit, 작은 이미지 fixture의 독립 해시 비교. #416과 #414가 이를 재사용한다.

2. #416 — Site에서 사용하는 이미지와 완전한 로컬 내보내기

사용자가 받을 결과: 실제 Site 화면에서 이미지를 넣고 저장한 뒤 새로 열 수 있다. 다른 권한 있는 계정도 이미지를 본다. 명시적 native 다운로드와 정적 내보내기는 필요한 원본 이미지 바이트를 포함한다.

남길 결과물:

  • native resource/reference와 서버 document/asset ID의 호환 매핑. native node/resource ID, 이름, 크기, 페이지, dataset, 중첩 본문과 원본 바이트의 보존 규칙.
  • 기존 편집기와 읽기 경로에 연결한 업로드·해석 동작. 사용자 의도, 업로드, 참조 연결, snapshot 저장의 순서와 각 단계의 미완료 상태.
  • 현재 계정·문서·runtime 수명에 연결한 비동기 응답 처리. 이전 문서의 늦은 응답을 새 문서에 적용하지 않으며, 소유 임시 렌더링 URL을 종료 시 해제한다.
  • 직접 열어 검사할 수 있는 native 파일과 정적 export artifact. API credential, 임시/private URL, 객체 저장소 credential을 출력에 넣지 않는다.
  • 실제 Site UI·두 계정·재열기 검사와 codec/resolver/export 회귀 검사, 재현 명령과 지원 제한.

확인할 정상 흐름: 작성자가 실제 화면에서 페이지와 dataset에 합성 이미지를 넣는다. 저장·새로고침·중첩 글 수정 후 이미지와 native 참조가 유지되는지 비교한다. 별도 브라우저 profile의 뷰어가 원래 브라우저 cache 없이 연다. 내보낸 파일을 서버 연결 없이 독립적으로 열고 원본 이미지 해시를 비교한다. 단일 페이지의 자산 포함과 export 이름 충돌도 확인한다.

확인할 실패 흐름: 업로드 실패, snapshot 충돌, 응답 유실, ready 바이트 유실, API 재시작에서 초안·원본·고정 시도를 보존한다. 참조만 저장되거나 이미지가 비었다는 이유로 저장 완료를 표시하지 않는다. viewer 변경·다른 문서 자산·권한 회수·계정 교체 후 늦은 응답을 검사한다. 서버가 지원하지 않는 local 형식은 원본을 보존하고 제한을 표시한다. 필요한 바이트를 얻지 못하면 export를 불완전으로 처리한다.

다음 단계로 넘길 자료: 실제 product snapshot과 이미지 참조·바이트가 함께 유지되는 작은 Site fixture, 독립 내보내기 결과, 현재 권한과 미완료 상태 처리 계약. #414가 이 fixture를 복구 검사에 사용한다.

새 서버 Site 복사: full source native revision/raw와 이미지 original bytes를 고정하고 source-read/destination-create-write를 확인한다. 위 생성 receipt→대상 자산 ready→native 연결→snapshot 확인 순서로 완료한다. distinct destination의 자산 연결과 원본 보존을 DB/object/native 기준으로 비교한다. 다른 권한 있는 reader가 원본 browser cache 없이 destination을 재열며, native/static export를 서비스 없이 독립 재열기한다. 부분 실패·source/destination 권한 회수·응답 유실에서 원본/copy draft/고정 시도를 유지하고 false saved/copied를 금지한다. carried/page/dataset/nested content·export 이름 충돌 기준은 그대로 유지한다.

3. #414 — DB와 비공개 객체를 함께 복구

사용자가 받을 결과: 운영자가 문서 DB와 연결된 비공개 객체를 복구 묶음으로 보존하고, 새 목적지에 복원한 뒤 실제 API로 검증할 수 있다.

남길 결과물:

  • 기존 owner/backup/app 역할을 재사용하는 private capture/restore 도구와 실행 문서.
  • 버전이 있는 manifest. code/schema/migration 식별, 복구 시점, 쓰기 중지 절차, 문서·자산 연결, 상태, 객체별 바이트 수·SHA256을 포함한다. secret은 별도 보호 설정으로 관리한다.
  • capture가 충분한지 확인하는 비교 단계와 새 DB/객체 namespace의 복원 단계. 검증이 끝난 목적지만 사용할 수 있도록 결과를 구분한다.
  • 실제 capture·restore 기록, 걸린 시간, 데이터 규모와 해시 비교, 정상·실패 fixture의 최종 목적지 상태.

확인할 정상 흐름: 두 tenant, native snapshot, membership, ready 자산과 미해결 시도를 함께 캡처한다. 선언한 쓰기 중지 경계에서 DB와 객체를 비교한다. 빈 test-owned DB와 새 private namespace에 복원한다. snapshot·객체의 해시, migration 이력, 연결, 상태를 비교하고 실제 OIDC/API로 두 계정 읽기와 권한 거부를 확인한다.

확인할 실패 흐름: ready 객체 유실·손상, manifest·hash·migration 불일치, 사용 중인 목적지, capture/restore 중단은 실패 또는 미검증 stage로 남긴다. 원본 DB·bucket·묶음은 보존한다. pending/failed를 ready로 바꾸지 않는다. 복원한 목적지에서도 viewer 업로드·권한 회수·다른 문서/tenant·operator 고객 문서 접근과 익명 객체 접근이 거부되어야 한다.

다음 단계로 넘길 자료: 검증된 복구 도구·runbook·작은 복구 묶음의 검사 결과와 목적지 검증 계약. 이 결과는 DB+자산 복구 범위이며 전체 IdP/Yorkie/production 복구 완료로 확대하지 않는다.

4. #419 — 일반 명령으로 운영하는 두 로컬 설치

사용자가 받을 결과: 테스트 감독 프로그램 없이 일반 명령으로 Office UI/API를 시작·종료하고, 재시작 후 같은 저장 데이터를 열 수 있다.

남길 결과물:

  • 정확한 source commit과 lockfile에 연결한 UI/API artifact manifest 및 private 설치 descriptor.
  • start/status/stop/restart runbook과 명시적 합성 계정·tenant·owner provisioning 절차. 일반 start에서 숨은 fixture를 만들거나 권한을 높이지 않는다.
  • 서로 다른 DB/object/IdP/config/port를 갖는 두 test-owned 목적지와 같은 빌드 artifact의 비교 기록.
  • 일반 Office UI 로그인, 네 제품 snapshot, Site private 이미지, 재시작·데이터 유지의 실제 결과와 실패 복구 기록.

확인할 정상 흐름: 새 목적지에서 실제 로그인한다. 제한된 app DB 역할과 RLS를 확인한다. Note/Word/Slides/Site 각각 작은 문서를 저장·재열기하고 Site 이미지를 확인한다. 종료·시작 후 process ID가 바뀌어도 DB/object/IdP 식별과 원래 데이터가 유지되는지 확인한다. 같은 artifact로 두 번째 독립 목적지를 만들고 같은 검사를 실행한다.

확인할 실패 흐름: 이미 사용하는 port·디렉터리·realm·volume, 일부 configuration, migration 실패는 기존 목적지를 보존하고 구체적 실패를 반환한다. 두 설치의 cookie/profile/자산/tenant 데이터가 섞이지 않는지 확인한다. 필요한 의존성이 없으면 실행하지 못한 상태로 기록한다. health/readiness 의미를 실제 준비 상태에 맞춘다.

5. #417 — 합성 Site의 로컬 불변 게시와 복원

사용자가 받을 결과: 사용자가 저장된 특정 Site revision을 명시적으로 선택해 로컬 방문 origin에 게시한다. 실패한 교체는 이전 버전을 유지하고, 명시적 rollback은 검증된 이전 버전을 복원한다.

남길 결과물:

  • 별도의 publication 권한·확인과 현재 권한 재검사 계약. 저장·export 성공과 게시 활성화 성공을 구분한다.
  • release ID, 고정 attempt, prepared/failed/current 상태와 정확한 source revision·출력 manifest·파일 SHA256.
  • bounded relative 경로로 private staging한 완전한 파일 묶음과 원자 활성화·rollback 경로.
  • 별도 loopback 방문 origin의 실제 응답, HTML/CSP/iframe/script/form/resource 정책, source/private URL/credential 누출 검사.
  • 실제 화면 동작과 runbook. 정상 게시, 준비·활성화 실패, 응답 유실, process 재시작, 권한 회수, rollback 결과.

확인할 정상 흐름: 다중 페이지·중첩 글·이미지가 있는 저장 revision을 준비한다. source revision과 생성 파일·실제 served bytes의 해시를 비교한다. 별도 익명 browser로 페이지와 이미지를 연다. 나중 초안 변경이 현재 방문 버전을 바꾸지 않는지 확인한다. 이전 release로 rollback하고 재시작 후에도 같은 release가 제공되는지 확인한다.

확인할 실패 흐름: 미저장 초안, 자산 미해결, 부정 경로·target, 지원하지 않는 active content, viewer/operator만 가진 계정, stale revision/attempt, 준비 후 권한 회수를 거부한다. 부분 stage와 교체 실패가 이전 complete release를 유지해야 한다. 방문자가 private 문서·자산 API에 접근하지 못하며 출력과 요청에 인증 정보가 없어야 한다. 실제 고객 공개나 외부 hosting은 이 단계에 포함하지 않는다.

후속 #509 — Word 비공개 이미지 소비

사용자가 받을 결과: 현재 인증된 Word 문서에 이미지를 넣고 저장·재열기한다. 다른 권한 있는 계정이 이미지를 읽고, 명시적 native 다운로드는 원본 이미지 바이트를 포함한다.

계획 근거: 로컬 develop d33f06c5bded496f87f0544d2076d1143c4d0c8e의 packages/office-word/src/authoring-dialog.tsx는 FileReader data URL을 image src/alt로 전달하며 local 입력 한도는 5 MiB다. 기존 Word native version-1 codec과 authenticated snapshot/pending 경로를 보존해야 한다. #416은 Site 전용이다. 이것은 정적 소스 확인이며 Word 제품 인수 결과가 아니다.

남길 결과물:

  • Word 이미지의 stable native 참조와 current document/asset ID 매핑, original src·바이트·alt·지원 layout/crop/caption 보존 규칙.
  • #412를 재사용하는 명시적 업로드와 현재 권한에 따른 해석, upload/reference/snapshot의 순서·부분 실패·고정 시도 복구.
  • 계정·문서·runtime 교체 후 늦은 응답을 적용하지 않는 처리와 owned temporary URL 수명 관리.
  • 원본 이미지 해시가 같은 독립 .word.json artifact, 실제 두 계정 UI/API/DB/object 결과와 private runbook.
  • 새 서버 Word 문서로 복사할 때의 대상 자산 연결과 고정 시도·부분 실패 복구 계약. source 문서·이미지 바이트와 복사 초안을 보존한다.

검사: 실제 작성자 삽입·저장·재열기와 주변 글 수정, 별도 profile 뷰어 읽기, viewer 업로드/변경·다른 문서/tenant·권한 회수·operator-only 거부를 확인한다. 응답 유실, upload/snapshot 실패, missing/corrupt 객체, 같은 DB/object를 쓰는 API OS 재시작에서 원본·draft·고정 시도를 유지한다. local 5 MiB와 서버 admission 차이는 명시적으로 처리하고 snapshot 한도를 높이지 않는다. native artifact를 서비스 연결 없이 다시 열며 private URL·credential 유출을 확인한다. 새 Word 교환 기능이나 Yorkie media synchronization은 이 이슈에 추가하지 않는다.

새 문서 복사 검사: 원본 revision/native 바이트와 대상 문서 생성·쓰기 권한을 고정한다. 복사 대상은 새 document ID와 그 대상에 연결된 자산을 사용한다. 이전 source-document asset ID/URL을 그대로 붙여 대상 접근 권한으로 취급하지 않는다. 실제 복사 후 원본·대상 DB/object 연결과 독립 이미지 해시를 비교한다. 원본 브라우저 cache 없이 다른 현재 권한 계정에서 대상 문서를 재열고, 대상의 self-contained native 파일을 export하여 서비스 없이 다시 연다. 복사 실패·응답 유실·원본/대상 권한 회수에서 source와 copy draft/attempt를 유지하고 미완료 상태를 표시한다. 동일 문서 안의 이미지 이동과 기존 #405 snapshot 복사는 이 새 문서의 private bytes 복사 검사를 대신하지 않는다.

후속 #510 — Slides 비공개 이미지 객체와 채우기

계획 근거: fixed local develop 58ba404f68eb80664541efb92afe43d69410bb08의 toolbar-actions.ts는 picked media를 data URL로 image src/alt·크기에 전달한다. paint-panel.tsx는 이미지 채우기의 paint.src에 data URL을 쓴다. deck-file.ts는 native version-2와 document-owned connector identity를 보존한다. 이 경로에는 #412 소비자가 없으며 #406 snapshot과 #372 Yorkie가 해당 바이너리 매핑을 증명하지 않는다.

결과물: #412를 재사용하는 image/paint 참조 매핑, upload→reference→snapshot 부분 상태, account/document/runtime 수명 처리, 새 server deck에 연결된 자산을 사용하는 copy 복구, 원본 바이트를 포함한 독립 .slides.json, 실제 two-account UI/API/DB/object 결과와 runbook.

정상 검사: 실제 화면에서 admitted image object와 image fill을 삽입하고 저장·재열기한다. supported component/layout 위치를 명시해 검사한다. 위치·주변 글 변경 후 원본 해시와 full native 참조·presenter notes·connector를 비교한다. 별도 권한 profile에서 view/playback하고, 새 server deck으로 복사한 대상의 asset/document identity와 권한을 확인한다. copy export를 서비스 없이 독립 재열기한다.

실패 검사: viewer 업로드·변경, 타 document/tenant, 권한 회수, missing/corrupt ready bytes, deferred completion, upload/reference/snapshot/copy 실패·응답 유실·API OS 재시작에서 source/draft/attempt를 보존한다. 원본 덱 asset URL을 대상의 권한으로 사용하지 않는다. 같은 시도 복구는 고정된 결과를 반환하고 duplicate ready 대상 자산이나 false saved/copy 상태를 만들지 않는다.

후속 #511 — Note picture와 지원 native 보존

계획 근거: 같은 fixed commit의 block-model.ts는 picture.src/alt와 FileReader data URL을 사용한다. note-view.tsx의 기존 onFile hook은 Promise이며 durable upload/reference/snapshot receipt가 아니다. note-file-codec.ts에는 legacy native1와 명시적 full schemaBundle native2 경로가 있다. 현재 host의 native2 readonly stage를 이미지 read 데이터로 write 활성화하지 않는다.

결과물: 기존 picture/onFile와 #412를 사용하는 supported-native 매핑, original native/schema context 보존 문서, exact account/document/root/block 수명 처리, 새 Note로 복사할 때의 destination asset/attempt, 독립 .note.json과 실제 two-account 결과/runbook.

정상 검사: 실제 writer의 picture 설정·저장·재열기·중첩 글 수정, 별도 권한 profile의 이미지 읽기, 새 server Note copy의 대상 자산과 권한, original image hash/native attrs를 비교한다. native2를 지원하면 전체 envelope와 exact pins/definitions/digests도 비교한다. 대상 native export를 asset service 없이 독립 재열기한다.

실패 검사: block 삭제·교체, root/document/account 교체, readonly/disposed host로 늦은 응답을 적용하지 않는다. upload/copy/reference/snapshot 실패·응답 유실·conflict·missing/corrupt bytes·API OS 재시작에서 full original/draft/fixed attempt를 보존한다. schema/pin 변경이 필요하면 기존 명시적 adoption 경로를 사용한다. unsupported native mode를 legacy로 바꾸거나 full registered 필드를 버리지 않는다. viewer·타 scope·revoked/operator-only/anonymous 접근은 canonical effect와 함께 검사한다.

결과 기록과 완료 처리

각 이슈의 완료 기록에는 다음 항목을 남긴다.

항목 필요한 기록
구현 식별 base·candidate·integration commit, 소유 파일, 사용한 의존성·runtime 버전
실제 결과물 실행 명령, source/tool/runbook 위치, 생성 artifact와 독립 검사 방법
정상 결과 실제 사용한 UI/API/DB/object 경계, 합성 계정·tenant 수, 비교한 바이트 수·SHA256
실패 결과 입력·권한·의존성·응답 유실·중단 조건, HTTP/상태와 최종 canonical 데이터, 보존한 미해결 증거
필수 검사 명령·exit code, 실행한 검사 수, 미실행·실패와 원인, 원래 기준의 각 항목에 대응한 증거
남은 범위 다른 이슈와 parent 기준, 지원 제한, 아직 검증하지 않은 제품·환경
다음 작업 다음 기존/새 이슈 링크, 시작 조건, 정확한 작업 공간·base·파일 소유 범위

원래 완료 기준을 증거와 대조한 뒤 이슈를 닫는다. Wiki 상태를 완료로 바꾸고 다음 이슈를 선정한다. 생성한 파일은 직접 열거나 readback하여 검증한다. 자격 증명과 customer 데이터는 공개 기록에 넣지 않는다. 코드가 구현됐다는 이유로 실제 인수나 출시를 완료로 표시하지 않는다.

#412 현재 증거

  • 로컬 후보: 1e6f4b9229cf8c871e52fbf8dff0a1bb2a83fb51. 브랜치: codex/412-private-document-assets. 기준: a6151b1e6fbd55e0ebd743043495aab79415a8c6.
  • 소스 보존 위치: 현재 Git branch codex/412-private-document-assets가 위 후보 commit/tree d8918c41e5cd911d0fdba45635737e929daca3c6를 보존한다. 이전 /Users/user/.codex/worktrees/412-private-assets-20261009/barocss-editor 디렉터리는 후속 확인 시 없었다. Codex attachment 목록에는 active로 남아 있으며 원인은 확인하지 못했다. 현재 작업 공간이 clean이라고 주장하지 않는다. 다음 source 작업 전에 정확한 후보에서 managed checkout을 복구한다.
  • Node 22.22.0/pnpm 8.15.0 서비스 빌드·타입 검사와 집중 서비스 테스트 5개 통과. 네 형식의 작은 이미지 fixture와 잘못된 바이트 거부를 포함한다.
  • 전체 pnpm preflight는 office-api 타입 검사에서 실패했다. @barocss/office-service/document-asset-store package export가 연결되지 않았다. 테스트 타입 검사 단계에는 도달하지 않았다.
  • 실제 PG/OIDC/S3, 두 계정, 응답 유실, 장애, 같은 저장소를 사용하는 OS 프로세스 재시작 인수는 아직 미검증이다. #412를 닫지 않는다.
  • 자산 API·상태 계약을 재사용한다. Integration에 이 정확한 후보와 의존성 작업을 전달했다.
  • 후속 static 확인: local develop 58ba404f68eb80664541efb92afe43d69410bb08에는 document-asset/private-object source와 service asset export가 아직 없다. 이전 서비스 검사를 이번 계획 갱신에서 재실행한 것으로 표시하지 않는다.

갱신 기록

2026-10-09: 사용자의 직접 지시에 따라 이 실행 로드맵과 다음 이슈 선정·생성 규칙을 기록했다. 기존 #412/#416/#414/#419/#417을 대조했다. 현재 이슈는 #412이며, 다음 우선 후보는 #416이다. 전체 alpha #322의 별도 완료 기준은 계속 유지한다.

2026-10-09 추가: 의존성 대기 중에도 로드맵을 보강하고 후속 이슈를 사전 생성하라는 지시를 반영했다. 전체 299개 이슈와 fixed Word source를 확인해 #509를 등록했다. 상태는 WAIT_DEPENDENCY이며 현재 #412의 통합 검증과 기존 Site·복구·설치 순서를 유지한다.

2026-10-09 #509 보강: 새 server Word 문서 복사의 대상 자산 연결·현재 권한, 원본/복사 초안 보존, 독립 export/reopen을 기존 이슈 범위와 완료 기준에 추가했다. 의존성 대기와 실제 Word 파일 소유 범위 합의 조건은 유지한다.

2026-10-09 후속 준비: 최신 301개 이슈와 fixed local develop을 대조하여 #510 Slides와 #511 Note 비공개 raster 소비자를 사전 등록했다. native/복사/출력·실패 검사와 Note native2 입력 조건을 추가했다. #412 working directory가 없는 사실을 기록하고 보존된 branch/commit을 재확인했다. source/runtime 착수나 새 인수 통과를 주장하지 않는다.

2026-10-09 복사 순서 보강: 기존 네 consumer 이슈의 범위와 완료 기준에 destination document 생성 receipt→asset ready→native reference binding→snapshot confirmation을 명시했다. #416의 새 서버 문서 복사와 current source/destination 권한·full source 보존·다른 reader·native/static 독립 출력 기준을 추가했다. 새 이슈 없이 계약·metadata만 보강했으며 source checkout 복구나 runtime 변경을 수행하지 않았다.

2026-10-10 독립 준비: 현재 local develop c7d91d9f1a4a6999be55b4d8057193fdc26e2083와 existing #513 copy/host source를 확인했다. #412 기존 PNG/JPEG/GIF/WebP seed 네 개의 바이트 수·SHA256을 Python으로 독립 계산해 공통 fixture 계약에 적었다. 네 consumer에 정상·거부·부분 실패 기대값과 owner interface 준비를 연결했다. 실제 제품/private runtime campaign은 실행하지 않았으며 새 이슈·lease·role·schedule을 만들지 않았다.

2026-10-10 번호 checkpoint: #412 immutable seven-file delta와 manual을 확인하여 다른 migration ID 요구가 없음을 확인했다. Root의 0018 dependency reservation을 계약·이슈에 기록했다. Migration 등록·DB/S3 실행·source activation은 수행하지 않았다.

2026-10-10 Site 준비 완료: source/native gate 수준 A/B/C와 별도 unresolved 변형, exact native asset/rich references와 source/native bytes/hash, 독립 materialized-copy/native/static-export 기대값, current-authority/stage-failure 기대값을 owned artifact에 준비했다. Manifest SHA256 473b14328d8c4f47e988bc8e07145bfb164bbae76368fe24f318ca1c0a1cbf3f. 모델과 첫 fixture/setup 실패를 보존했으며 실제 consumer/권한/DB/object/export/browser/restart 인수는 미실행이다. #503 CLOSED 상태로 현재 문구를 정정하고 옛 이력은 남겼다.

2026-10-10 FOUR helper handoff: exact54693→51d33, four-only patch/source/checks/25-file receipt frozen. Direct Editor/Workspace ownership and reusable host/binary limits recorded. Original/rendition MIME hint and copied-byte getter remain DATA; unique B/casefold/original-rendition filenames are one future renderer+writer plan. No shared runtime/consumer/API/format activation. Original1e6f/0018 remain untouched; original412/416 acceptance stays open.

2026-10-10 load-metadata finding: actual consumer-second7PASS1FAIL과 original B failure를 확인했다. Loader hash5550e662와 finding a25e1902를 보존했다. 입력 원문은 유지되며 helper 자격과 operated-state export 검사는 각 범위로 유지한다. 전체 original native load-roundtrip/실제 private snapshot hash 문제는 기존416 안에서 미해결이며 새 이슈·source takeover는 없다.

2026-10-10 NUL repair: actual51d helper NUL path baseline, independent refusal oracle와 before-fix1FAIL6PASS를 보존했다. f421 immutable TWO는 NUL 이름을 source mutation 없이 거부한다. Affected41/final unchanged preflight0; Root/Editor에 narrow successor만 직접 전달했다. No newIssue/protocol/runtime; original51d/1e6/0018 preserved. EditorTEN과 sanctioned runtime metadata 경로는 별도 실제 baseline·기존 계약 범위로 추적한다.

Clone this wiki locally