Ring only the planet hosts inside the survey edge, so the Kepler field is not a band over the view

4c8e4a0 added 3 277 hosts from the archive, 2 883 of them past 250 pc and 916 past a kiloparsec,
most in the Kepler field. Every host got a 12 px ring whatever its distance and a place in the
draw budget's first tier after the pinned stars, rules set when 1 of 1 379 hosts lay past 250 pc.
At boot the opening view held 3 332 rings against 1 290 before, 1 687 of them in its lower right
(x > 1000, y > 550 at 1600x1000) where there were 116, over the 250-350 pc grid labels; hosts 1-3
kpc away read as neighbours in a view whose range is 307 pc, and 629 stars past a kiloparsec were
drawn where there had been 3.

Rings and the host tier now take the hosts within SURVEY_EDGE_PC only. The far hosts still compete
for the budget by brightness, and search still enters them. Measured in the running app at
1600x1000: 1 853 rings in all, 1 698 in the opening view, 199 in its lower right; 31 stars past a
kiloparsec drawn; 1 767 hosts drawn. This reverses "a ring on every host" for the far ones: that
was the user's rule of 2026-09-17, when the only far host was one star, so it is flagged for them.

The scene test's fixture gains the lens's planet, 6.7 kpc out. The new test checks the ring count
and the host tier; the opening-view test now expects the lens out of that tier. Control: dropping
the distance condition fails the new test and that one (2 of 824).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-30 16:14:28 +02:00
co-authored by Claude Opus 5.5
parent e62e2fb03f
commit 073fb9f718
2 changed files with 20 additions and 9 deletions
@@ -760,14 +760,15 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy {
this.starsByBrightness,
publishedTemperaturesK(exoplanets),
);
this.hostStars = Uint8Array.from(stars, (star) =>
this.starIdsWithBodies.has(star.id) ? 1 : 0,
);
// Ringed, and drawn ahead of the brightness tier, only inside the survey edge. The 2 883 hosts
// the archive places past it, 916 of them beyond a kiloparsec, mostly the Kepler field's, were
// a band of 1 687 fixed-size rings over the opening view's lower right, on the 250-350 pc grid
// labels, and read as neighbours; they still compete for the budget by brightness, and search
// still enters them.
const ringed = (star: StarRecord): boolean => this.starIdsWithBodies.has(star.id) && Math.hypot(star.x, star.y, star.z) <= SURVEY_EDGE_PC;
this.hostStars = Uint8Array.from(stars, (star) => (ringed(star) ? 1 : 0));
this.galaxyGroup.add(this.starField.object);
this.hostRings = new HostStarRings(
stars.filter((star) => this.starIdsWithBodies.has(star.id)),
HUD_ACCENT,
);
this.hostRings = new HostStarRings(stars.filter(ringed), HUD_ACCENT);
this.galaxyGroup.add(this.hostRings.object);
this.jumpLinks = new JumpLinkRenderer(HUD_ACCENT);
this.galaxyGroup.add(this.jumpLinks.object);