- REGISTRY-001 Summary 문자열 4곳 (additive, revision 은 1 유지).
registry-governance 는 본문 서술 12곳의 '8개'도 함께 9개로 갱신
- OFFLINE-CACHE-001 pin @1->@2 와 Summary·적용점 (behavior-change)
- DELEG-FE-007~011 delegate 5곳 접수 완료 — 미접수 위임 0건
- runtime-schema-validation 이 FLOW-FE-EVENT-003/004 소유를 명시
- env-runtime-config 가 FE-REG-CAPABILITY registry 와 FE-GATE-033 gate
owner 를 취득하고 claim 2건 추가
- 신규 6개 노트의 delegation pin 을 기존 @1 형식으로 정규화
FileDialogPort 와 BlobStorePort 를 정의하고, IndexedDB·OPFS·Cache Storage adapter 와 object URL 수명 계약을 고정한다. 이 계약이 없으면 컴포넌트가 URL.createObjectURL 을 직접 부르고 revokeObjectURL 을 빠뜨려 탭 수명 동안 메모리가 증가하며, quota 초과 시 correctness 값이 조용히 memory 로 fallback 된다.
이슈:
PR:
범위
포함 범위
FileDialogPort — 파일 선택(<input type=file> / File System Access) 과 저장 dialog
port ownership, storage registry, capability registry
근거 등급 경계: FE-D027(backend 선택 순서)의 Evidence / rationale 은 project-local default, 외부 source claim 아님 이다. MDN File System Access·OPFS·Cache Storage 등 외부 근거 raw 는 아직 수집되지 않았으며 그 수집 계획은 FE-Q-011 이 소유한다. 이 branch 의 결정을 외부 표준이 뒷받침한다고 말할 수 없다.
TODO
FileDialogPort 인터페이스 확정 — 등급: planned
BlobStorePort 인터페이스와 backend 선택 규칙 확정 — 등급: planned
object URL 수명 계약과 누수 fixture — 등급: planned
quota 초과 시 evictionOrder 동작과 null 행 보호 fixture — 등급: planned
OPFS 순차 write fixture — 등급: planned
Cache Storage 버전 파티션 fixture — 등급: planned
FE-GATE-027 binary I-O report 산출 — 등급: planned
진행 중 메모
FE-REG-STORAGE 의 UPLOAD_PART_STATE 는 quotaFallback: 없음, evictionOrder: null 이다. 이 두 값은 §9.4 의 "correctness 에 영향을 주는 값은 storage fallback 을 임의 적용하지 않는다" 를 행 단위로 구현한 것이므로, adapter 가 이 행에 대해 memory fallback 을 하면 gate negative fixture 가 잡아야 한다.
결정 사항
2026-07-28: object URL 생성·해제를 adapter 가 쌍으로 소유 / 이유: 해제 누락이 컴포넌트 단위로 흩어지면 검출이 불가능 / 검토한 대안: 컴포넌트 훅에서 useEffect cleanup 으로 관리 / 근거: 근거 raw 미수집, project-local 판단 (FE-Q-011)
결정-근거 매핑
Decision ID
Decision
선택 조건 (언제 이 결정 / 언제 대안)
Supporting Claims
Evidence Strength
Open Risk
D1
object URL 생성·해제를 adapters/file 이 쌍으로 소유
항상. 컴포넌트가 URL 문자열을 직접 다뤄야 하는 요구가 생기면 재검토
없음 — FE-Q-011 수집 대상
project-local default
해제 시점을 adapter 가 알 수 없는 사용 패턴(장기 미리보기)이 있을 수 있음
D2
BlobStorePort 가 backend 를 노출하지 않음
항상. OPFS 전용 최적화가 use case 레벨에서 필요해지면 재검토
없음 — FE-Q-011 수집 대상
project-local default
backend 별 성능 특성이 크게 다르면 추상화가 새는 지점이 생김
구현 가이드
근거 raw 자료(FE-Q-011) 수집 전까지 비워 둔다. 지금 채우면 모든 cell 이 UNSUPPORTED_IMPL_DECISION 이 되어, 다음 작업자가 근거 있는 결정 과 임의 trade-off 를 구분할 수 없다.
엣지·실패·의존
실패·엣지 경로
사용자가 dialog 를 닫음 → FILE_PICKER_DISMISSED, error surface 없음, telemetry event 없음
accept/size 제약 위반 → FILE_REJECTED, 위반 제약만 안내하고 파일명은 telemetry 에 남기지 않음
private mode 등으로 storage 접근 불가 → BLOB_STORE_UNAVAILABLE, registry quotaFallback 적용, 없음 행은 terminal
quota 초과 → BLOB_STORE_QUOTA_EXCEEDED, evictionOrder 순 제거 후 재시도. evictionOrder: null 행은 제거 대상이 아니다