Skip to content

P0.1: evidence-based verification (typed assertions, ReproSpec, honest reverify) - #20

Merged
wlu03 merged 4 commits into
mainfrom
verify-assertions
Jul 20, 2026
Merged

wlu03 merged 4 commits into
mainfrom
verify-assertions

Conversation

@wlu03

@wlu03 wlu03 commented Jul 18, 2026

Copy link
Copy Markdown
Owner

P0.1 evidence-based verification (from your roadmap). Off main; four commits, each unit-tested, the tool live-verified against a real app.

Delivered

  1. Typed assertions (inspector/assertions.py) — an Assertion (text, role, value, count, url, state, network, screenshot) evaluates to pass | fail | inconclusive with evidence. Unavailable channels (network/screenshot, a missing element, no URL on the surface) return inconclusive with a reason, never a false pass.
  2. check_assertions tool — a core tool taking list[Assertion] (so the enums are in the input schema) that gathers the observation and evaluates. Live-verified against a real web app: text/url/count pass with evidence, network returns inconclusive.
  3. Durable ReproSpec on every finding — surface, route, preconditions, semantic steps (by element label, not raw coordinates), and a typed oracle. Built at finding creation (log tap, DOM audit, report_issue).
  4. Honest re-verificationverify_fix now replays the ReproSpec by semantic locator (not raw coordinates) and judges by the explicit oracle: pass = fixed, fail = still_present, inconclusive / diverged scenario = not_run — instead of assuming fixed because a summary did not reappear.

Verification

  • pytest -q gives 360 passed; ruff clean; check_assertions verified end to end on sample-buggy-app.

Remaining P0 (next)

  • Dashboard still marks an issue verified merely because it was absent from the latest run (aggregate.py) — relabel absent vs actually re-verified.
  • get_capabilities + stable observation refs; network / app-state tools; privacy / secret handling.

This branch is off current main (which still tracks docs/); PR #19 removes the docs machinery for the DeepWiki-only decision.

wlu03 added 4 commits July 17, 2026 19:04
Add inspector/assertions.py: an Assertion (text, role, value, count, url, state,
network, screenshot) evaluates to pass / fail / inconclusive with evidence. The
DOM/state/url channels are evaluated against the observation; unavailable channels
(network, screenshot, missing element, no URL) return inconclusive with a reason
rather than silently passing, so a pass always means a real check ran. Pure and
unit-tested; the session-wiring tool follows.
Wire the assertions into a check_assertions(session_id, list[Assertion]) core tool
that gathers the observation (DOM text/elements, URL on CDP surfaces, control-state
for referenced elements) and evaluates each assertion to pass/fail/inconclusive
with evidence. Typed input schema (the Assertion enums) + AssertionsOut output.
Verified live against a real web app: text/url/count pass, network returns
inconclusive rather than a false pass. Updated the tool-registry tests + reference.
Add ReproStep/ReproSpec models (surface, route, preconditions, semantic steps by
element label, and a typed oracle) and attach one to every finding at creation
(the log tap, the DOM audit, and report_issue) via build_repro_spec, which parses
the session's semantic action log rather than raw coordinates, and degrades
gracefully on a partial session. The durable scenario re-verification needs; the
reverify/dashboard rewiring to use it (and report not_run) follows next.
reverify replayed raw coordinates and called a bug fixed when a similar summary
did not reappear. Add replay_spec (re-find each element by its semantic label, not
raw coords) and verify_fix_spec, which replays the finding's ReproSpec, evaluates
its typed oracle (pass=fixed, fail=still_present, inconclusive=not_run), and
returns not_run when the scenario diverges (a locator can't be found) rather than
assuming fixed. The verify_fix tool now prefers the ReproSpec, falling back to the
coordinate replay. Add a shared session.observation_context used by both the
assertion tool and the oracle.
@wlu03
wlu03 merged commit 938a731 into main Jul 20, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant