{"v":[{"id":946,"html_url":"https:\/\/www-s01.apinet.com\/codeforge\/apiintl\/hhmanager\/issues\/130#issuecomment-946","pull_request_url":"","issue_url":"https:\/\/www-s01.apinet.com\/codeforge\/apiintl\/hhmanager\/issues\/130","user":{"id":1,"login":"charles","login_name":"","source_id":0,"full_name":"Charles Willgren","email":"charles@noreply.www-s01.apinet.com","avatar_url":"https:\/\/www-s01.apinet.com\/codeforge\/avatars\/d3c894f7297c5a18eb3f6ac837c335b11a00aa9cc0961323771632b1e2d61bb2","html_url":"https:\/\/www-s01.apinet.com\/codeforge\/charles","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2025-12-08T10:03:41-06:00","restricted":false,"active":false,"prohibit_login":false,"location":"","pronouns":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"charles"},"original_author":"","original_author_id":0,"body":"**Built (2026-10-05), not yet committed.**\n\n`form_v2_publish_check()` (pure, `code\/form_v2_review.inc.php`) is built on the Form Explorer's model, and three places read it: the Explorer's **Gaps** tab, the CLI (#127) and the new review page. A publish is refused unless all nine checks pass:\n\n1. publish rules\n2. required boxes are asked\n3. every box is filled, or blank for a written reason\n4. no orphan questions\n5. every branch reachable\n6. bindings\n7. paper coverage\n8. every shared answer has a ruling\n9. **every form prints a proof**, using the same rule a kept form uses\n\nThe Gaps tab does not render proofs, so it shows that check as \"not run\", which never counts as a pass.\n\n**Review page `\/admin\/form-v2-publish`** (menu: *Publish an Interview*) shows:\n- the verdict and the check;\n- what publishing does;\n- what changed: questions new, reworded (old and new side by side), moved, asked under another condition or removed, plus changes to the forms and placements;\n- every question in full;\n- one **Publish all of this** button (needs the Approve right).\n\nThe page is a rollback rehearsal of the real publish. The button sends the reviewed release's fingerprint, and the publish refuses if anything changed in between. It never activates.\n\nSOC_AO rehearses clean today: 316 questions, all nine checks pass.\n\nTests: `test-form-v2-review.php` (51) and `test-form-v2-pipeline-state.php` (19).","assets":[],"created_at":"2026-10-05T10:06:03-05:00","updated_at":"2026-10-05T10:06:03-05:00"}]}