sync: SHANGHAI-U9 2026-08-19 sim-rtl-flow 增约束原语阶段与版本说明树文件重命名,新增 ledger 迁移脚本

This commit is contained in:
bowei
2026-08-19 12:50:44 +08:00
parent d77d025c59
commit 6535dd83d4
3 changed files with 205 additions and 21 deletions
+15 -4
View File
@@ -402,7 +402,7 @@ def _print_final(state: Any, replayed: list[str]) -> None:
if review:
mark = "批准" if review.get("approved") else "驳回"
if (review.get("metadata") or {}).get("skipped_by_history"):
mark = "按历史设计说明文件跳过"
mark = "按版本说明树文件跳过"
print(f"{label} : {mark} {review.get('notes', '')}".rstrip())
plan = state.get("history_plan") or {}
print(f"历史文件 · 参考 : {plan.get('history_path') or '(none)'}")
@@ -421,6 +421,17 @@ def _print_final(state: Any, replayed: list[str]) -> None:
f" - {item['module']}: stage={item['stage']} "
f"success={item['success']} artifacts={item.get('artifacts')}"
)
constraints = state.get("constraint_result") or {}
if constraints:
print(
"约束原语 : "
f"source={constraints.get('source')} "
f"passed={constraints.get('passed')} "
f"spec={constraints.get('spec_path') or '(未回报)'} "
f"hash={constraints.get('spec_hash') or '(未回报 — 下轮必须重注)'} "
f"injected={_jsonable(constraints.get('injected'))} "
f"idempotent={constraints.get('idempotent_verified')}"
)
print(f"vivado : {_jsonable(state.get('vivado_result'))}")
print(f"hil : {_jsonable(state.get('hil_result'))}")
print(f"\nevents ({len(state.get('events', []))}):")
@@ -473,8 +484,8 @@ def cmd_start(args, api) -> int:
payload.pop("outcomes", None)
payload.pop("reviews", None)
work_dir = _resolve_work_dir(args, payload)
# 把"参考哪一份历史设计说明文件"冻结进 input.json:本次运行结束时会写出一份
# 新的 sim-rtl-flow-<date>.md,若每次 resume 都重新扫描目录,replay 就会在
# 把"参考哪一份版本说明树文件"冻结进 input.json:本次运行结束时会写出一份
# 新的 xxx<date>_tree.md,若每次 resume 都重新扫描目录,replay 就会在
# 半路换掉参考文件,走出一条与已记录 ledger 不同的路。
if "history_path" not in payload:
history_dir = api["history_dir_for"](
@@ -482,7 +493,7 @@ def cmd_start(args, api) -> int:
)
payload["history_dir"] = history_dir
payload["history_path"] = api["discover_history_doc"](
str(work_dir), history_dir
str(work_dir), history_dir, payload.get("project_name", "")
)
run = RunDir(work_dir, args.thread_id)
run.set_input(payload)