Skip to content

feat(verify): VAS-2 — gecko verify-docs (check docs claims against reality) - #215

Merged
ernanibmurtinho merged 1 commit into
mainfrom
feat/vas2-verify-docs
Jul 28, 2026
Merged

feat(verify): VAS-2 — gecko verify-docs (check docs claims against reality)#215
ernanibmurtinho merged 1 commit into
mainfrom
feat/vas2-verify-docs

Conversation

@ernanibmurtinho

Copy link
Copy Markdown
Contributor

Milestone-1 step 2. gecko verify-docs <spec> [--live] checks a surface's operations against reality and attaches VAS-1 verdicts — the Privy-fabrication catch, generalized.

What's here — gecko/verify.py

verify_docs(client, *, mode="recorded") walks every tool, replays it through the already-shipped call path (client.call → caller/validator — auth-host pin + SSRF guard + recorded scrub all still apply, no new network path), lifts each outcome with VAS-1's verdict_from_replay, attaches the VerifyVerdict to the op node, and returns a control-plane report {op: {status, basis, provenance}} + {verified, refuted, unverified}.

  • Recorded (default, Pattern B): synthesized-from-schema, no wire → every op honestly UNVERIFIED (no-access:recorded-only). The offline-falsifiable baseline.
  • Live (--live): real replay → 2xx/3xx VERIFIED, 404/4xx-5xx REFUTED (the fabricated endpoint). Reads the actual returned mode, so a live→recorded degrade stays UNVERIFIED, never falsely verified.

Provenance as a separate axis

op_provenance(spec, op) (in graph.py, CLAIMED's single source of truth) → CLAIMED for a from-docs draft, else EXTRACTED. verify_docs never overwrites provenance — an op keeps its provenance and gains a verdict.

Safety

Never overclaims (UNVERIFIED unless wire-observed — VAS-1's lift enforces it, tested); control-plane clean (report is status/basis/provenance + counts, no response value — asserted); reuses the gated network path. report.py untouched (Scorecard badges are VAS-3).

Tests: tests/test_verify_docs.py (7). Gate: ruff + mypy clean · full suite 1931 passed / 1 skipped.

Next: VAS-3 (Scorecard renders CLAIMED/VERIFIED/REFUTED), VAS-5 (the recorded Privy demo).

🤖 Generated with Claude Code

…erdicts (VAS-2)

verify_docs(client, mode) walks every tool on a surface, replays it through the
shipped call path (client.call -> caller/validator, so the auth-host pin +
recorded scrub + SSRF guard all still apply — no new network path), lifts the
outcome with VAS-1's verdict_from_replay, attaches the VerifyVerdict to the op's
graph node (Node.verify, a separate axis from provenance), and returns a
control-plane report {op_id: {status, basis, provenance}} + {verified, refuted,
unverified} counts.

Recorded (default) is the offline-falsifiable baseline: no wire evidence ->
every op honestly UNVERIFIED, a recorded 200 never overclaimed. Live -> real
VERIFIED / REFUTED; a 404 on a doc-claimed endpoint REFUTES (the fabricated-
endpoint case). op_provenance (the claimed-until-checked classifier) lives in
graph.py so the provenance ladder keeps one source of truth.

CLI: gecko verify-docs <spec> [--live] — thin transport, default recorded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ernanibmurtinho ernanibmurtinho self-assigned this Jul 28, 2026
@ernanibmurtinho
ernanibmurtinho merged commit 24ebadf into main Jul 28, 2026
1 check 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