Merge remote-tracking branch 'origin/sub_desktop_1' into main_laptop_1

This commit is contained in:
2026-09-15 19:03:30 +09:00
2 changed files with 25 additions and 11 deletions
@@ -2,7 +2,7 @@
"schema_version": "1.0",
"dataset_id": "data_master_labels",
"effective_date": "2026-01-01",
"generated_at": "2026-09-15T18:55:59+09:00",
"generated_at": "2026-09-15T18:59:13+09:00",
"note": "마스터 자료의 **사람이 읽을 이름표**. 값이 아니라 이름만 담는다 — 여기를 고쳐도 계산은 안 바뀐다. Z01 마스터 관리 화면이 표·열 이름을 여기서 읽는다.",
"policy": {
"labels_only": "값·수식·단가를 담지 않는다. 마스터 파일은 손대지 않는다.",
@@ -10,7 +10,7 @@
"unit_is_label_only": "unit 은 이름표에서만 정한다. 자료에 없는 단위를 만들어 붙이지 않는다.",
"counting_rule": "표 = 화면이 표로 그릴 마디(줄이 여럿인 마디). 값 묶음 = 표가 아닌 마디(설명·방침·한 값짜리 요율 따위).",
"brain_kind_table": "갈래는 2026-09-15 브레인 갈래 나눔표를 그대로 따른다(로직 17 · 기초값 9 · 부산물 4 · 씨앗 1).",
"out_of_31": "폴더 장부(_manifest.json) 셋은 브레인 31 밖이 부산물로 둔다.",
"out_of_31": "폴더 지문(_manifest.json) 셋은 브레인 31 밖이다. 부산물이 아니라 **지문** 갈래로 둔다 — 계산이 남긴 기록이 아니라 어느 판으로 셈했는지 못박는 표라 「정본 아님」 딱지가 안 맞는다(2026-09-15 브레인 ②).",
"excluded": "강우 IDF 캐시(resources/data_rainfall_idf_cache, 96 파일)는 배수용이라 뺀다."
},
"lookup_order": {
@@ -38,6 +38,10 @@
"name_ko": "부산물",
"summary": "다른 벌에서 나온 기록. ⚠ 정본이 아니다 — 고쳐도 정본이 안 바뀐다."
},
"fingerprint": {
"name_ko": "지문",
"summary": "어느 판으로 셈했는지 못박는 자리. 값도 규칙도 아니고 **판을 가리키는 표**다 — 고치지 않는다."
},
"seed": {
"name_ko": "씨앗",
"summary": "앞으로 늘려 갈 첫 벌. 모양을 잡아 두려고 먼저 놓은 것이다."
@@ -4552,9 +4556,9 @@
{
"file_id": "manifest_cost_input_value",
"path": "resources/data_cost_input_value/_manifest.json",
"name_ko": "원가 입력변수 — 파일 장부",
"summary": "실린 파일·적용일·지문 목록. 브레인 갈래표 31 밖의 장부다.",
"kind": "byproduct",
"name_ko": "원가 입력변수 — 판 지문",
"summary": "이 폴더를 어느 판으로 셈했는지 못박는 지문. 값이 아니라 판을 가리키는 자리다.",
"kind": "fingerprint",
"tables": [
{
"key": "deferred",
@@ -4694,9 +4698,9 @@
{
"file_id": "manifest_material_surcharge",
"path": "resources/data_material_surcharge/_manifest.json",
"name_ko": "재료 할증률 — 파일 장부",
"summary": "실린 파일·지문 목록. 브레인 갈래표 31 밖의 장부다.",
"kind": "byproduct",
"name_ko": "재료 할증률 — 판 지문",
"summary": "이 폴더를 어느 판으로 셈했는지 못박는 지문. 값이 아니라 판을 가리키는 자리다.",
"kind": "fingerprint",
"tables": [
{
"key": "files",
@@ -4737,9 +4741,9 @@
{
"file_id": "manifest_work_item_master",
"path": "resources/data_work_item_master/_manifest.json",
"name_ko": "공종 마스터 — 파일 장부",
"summary": "실린 파일·지문 목록. 브레인 갈래표 31 밖의 장부다.",
"kind": "byproduct",
"name_ko": "공종 마스터 — 판 지문",
"summary": "이 폴더를 어느 판으로 셈했는지 못박는 지문. 값이 아니라 판을 가리키는 자리다.",
"kind": "fingerprint",
"tables": [
{
"key": "files",
@@ -133,6 +133,16 @@ def test_갈래_이름이_다_풀려_있다(labels):
assert used <= known, f"뜻을 안 적은 갈래: {sorted(used - known)}"
def test_폴더_지문은_부산물이_아니다(labels):
"""`_manifest` 는 계산이 남긴 기록이 아니라 **어느 판으로 셈했는지 못박는 표**다 —
「정본 아님」 딱지가 붙으면 안 된다(2026-09-15 브레인 ②)."""
manifests = [f for f in labels["files"] if f["file_id"].startswith(MANIFEST_PREFIX)]
assert manifests, "폴더 지문이 이름표에 하나도 없다"
for entry in manifests:
assert entry["kind"] == "fingerprint", f"{entry['file_id']} 갈래가 {entry['kind']}"
assert "정본" not in labels["kinds"]["fingerprint"]["summary"]
def test_마스터의_표가_이름표에_다_있다(labels):
missing = []
for entry in labels["files"]: