Repository navigation
Aave v4: release matched NoFuzz control and restart paired evaluation #531
Copy link
Copy link
Closed
Description
Objective
Release the next stable Ultrafuzz version, construct a matched draft NoFuzz control from that exact release, and restart the blinded Aave v4 Ultrafuzz-vs-NoFuzz comparison.
Scope
- Close the completed seqLen-100 Aave diagnosis with corrected, evidence-backed conclusions.
- Prepare and publish Ultrafuzz v0.0.15 from verified origin/main.
- Create draft-only v0.0.15-nofuzz from the exact paired Ultrafuzz SHA.
- Run a focused NoFuzz experiment, then fresh blinded paired end-to-end trials.
Issue disposition
- Update and close Can invariant-only Ultrafuzz autonomously rediscover an Aave v4 benchmark bug family? #522 as the completed sequence-length experiment. The result is an incomplete-spec counterexample, not a confirmed ScFuzzBench rediscovery.
- Update and close Aave v4 postmortem: completed invariant campaign passed gates without executable benchmark coverage #523 as the historical Aave postmortem, retaining remaining generic work in its dedicated issues.
- Close Reject stale invariant campaign prompts that cannot satisfy sequence gates #525: the stale project-local prompt guard was intentionally not adopted and fix(runtime): reject stale stateful campaign prompts #528 remains closed unmerged.
- Keep Generate sequence-wide ghost and operation state in BeforeAfter scaffolds #424, Require source-backed rounding tolerances in generated conservation properties #425, Minimize token/time spend for the same deliverable #515, Invariant campaign can report complete when Recon smart-filter drops a generated property #519, Validate selected properties against executable backend oracles #524, report bundle mutates verified final-report artifacts without refreshing their verification marker #529, and report bundle drops all agent traces because generated filenames contain colons #530 open.
- Do not merge draft PR feat: add strict producer-visible JSON contracts #457 or draft PR v0.1.0 release (open source candidate) #366 solely for this work.
Stable release: v0.0.15
- Fetch origin/main and tags; resolve the exact target SHA and enumerate every merged PR after v0.0.14.
- Draft complete editorial release notes and require successful remote CI for the exact SHA.
- Run local release gates.
- Obtain explicit approval of the exact SHA and notes before publishing.
- Publish a non-draft, non-prerelease v0.0.15 release and verify its GitHub release and tag resolve to the approved SHA.
Matched NoFuzz draft release
- Branch from the exact v0.0.15 SHA.
- Preserve runtime, CLI, dependencies, artifact contracts, model setup, and source snapshot.
- Limit differences to NoFuzz prompts/guidance, required topology removal, and necessary tests.
- Produce a diff inventory proving that every non-prompt/topology change is test-only and necessary.
- Create a draft-only v0.0.15-nofuzz GitHub release that names the paired base SHA.
Restarted evaluation
- Run a focused NoFuzz experiment on clean Aave v4 source with shared discovery/property artifacts, excluding generated harnesses, corpora, findings, triage, and reports.
- Require a source-backed violation finding rather than crediting a restated property.
- Run blinded paired end-to-end trials against Aave commit 6959e3219b5506bf2acae18551cbb2a68a5b8fba with identical GPT-5.5/xhigh settings, budgets, source snapshot, scoring, and reporting.
- Run at least three pairs; five pairs preferred.
- Pre-register and report property specification, executable-oracle creation, reachability, counterexample/finding production, triage survival, and semantic benchmark-family credit. Treat invalid/incomplete rows as invalid, not zero.
Explicitly deferred
- Report-bundle product work (report bundle mutates verified final-report artifacts without refreshing their verification marker #529 and report bundle drops all agent traces because generated filenames contain colons #530) is out of scope for this tracking issue. Preserve the current bundle as supporting evidence with its known caveats.
- Post-hoc separation of the combined property-24/property-25 entrypoint is out of scope. Do not claim the current result is a confirmed ScFuzzBench property-25 rediscovery.
References
- Can invariant-only Ultrafuzz autonomously rediscover an Aave v4 benchmark bug family? #522
- Aave v4 postmortem: completed invariant campaign passed gates without executable benchmark coverage #523
- Validate selected properties against executable backend oracles #524
- report bundle mutates verified final-report artifacts without refreshing their verification marker #529
- report bundle drops all agent traces because generated filenames contain colons #530
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Isolate the nofuzz control in its own prompt tree
Match control guard coverage to the paired base file for file
Apply the guard-parity exemption clause by clause
aviggiano commentedon Aug 13, 2026
Pre-registration: Aave v4 Ultrafuzz vs NoFuzz, default topology, n=1 paired observation
Registered before any model-authored work in either arm. Amendments after the first launch are
recorded as dated addenda, never by editing this text.
Research question
On clean upstream Aave v4, does Ultrafuzz's fuzzing capability — the stateful invariant campaign,
coverage expansion, and generated-test authoring — produce a source-backed protocol finding that
property-guided source analysis alone does not, holding model, budgets, source snapshot, topology
shape except for fuzzing, scoring and reporting identical?
Design and its declared limits
an existence check. Aave v4: release matched NoFuzz control and restart paired evaluation #531 asks for at least three pairs and prefers five; running one is a
deliberate, recorded deviation.
violation finding, and which pre-registered metrics each arm could populate at all.
Target
aave/aave-v46959e3219b5506bf2acae18551cbb2a68a5b8fba(tagv0.5.6)tests/reconinvariant suite is notpresent, not copied, and not mimicked. Both arms author their own properties. That is the point of
the experiment: the hand-authored oracle is the capability under test.
contest invariants (Sherlock 1209) against this same upstream source. Its broken identities are
therefore reachable on this commit given an equivalent executable oracle.
Arms, identified by content
Both arms run the default audit profile.
packages/config/audit-profiles.ymldeclaresdefault: balanced, andbalanceddeclares notopology_pathwithsettings: {}, so the effectivegraph is the editable project topology
.ultrafuzz/topology.yml, notinvariant-only.yml. The targetproject's
ultrafuzz.tomlalready declaresaudit_profile = "balanced".682d51a3c3107e2830eaae1608bdafa2131e486b3936963a6eb2da1c4881f2bdc44056db08b7e21a.ultrafuzz/topology.ymlsha2568a75c4ab0232ef745b9c99781dcbf6b3a3dec912397d9c0603e067fd95a3f0caf5081f055e8bcc04b4cbfdc5da991248ffa5fcc434d71c4bed0944dd5892cd03required_commandsCodexAgent/gpt-5.5/xhighThe control removes 7 nodes (
expand-coverage, the fivestateful-invariant-*,aggregate-test-files) and theultrafuzz/generated-tests@1output from every producer that declaredit. Control guidance lives in
.ultrafuzz/prompts/nofuzz/{setup,review}/, referenced only from thecontrol topology, so all 27 prompts shared with
invariant-only.ymlorsmoke.ymlare byte-identicalto the base SHA. Diff inventory and review history: #548.
Pre-launch checks, required before either arm is trusted
audit_profile.effective: balanced,gpt-5.5,xhigh,and the topology digest above. Any divergence outside the intended difference invalidates the pair.
promptEntryForPathfalls back to a same-logical-id prompt when the declared path is absent (Prompt resolution silently substitutes a same-id prompt when the declared path is missing #556), so a missing
nofuzz/file would silently run the treatment arm's guidance inside the control. Verify resolvedprompt paths and sealed snapshot digests, do not assume.
report.jsoncarriesproperty_provenance: []. A non-empty array raisesIMPLEMENTED_PROPERTIES_MISSINGbecause the control declares nostateful-invariant-implement-propertiesnode.Held constant
Source snapshot and target commit; model and reasoning effort (
CodexAgent/gpt-5.5/xhighfor every model-authored node); the balanced profile's effective settings
(
dynamic_strategies_enumerator = 3,max_parallel_agents = 4,max_parallel_nodes = 8,default_timeout_seconds = 1800,workflow_deadline_seconds = 86400,invariant_testing_smoke_timeout = 10min,invariant_testing_fuzzer_timeout = 1h,strategy_loopsat its code default);
property_priority_threshold = "high"; the reference catalog and its cache;triage quorum and panel size; the severity rubric; the report contract; and the scoring and
reporting protocol below. Both rows' resolved configs are captured and compared before unblinding;
any divergence outside the intended difference invalidates the pair.
Cost basis, stated honestly
The measured figures available on this host — 5h17m and 6h07m end to end, ~188M tokens, ~$1,092
estimated spend — are from the 34-node
invariant-onlyprofile. They do not transfer to the61-node default topology, which additionally runs 20 static strategies, the differential lanes, and
dynamic strategy generation at
enumerator = 3. No measured baseline exists on this host for thedefault topology on this target, so the treatment arm's cost is projected, not known, and expect it
to exceed the invariant-only figures materially. This is recorded in advance so the eventual number
is not presented as having been predicted.
Blinding, and what it can and cannot mean here
Benchmark comparison is withheld until generation, campaign or analysis, verification, dedupe,
triage, severity classification, aggregation and final reporting are complete in both arms.
Unblinding is a single recorded step after both
report.mdfiles are final. No benchmark identity,invariant name, or expected-finding list is present in either arm's workspace or prompts.
Arm identity is not concealable, and this protocol does not pretend otherwise. "Blinded" here
means blind to the benchmark answer key, not blind to which arm produced a run. Five channels in a
finished
report.mdidentify the arm, and none can be masked without either falsifying an artifact orre-adding the capability the control exists to remove:
## Run summaryrendersElapsed time,Tokens used,Estimated spend,Topology digestandPrompt digest(packages/runtime/src/final-report-markdown.ts:8-22). Elapsed time and spend differbetween arms by roughly an order of magnitude, and the two digests differ by construction. This is
the strongest channel.
## Property implementation coveragealways rendersunavailableon the control, because itdeclares no
implemented-properties.jsonproducer andpackages/cli/src/report-artifacts.tsforces that value when the handoff is absent.Fuzzer backendscolumn of## Property provenancealways renders unavailable on the control,which declares no
recon-fuzzer-results.jsonproducer.### Proof of Conceptnever contains a fenced code block on the control, which has no generatedtest or reproducer to minimize.
### Strategydetection table can never name the removed nodes on the control.Grading instruction, binding on the adjudication step:
Scoring protocol
eval scoreis not usable for this target and is not used. The only Aave label set,benchmarks/private-ground-truth/aave-v4-scfuzzbench/findings.yml, bindssubject: scfuzzbench/aave-v4-scfuzzbench @ edd6c82721512540c8c90e7a36a4a8e19fd7bdf3, andassertGroundTruthSubject(packages/evals/src/scoring.ts:650) rejects aprivate-sensitivity rowwhose target is
aave/aave-v4 @ 6959e321. Downgradingsensitivityto bypass that check would voidthe #453 immutable-binding guarantee and is prohibited.
Metrics are therefore assembled by the manual protocol below from typed run artifacts only, with
every value citing an absolute artifact path. Semantic benchmark-family credit is a documented
post-hoc unblinding comparison against the benchmark's family list, adjudicated by the stated rule
rather than by name matching.
Pre-registered metrics
Recorded per arm. Every value cites the artifact path it was read from. A metric that cannot be
populated is recorded invalid, never zero.
property-specification-fanin/properties.json,and the count at the selected priority threshold.
actually falsify — a comparison or revert-selector check reachable from an admitted backend
entrypoint. A property recorded as implemented whose handler contains no falsifiable assertion
counts as not an oracle, and the discrepancy is reported. On the control arm this metric
measures oracle specification rather than executable implementation; that asymmetry is
intrinsic to the comparison and is reported as such, not as a zero.
reachable, with the blocker named for each that was not. Treatment arm additionally reports
campaign LCOV.
dedupe-findings. A restated property with no witness, no reproducer, and no source contradictionis not a finding and earns no credit. Treatment arm additionally reports falsified test
identities and shrunk reproducer paths.
triageandseverity-classification, with per-findingdisposition, and the count reaching
report.md.ScFuzzBench Aave v4 family or to none. Credit requires semantic equivalence of the violated
property and its direction and tolerance, not name similarity. Explicitly excluded from
credit: a counterexample against a generated property that the benchmark's own property
contradicts — an incomplete-spec counterexample, as classified in Can invariant-only Ultrafuzz autonomously rediscover an Aave v4 benchmark bug family? #522 — and post-hoc separation
of the combined property-24 / property-25 entrypoint, which Aave v4: release matched NoFuzz control and restart paired evaluation #531 places out of scope.
Validity rules, fixed in advance
recovery_equivalence.max_repeated_model_executions: 0and is reported invalid, not zero.unreachable is reported partially comparable, and its zero-finding result is not presented as
an unqualified negative. Generic mechanism tracked in Classify campaign comparability when required property families are deferred or unreachable #533.
seq-len-100 episode in Can invariant-only Ultrafuzz autonomously rediscover an Aave v4 benchmark bug family? #522 is the precedent: its numbers came from a manual
recon fuzzwhoseargv was never recorded, while every typed artifact at that path described a different run.
requires and records
--seq-len 100.Disclosed asymmetries
Every known way the two arms differ beyond the absence of fuzzing. Read these before interpreting any
result; none is hidden and none is repaired by falsifying an artifact.
against 5 base counterparts. It compensates for losing the failing-test anchor, so any precision or
F1 advantage the control shows is not a fuzzing result.
boundary-testsfindings destination, favours the control on recall at one node. The controlnames the destination through
{{output_findings_path}}; base names none at all, which is theshipped defect tracked in A node can declare a findings output whose prompt never says where to write findings #539, so base's node cannot report a finding.
required_commands, so a missing orflaky
recon/covg-evalcan fail the treatment arm and cannot fail the control.control:
reachability=public-caller-source-chainmust cite source spans for every link of thecaller chain and for the argument/state admission, standing in for base's generated public wrapper
PoC, which the control cannot execute.
BENCHMARK_SMOKE_EXCLUDED_NODE_IDS. Unreachable from the shipped lanes; fixing it wouldrequire a
srcedit that PRESERVE forbids, so it is encoded as anassert.throws.unavailableproperty-implementationcoverage,
No property-derived findings., no fenced code block under### Proof of Concept, and a### Strategytable that cannot name the removed nodes.Reported regardless of outcome
Both arms' run IDs, elapsed time, token and cost accounting, node completion counts, artifact paths,
and the full metric table including invalid cells. A well-formed negative result — neither arm
finding anything — is a reportable outcome and will be reported as such rather than retried until it
changes.
aviggiano commentedon Aug 13, 2026
Addendum 1 (2026-08-13): execution moves to Modal, one arm per VM
Recorded as a dated addendum rather than by editing the pre-registration, per its own amendment rule.
This changes execution and reporting, not the research question, the target, the arms, or the metrics.
Change
Both arms run on Modal, concurrently, one run per VM, with artifacts on persistent storage, and
every stopped node is resumed so each run proceeds start to finish reusing completed work. The
pre-registration as posted described local execution (
[execution] mode = "local", which is what bothprepared checkouts currently declare) and sequential-vs-concurrent as an open choice. Concurrent
execution is now fixed, which is the better choice for matched host conditions.
Consequence that must be reported, not buried
"Always resume" is in direct tension with a clean-attempt reading of either arm. Under
recovery_equivalence.max_repeated_model_executions: 0a resume that repeats a model-backed attemptclassifies a row non-comparable — but that enforcement lives in the eval lane, and this experiment does
not use
eval runoreval score(see the Scoring protocol section: the only Aave ground truth bindssubject: scfuzzbench/aave-v4-scfuzzbench@edd6c827andassertGroundTruthSubjectrejects aprivate-sensitivity row targeting
aave/aave-v4@6959e321). So no automatic comparability gate will fire,and the honest-reporting burden shifts entirely onto disclosure.
Therefore the following are added to the reported quantities, per arm, and will be reported whatever they
say:
A row that only completed because work was repeated is not equivalent to a row that completed in one
pass, and the report will say so explicitly rather than presenting a resumed completion as a clean one.
Cost basis, corrected again
The pre-registration already warns that the measured 5-6h / ~188M token / ~$1,092 figures come from the
34-node
invariant-onlyprofile and do not transfer to the 61-node default topology. Sizing by agenticnode count (50 treatment, 43 control, against 23 for invariant-only) projects roughly $2.4k and 11-13h
for the treatment arm and $1.6-2k and 8-10h for the control, so about $4k for the pair. These are
projections, recorded before launch so the eventual figures are not presented as having been predicted.
Integrity precondition, blocking launch
The control's NoFuzz guidance exists only in
.ultrafuzz/prompts/nofuzz/{setup,review}/(7 files),referenced only from its own topology. If those files do not reach the Modal execution environment,
promptEntryForPath(packages/runtime/src/plan-run.ts:1142) falls back to a same-logical-id entry andsilently renders the stock prompt — running the treatment arm's guidance inside the control arm and
voiding the experiment with no error. That hazard is filed as #556.
Launch is therefore gated on proving prompt carriage into the Modal environment, and on a post-launch
check that the control's rendered prompt snapshots match its own 7 files rather than the stock ones. If
carriage cannot be proven, the arms run locally instead; the experiment will not be run on a path where
this substitution is possible but unverified.
aviggiano commentedon Aug 13, 2026
Addendum 2 (2026-08-13): execution stays local, both arms concurrent
Supersedes Addendum 1's move to Modal. Recorded before launch. The research question, target, arms,
held-constant list, metrics and validity rules are unchanged.
Change
Both arms run locally on the launch host, concurrently, one workflow each, with
[execution] mode = "local"as both prepared checkouts already declare. The Modal path in Addendum 1 iswithdrawn and no Modal configuration was applied to either arm.
Everything Addendum 1 said about resumes still holds and is restated here so it is not lost with the
withdrawn parts: every stopped node is resumed so each run proceeds start to finish reusing completed
work, and because this experiment does not use
eval runoreval score, no automatic comparabilitygate fires. The following are therefore reported per arm regardless of outcome: number of resumes and
each trigger, number of repeated model-backed attempts and which nodes repeated, attempts per node from
the durable attempt ledger, and tokens, estimated spend and elapsed wall clock separated into
first-attempt and post-resume. A row that completed only because work was repeated is not equivalent to
one that completed in a single pass, and the report will say so.
What local concurrent execution costs the comparison, stated in advance
The two arms share one host and one model gateway. Each declares
cpu = 4,memory_mib = 8192andmax_parallel_agents = 4, so eight concurrent agents contend for one gateway process and 32 vCPU.Consequences to disclose rather than discover:
affected by the other's load. Token counts and node/attempt counts are the reliable quantities;
elapsed time is reported but must not be used to compare arm efficiency.
the same wall-clock window, which is why they are run together rather than back to back.
operational failure affecting the pair, to be reported as such, and not evidence about either variant.
Integrity precondition, now satisfied
Addendum 1 gated launch on proving that the control's 7
nofuzz/prompts reach the executionenvironment, because
promptEntryForPath(packages/runtime/src/plan-run.ts:1142) silently falls backto a same-logical-id prompt when a declared path is absent, which would run the treatment arm's guidance
inside the control (#556).
Local execution renders prompts directly from each project's own tree, and the gate is now closed by
direct check: every prompt path declared by each arm's topology exists on disk in that arm — treatment
50 declared references, 0 missing, 0 under
nofuzz/; control 43 declared references, 0 missing, exactly7 under
nofuzz/(setup/{project-discovery,prepare-foundry-harness,discover-base-test}.mdandreview/{dedupe-findings,triage,severity-classification,final-report}.md). The fallback therefore cannotfire in either arm.
Post-run verification remains required and will be reported: the control's rendered prompt snapshots
must match its own 7 files, not the stock ones.
Prepared state at launch
/home/ubuntu/eval-arm-ultrafuzz/home/ubuntu/eval-arm-nofuzz682d51a33936963aaave/aave-v4@6959e321, clean, submodule pinned.ultrafuzz/topology.ymlsha2568a75c4ab…95a3f0caf5081f05…5892cd03nofuzz/doctorvalidateultrafuzz.tomlThe required-command counts differ by exactly three —
recon,recon-generate,covg-eval— derivedfrom each topology rather than asserted, which is independent confirmation that the control declares no
fuzzing backend.
No
--agentor--modelflag will be passed at launch:docs/reference/cli.mdrecords that--agentclears backend-specific reasoning even when
--modelalso pins a replacement, which would silently dropxhigh. Both arms rely on[models.default].aviggiano commentedon Aug 13, 2026
Paired run status — both arms finished
Both arms of the 2026-08-13 paired run reached a final report. The engine's own view is authoritative here; the on-disk
state.jsonfor the treatment arm was stale by roughly an hour and understated progress.Both are marked
failedbecause of node-level gate failures, not because work was left undone.Two gate defects, now filed
#582 — campaign command gate rejects the log redirection. The treatment arm's
stateful-invariant-campaignran a complete 3603-second campaign (campaign_outcome: complete,usable_results: true, one reproduced property failure) and was marked failed 191 ms after its artifacts landed. The recorded command satisfies every requirement —--timeout 3600,--test-limit 18446744073709551615,--seq-len 100, and the exacttimeoutwrapper each appear once, with no--foreground— butconstrainedShellTokensbails on the>of the command's own log redirection at character 1179, so all four checks report their flag missing at once. Fix and regression tests are onfix/582-recon-command-redirection.The campaign's evidence was not lost: downstream nodes consumed the artifacts and its finding reaches the final report as a
harness-defectrow creditingreconas the backend. The cost is that a valid campaign and the run containing it are recorded as failed.#583 — fan-in markdown parity reports a missing description that is present.
property-specification-faninfailed identically in both arms. The gate names 78 properties as missingdescription; forproperty-5the field is present inproperties.mdand matches the JSON. Mechanism not yet pinned down, so filed separately rather than fixed. This is the third fan-in parity rule to reject compliant artifacts, after #297.Effect on the comparison
The fan-in failure is symmetric and does not bias the arms against each other. The campaign gate failure is treatment-only, but since the artifacts still flowed downstream it does not by itself explain the 1-vs-5 production finding gap — that gap needs to be judged on the reports themselves, not attributed to #582.
Supervision note
eval-supervisor.shlogged 10 resumes across the two arms (ledger in/home/ubuntu/eval-supervisor/resumes.jsonl). All were no-ops against live workflows — the v3 stall signal still fired on healthy long-running nodes. The supervisor process died around 16:48 and neither arm needed it to finish. Recorded per Addendum 2; no arm completed only because work was repeated.aviggiano commentedon Aug 14, 2026
Generic follow-up issue disposition after the paired-run audit
Created:
Updated existing issues with #531 evidence:
implemented-properties.v3still lacks structured per-property executable-oracle and entrypoint evidence.No new issue was created for these because v0.0.16 now has direct coverage:
This leaves #589 and #590 as the two new generic issues arising from the run.
aviggiano commentedon Aug 14, 2026
Completion disposition
This investigation is complete. The evidence supports a narrower conclusion than the original hypothesis, and the reusable product failures now have explicit follow-ups.
Answer to the research question
Stateful fuzzing can reach failures that require dependent state transitions, but this paired experiment did not demonstrate a different confirmed Aave bug found by stateful fuzzing.
The treatment's autonomous stateful campaign produced only a harness defect. Its sole production finding came from a deterministic shared strategy, not from Recon's sequence search. Conversely, NoFuzz authored several genuinely multi-step deterministic PoCs. The meaningful capability boundary is therefore:
It is not simply “multiple transactions versus one transaction.” The experiment leaves open—and makes more precise—the question of whether autonomous sequence search finds confirmed bugs that source-guided, model-authored multi-call scenarios miss.
What the two runs showed
done (failed)done (failed)Treatment-specific observations:
seqLen=100and executed 96,751,355 calls.The control was not limited to one-call attempts. Its authored scenarios included:
There is also a high-risk reentrant collateral-token liquidation PoC that passes, but triage split 2–2 on whether that token behavior is within the support model. It remains unadjudicated, not a confirmed sixth finding.
Why this experiment cannot isolate the effect of fuzzing
The comparison was materially confounded:
n=1).Both rows were also invalid under the preregistered success criteria: treatment failed fan-in, campaign verification, and final-report processing; control failed fan-in. The outputs are useful diagnostic and directional evidence, but not a clean causal estimate of stateful fuzzing's incremental bug yield.
The follow-up #591 will selectively move appropriate strategy nodes to NoFuzz-style bug-search framing. It intentionally does not convert harness/invariant/differential construction nodes wholesale. A bounded blinded/paired A/B should precede broad rollout.
ScFuzzBench interpretation
The referenced ScFuzzBench run is evidence that automated stateful exploration can reach assertions requiring multiple dependent transitions. It is not direct evidence of several root-cause-distinct, confirmed Aave bugs: the UI reports assertion identities, includes two canaries and related solvency variants, and has ground-truth mapping disabled.
Accordingly, ScFuzzBench supports the reachability premise, not the stronger claim that this Ultrafuzz treatment found a bug class unavailable to NoFuzz.
The separate 2026-08-11
seqLen=100artifact also does not change the paired result. Its raw trace was a one-wei Hub/Spoke rounding mismatch, metadata labeled it as solvency/property 25, and the final report demoted it to incomplete-spec. It was a detached/manual handoff rather than a sealed end-to-end campaign, so it should be retained as a candidate/lineage lesson, not counted as a confirmed stateful finding here.Reusable operational and product learnings
Closing rationale
The current evidence answers the research question at the resolution this experiment permits: it demonstrates the capability distinction and exposes a better experiment design, but it does not show a different confirmed Aave bug attributable to autonomous stateful fuzzing. The generic defects have been separated into actionable issues, and the prompt/topology follow-up has been created. Closing this investigation as complete does not mean stateful fuzzing is ineffective; it means the present paired run cannot establish its incremental bug yield.