import os
import sys

lab = r"C:\Users\intel\AppData\Local\OptimusRuntime\Labs\AR74\12_ar88_authority_operational_closure"
candidate_ws = os.path.join(lab, "candidate_workspace")
sys.path.insert(0, candidate_ws)

# Import module
import app.remediation.self_repair.live_shadow_hook as lsh

file_path = lsh.__file__
print("File path:", file_path)

with open(file_path, "r", encoding="utf-8") as f:
    content = f.read()

# Replace the default_canonical_task_state_updater logic
old_block = """    if tasks_dict is not None and isinstance(tasks_dict, dict) and tid in tasks_dict:
        def _apply():
            t_entry = tasks_dict[tid]
            t_entry["task_status"] = "COMPLETED_AND_E2E_VERIFIED"
            t_entry["status"] = "COMPLETED_AND_E2E_VERIFIED"
            t_entry["state"] = "COMPLETED_AND_E2E_VERIFIED"
            t_entry["canonical_terminal_status"] = "COMPLETED_AND_E2E_VERIFIED"

            if update_payload.get("task_id"):
                t_entry["task_id"] = update_payload["task_id"]
            if update_payload.get("mission_id"):
                t_entry["mission_id"] = update_payload["mission_id"]
            if update_payload.get("instance_id"):
                t_entry["instance_id"] = update_payload["instance_id"]
            if update_payload.get("workspace_root"):
                t_entry["workspace_root"] = update_payload["workspace_root"]

            activities = t_entry.setdefault("activity", [])
            if isinstance(activities, list):
                act_ev = update_payload.get("activity_event")
                if act_ev:
                    import time
                    activities.append({
                        "timestamp": time.time(),
                        "event": act_ev,
                        "status": update_payload.get("status") or t_entry.get("status"),
                        "message": update_payload.get("message") or act_ev,
                        "incident_id": update_payload.get("incident_id"),
                        "shadow_run_id": update_payload.get("shadow_run_id"),
                    })
                    t_entry[act_ev.lower()] = True
                for act_msg in ("SELF_REPAIR_PROMOTED", "MISSION_RESUMED", "FINAL_VERIFICATION_PASS"):
                    activities.append({
                        "timestamp": _utc_iso(),
                        "message": act_msg,
                        "type": "SELF_REPAIR",
                    })
            return True"""

new_block = """    if tasks_dict is not None and isinstance(tasks_dict, dict) and tid in tasks_dict:
        def _apply():
            t_entry = tasks_dict[tid]
            
            # AR-88 / Prompt Order: Separate task status from repair status.
            # Do NOT unconditionally overwrite task status to COMPLETED_AND_E2E_VERIFIED!
            new_st = update_payload.get("task_status") or update_payload.get("status")
            if new_st:
                t_entry["task_status"] = new_st
                t_entry["status"] = new_st
                t_entry["state"] = update_payload.get("state") or new_st
                t_entry["canonical_terminal_status"] = new_st

            if update_payload.get("task_id"):
                t_entry["task_id"] = update_payload["task_id"]
            if update_payload.get("mission_id"):
                t_entry["mission_id"] = update_payload["mission_id"]
            if update_payload.get("instance_id"):
                t_entry["instance_id"] = update_payload["instance_id"]
            if update_payload.get("workspace_root"):
                t_entry["workspace_root"] = update_payload["workspace_root"]

            activities = t_entry.setdefault("activity", [])
            if isinstance(activities, list):
                act_ev = update_payload.get("activity_event")
                if act_ev:
                    import time
                    activities.append({
                        "timestamp": time.time(),
                        "event": act_ev,
                        "status": update_payload.get("status") or t_entry.get("status"),
                        "message": update_payload.get("message") or act_ev,
                        "incident_id": update_payload.get("incident_id"),
                        "shadow_run_id": update_payload.get("shadow_run_id"),
                    })
                    t_entry[act_ev.lower()] = True
                
                # Only record self-repair success activities if explicitly verified and promoted
                if new_st == "COMPLETED_AND_E2E_VERIFIED":
                    for act_msg in ("SELF_REPAIR_PROMOTED", "MISSION_RESUMED", "FINAL_VERIFICATION_PASS"):
                        activities.append({
                            "timestamp": _utc_iso(),
                            "message": act_msg,
                            "type": "SELF_REPAIR",
                        })
            return True"""

if old_block in content:
    content = content.replace(old_block, new_block)
    with open(file_path, "w", encoding="utf-8") as f:
        f.write(content)
    print("SUCCESS: default_canonical_task_state_updater patched cleanly!")
else:
    print("ERROR: old_block not found in live_shadow_hook.py")

