Notes / Audits and snapshots

Audit: second line-by-line review of the scoring library, the dashboard and the push scripts (2026-10-11)

Audits and snapshots2026-10-11Chain: Solana, Zcash, Robinhood Chain

Source: data/audit_2026-10-11-second-review.md in the repository, rendered here without changes. Source file

Six independent reviewers read the shared scoring library, the per-chain scorers, the dashboard script, the Solana and Zcash code and the push scripts, each told to refute the code rather than confirm it. Every finding below was re-checked against the code before being acted on. The score fixes touch failure and rotation branches, which a healthy read does not take; they have not been replayed against live Robinhood state, so the next Robinhood re-push starts with a dry-run preview that shows whether any published value moves.

Fixed#

WhereDefectFix
scripts/lib/safe_modules.pyModule pagination restarted from the wrong cursor on Safe v1.3.0, so a Safe v1.3.0 with more than one page of modules lost one module at each page boundaryResume from the last returned module; test added that fails on the old code
scripts/lib/push_guard.pyA crossExposureScore defaulted to 100 after a failed computation was held only if the composite moved, and it never does; a rotated stock-token admin and an unreadable Spark delay() published without a holdA default note holds the entry whenever the published value differs; both unresolved branches now carry an "unresolved authority" note
scripts/lib/scorers.py, stock tokensA role check that came back False or unread scored the admin key 40, above the 20 floor for an unresolved read20, with a note
scripts/lib/scorers.py, two Spark scorersAn unreadable delay() scored the timelock 60, the best case0: unknown is never better than a confirmed zero delay (10)
dashboard/index.htmlA slow read could paint its scores under the tab the visitor had moved to; an empty eth_call showed as a green "0 targets" or a STRONG row; a malformed #chain= stopped the page; RPC-supplied strings reached the HTML uncheckedLoad-sequence guard, address and length checks, ignored malformed hash, numeric coercion
scripts/update_scores.pyA snapshot file that existed but could not be parsed was treated as a first publish, which switched the completeness and alert guards off; it was also written non-atomicallyThe run refuses; the file is written then renamed

Open, known, not fixed before the submission#

Open: calibration findings from the per-chain scorer read (not changed before the submission, because each one moves a published score)#

Reproduced with fake reads (no network, no writes). Fixing them changes numbers on a live oracle, so each waits for a dry-run preview and a re-push.

Found by the review of tonight's fixes#

Found by an independent chain read on 2026-10-12 (12 random targets re-read on public RPCs without this project's code)#

Open, not changed before the submission (each one moves a published score or needs a re-push):

Not an audit, not investment advice. All notes · Back to the dashboard.