{"v":"<p dir=\"auto\"><strong>Built (2026-10-05), not yet committed.<\/strong><\/p>\n<p dir=\"auto\"><code>scripts\/form-v2-pipeline.php --interview=SOC_AO_V2<\/code> (or <code>--packet=SOC_AO<\/code>) runs the whole chain:<\/p>\n<ul dir=\"auto\">\n<li><strong>Import.<\/strong> The packet&#39;s form definitions, placements and signing lines go through the existing importers. The interview comes from <code>docs\/form-v2-interviews\/<\/code>. The import is idempotent: a file that already matches the draft or the published version writes nothing. An interview draft edited on screen is not overwritten unless <code>--replace<\/code> is given.<\/li>\n<li><strong>Publish.<\/strong> <code>form_v2_pipeline_run()<\/code> publishes the definitions, then the maps, then the interview (through the editor&#39;s gate), then a release (<code>SOC_AO-20261005<\/code>, numbered if the code is taken). All of it is one transaction, using the screens&#39; own publishers. It commits only if nothing was refused and the #130 check passes on the release it produced.<\/li>\n<li><strong>Modes.<\/strong> The default is a dry run: the chain runs and is rolled back, so the output is the actual release rather than a prediction. <code>--import<\/code> writes drafts only. <code>--apply --as=EMAIL<\/code> publishes.<\/li>\n<li><strong>Activation.<\/strong> <code>--activate=9,10<\/code> activates afterwards. It is refused on production (see #128).<\/li>\n<li><strong>Idempotent.<\/strong> If the content is the same as the last release, no new release is made.<\/li>\n<\/ul>\n<p dir=\"auto\">Review page: <code>\/admin\/form-v2-publish<\/code> (see #130).<\/p>\n<p dir=\"auto\">Two limits:<\/p>\n<ul dir=\"auto\">\n<li>The placement proposer reads the <em>published<\/em> definition. A form that gains a new field therefore needs its definition published before its placement can be proposed. The pipeline refuses this case and names it; it does not guess.<\/li>\n<li>Packets are not imported or published by the chain. They keep <code>import-form-packets.php --publish<\/code>.<\/li>\n<\/ul>\n<p dir=\"auto\">Also fixed: <code>form-publish.php<\/code> judged a later form&#39;s map against the <em>old<\/em> definition when it published several forms in one run, because of a per-request cache.<\/p>\n"}