-
Notifications
You must be signed in to change notification settings - Fork 0
Points: make feature selection work on large elements, with a name-based selection API #89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
xinaesthete
merged 57 commits into
main
from
claude/points-implementation-stages-993e15
Jul 27, 2026
Merged
Changes from 48 commits
Commits
Show all changes
57 commits
Select commit
Hold shift + click to select a range
cc42ba1
Add RequestSlot<K,V> primitive (Track A, step A1)
xinaesthete 02cf3ab
Slotify points preload + rowCodes; close races R1, R5 (Track A, step A2)
xinaesthete d4d2200
Slotify the points matching scan; close races R2, R3 (Track A, step A3)
xinaesthete 81fb2bd
Slotify the points catalog; make failures retryable + add retry() (Tr…
xinaesthete c43a0fb
Thread AbortSignal through the points scan; cancel superseded work (T…
xinaesthete 57fdba5
Plan points row-codes + feature scan from the reconcile effect (Track…
xinaesthete 352090f
Run the Effect-vs-plain matching-slot spike; plain wins (Track A, ste…
xinaesthete 36cb627
Kill the streaming-overlay flash: stable partial resource + revision …
xinaesthete 913501c
docs: mark Step 2 Track A (points state model) landed in the handoff
xinaesthete 5a2073a
Coverage-gate the points base layer: never show the wrong gene (rende…
xinaesthete 3f6ab04
Unify the points base into one stable resource; kill the base flicker…
xinaesthete d72f464
Fix points show/hide + colour policy (three render-time bugs)
xinaesthete 5c03587
Colour points from a palette texture (LUT) instead of a shader formul…
xinaesthete 60a5372
Per-feature colour overrides via the palette LUT + panel picker (stag…
xinaesthete 4b9ca83
Fix the feature colour-swatch layout
xinaesthete a135291
Hover a feature in the list to highlight its points (feature highlight)
xinaesthete c9a0ae2
Merge remote-tracking branch 'origin/main' into claude/points-impleme…
xinaesthete 0ee6784
Stream the points preload by row group (P3 / D3)
xinaesthete e72e636
Fix streamed preload dropping per-row feature codes (P3 regression)
xinaesthete cd14b96
Never publish short per-row codes from the streamed preload
xinaesthete 91437ae
Stop the colour palette depending on the feature catalog
xinaesthete 0528078
Show the feature list before the counts scan finishes
xinaesthete 62b814d
Accumulate per-feature stats while the preload streams
xinaesthete bc6eba9
Stream the feature catalog instead of decoding the whole file
xinaesthete c912423
Never let a stalled feature stream strand the catalog
xinaesthete b6f6075
Probe range support before handing a URL to the streaming reader
xinaesthete 5a38092
Probe the server, not the HTTP cache, for range support
xinaesthete 71a5375
Map row feature codes through the dictionary, not per row
xinaesthete ea8a04f
Stream geometry and colour together in the points preload
xinaesthete 9f671cc
Don't scan for features the resident batch already holds
xinaesthete 42992ca
Stop fetching whole parquet parts the worker will never read
xinaesthete ac66ee1
move point size control into PointsLayerPanel
xinaesthete 179631e
allow finer point size control
xinaesthete b94e900
Keep deck's points `data` object stable across renders
xinaesthete 054b9a4
Size points in the element's own coordinate units
xinaesthete 46d5b89
Stop the preload's preview catalog from killing the full scan
xinaesthete 028327e
Traverse part.N.parquet when a server 500s the directory path
xinaesthete 15f84f6
Resolve parquet part layout once per path instead of per call
xinaesthete 8b63d12
Give row-group chunks their own footer bytes (fixes DataCloneError)
xinaesthete e5c9033
Hoist Arrow column reads out of the points scan loops
xinaesthete 1aa9fd3
Hoist table.numRows out of the points scan loop conditions
xinaesthete 1e0cdca
Add the alt dev-server entry, and note the scan's output allocation
xinaesthete 32cc192
Accumulate scan output into reserved typed buffers
xinaesthete be64b65
Route the feature scan through ParquetFile.stream
xinaesthete 478e568
Persist points feature selections as names, not codes
xinaesthete 102c9e9
Document the points feature API for headless/MDV consumers
xinaesthete b91caf0
Stream the feature scan in the worker, off the main thread
xinaesthete afd1299
Add changeset and record the feature-counts settle bug
xinaesthete e2da032
Reframe the changeset: the feature scan now works, rather than being …
xinaesthete 8d1a875
Stop transient failures from sticking in three caches
xinaesthete 384931f
Make an unhonourable feature filter match nothing, not everything
xinaesthete 9a46cf3
Record the probe-cache mechanism against the counts punchlist item
xinaesthete 615c926
Do not hand PointsLayer a feature filter it will decline to apply
xinaesthete 57f77fd
Guard the points batch reads against stale resolutions
xinaesthete 4616ec7
Gate the row-codes plan on the cap, not on readiness
xinaesthete 4614d5f
Clear the remaining review findings
xinaesthete dfa670b
Coalesce the colour write without a ref read during render
xinaesthete File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| --- | ||
| "@spatialdata/core": patch | ||
| "@spatialdata/layers": patch | ||
| "@spatialdata/vis": patch | ||
| --- | ||
|
|
||
| Points: name-based feature selection, and a much faster feature scan. | ||
|
|
||
| **Selections persist as feature names.** `PointsLayerConfig.featureNames` is the | ||
| durable, serializable form and what the UI writes. Codes are app-assigned for a | ||
| dictionary-only element (a Xenium `transcripts` has `feature_name` and no code | ||
| column), so a stored code could silently come back meaning a different feature. | ||
| `featureCodes` still works and still takes effect at runtime, but names win when | ||
| both are present. `resolveFeatureSelectionCodes` / `featureNamesForCodes` are | ||
| exported from `@spatialdata/core` for converting between the two. | ||
|
|
||
| **Feature scan is 3-4x faster.** It now reads through | ||
| `ParquetFile.stream({ columns, rowGroups })`, which fetches per column chunk, so | ||
| the projection reaches the network instead of pulling whole row groups — all 12 | ||
| columns of a Xenium `transcripts` to use three. The scan runs in the points | ||
| worker, keeping the parquet decode off the main thread. Selecting one gene from a | ||
| 12.1M-row element went from ~3.2-7.8s to ~1.0s, with main-thread time roughly a | ||
| third of what the pre-streaming path cost. | ||
|
|
||
| Also fixed along the way: a full-dataset catalog scan being silently cancelled by | ||
| the resident preview settling underneath it (leaving counts stuck and colours | ||
| mismatched); row-group chunks handing out the cached footer buffer, which the | ||
| worker transfer detached (`DataCloneError`, dropping the element onto whole-file | ||
| reads); parquet part layout being re-probed on every call; a server that answers | ||
| a directory path with 500 rather than 404 wedging part traversal; and point size | ||
| not accounting for an element's transform scale. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.