Before: acknowledged_cost=true was checked in the MCP layer but tied to nothing. The quoted number came from catalog defaults, not actual args, so a plan could grow after you consented and the flag would still read true.
Now:
-
validate_workflow / POST /api/validate returns a plan block: a fingerprint of the realized workflow (real args, expanded for_each lists), the actual step/iteration count, required downloads, and a cost estimate with a basis flag (catalog, derived, per_entry, or unknown) so you know how much to trust the number.
-
acknowledged_cost can now take {fingerprint, minutes, downloads} instead of a bare boolean. If the workflow’s shape changes after you bind to a plan — different args, longer list, whatever — the server 409s and re-quotes instead of letting it run over. Bare
truestill works for backward compat, but the job now logs which form it got (none / boolean / bound), so you can require the bound form for unattended agents. -
Your test case — a fan-out list changing real cost while the quote stayed flat — was the actual bug: the estimate wasn’t re-pricing per list length. Fixed. A 2-shot vs 10-shot run now gets genuinely different numbers, with the basis flag telling you if it’s measured or estimated.
Thanks for the suggestion!