# Changelog ## Unreleased - Add the `{item.FIELD}` interpolation token: one field of the current record fanout item, rendering null or missing fields as empty text in prompts and summaries and as `undefined` in selectors, with a validation error for non-record items. - Treat braces in `prompt` and `summary` as interpolation tokens only when they start with `args.`, `item`, or `PHASE.results`/`PHASE.failures`; other braces, such as JSON fragments, TypeScript types, or empty braces, pass through as literal text, while malformed token-shaped spans still fail validation and selectors stay strict. - Refuse a workflow before creating any child when a step without `flags` lists a tool that is registered but inactive in the parent Pi (for example `bash` under `pi --nushell`), naming the inactive tools, the child extensions with startup flags that may have deactivated them, and the active `nu` tool when a shell tool is inactive; builtins Pi leaves inactive by default are ignored. - Report a deactivated builtin tool as `builtin tool, deactivated at startup` in the child-startup error instead of a bare name. - Fail the not-yet-started siblings of a fanout phase immediately with `attempts: 0` once one child's requested tools were switched off at startup, instead of creating every sibling session to fail the same way. - Request strict constrained sampling for `structured_output` only when the step declares a `schema`; against the schema-less property-free object schema it forced models to submit `{}`. - Honor project workflows (`/.pi/workflows/*.json`) only in trusted projects: untrusted project workflows are hidden from `/ultra run` completions, never shadow bundled or user workflows, and `run_workflow` and `/ultra run` refuse them with an error naming the file. - Label each `/ultra run` completion with its workflow source (`bundled`, `user`, `project`).