Skip to content

Summarizer: reject view-class summaries on payable methods#53

Draft
shellygr wants to merge 1 commit into
masterfrom
shelly/ap-summarizer-payable-nondet
Draft

Summarizer: reject view-class summaries on payable methods#53
shellygr wants to merge 1 commit into
masterfrom
shelly/ap-summarizer-payable-nondet

Conversation

@shellygr

@shellygr shellygr commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

The interface summarizer's LLM freely wrote => NONDET for payable methods. That erases the callee's ETH effects; a caller that accounts for the transferred value (e.g. a post-call balance check) then reverts on every path, and its rules pass vacuously.

  • composer/cvl/summary_audit.py: walks the typed CVL AST (no text matching), flags NONDET/CONSTANT/PER_CALLEE_CONSTANT/ALWAYS on payable methods, incl. wildcard and catch-all entries. Payability comes from the build's all_methods.json; missing inventory degrades to no-op.
  • Summarizer's put tool runs the audit and rejects violations; raw/edit escape hatches removed from this flow so every write is auditable.
  • One hard rule added to the summarization prompt.

Tests: 11 new; full suite 114 passed; pyright clean.

🤖 Generated with Claude Code

…rizer

A NONDET/CONSTANT/ALWAYS summary erases a payable callee's ETH effects;
a caller that accounts for the transferred value then reverts on every
path and its rules pass vacuously. The summarizer's put tool now audits
the typed CVL AST against the build's method inventory and rejects such
summaries; the prompt states the rule. Raw/edit escape hatches are
removed from this flow so every write is auditable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant