Files
llm/scripts/render_1c_saved_state_latest_watch_run_markdown.py
T

99 lines
3.1 KiB
Python

#!/usr/bin/env python3
"""Render latest 1C saved-state watch run lookup as Markdown."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from typing import Any
def load_json(path: Path) -> dict[str, Any]:
return json.loads(path.read_text(encoding="utf-8-sig"))
def line(text: str = "") -> str:
return text.rstrip() + "\n"
def bullet(text: str) -> str:
return f"- {text}\n"
def code(value: Any) -> str:
if value is None:
return "`null`"
return f"`{value}`"
def render_run(run: dict[str, Any]) -> str:
counts = run.get("counts") or {}
out = ""
out += bullet(f"Run: {code(run.get('run'))}")
out += bullet(f"Run dir: {code(run.get('run_dir'))}")
out += bullet(f"Manifest check passed: {code(run.get('manifest_check_passed'))}")
out += bullet(f"Delta check passed: {code(run.get('delta_check_passed'))}")
out += bullet(
"Counts: "
f"objects={code(counts.get('object_changes'))}, "
f"systems={code(counts.get('system_changes'))}, "
f"delta_added={code(counts.get('delta_objects_added'))}, "
f"delta_removed={code(counts.get('delta_objects_removed'))}, "
f"delta_changed={code(counts.get('delta_objects_changed'))}, "
f"delta_unchanged={code(counts.get('delta_objects_unchanged'))}"
)
for key in ("manifest_markdown", "markdown", "delta_markdown", "report", "delta"):
if run.get(key):
out += bullet(f"{key}: {code(run.get(key))}")
return out
def render(data: dict[str, Any]) -> str:
counts = data.get("counts") or {}
safety = data.get("safety") or {}
out = ""
out += line("# 1C Latest Saved State Watch Run")
out += line()
out += line(f"Output root: `{data.get('output_root')}`")
out += line(f"Require delta: `{data.get('require_delta')}`")
out += line(f"Require changed: `{data.get('require_changed')}`")
out += line(f"Found: `{data.get('found')}`")
out += line()
out += line("## History Counts")
out += bullet(f"Runs: `{counts.get('runs')}`")
out += bullet(f"With delta: `{counts.get('with_delta')}`")
out += bullet(f"With delta changes: `{counts.get('with_delta_changes')}`")
latest = data.get("latest")
if latest:
out += line()
out += line("## Latest")
out += render_run(latest)
out += line()
out += line("## Safety")
for key in ("read_only", "sql_write_performed"):
out += bullet(f"{key}: `{safety.get(key)}`")
return out
def main() -> int:
parser = argparse.ArgumentParser(description="Render latest 1C saved-state watch run Markdown.")
parser.add_argument("--latest", type=Path, required=True)
parser.add_argument("--output", type=Path)
args = parser.parse_args()
markdown = render(load_json(args.latest))
if args.output:
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(markdown, encoding="utf-8")
print(json.dumps({"output": str(args.output)}, ensure_ascii=False))
else:
print(markdown)
return 0
if __name__ == "__main__":
raise SystemExit(main())