fix(m01-sl): 가져온 표 상자 「표」 바깥 값 출력 알약(E1) — Table 상자와 같은 꼴

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
This commit is contained in:
2026-10-01 13:17:36 +09:00
co-authored by Claude Opus 5.5
parent 124c3976d8
commit 520c7dc406
2 changed files with 6 additions and 2 deletions
+3 -2
View File
@@ -384,7 +384,8 @@ function newTable(b: Build, n: Extract<Ast, { t: "find" }>, sig: string): TableB
const cols = tableCols(table);
const rows = tableRows(table);
b.row(node, t("Table"), { 값: n.head }, t("Outside"));
b.pill(node, "in", { name: t("Table"), cell: "E1", outside: true });
// 바깥 값 「표」 알약 — Table 상자와 같은 꼴(출력 · 블록 왼위 · 머리 줄 포함) · Eval · 서버가 이 칸에서 블록을 채움
b.pill(node, "out", { name: "표", cell: "E1", outside: true });
rows.forEach((r, i) =>
r.forEach((v, j) => {
const c = cellOf(v);
@@ -653,7 +654,7 @@ export function outsideOf(sl: SheetLogic, calc?: CalcValues): SlOutsideAt[] {
const out: SlOutsideAt[] = [];
for (const node of sl.nodes) {
const passed: Record<string, unknown> = {};
const outside = node.pillsIn.filter((p) => p.outside);
const outside = [...node.pillsIn, ...node.pillsOut].filter((p) => p.outside);
const sheet = sl.workbook.시트.find((s) => s.id === node.sheetId);
for (const p of node.pillsIn) {
const note = sheet?.칸[`C${p.cell.slice(1)}`]?.값;
+3
View File
@@ -214,6 +214,9 @@ def test_가져온_시트로직_값이_calc_와_같음(row: dict, given: dict, m
sheets = {s["id"] for s in sl["workbook"]["시트"]}
assert len(sheets) == len(sl["nodes"]) and all(n["sheetId"] in sheets for n in sl["nodes"])
ids = {n["id"]: n for n in sl["nodes"]}
for n in sl["nodes"]: # 표 상자 = 「표」 바깥 값 출력 알약(E1 · Table 상자와 같은 꼴)
if n["kind"] == "table":
assert {"name": "표", "cell": "E1", "outside": True} in n["pillsOut"]
for e in sl["edges"]:
assert any(p["name"] == e["from"]["pill"] for p in ids[e["from"]["node"]]["pillsOut"])
assert any(p["name"] == e["to"]["pill"] for p in ids[e["to"]["node"]]["pillsIn"])