You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make every analysis reachable, and reachable from the landing page
Found by operating the site rather than reading it. The accessibility
tree's own summary of the landing page was that there is no way to reach
the tool from it --- the primary button read "read the docs", which is not
what somebody arriving with an address wants to do. The nav now opens a
case from every page and the landing leads with it.
The case view offered three analyses of thirteen, because the list was a
literal in the component. Clustering, peel chains, taint, mixer and the
rest were installed, documented and reachable from the CLI, and invisible
here. `/analyses` now serves the entry-point registry, so the page cannot
drift from what is installed, and reports plugins that failed to import
rather than silently omitting them. The dispatcher runs any registered
analyzer instead of matching four names.
The landing lists all thirteen with what each cannot tell you, and each
links into the case view with that analyzer preselected.
Three problems the walkthrough surfaced, all of which would have shipped:
Thirteen buttons under `flex: 1` divided one row between them and
truncated every label to three characters. Content width and wrapping.
`temporal` returned `AttributeError: 'NoneType' object has no attribute
'enumerate'` --- this handler passes no router by design, and the analyzer
reached for one. It now says it needs to fetch and names the CLI command
that can.
`taint` and `mixer` demanded parameters the page gave no way to supply.
Analyzers declare `REQUIRES` and the page renders an input per entry. The
test checks declarations against `run()`'s signature, which immediately
caught that I had declared `funder` for `common_funder` when it takes
`addresses` --- the error message I had matched belonged to a different
class in the same file.
Hiding inapplicable analyses over-corrected at first and hid all thirteen,
visible only by looking again: the browser had cached the bundle from
before the server grew the field. Which is itself the bug --- HTML carries
this run's token and must never be cached, so it is now `no-store`, with
the content-hashed assets cached hard.
Also adds `code_at`/`is_eoa_at` for historical `eth_getCode`, and lets an
endpoint declare archive state via `CHAINSCOPE_RPC_<NAME>_ARCHIVE`.
Without it every historical `eth_call` was refused, so "was this an EOA at
block b" and "what were this token's decimals then" could only be answered
about the present --- a different question with a plausible-looking answer.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FXWQ25VgFeMuuMhGWjvdof
0 commit comments