Files
Aislo/docs/raw/plans/2026-08-29_plan_initial_design_lock.md
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록)
- `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록
  — 창끼리 공유하되 저장소에는 안 올리는 장부
- 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠)
- graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 18:19:07 +09:00

6.4 KiB

B05 초기화 복원 실측·계산 중 진입 차단 완료 아카이브

  • 완료일: 2026-08-29
  • 상태: 사용자 검증 완료
  • 검증: docs/raw/verification/2026-08-29_verify_initial_design_lock.md
  • 검증 방식: 사용자 실무 검증 채택, Codex 2차 교차검증 생략

완료 범위

B05 노선·초기화

  • 새 프로젝트 업로드에서 계산 중 B05 진입이 준비 화면으로 차단되고 완료 후 자동 전환되는지 화면 실측.

  • 노선 경로 변경 시 전체 재계산 분리와 route_signature 게이트 정리.

  • [초기화] 복원 경로 실측 완료(2026-08-29) — 스냅샷을 갖춘 뒤 [초기화]를 다시 눌러 응답이 {"route_id":104,"deleted_routes":1,"restored":true}임을 확인했다. 재계산이 아니라 스냅샷 복원 경로다. 옛 route 1행 삭제 → 덤프에서 새 id로 재삽입(103 → 104), 연장 350.11m· 관 지점 4건이 스냅샷 값 그대로 돌아왔고 3초 안에 끝났다(폴백 재계산은 10초+). route id가 매번 오르는 것은 설계대로다 — 덤프의 id 열을 비우고 INSERT하므로 AUTO_INCREMENT가 새 번호를 붙이고 자식 4표가 그 id로 붙는다. 촬영·폴백 실측은 docs/raw/plans/2026-08-29_plan_initial_snapshot_reset.md 「화면 실측」 참조.

  • 작업본 처리 종결(2026-08-29 사용자) — 현재 작업본은 초기값이다. 직전 설계 (route 101) 백업 tmp/backup_before_initial/불필요로 판단해 사용자가 삭제한다.

초기값 보전 마무리 — 계산 중 진입 차단·스냅샷 무효화 (2026-08-29 구현 완료, 화면 실측 대기)

사용자 확정(2026-08-29)

  • 계산이 끝날 때까지 B05·B06에 못 들어가게 막는다. 지금은 지표면 확정 직후 "노선 설계로 이동하세요"를 적고 그 뒤에 초기 설계 체인이 돌아, 반쯤 계산된 화면에 들어가 만질 수 있다. 그 편집이 섞인 채 스냅샷이 찍히면 초기값이 오염된다.
  • 지표면이 바뀌면 초기값도 바뀐다 — 파일을 다시 올려 전처리를 새로 하므로 당연히 처음부터다. 노선 경로가 바뀌어도 전처리 일부가 다시 계산되므로 마찬가지다.
  • 스냅샷 용량은 실측으로 해소 — 1.1MB(프로젝트 3.3GB의 0.03%). 압축 불필요.

설계

  • 진입 차단은 이미 있는 준비 화면(B11) 을 쓴다(routeAfterPreloadCheckROUTES.B11_LOADING). 새 화면을 만들지 않는다. 지금 게이트가 못 막는 이유는 판정 기준이 확정 지표면 서명이라, 체인이 시작되기 전에 이미 열리기 때문이다.
  • 판정 신호는 마커 파일 하나로 둔다({프로젝트 루트}/initial_design.lock). 체인 시작에 만들고 finally에서 지운다. workflow_state의 stage 2는 체인이 끝나도 IN_PROGRESS라 구분에 못 쓰고, route 존재 여부도 체인 3단계에서 이미 생겨 못 쓴다. 마커는 스냅샷 대상 4트리 (프로젝트 루트)에 둬 복원에 딸려 들어가지 않게 한다.
  • 스냅샷은 무효화(삭제) 로 처리하고 그 자리에서 다시 뜨지 않는다 — run_redesign_chain은 "사용자 입력을 유지한 채" 재계산하므로 그 결과를 찍으면 사용자 편집이 섞인 가짜 초기값이 된다. 삭제해 두면 다음 [초기화]가 재계산 폴백을 타면서 새 초기값을 만들고 체인이 그때 촬영한다.
  • 그러려면 폴백 경로가 편집 정본을 먼저 지워야 한다 — 지금은 안 지워서 재계산이 사용자 편집(structures.json·edits/pipe_points.json)을 다시 읽는다. 2026-08-29 실측 때 이 둘을 손으로 지워야 했던 바로 그 문제다.

체크리스트

  • common_util_initial_snapshotdesigning_lock_path() · discard_initial_snapshot() 추가(마커 경로와 스냅샷 삭제를 한 곳에 둔다).
  • run_auto_design_chain · run_redesign_chain(B03_FileInput_Service_Chain.py) — 시작에 마커 생성, finally에서 제거. 재설계 체인은 끝에 스냅샷도 무효화한다.
  • /surface/status(B04_PreProcess_Router.py:501) — 마커가 있으면 status="in_progress" · current_stage="initial_design" · 안내 문구를 돌려준다. 지금은 stage 1이 COMPLETE면 진행률 파일을 덮어써 "completed"로 나온다.
  • routeAfterPreloadCheck(A00_Common/b_workflow_nav.ts:64) — 상태가 initial_design이면 서명과 무관하게 B11로 보낸다.
  • B11(B11_Status_UI_Loading.ts) — 프리로드 전에 상태를 폴링해 initial_design이 풀릴 때까지 기다린다(진행 문구 표시). 풀리면 종전대로 프리로드 후 목표 화면으로.
  • reset_route_design 폴백 경로 — 체인을 돌리기 전에 structures.jsonedits/ 를 지운다. 복원 경로는 스냅샷이 덮어쓰므로 손대지 않는다.
  • 테스트 — 마커 유무에 따른 상태 전환, 폴백이 편집 정본을 지우는지, discard_initial_snapshot() 동작.
  • 자체검증(2026-08-29) — npm run typecheck 통과, 변경 TS prettier, 변경 Python ruff format·check 통과. pytest tmp/tests/ -q249 passed(신규 4건 포함) ·7 skipped·8 failed. 실패 8건은 기슭막이 이관 때 생긴 기존 실패로 이번 변경과 무관하다(변경 전에도 동일). · 신규 테스트 4건 — 마커 생성·해제·중복 해제, 마커가 스냅샷에 안 담기는지, discard_initial_snapshot() 있음/없음, wipe_edited_masters()가 편집 정본 2개만 지우고 다른 정본은 건드리지 않는지.
  • 화면 실측(미완) — 마커가 걸린 동안 B05 진입이 준비 화면으로 가는지, 체인이 끝나면 자동으로 넘어가는지. 새 프로젝트 업로드가 있어야 자연스러운 재현이 되므로 다음 업로드 때 확인한다. 마커 파일을 손으로 만들어 게이트만 따로 볼 수도 있다.

구현 메모 — /surface/status는 stage 1이 COMPLETE면 진행률 파일을 무시하고 "completed"로 답한다. 그래서 진행률 파일에 단계를 적는 대신 마커를 별도로 확인해 덮어쓰는 방식으로 갔다. 게이트는 상태 조회가 실패하면 막지 않는다 — 조회가 막혔다고 사용자를 준비 화면에