diff --git a/docs/attended-window/2026-10-11-checklist.md b/docs/attended-window/2026-10-11-checklist.md index c5795f6..9e30268 100644 --- a/docs/attended-window/2026-10-11-checklist.md +++ b/docs/attended-window/2026-10-11-checklist.md @@ -85,3 +85,13 @@ Argo adoption. This has not been executed. so the old ArgoCD is frozen. The founder retires coulombcore and reuses the machine (NK-WP-0022-T08). - Findings filed: F1 → coulomb-social CSOC-WP-0016; F3 → key-cape KEY-WP-0040-T02 + user-engine wording; F6 → KEY-WP-0040-T01. + +## Later: KEY-WP-0039-T02 owner token session + +This follows the first Forgejo SecurityCase and KEY-WP-0038-T02/T03 native +registration/claims proofs. It is not ready for the current window. Existing +registration authorization remains resolved; no additional go-ahead is requested. +After those prerequisites, NetKingdom supplies the registry/env session and the +attended human token through the already prepared runner, with the coding-agent +owner custody path and Platform refusal/capability/cleanup proof. The runner +passes 17 local checks; those do not prove native identity or cleanup. diff --git a/scripts/security_flow_report.py b/scripts/security_flow_report.py index afd9f4f..d30ef9d 100644 --- a/scripts/security_flow_report.py +++ b/scripts/security_flow_report.py @@ -66,17 +66,17 @@ def classify(tasks): wp = t["wp"] if wp["status"] in ("finished", "archived") or wp["flavor"] == "residual": continue + missing = [d for d in t["deps"] if not dep_done(d)] if t["status"] in ("todo", "progress"): - missing = [d for d in t["deps"] if not dep_done(d)] if t["human"]: - out["ATTENDED"].append(t) + out["ATTENDED"].append(t | {"pending_dependencies": missing}) elif missing or t["blocked_on"]: out["DEPENDENT"].append(t | {"pending_dependencies": missing}) else: out["READY"].append(t) elif t["status"] == "wait": if t["human"]: - out["ATTENDED"].append(t) + out["ATTENDED"].append(t | {"pending_dependencies": missing}) elif t["deps"] and all(dep_done(d) for d in t["deps"]): out["UNBLOCKED"].append(t) elif not t["deps"] and t["blocked_on"].startswith("message-from"): @@ -97,7 +97,7 @@ def main(): if a.json: print(json.dumps({k: [{x: t[x] for x in ("id", "status", "priority", "reason", "blocked_on")} | {"repo": t["wp"]["repo"]} - | ({"pending_dependencies": t["pending_dependencies"]} if k == "DEPENDENT" else {}) + | ({"pending_dependencies": t["pending_dependencies"]} if "pending_dependencies" in t else {}) for t in v] for k, v in res.items()}, indent=1)) return for k, v in res.items(): @@ -106,6 +106,8 @@ def main(): extra = t["blocked_on"] if k == "STALLED" else t["reason"] if k == "DEPENDENT": extra = ", ".join(t["pending_dependencies"]) or t["blocked_on"] + elif k == "ATTENDED" and t["pending_dependencies"]: + extra = "After " + ", ".join(t["pending_dependencies"]) + ": " + extra print(f"- {t['id']} [{t['status']}/{t['priority'] or '-'}] {t['wp']['repo']}" + (f" — {extra[:140]}" if extra else "")) diff --git a/tests/test_security_flow_report.py b/tests/test_security_flow_report.py index 63a88b0..09204c4 100644 --- a/tests/test_security_flow_report.py +++ b/tests/test_security_flow_report.py @@ -95,3 +95,13 @@ def test_workplan_and_multiline_task_dependencies_both_gate_successor(tmp_path): assert not result["READY"] assert result["DEPENDENT"][0]["pending_dependencies"] == [ "ACTIVITY-WP-0042", "ACTIVITY-WP-0041-T03", "ACTIVITY-WP-0041-T04"] + + +def test_attended_item_keeps_unfinished_ordered_prerequisites_visible(tmp_path): + workplan(tmp_path, "key-cape", + "id: KEY-WP-0039-T02\nstatus: wait\npriority: medium\n" + "needs_human: true\nintervention_note: Attended owner token session\n" + "depends_on: [KEY-WP-0038-T03]") + result = report(tmp_path) + assert not result["READY"] and not result["UNBLOCKED"] + assert result["ATTENDED"][0]["pending_dependencies"] == ["KEY-WP-0038-T03"] diff --git a/workplans/CUST-WP-0079-deterministic-security-flow.md b/workplans/CUST-WP-0079-deterministic-security-flow.md index 5df3e53..88215a6 100644 --- a/workplans/CUST-WP-0079-deterministic-security-flow.md +++ b/workplans/CUST-WP-0079-deterministic-security-flow.md @@ -147,6 +147,8 @@ hook. Real temporary-repository tests prove rejection and source-change acceptan The missing shared guard was installed for the existing repo-manager hook path; the week's fleet evidence and generator adoption still remain open. +The generated attended list now retains unresolved ordered dependencies. An owner token session following the first SecurityCase can therefore be listed as a future attended act without implying it is ready to run now. CLI regression coverage checks this boundary. + ## Attended window #1 ```task