Merge pull request 'feat: 섹터 유니버스 월간 갱신 파이프라인 + 리포트 고도화' (#62) from codex/sector-universe-split-report-hardening into main

Merge PR #62: sector universe monthly refresh pipeline
This commit is contained in:
2026-06-15 23:06:24 +09:00
2 changed files with 16 additions and 5 deletions
+3 -3
View File
@@ -1,9 +1,9 @@
{ {
"formula_id": "AUDIT_REPOSITORY_ENTROPY_V2", "formula_id": "AUDIT_REPOSITORY_ENTROPY_V2",
"gate": "PASS", "gate": "PASS",
"total_file_count": 1697, "total_file_count": 1703,
"package_script_count": 17, "package_script_count": 17,
"temp_json_count": 159, "temp_json_count": 160,
"budget": { "budget": {
"schema_version": "repository_entropy_budget.v1", "schema_version": "repository_entropy_budget.v1",
"max_total_files": 2200, "max_total_files": 2200,
@@ -15,5 +15,5 @@
"keep package scripts within release envelope" "keep package scripts within release envelope"
] ]
}, },
"source_zip_sha256": "4de4a7b1217ef5d5375b3b1ea1209f738719e79c4c3c0954e9e96a9dc0d8607e" "source_zip_sha256": "b992c6e54eae1b3b5ccf822d25a902dfcf10dc7a4fec93a902ff920d1cbd02b0"
} }
+13 -2
View File
@@ -115,7 +115,7 @@ def clean_scalar(value: Any) -> Any:
return None return None
if isinstance(value, float) and math.isnan(value): if isinstance(value, float) and math.isnan(value):
return None return None
if isinstance(value, (pd.Timestamp, dt.datetime, dt.date)): if isinstance(value, (pd.Timestamp, dt.datetime, dt.date, dt.time)):
return value.isoformat() return value.isoformat()
if hasattr(value, "item"): if hasattr(value, "item"):
try: try:
@@ -125,6 +125,17 @@ def clean_scalar(value: Any) -> Any:
return value return value
def _json_default(value: Any) -> Any:
if isinstance(value, (pd.Timestamp, dt.datetime, dt.date, dt.time)):
return value.isoformat()
if hasattr(value, "item"):
try:
return _json_default(value.item())
except Exception:
pass
return str(value)
def normalize_code(value: Any) -> str: def normalize_code(value: Any) -> str:
value = clean_scalar(value) value = clean_scalar(value)
if value in (None, ""): if value in (None, ""):
@@ -1585,7 +1596,7 @@ def convert_xlsx_to_json(xlsx_path: Path, output_path: Path) -> None:
# Recompute checksum invariants after any blueprint mutation patch. # Recompute checksum invariants after any blueprint mutation patch.
result["data"]["_harness_context"] = ensure_extended_harness_defaults(result["data"]["_harness_context"]) result["data"]["_harness_context"] = ensure_extended_harness_defaults(result["data"]["_harness_context"])
output_path.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8") output_path.write_text(json.dumps(result, ensure_ascii=False, indent=2, default=_json_default), encoding="utf-8")
print(f"Conversion complete: {output_path}") print(f"Conversion complete: {output_path}")