The OpenRouter provider stashes the outgoing request BODY (never headers -- Authorization is built separately and build_body() copies only whitelisted option keys) in the new PRAutoBlogger_Request_Recorder before dispatch; Cost_Tracker::log_api_call() consumes it (consume-once) into generation_log.request_json. All seven chat call sites covered with zero call-site changes; error/timeout rows carry the request too. Retention rides the existing prautoblogger_request_json_retention_days prune. Unblocks M3 edit+rerun (stage inputs now exist) and makes the M2 dossier raw-input trace real (QA seq 20 F1). Agent-Session: engineer-prab-m3-20260612
12 KiB
12 KiB