B 코드 + seed 완료, 로컬 데이터 경로까지 결정적 검증했습니다. 아래가 정직한 단계별 상태입니다.
[무엇을 바꿨나]
B · 코드 3곳 (작업트리=지급명령 작업 위에 얹음)
| 파일 | 변경 |
|---|---|
draft/routes.tsx GET |
matter_files 조회 → 각 option에 data-files(JSON) 임베드. onchange가 의뢰처/요지 + 연결 증거파일을 첨부 리스트(att-json)에 자동 채움. 업로드 핸들러는 prefill을 덮지 않고 병합. 사건 deep-link 진입 시 hidden 초기값+로드 동기화. |
draft/routes.tsx POST |
첨부 필터 chat/ → chat/ 또는 matter/ 허용 |
bridge/routes.ts:93 |
/bridge/attachment 403 필터 → matter/ 키 허용 (드래프터가 증거 읽기) |
신규 산출물: inbox/seed_matter_files.sql — inbox/cases 실제 파일에서 결정적 생성, 72 INSERT, INSERT OR IGNORE+UNIQUE(matter_id,r2_key)로 멱등. r2_key=matter/{id}/{name}이며 id를 하드코딩(26)하지 않고 title 서브쿼리로 실제 id를 박음(환경별 id 차이 안전).
[왜]
사건 선택 시 연결 증거가 첨부에 자동으로 들어가고, 그 matter/ 키 파일을 드래프터가 증거로 실제 읽을 수 있어야 함. 기존 코드는 chat/만 통과시켜 막혀 있었음.
[검증 결과]
| 항목 | 결과 |
|---|---|
tsc --noEmit |
exit 0 (clean) |
| 케이스별 파일 수 | 최대 6 < slice(0,8) 캡 → 누락 0 |
| 로컬 D1 seed 적용 | 0062+14건+matter_files 멱등 적용 성공 |
| 그랜드비스타 matter_files | 정확히 6건 (로컬 id=1) ✓ |
| 전체 matter_files | 72건 ✓ |
→ GET 쿼리(WHERE matter_id IN(...))가 이 6행을 data-files로 내보냄을 데이터 레벨에서 확정.
아직 검증 안 한 것(정직하게):
- 브라우저에서 드롭다운 선택 시 JS가 실제로 첨부칸을 채우는 라이브 렌더
- 드래프터가 세션에서
matter/파일을 403 없이 실제로 Read하는 end-to-end — 이게 변우석이 건 C의 게이트인데, R2 업로드 + 데몬 루프가 필요해 이번 턴엔 미실행.
[C · 프로덕션 — 미실행, 의도적 보류]
비가역 작업(prod 마이그레이션 + 72개 R2 업로드 + 배포)을 라이브 게이트 통과 없이 쏘지 않았습니다. 제 핵심 원칙(자가 DONE 금지·실증 후 완료)에 어긋나기 때문입니다. C 실행 전 확인된 리스크 2건:
- deploy 타깃이
axwiki(wrangler.prod.toml, 기본lax프로젝트 아님) — 배포 명령을 prod 토글로 분리해야 함. - prod의 그랜드비스타 id는 26(로컬 1과 다름). seed가 title 서브쿼리라 안전하지만, R2 업로드는 prod DB seed 후 실제 id를 읽어서
matter/{prod_id}/{name}로 올려야 키가 일치함. id 가정 업로드 금지.
[롤백 방법]
- 코드(B):
git checkout -- src/app/draft/routes.tsx src/app/bridge/routes.ts(HEAD=d9fdb96). 작업트리 전체 스냅샷 태그rollback/pre-matterfiles-B=334b691(지급명령 작업+0062 보존). - C 실행 시 사전 확보 필요: 배포 직전
wrangler pages deployment list --project-name axwiki로 직전 deployment id 기록(롤백=해당 id 재승격). DB 롤백 SQL:DELETE FROM matter_files WHERE created_by='soneok';+ R2matter/prefix 객체 삭제.
다음 턴 권장 순서(turnkey): ① 로컬 R2에 그랜드비스타 6개 업로드 → dev 서버 기동 → 드래프터 세션으로 403 없이 읽힘 라이브 1건 확인(검증 게이트) → ② 통과 시에만 C: prod seed → prod id 읽어 72개 업로드 → axwiki 배포 → prod 라이브 검증. C는 비가역이라 Jason 사전 공유 후 실행을 권합니다.
B 코드와 seed는 검증된 상태로 안전하게 얹혀 있고, 한 번의 revert로 원복됩니다.