knowledge(M01): 로직 컨테이너 통합 분석 — 옛 단가산출 로직 삭제 걸림 · 잃는 기능 둘 · 지우는 차례

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
This commit is contained in:
2026-09-22 07:54:04 +09:00
co-authored by Claude Sonnet 5
parent 8dfd710584
commit b34cde7544
@@ -0,0 +1,94 @@
# 로직 컨테이너 통합 분석 — 옛 「단가산출 로직」 삭제 · 「로직 개선 시험」 → 「단가산출 로직」
분석만 — 코드·데이터 안 고침. 기준 = sub_laptop_3 · dev 8dfd7105.
## 한눈에
- 옛 컨테이너 전용 파일 = **`UI_Logic_Page.ts` 하나**(430줄). 나머지 `UI_Logic_*` 는 새 컨테이너도 씀.
- 새 컨테이너(`UI_LogicLab.ts`)는 옛 파일 `Logic_Api` · `Logic_Calc` · `Logic_List` · `Logic_Text` · `Logic_Edit` · `Logic_Pick` · `Logic_Note` · `Logic_Style.css` 를 그대로 가져다 씀 → 이 파일들은 **지우지 않음**.
- 서버 길 · 시험 · 다른 화면(B08·B09 등) 걸림 **없음**.
- 지우면 잃는 기능 **둘**(아래 ④) — 사용자 확인 필요.
## ① 파일 가르기
| 구분 | 파일 |
|---|---|
| 옛 전용 | `UI_Logic_Page.ts` |
| 새 전용 | `UI_LogicLab.ts` · `_Copy` · `_Detail` · `_Formula(.ts/.css)` · `_Modal` · `_New(.ts/.css)` · `_New_Find` · `_New_Text` · `_New_Var` · `_Pill(.ts/.css)` · `_Text` · `_Style.css` |
| 둘 다 씀 | `Logic_Api` · `Logic_Calc` · `Logic_List` · `Logic_Text` · `Logic_Edit`(새 쪽 자체 로직 편집기 · 숫자 서식) · `Logic_Pick`(요소 찾기 창) · `Logic_Note`(표 읽기 · 풀이 — 모달이 씀) · `Logic_Style.css`(둘 다 import) · `UI_Cells`(`Logic_List` 경유) |
| 화면 뼈대 | `UI_Page.ts`(옛·새 둘 다 엶) · `UI_Side.ts`(패널에 옛·새 두 절) |
서버 길(`/api/m01/…`)
- 옛 컨테이너가 쓰는 길 = `/logics` · `/subs?group=로직` · `/logic` · `/groups/로직/files` · `/calc` · `/text` · `/save` · `/elements` · `/pick` · `/materials`.
- 새 컨테이너 = 위에서 `/groups/로직/files` 만 빼고 전부 + `/logic/copy` · `/logic/formula` · `/logic/formula/save` · `/logic/formula/preview` · `/logic/draft`.
- 옛 전용 길 = `/groups/로직/files`(옛 [새로 만들기]에서 「파일 고르기」용) 하나 — 이 길은 그룹 공용이라 시험(`test_m01_api.py` 154줄)도 씀 → **서버는 안 지움**.
- 어느 화면도 안 부르는 서버 길(`/logic/new` · `/logic/edit` · `/logic/delete`)은 이번 삭제와 무관(이미 그랬음).
## ② 지워도 되는 것
옛 컨테이너만 쓰는 것
- `UI_Logic_Page.ts` 통째.
- `UI_Logic_Api.ts` `fetchLogicFiles`(`Logic_Page` 만 부름) · 타입 `LogicFile`(같은 곳 · 다른 곳 쓰임 없으면 함께).
- `UI_Logic_Text.ts` `Bar_New`(`Logic_Page` 만 씀).
- `UI_Logic_Edit.ts``isNew` · `files` · `onFile`(옛 새 로직 「파일 고르기」 — 새 쪽은 `isNew:false · files:[] · onFile:()=>undefined` 를 넘김). 지우면 `head()``choice(...)` 가지도 같이 지워짐.
- `UI_Logic_Style.css` 의 옛 옆칸 규칙 — `.m01-logic:has(> .m01-logic__calc:not([hidden]))`(1921 · 2629) · `.m01-logic__calc` 묶음(32 · 38 · 4650 · 136–140). 새 컨테이너의 시험 계산은 상세 안 `m01lab__calc` 라 옆칸 `<aside>` 가 없음. (`.m01-logic__calc-out``Logic_Calc` 가 씀 — 남김)
- `UI_Page.ts``logicHost` · `logicMounted` · `logicHandle` · `LogicHandle` import · `showMode("logic")` 가지 · `openLogicTab``mountM01Logic` 부름.
- `UI_Side.ts` 의 옛 절(`logicHost` · `LOGIC_ID` · `onLogic`) — `SideHandle.logicHost` 는 이름을 새 컨테이너 것으로 넘김(③).
- `ui_template/ui_template_locale_m1.ts` `M01_GroupLogic`(새 이름을 여기 두면 남김 — ③).
- 옛 캐시 칸 `sessionStorage` `m01_logic_drafts` · `m01.filter.로직` — 코드에서 안 읽게 되면 죽은 칸(세션 안 저장이라 지울 것 없음).
옛 컨테이너와 무관하게 이미 죽은 것(같이 치워도 됨 · 별개로 둬도 됨)
- `UI_Logic_Pick.ts` `pickPanel` · `swappedRow` · `hasPickable` · `Swaps`(134–286줄 · 밖에서 부르는 곳 0).
- `UI_Logic_Note.ts` `buildNote` · `NoteOptions`(206–286줄 · 밖에서 부르는 곳 0 — 같은 파일의 `loadTable` · `matchRow` · `explain` · `relatedFinds` 는 새 쪽이 씀).
- `UI_Logic_Text.ts` 문구 23개(`List_*` · `Flow_*` · `Edit_On/Off/Add*` · `Stop_*` 등 · 직접 호출 0) — `plainReason``Stop_*` 를 글자로 부를 수 있어 지우기 전 확인.
시험
- 옛 컨테이너를 겨냥한 시험 **없음**(`resources/tester/test_m01_*.py` 는 서버만 · 화면 `.ts` 를 안 읽음). 화면 확인은 `npm run typecheck` + ORCA.
## ③ 둘 다 쓰는데 옛 이름인 것(이름만 바꿈)
| 자리 | 지금 | 바꿀 것 |
|---|---|---|
| 패널 절 제목 | `Logic_Text` `Lab_Title` = 「로직 개선 시험」 | 「단가산출 로직」(`M01_GroupLogic` 를 다시 쓰거나 `Lab_Title` 글을 바꿈 — 한 곳만 남김) |
| 알약 돌아가기 | `LogicLab_Text` `Pill_Back` 「← 로직 개선 시험으로 돌아가기」 | 「← 단가산출 로직으로 돌아가기」 |
| `SideHandle` | `labHost` · `onLab` · `LAB_ID "로직시험\|"` | `logicHost` · `onLogic` · `LOGIC_ID`(옛 이름이 비면 그 이름 재사용) |
| 거름 기억 | `m01.filter.로직시험` · id `로직시험\|` | 그대로 둬도 동작(사용자에게 안 보임) — 이름 통일은 선택 |
| 페이지 | `openLabTab` · `labHost` · `labMounted` · 주석 「정본 로직 화면의 복사본」 | `openLogicTab` 으로 합침 |
| 머리 주석 | `LogicLab.ts` · `_Detail` · `_New` · `_Text` 의 「로직 개선 시험」 · `Page.ts` 머리(컨테이너 나열) · `Side.ts` 62 · 91줄 | 문구만 |
| 파일 이름 | `UI_LogicLab*.ts` | 그대로 둬도 됨(파일 이름 바꿈은 선택 — 바꾸면 `Logic_Page.ts` 자리를 새 것이 이어받는 꼴) |
| 문서 | `ref/_검증_*` · `PLAN.md` 의 「로직 개선 시험」 · 「정본 화면」 문장 | 이력이라 그대로 둠(PLAN 3-1 은 이관 대상) |
## ④ 옛에만 있고 새에 없는 기능(지우면 잃음)
1. **공용(정본) 로직 직접 고치기** — 옛 = 어느 로직(GC·GF …)이든 호표 · 입력 · 중간 · 덧줄 · 끝수 · 이름 · 결과 단위 · 출처를 고쳐 [저장] 으로 정본 파일에 씀. 새 = **자체 로직(키 GX)만** 고침(`isOwnLogic`) · 공용 로직은 읽기 전용(비고만 고침) · 고치려면 [본떠 만들기] 로 GX 를 만든 뒤. PLAN 3-1 「개선은 여기서만」 · 3-2 「정본은 복제 뒤」 와는 맞음 — 그러나 **지금 정본 로직 1,354 줄의 오타·수량 손질은 이 길이 없어짐**(서버 `/logic/edit` · `/save` 는 살아 있으니 화면만 없어짐).
2. **[새로 만들기](빈 로직 + 파일 고르기)** — 옛 = 빈 줄을 만들어 로직 파일 하나를 골라 정본 파일에 더함. 새 = [식으로 새로 만들기](`/logic/draft` · GX · 파일 못 고름). 정본 파일에 새 GC/GF 줄을 더하는 길이 없어짐.
그 밖에는 새가 같거나 더 많음 — 목록 · 거름 · 열기 · 지우기(모든 로직에서 됨 · `/save` delete) · 초안 표시 · 시험 계산 · 호표 · 복제 · 식 새로 만들기 · 알약 → 마스터 화면 · 텍스트 수식.
## ⑤ 다른 화면이 옛 컨테이너를 부르는가
- **밖(B08·B09 등)에서 옛 컨테이너나 `/api/m01` 을 부르는 곳 없음**(`A00_Common/router.ts` 가 페이지만 엶 · `main.py` 는 라우터 등록만).
- **안에서 옛 탭을 여는 곳(= 새 쪽으로 이어줘야 함)** — 전부 `Page.ts``openLogicTab(key?)` 하나로 모임:
- 소요량·계수 표의 「쓰는 로직」 키 클릭 → `renderTables(…, openLogicTab)`.
- 일위대가 조합의 로직 이름 클릭 → `mountM01Combo(…, (key) => openLogicTab(key))`.
- 패널 절 제목 클릭 → `buildSide(…, () => openLogicTab(), …)`.
- `setPendingLogicKey` · `takePendingLogicKey`(`Side.ts`) 로 키를 넘김 — 새 컨테이너는 `openKey` 를 이미 가짐(`mountM01LogicLab(host, side, openKey)` + 반환 `openKey`)이나 **`Page.ts` 가 안 넘김**(지금 `openLabTab` 은 키 없이 마운트) → 합칠 때 `openLogicTab` 이 마운트 인자 · 이미 열려 있으면 `handle.openKey(key)` 로 이어야 함.
- 새 → 마스터 알약 뒤 「돌아가기」 = `openLabTab` → 합친 `openLogicTab`.
## ⑥ 지우는 차례 제안
각 걸음 끝 = `npm run typecheck` + `prettier` + 커밋·push. 서버 시험은 안 돌려도 됨(서버 안 만짐).
1. **이음 바꾸기**`Page.ts``openLogicTab` 이 새 컨테이너(`mountM01LogicLab` + `openKey` 이음)를 열게. 패널에는 옛·새 두 절이 아직 있음. ORCA: ⓐ 소요량 표 「쓰는 로직」 키 클릭 → 새 컨테이너에서 그 로직 열림(처음 한 번 · 이미 열린 뒤 한 번) ⓑ 조합 화면 로직 이름 클릭 → 같음 ⓒ 알약 → 마스터 화면 → 돌아가기.
2. **옛 절 걷기**`Side.ts` 에서 옛 절 · `LOGIC_ID` 걷고 새 절 제목 「단가산출 로직」 · `logicHost` 이름 통일 · `Page.ts` 의 옛 마운트 · `showMode("logic")` 걷음. ORCA: 패널에 「단가산출 로직」 하나만 · 펼치면 목록 1,354 · 13-4-1 열림 · 시험 계산 203,281.2(PLAN 3-1 수치) · 390px 한 번.
3. **옛 파일 지우기**`UI_Logic_Page.ts` 삭제 · `fetchLogicFiles` · `LogicFile` · `Bar_New` · `isNew/files/onFile`(+ `choice` 가지) · 옛 옆칸 CSS · `M01_GroupLogic`(안 쓰면). typecheck 가 빠진 이음을 잡음. ORCA: 단가산출 로직 · 조합 · 표 → 로직 · 390px 다시 한 번.
4. **죽은 것 치우기(선택)**`pickPanel` 묶음 · `buildNote` · 안 쓰는 문구 23개. typecheck 로 확인.
5. **이름 마무리**`Pill_Back` · 머리 주석 · (선택) 파일 이름. 문서(`PLAN.md`)에 새 이름 반영 · 이관 대상 절 정리는 외부 AI 몫.
## 지우기 전에 사용자에게 필요한 답
- ④ 의 둘(정본 로직 직접 고치기 · 정본 파일에 새 줄 더하기)을 **버려도 되는가**. 버리면 위 순서 그대로. 두 길 가운데 하나라도 필요하면 새 컨테이너에 그 기능을 먼저 더한 뒤 3걸음을 함(별도 일감).