Skip to content

Form labels never shrink to their ⓘ; many outlines are classified instead of named - #47

Merged
guijacquemet merged 1 commit into
mainfrom
claude/stardist-labconstrictor-plan-aizdd6
Nov 12, 2026
Merged

guijacquemet merged 1 commit into
mainfrom
claude/stardist-labconstrictor-plan-aizdd6

Conversation

@guijacquemet

Copy link
Copy Markdown
Contributor

Summary

Two problems found while running a StarDist 2D LabConstrictor app (284 nuclei on one image) in QuPath 0.7.0.

1. The tool form showed no parameter names, only the ⓘ markers.

  • Cause: LcHelp.mark puts the ⓘ as the label's graphic. The grid's label column had no minimum width, and the control column grows. With a wide control (an image row: chooser, area, file field), JavaFX squeezed the column and kept the graphic but dropped the label text.
  • Fix: in newGrid(), the label column keeps its labels' preferred width (c0.minWidth = Region.USE_PREF_SIZE).

2. Hundreds of outlines covered the image with their names.

  • Cause: every outline annotation is named <app>:<output> <label>, and QuPath draws annotation names by default.
  • Fix:
    • Every outline annotation gets the classification <app>:<output> (one per output), so they can be counted, coloured and selected together.
    • Above LcConst.MAX_NAMED_SHAPES = 50 outlines, annotations get no name. The label stays a measurement; when the GeoJSON has no label property, the outline's number becomes the label measurement.
    • At 50 outlines or fewer, names are unchanged. Replace() removes the previous outlines by name or by classification.
    • The status sentence says which applies.
    • This matches SPEC_WAVE1.md ("QuPath: annotations named <app>:<output>") at least as closely as before.

Docs: README (new "Outlines" bullet) and docs/user-guide.md.

Before After
Form: only ⓘ in the label column Form: "Image ⓘ", "Model ⓘ", "Model folder ⓘ", "Prob thresh ⓘ", …
284 names drawn over the nuclei 284 outlines coloured by their classification, no text

Tests

Run locally on QuPath 0.7.0 (release tarball, checksum verified), extension built with build.sh (JDK 25), xvfb, through tests/run_gui_ci.sh. All bodies pass:

Body Checks
shapes 7, including the new one_classification_per_output
area 48
parity_lifecycle 28, including the 50 000-outline cap sentence
parity_messages 18
parity_form 55
widgets 7
adversarial 16
parity_results 26
conformance 119
interactions 9
region 7

Total: 340 checks.

  • tests/ui_audit_oracle.groovy now also finds unnamed outlines by their classification. The UI audit itself was not run here.

  • With the StarDist2D app (284 outlines), all of these pass:

    • no names;
    • 284 annotations of classification StarDist2D:stardist_outlines;
    • label/prob measurements;
    • a second run with Replace() leaves one set.

    The test body and screenshots are in CellMigrationLab/Stardist2D#2, under docs/screenshots/qupath/.

  • Not run here: the listing matrix, playground, trust, retention, async and identity bodies. They don't touch forms or outlines.


Generated by Claude Code

…sified, not named

- The label column of every form grid keeps the labels' preferred width:
  with a wide control (an image row) JavaFX kept only the ⓘ graphic of
  each label and dropped its text, so the form showed no parameter names.
- Outline annotations get the classification <app>:<output>. Above 50
  outlines they get no names: QuPath draws every name over the image, which
  hid a segmentation of hundreds of nuclei; the label stays a measurement.
  Replace() removes the previous outlines by name or classification.
- Tests: the shapes body checks the classification; the UI audit oracle
  finds unnamed outlines by classification. README and user guide updated.

Found while testing a StarDist 2D app (284 nuclei) in QuPath 0.7.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WX6rdRdA72nsUjZvTXFSbP
@guijacquemet
guijacquemet marked this pull request as ready for review November 12, 2026 05:53
@guijacquemet
guijacquemet merged commit 8a5c548 into main Nov 12, 2026
2 checks passed
@guijacquemet
guijacquemet deleted the claude/stardist-labconstrictor-plan-aizdd6 branch November 12, 2026 05:53
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.

2 participants