Skip to content

2026-08-26 Histo dashboard viewer failure investigation

Inspected current mono main for WSI zoom, overlay, direct GeoTIFF, and browser CORS failure paths.

Work Done

  • Read the histo workstream indexes and the dashboard histo tile-serving SOP.
  • Inspected current mono main without editing it, focusing on dashboard frontend HistoViewerCard, shared TileViewer/TileClient/TileScheduler, the direct HTTP GeoTIFF source, the dashboard-api histo router, and Vite URL proxies.
  • Identified a deterministic overlay scheduling fault: overlay tile requests are scheduled during rendering, then immediately excluded from the base-image scheduler keep-set and cancelled. Their overlay-cache loading flags are not cleared.
  • Identified the direct-S3 browser constraint: HistoViewerCard passes the raw presigned URL to the fetch-based GeoTIFF reader even though the existing s3ObjectUrl helper documents that the endpoint lacks CORS and provides a dev proxy for byte-reading callers.
  • Recorded other likely mechanisms: silent overlay metadata/tile errors, one mutable source type shared by base and overlays, GeoTIFF top-level-IFD pyramid assumptions, ignored overlay PNG query, range-response requirements, and presigned URL expiry.
  • No source files were edited and no tests were run because this was a read-only investigation.

Lessons Learned: Pitfalls

  • The dashboard tile-serving SOP describes the original on-disk TIFF and OME-Zarr paths but does not yet cover the later direct-S3 GeoTIFF path or its CORS and range constraints.
  • Shared viewer logging methods currently contain no output, despite comments suggesting they can be enabled, so browser source breakpoints and Network inspection are more useful.

Lessons Learned: Improvements

  • Extend the dashboard histo tile-serving SOP with the direct-S3 flow and the required browser contract: successful CORS preflight for Range, 206, readable Content-Range, and the dev/prod proxy distinction.
  • Document that the viewer scheduler is shared by base and overlays, so cancellation keep-sets and loading-state cleanup must cover both cache families.
  • Add an integration check that zooming changes requested pyramid levels and that a visible overlay completes at least one tile request.
Navigation

Type to search…

↑↓ navigate↵ selectEsc close