Keep review obligations visible and reconcile owner evidence (RISK-WP-0006, RISK-WP-0007)
check_all runs every check stage even when one fails; malformed dates are reported rather than aborting; accepted findings and closure evidence are shown; defer requires a valid future date. Adds SCOPE.md, the scope assessment, the open-findings source review and a unittest suite. Stops tracking __pycache__. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 6903@bnt-lap001 Assistant-Session: 8319e8a8-ffa6-4eb3-b8bf-b29945628f89
This commit is contained in:
parent
29f50d5143
commit
bbbede5f47
25 changed files with 1007 additions and 43 deletions
|
|
@ -68,6 +68,7 @@ def resolve(fix_tracking: str) -> list[dict]:
|
|||
"id": full,
|
||||
"repo": fm.get("repo", path.parent.parent.name),
|
||||
"state": (state or "unreadable") + (" [archived]" if archived else ""),
|
||||
"completed": str(state).lower() in ("done", "finished", "cancel"),
|
||||
"workplan_status": fm.get("status"),
|
||||
"moved": last_commit(path),
|
||||
})
|
||||
|
|
@ -81,6 +82,22 @@ def report() -> list[str]:
|
|||
continue
|
||||
tracking = f.get("fix_tracking")
|
||||
if not tracking or str(tracking).startswith("unset"):
|
||||
if f.get("status") == "accepted":
|
||||
missing = [key for key in ("accepted_by", "accepted_until", "determination")
|
||||
if not f.get(key) or str(f[key]) == "unset"]
|
||||
if lib.moment(f.get("next_check")) is None:
|
||||
missing.append("next_check")
|
||||
determinations = {r.get("id") for r in lib.regulatory()}
|
||||
if f.get("determination") and f["determination"] not in determinations:
|
||||
missing.append("resolvable determination")
|
||||
if not missing:
|
||||
lines.append(
|
||||
f"{f['id']} — RECORDED ACCEPTANCE by {f['accepted_by']}; "
|
||||
f"ends when: {f['accepted_until']}; basis {f['determination']}; "
|
||||
f"review {f['next_check']} (not a fix or renewed acceptance)"
|
||||
)
|
||||
continue
|
||||
lines.append(f"{f['id']} — ACCEPTANCE INCOMPLETE: {', '.join(missing)}")
|
||||
lines.append(f"{f['id']} ({f.get('severity')}) — NO FIX TRACKING; owner {f.get('fix_owner')}")
|
||||
continue
|
||||
resolved = resolve(tracking)
|
||||
|
|
@ -93,7 +110,7 @@ def report() -> list[str]:
|
|||
if r["moved"]:
|
||||
age = (now - r["moved"]).days
|
||||
window = STALL_DAYS.get(f.get("severity"), 30)
|
||||
done = str(r["state"]).lower() in ("done", "finished", "cancel")
|
||||
done = r.get("completed", False)
|
||||
flag = "" if done or age <= window else f" ← UNCHANGED {age}d (window {window}d)"
|
||||
lines.append(f"{f['id']} — {r['id']}: {r['state']}, last changed {r['moved']:%Y-%m-%d}{flag}")
|
||||
else:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue