Files
Aislo/resources/tester/test_b06_save_recompute.py
eomsangdonandClaude Opus 5 2eb2c97293 fix(B06): 저장이 옛 면적을 싣던 자리 — 저장 직전 전 측점 재계산 + 「안 실림」 알림
⚠ 잡은 자리(2026-09-09 실측) — 표준단면 「측구 상폭」을 0.69 → 0.9 로 고쳐 저장했더니
정본 한 줄에 **새 측구 기하(상폭 0.9 · 측구 0.18㎡)** 와 **옛 절토 면적(3.33㎡)** 이 섞여
남았음. 브라우저는 만진 측점만 다시 계산하는데 저장은 전 측점 면적을 실어 보내므로,
안 만진 측점이 옛 값 그대로 정본이 됨. 수량이 갈리는 자리임.

- [저장]·[확정]이 면적을 모으기 **전에** 전 측점을 다시 계산함(`reconcileDesigns`).
- 표준단면 패널에 「고친 값이 측점에 아직 안 실렸음」 알림 — 언제 따라오는지 함께 적음.

 거울(파이썬·TS) 문제가 아님을 먼저 가름 — 같은 입력을 주면 두 쪽이 같은 값을 냄
(측점 20.0m: 0.69 기준 절토 3.328 · 0.9 기준 3.899, 저장분은 3.328 + 측구 0.180 으로 섞여 있었음).

시험 둘 추가(저장·확정이 재계산을 먼저 부르는지), 전체 1205 통과·실패 0.

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

45 lines
2.0 KiB
Python

"""[저장]·[확정]은 **면적을 모으기 전에** 전 측점을 다시 계산한다 (2026-09-09 실측).
⚠ 잡은 자리 — 표준단면 「암 측구 상폭」을 0.69 → 0.9 로 고쳐 저장했더니 정본 한 줄에
**새 측구 기하(상폭 0.9 · 측구 0.18㎡)** 와 **옛 절토 면적(0.69 기준 3.33㎡)** 이 섞여
남았다. 브라우저는 만진 측점만 다시 계산하는데 저장은 **전 측점 면적**을 실어 보내므로,
안 만진 측점이 옛 값 그대로 정본이 된다.
(같은 입력을 주면 파이썬·TS 는 같은 값을 낸다 — 거울 문제가 아니라 **입력이 갈린 것**이다.)
⇒ `saveCurrentSections`·`confirmCurrentSections` 가 `collectSectionEdits` **앞에서**
`ctx.reconcileDesigns()` 를 부른다. 순서가 뒤집히면 옛 면적이 그대로 실린다.
"""
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
PERSIST = ROOT / "B06_Section" / "B06_Section_UI_Page_Persist.ts"
PAGE = ROOT / "B06_Section" / "B06_Section_UI_Page.ts"
def _body(source: str, marker: str) -> str:
start = source.index(marker)
return source[start : start + 1200]
def test_저장이_면적을_모으기_전에_다시_계산한다() -> None:
text = PERSIST.read_text(encoding="utf-8")
for marker in (
"export async function saveCurrentSections",
"export async function confirmCurrentSections",
):
body = _body(text, marker)
assert "ctx.reconcileDesigns()" in body, f"{marker} 가 재계산을 안 부른다"
assert body.index("ctx.reconcileDesigns()") < body.index("collectSectionEdits(ctx)"), (
f"{marker}: 재계산이 면적 수집보다 뒤에 있다 — 옛 면적이 실린다"
)
def test_페이지가_재계산_통로를_이어_준다() -> None:
text = PAGE.read_text(encoding="utf-8")
assert "reconcileDesigns: () => reconcileStaleDesigns({ force: true })" in text, (
"페이지가 통로를 안 이어 주면 저장이 옛 값 그대로 나간다"
)