name: beamho-observer-sky-frontend description: Use when editing beamHO-bench observer-sky satellite rendering, composition, camera framing, display selection, continuity, or screen-space acceptance so frontend changes stay aligned with visual-acceptance rules instead of proxy metrics alone.
beamHO Observer-Sky Frontend
Use this skill for beamHO-bench/ when the task affects satellite display, observer-sky composition, god-view framing, display-set behavior, or frontend acceptance for Synthetic Orbit, Starlink TLE, and OneWeb TLE.
Read First
Read these first:
AGENTS.mdPROJECT_CONSTRAINTS.mddocs/zh-TW/07-observer-sky-visual-acceptance.mdsdd/completed/beamHO-bench-implementation-status.md- the current active pending frontend SDD
- these frontend files:
src/components/scene/MainScene.tsxsrc/components/scene/SatelliteSkyLayer.tsxsrc/components/scene/ObserverSkyCameraRig.tsxsrc/viz/satellite/view-composition.tssrc/viz/satellite/observer-sky-projection.tssrc/viz/satellite/display-selection.tssrc/viz/satellite/display-continuity.tssrc/viz/satellite/display-adapter.tssrc/viz/satellite/display-pipeline.tssrc/viz/satellite/screen-space-acceptance.ts
Ownership Boundaries
Keep these boundaries clear:
src/sim/**- physical/runtime truth
- do not push frontend-only composition state back here
src/viz/satellite/**- projection, selection, continuity, composition, screen-space evaluation
src/components/scene/**- scene wiring, camera rig, accepted view-mode integration
src/components/sim/**- renderer-only display components
Do not solve a frontend acceptance problem by hiding more state inside runtime contracts.
Frontend Acceptance Rules
The result must satisfy docs/zh-TW/07-observer-sky-visual-acceptance.md.
In practice, that means:
- satellites must read as
rise -> pass -> set elevation < 0stays hidden0 <= elevation < theta_minstays ghost / non-servingelevation >= theta_minreads as active- screen-space must not collapse into a center-top cluster
- satellites must remain identifiable as continuous moving objects
- display set must remain broader than HO candidate set when the physical pool allows it
Do not mark complete if the screen still reads as:
- a pack of points near the scene center swapping places
- long pauses followed by abrupt relocation
- candidate-limit-driven top-N truncation in the visible sky
Preferred Change Surfaces
Typical frontend fixes belong in:
src/viz/satellite/view-composition.tssrc/viz/satellite/display-selection.tssrc/viz/satellite/display-continuity.tssrc/viz/satellite/display-adapter.tssrc/viz/satellite/display-pipeline.tssrc/viz/satellite/screen-space-acceptance.tssrc/components/scene/ObserverSkyCameraRig.tsxsrc/components/scene/MainScene.tsxsrc/components/scene/SatelliteSkyLayer.tsx
Do not reach for generic camera-distance tweaks first if the actual problem is display selection, composition policy, or continuity semantics.
Validation
For observer-sky frontend work, prefer this full set:
npm run lintnpm run test:simnpm run buildnpm run validate:stage
Also check whether tests cover:
- screen-space spread
- pass readability
- continuity readability
- cross-mode consistency
If those tests are missing for the change, add them instead of relying on manual claims alone.
Closure Rule
Frontend observer-sky work is not closure-ready until:
- automated validation passes
- manual acceptance is checked against
docs/zh-TW/07-observer-sky-visual-acceptance.md - lifecycle docs are synced
- the result is not justified only by proxy metrics such as:
- sector diversity
- determinism
- retained-ID counts
Reporting
Always report:
- which frontend layers changed
- whether camera/composition or display-set policy changed
- what automated validation ran
- whether manual visual acceptance was actually checked
- what still fails if the screen is not yet acceptable