# Action post-checks: measured development attempts

Date: 2026-09-23. This work adds optional `tab_act.post_checks`: after a complete same-document action batch, Tablaze runs the existing browser verification checks in that tool call. The Agent accepts the action call ID as evidence only when the whole batch and every requested check passed. A failed post-check keeps completed effects, requires replanning, and cannot justify `agent_finish` or a checked partial. This reduces a model round trip only when the model chooses valid checks in advance; it does not weaken the completion gate.

Two synthetic tasks were judged from an independent fixture server: `shadow-form` required exactly one saved `Orion` note inside an open Shadow DOM, and `dynamic-menu` required exactly one `Express` delivery write from a delayed menu. Every attempt below passed the business judge with **one correct write and zero duplicate writes**, and every Agent returned `succeeded` before its 180-second deadline. The Browser Use arms retained its default post-task judge; Tablaze required explicit passing browser verification before finish.

| Source phase / raw report | Task and engine | Whole run | Model calls | Reported input / output tokens | Post-check use |
| --- | --- | ---: | ---: | ---: | --- |
| [Baseline matched pair](evidence/postchecks/shadow-menu-codex-v1.json) | Shadow: Tablaze / Browser Use | 87.539 / 69.014 s | 4 / 3 | 60,488 / 820; 50,722 / 660 | Not available |
| Baseline matched pair | Menu: Tablaze / Browser Use | 90.417 / 81.933 s | 5 / 4 | 77,482 / 841; 70,703 / 707 | Not available |
| [Feature present, initial guidance](evidence/postchecks/shadow-menu-codex-postchecks-v1.json) | Shadow: Tablaze / Browser Use | 131.398 / 78.264 s | 4 / 3 | 62,278 / 991; 50,795 / 609 | Tablaze model did not use it |
| Feature present, initial guidance | Menu: Tablaze / Browser Use | 105.746 / 86.805 s | 5 / 4 | 79,701 / 906; 70,763 / 843 | Tablaze model did not use it |
| [First adoption](evidence/postchecks/shadow-postchecks-adoption-v1.json) | Shadow: Tablaze only | 64.142 s | 3 | 46,709 / 595 | Used; one incorrect extra text check failed, then separate verification passed |
| [Corrected guidance](evidence/postchecks/shadow-postchecks-adoption-v2.json) | Shadow: Tablaze only | 42.012 s | 2 | 30,577 / 412 | Used; value and receipt checks passed in the action call |
| [Dynamic-menu follow-up](evidence/postchecks/menu-postchecks-adoption-v1.json) | Menu: Tablaze only | 104.301 s | 5 | 80,309 / 1,132 | Used to check menu appearance; final click still took separate observation and verification |

The first adoption attempt is informative: the model correctly checked the input value and saved status, but also expected `Orion` in visible page text. Form values are excluded from text checks, so that third check failed. Tablaze did not promote it to evidence, and the model recovered with `tab_verify` without writing again. The corrected-guidance attempt supplied only a value check and a rendered receipt check. Its [full trace](evidence/postchecks/shadow-postchecks-adoption-v2-shadow-form-0-tablaze.trace.json) shows `tab_open`, one `tab_act` with passing `post_checks`, then finish; the independent judge saw one write. The [menu trace](evidence/postchecks/menu-postchecks-adoption-v1-dynamic-menu-0-tablaze.trace.json) shows the feature being used once but not for the final write. The new path is available and exercised by a real model; broader adoption and speed remain unproven.

Conditions: `gpt-6-astra` through the same Codex CLI inference bridge, reasoning `ultra`, Browser Use Python `0.13.10` at pinned commit `d8110c5ff87ccba887aaa726cdb780f2f84bef8d`, local isolated Chrome at 1280×800, 120,000 reported-token ceiling per attempt, 40 planning steps, 180-second whole-run deadline, trusted Tablaze start URL, and Browser Use's default judge. The bridge's temperature and per-call output controls are not verified. Browser Use's tool-call ceiling differs. The task was visible during development, source guidance changed between phases, and each row is a single attempt. Cross-phase timing differences are observations, **not** causal speed estimates, reliability rates, or a product-wide superiority claim.

The five original reports and per-arm traces are listed in the [portable evidence index](evidence/postchecks/README.md). They are copied from the run artifacts without rewriting them and retain source-tree, patch, build, task, judge and transport hashes. Report SHA-256 values in phase order: `348df943835e6a3b1018a50e5bb400ae17e045557cdda3bc0d76283f46aef7db`, `889ee0aa3236ffd21ec7d8351fc953e08b6449419cc48c3c17bd38e336d76733`, `89c074afee246e0df5aa8f620733723acbb060e49fded295fcf9892439bbf0c1`, `b2918e77303d9d71561064964a88d2a94e01e6da59eb8a2f4aff772dd7dbfe20`, and `42379a1e2a3bd2febf6b7eacfb64f264c1948c5ac23cde2fd0f58cb7fb0be27c`.

复验表明：新功能能在一次动作调用里完成可等待的页面检查，真实 Codex 在一轮 Shadow DOM 任务中采用后以两次模型调用完成、服务端只写入一次。另一轮曾因把输入值误当页面正文而检查失败，系统拒绝虚假的完成证据；动态菜单任务也只部分采用。两轮同题对照均是双方 2/2 通过，Tablaze 在这些单次样本中用时更长。不能据此宣称整体超过 Browser Use 或稳定提速。
