Skip to content

feat(frontend): refine recursive sub-clustering workflow#31

Merged
aGallea merged 15 commits into
masterfrom
recursive-sub-clustering
Mar 17, 2026
Merged

feat(frontend): refine recursive sub-clustering workflow#31
aGallea merged 15 commits into
masterfrom
recursive-sub-clustering

Conversation

@aGallea

@aGallea aGallea commented Mar 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • move recursive sub-clustering into the main 3D plot workflow with drawer-owned controls, breadcrumb navigation, recursive drilling, and selection-gated deeper compute
  • upgrade drilled drawer interactions with expandable sub-cluster rows, richer product cards, full scrollable item lists, and plot-linked product highlighting
  • add drilled legend visibility controls for sub-groups, including hide/show, Ctrl/Cmd isolate, and Show All, with renderer support and E2E coverage

Test Plan

  • cd frontend && npm run build
  • cd frontend && npx playwright test e2e/cluster-drawer.spec.ts --workers=1
  • cd frontend && npx playwright test --workers=1

aGallea and others added 15 commits March 17, 2026 12:53
Add optional point_ids field to SubClusterRequest for recursive sub-clustering by arbitrary point sets. Add SuggestKRequest, SuggestKScoreEntry, and SuggestKResponse models for silhouette-based optimal k recommendation.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add POST /{job_id}/sub-cluster endpoint that accepts point_ids for recursive sub-clustering of arbitrary point sets. Add POST /{job_id}/suggest-k endpoint with silhouette score analysis for optimal cluster count recommendation. Include 5 new tests covering both endpoints.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add DrillLevel, SuggestKRequest, SuggestKScoreEntry, and SuggestKResponse types. Add point_ids field to SubClusterRequest. Add subClusterByPointIds() and suggestK() API functions for recursive drill-down and optimal k suggestion.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add drillPath, subClusterColorMap, and isLoadingDrill state to Zustand store. Implement drillInto, navigateDrill, resetDrill actions for recursive drill navigation. Add buildColorMap helper and isolateCluster action for Ctrl/Cmd+click cluster isolation.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Update ParticleCloud, InstancedSpheres, and ImageSpriteCloud to read drill state from store. When drilling, recolor points by sub-cluster assignment and dim non-drilled clusters to 15% opacity.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Create DrillBreadcrumb component with clickable path segments and Escape key navigation. Rewrite ClusterLegend with explicit drill-down buttons (chevron icons) replacing double-click, and sub-cluster legend view for drilled state. Add CameraZoom to ScatterPlot for auto-zooming to drilled cluster bounding box. Add suggest-k button to ClusterDetailDrawer. Wire resetDrill cleanup in PlotPage.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add 3 Playwright E2E tests: drill into cluster via chevron button, verify breadcrumb navigation back to all clusters, and verify sub-cluster legend displays during drill mode.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…gend drill buttons

- Rewrite ClusterDetailDrawer with k-slider, suggest-k, and compute button
- Simplify ClusterLegend to display-only (no drill buttons or handlers)
- Delete SubClusterView (mini 3D plot no longer needed)
- Update E2E drill tests to use drawer compute flow
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@github-actions

Copy link
Copy Markdown

Tests Report 📄

Tests Succees ✅

JUnit Details

Total Tests Failures Errors Skipped Time ⏳
250 0 0 0 64.39s

Coverage Details (96% >= 90%) ✅

Diff Cover Details
FileCovered LinesMissing Lines
embedding_cluster/server/models.py23/2592%220-221
embedding_cluster/server/routes/plot.py178/18596%251,253,273,357,359,375,381
Total201/21096%

@aGallea aGallea merged commit 803c39d into master Mar 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant