AEV-2026-0050
Vibe-Trading's report audit gate returned PASS on a call where every sampled point's evidence was missing
Vibe-Trading's research report audit gate, render_verdict in report_audit_tool.py, skipped every data point whose fetched_value was missing without counting it, then computed PASS whenever the accumulated failed count was zero. A call carrying two reported values and no fetched value for either, reproduced directly for this record, returned verdict PASS, total 0, pass_count 0, fail_count 0, an empty evidence set certified with the framework's own highest confidence word.
Affected
- Organisation
- HKUDS
- Product
- Vibe-Trading, an open source LLM agent trading and research framework, report_audit tool
- Component
- render_verdict (agent/src/tools/report_audit_tool.py)
- Versions
- Every commit before merge commit cc4774ed42d9f2e24e66ea4a7ee8d283c553bbba (pull request 1362), fixed in that commit, merged 6 September 2026
- Configurations
- A verdict call whose results list carries one or more points, each with a reported_value, where every point's own fetched_value is None because an upstream fetch was never attempted or did not succeed
Execution authority facts
Fields the evidence does not establish are shown as unknown rather than guessed.
- Intended task
- Gate a research report's sampled numeric claims before publication by comparing each against an independently fetched value, returning PASS only when the sampled points were checked and none failed
- Agent
- unknown
- Delegating actor
- unknown
- Action
- Submitted a verdict call for two sampled points, reported values 1234.5 and 999.0, with fetched_value None for both, reproduced directly for this record
- Target resource
- The report_audit gate's own certification of the sampled report, and any downstream decision, such as publication, that treats the gate's PASS verdict as meaning the sample was verified
- Environment
- Vibe-Trading's report_audit tool (agent/src/tools/report_audit_tool.py), verdict phase
- Credentials used
- unknown
- Privileges available
- Whatever the agent's own tool calling loop can reach; report_audit's own verdict command is read only and writes nothing
- Authority presented
- The gate's own verdict, PASS, computed from fail_count equal to 0 over an accumulated total of 0 checked points
- Authority required
- Authority to certify the sample as verified requires at least one point actually checked against a fetched value and found to agree; a call in which every point's evidence is absent never reaches that bar
- Applicable policy
- render_verdict, which this record's own direct read of the commit before the fix confirms skipped a None fetched_value with a bare continue, contributing to neither total nor fail_count, and set the final verdict to PASS whenever fail_count was 0 with no separate floor on total
- Approval mechanism
- Automated policy check, not human review
- Required approver
- unknown
- Independent approval
- no
- Action binding
- The returned verdict object, PASS with total 0, carries no field or flag distinguishing an empty checked set from a genuinely checked and passing one; a downstream reader trusting the verdict word alone cannot tell the two apart without separately inspecting total
- Sequence context
- The verdict call runs as the second of report_audit's two phases, immediately after an extract phase samples a report's own data points and separate tool calls attempt to fetch each sampled point's authoritative value; nothing upstream of render_verdict is established by this record to have blocked publication on its own
Impact
- Consequence
- material
- Reach
- single
- Reversibility
- unknown
- Detectability
- silent
- Propagation
- potential
- Recovery
- Not established by anything available to this record. Nothing in Vibe-Trading's own repository describes a compensating control, such as a separate downstream check on the verdict object's own total field, for a report that reached this gate with no fetched evidence for any sampled point.
Evidence
Primary sources
- fix(report-audit): fail closed when nothing was verified (pull request 1362) (GitHub, HKUDS/Vibe-Trading)
- HKUDS/vibe-trading, commit cc4774ed42d9f2e24e66ea4a7ee8d283c553bbba (merge of pull request 1362) (GitHub, HKUDS/Vibe-Trading)
Supporting sources
- HKUDS/vibe-trading (GitHub)
- Reproduction status
- Independently reproduced for this record, not merely read from the pull request's own description: render_verdict's literal source was extracted directly from both the commit before the fix (9c063312) and the fixed commit (fc780704) of a local clone and executed in isolation. The stated scenario, two points with reported values 1234.5 and 999.0 and no fetched value for either, returns verdict PASS, total 0, pass_count 0, fail_count 0 at the commit before the fix, and verdict FAIL, total 0, fail_count 1 at the fixed commit, with the added failure item's own reason stating that no data points were verified because every result lacked a fetched value. A companion reproduction confirms a present but non finite fetched_value, a string such as about 100, raises an uncaught value error at the commit before the fix and a clean FAIL at the fixed commit, and that a genuinely absent fetched_value beside one genuinely checked and passing point still returns PASS with total 1 at both commits.
- Evidence state
- Confirmed
Known unknowns
- Whether this exact gap was ever exercised against a report that reached actual publication or a reader, rather than the synthetic inputs this record's own reproduction and the pull request's own added tests use.
- Whether report_audit is the only gate standing between a drafted report and publication in Vibe-Trading's own pipeline, or whether a separate, later step would independently have caught a report whose sample carried no verified evidence.
- Whether the five day proximity between this fix and the unrelated MCP order gate fix in pull request 1361, both merged the same week, reflects a broader review pass across the framework's own gates or is coincidental; the pull requests' own text does not say and this record does not infer a connection between the two mechanisms.
Limitations
- This record's evidence rests on a direct, independent checkout and isolated execution of render_verdict's own literal source at the commit before the fix and the fixed commit, rather than on the pull request's own description alone. The full framework's dependency set was not installed for this record; render_verdict itself was isolated and executed directly against both commits' literal source, and its own five new tests were read directly against the diff rather than run inside the framework's full test harness.
Claim provenance
- verified
Fetched directly by cloning the repository and reading the pull request's merge commit, its parent commit and its diff directly, rather than reading the pull request's rendered page. Confirms the title, the author, the branch name, the merge commit hash, the merge date and the affected files (report_audit_tool.py and its test file) described throughout this entry.
Vibe-Trading's Audit Gate Returned PASS on a Report Where Zero Data Points Were Verified - verified
Merge commit fetched and diffed directly against its parent commit, 9c063312. Confirms the exact source changes to render_verdict this entry describes, and that the parent commit's own source lacks the total equal to 0 check, the non finite fetched_value coercion, and the non finite second source degradation.
Vibe-Trading's Audit Gate Returned PASS on a Report Where Zero Data Points Were Verified - verified
Fetched directly via a local git clone of the repository's default branch. Confirms the repository is public, that HKUDS is the organization account, and that render_verdict on current main (a4f06a29f61f2dec3764da294db77478521de259) is byte identical to the fixed commit, so the fix has not since been weakened or reverted.
Vibe-Trading's Audit Gate Returned PASS on a Report Where Zero Data Points Were Verified
