Human-in-the-loop approval is a runtime control pattern: the agent pauses, a person decides, and the run resumes. In the Microsoft Agent Framework, a function tool is wrapped so that the agent returns a ToolApprovalRequestContent instead of executing, and the caller passes an approval response back in a new run (Microsoft Learn). LangChain's Deep Agents does the same thing through interrupt_on and allowed_decisions, which limits a reviewer to approve, edit, reject or respond per tool (LangChain docs). Once a design like that exists, the approval card is no longer a decorative UI detail. It is the only place where a person sees what the agent wants to do before the side effect lands.
That makes the payload a contract. Without a schema, three things break. First, the card drifts: one team truncates long target names, another does not, and reviewers start approving text they cannot see. Second, automated pre-checks have nothing to compare against, so a missing target id passes silently. Third, downstream systems that log approvals (audit, review queues, ticketing) receive inconsistent records. MLflow's review queues make the point indirectly: human judgments become useful only when they are captured as structured traces with a defined evaluation question, not as free text in a spreadsheet (MLflow). A schema is the small piece of discipline that makes an approval record usable later.
Guardrail literature places this at the technical layer: schema validation and output formatting rules sit alongside action authorization as the mechanisms that check a proposed action before it runs, rather than after (Salesforce). Treat the four approval fields as that layer for your approval cards.



