Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
1d1ed70
feat(nebula-lab): acquire the VST Omega Centauri reference image
apresmoi Sep 19, 2026
5522930
docs(nebula-lab): evidence-ledger and Abel-inverted profile for Omega…
apresmoi Sep 19, 2026
ec85bfc
feat(nebula-lab): acquire eso0844a + DSS2 backbone, measure real regi…
apresmoi Sep 19, 2026
d0b07e1
docs(nebula-lab): keep the registration summary, not its per-pair table
apresmoi Sep 19, 2026
833b593
refactor(nebula-lab): write the King derivation in TypeScript
apresmoi Sep 19, 2026
63a2e68
feat(nebula-lab): add radial profile diagnostic to Reconstruction
apresmoi Sep 19, 2026
285cb58
Merge remote-tracking branch 'origin/main' into feat/omega-centauri
apresmoi Sep 19, 2026
8e76da3
fix(nebula-lab): stop bundled command-line guards firing in workers
apresmoi Sep 19, 2026
ce9fc4d
docs(omega-centauri): source the cluster's measured 3D shape from the…
apresmoi Sep 19, 2026
f66262a
fix(nebula-lab): give bundled modules their own import.meta.url
apresmoi Sep 19, 2026
171ad1c
Merge remote-tracking branch 'origin/main' into feat/omega-centauri
apresmoi Sep 20, 2026
289214b
Merge remote-tracking branch 'origin/main' into audit/pr390
apresmoi Sep 20, 2026
712e372
fix(nebula-lab): preserve source URLs and expose dark radial defects
apresmoi Sep 20, 2026
31e3c92
Merge commit 'a71dcbce3' into audit/pr390
apresmoi Sep 20, 2026
ef1e8b0
Merge remote-tracking branch 'origin/main' into audit/pr390
apresmoi Sep 20, 2026
862cdbe
feat(nebula-lab): reconstruct Omega Centauri and budget volume layers
apresmoi Sep 20, 2026
bb7cab3
feat(universe): deliver Omega Centauri with focused close-ups
apresmoi Sep 20, 2026
7a4f389
merge: integrate main and verify Omega focus delivery
apresmoi Sep 20, 2026
0e22ec6
fix(ci): keep telescope fixtures under test ownership
apresmoi Sep 20, 2026
3d586bd
fix(nebula): enforce a total render-element budget for Omega
apresmoi Sep 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 44 additions & 1 deletion .agents/skills/nebula-lab/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ angle — leaves on every side. Slabs pack into per-axis atlases for delivery. I
handoff explicitly: brightness and colour agreement between banks is an acceptance criterion,
not a detail.

New compiler and sampled-volume deliveries target **500 total retained scene elements**,
including stars, every optical slab copy, impostors and wrappers. Reserve their actual costs
before planning XYZ intervals; 500 slabs is not a 500-element scene. Prefer source-backed
slab emission for unresolved or dense light, and use fewer separate catalogue stars where
the evidence supports that representation. Never count the same light in both, invent stellar
depths, or silently discard retained stars to fit the quota. Preserve the saved plan and
cost receipt for replay and all component mixtures. A planning estimate is not visual
acceptance; keep the actual brightness/detail/handoff gates. Historical pinned deliveries
remain unchanged and report when over budget. See
`labs/nebula/docs/emission-compiler.md#automatic-layer-budget` before changing this step.

## Packages and boundaries

`labs/nebula/packages/{lab,volume-core,volume-bake,reconstruction,volume-viewer}`.
Expand Down Expand Up @@ -71,7 +82,28 @@ Pick by what the evidence supports, not by habit.

Two-scale in one line: broad light is `gain(x,y) × prior(x,y,z)` with `gain = fraction × blur(image) / blur(column)`; finite components fit the residual at prior-supported depths, so image brightness scales the envelope and never moves it in depth. Example recipe: `labs/nebula/models/smc/constrained/emission-envelope-ellipsoid.json`, with its method note beside it.

**Lenses:** every image recolours one shared geometry, so switching lens changes colour, never shape. **The prior is a hypothesis, never a measurement** — prefer one that scores better against observations; for the SMC a VMC-constrained ellipsoid beat the tidal simulation (withheld deviance 0.457 vs 0.601).
**RGB-only lenses:** every image recolours one shared geometry, so switching lens changes colour, never shape. **The prior is a hypothesis, never a measurement** — prefer one that scores better against observations; for the SMC a VMC-constrained ellipsoid beat the tidal simulation (withheld deviance 0.457 vs 0.601).

## Numerical alignment before image inspection

Diagnose alignment numerically before judging screenshots or rebaking. Use the configured
lenses as independent checks of the shared coordinate transport; different spectral structures
and brightness are expected, so do not force their pixels to match.

- Check registered landmarks or matched stars in the common sky frame: translation, scale,
rotation, handedness, footprints and held-out residuals in pixels/arcseconds. Verify the same
points through source, prepared geometry and camera projection.
- Compare shared geometry/alpha across RGB-only lenses. For declared component mixtures,
compare the shared frame, slab intervals and layout while preserving legitimate support
differences. Use spatial residuals, not histogram agreement, to establish alignment.
- Separate registration error from material, sampling and browser compositing error. Compare
analytic projections, decoded baked values and rendered pixel measurements at the same
camera. Fix the owner identified by those measurements; do not compensate with a display
offset or assume that every failed image metric proves misregistration.
- Run capture analysis locally and return compact numerical reports. Keep captures on disk;
do not routinely load them into model context. Inspect an image only for a named question
that the numbers cannot settle, a required final visual check, or an explicit user request;
use the smallest useful crop and fewest images.

## Matching a lens to its image

Expand Down Expand Up @@ -143,6 +175,17 @@ server route you can call directly, so an agent sees exactly what a person sees.
| --- | --- | --- |
| Levels | `GET /__nebula/reconstruction-levels?resultId=<lens>` | per-channel histograms, signed delta, transfer curve, percentile ratios |
| Difference map | `GET /__nebula/reconstruction-difference?resultId=<lens>` (`&format=png` for the image) | render − image on luminance, over the Earth view: blue too dark, red too bright, clear within tolerance |
| Radial profile | `GET /__nebula/reconstruction-radial?resultId=<lens>` | azimuthally averaged source/render brightness in radial bins from the footprint centroid, per-bin ratio and delta, half-light radius ratio |

**Radial profile answers what the other two cannot: does brightness fall off with radius like the source?**
Levels is a histogram and spatially blind — it can match p50/p90/p99 exactly while the structure sits in the
wrong place (a brightness swap between the centre and an annulus conserves the histogram outright). The
difference map shows *where* the error is but not its radial shape. The radial profile's own control is that
swap: a permutation of the same pixel values that moves brightness from the core to the rim reads as p50/p90
ratio 1.00 in Levels while the radial profile's per-bin ratio runs from ~0 at the centre to tens at the rim
and its half-light radius is pushed outward. A pure scale error (render radially compressed or expanded) is
caught by the half-light radius ratio instead. Highest value for a centrally concentrated, near-spherical
subject.

**Read the difference map for *where*, the levels for *how much*.** On the LMC it showed the bar
blue (core too dark, the opacity shoulder) and the body a red ring (mid-tones too bright), which
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/universe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,7 @@ jobs:
run: >-
node --test tools/prepare-context-availability.test.mts
site/test/prepared-context-navigation.test.mts
site/test/galactic-focus.test.mts
site/test/prepared-focus-card.test.mts site/test/volume-presentation.test.mts
- name: Restore environment images and prepare minimap
run: |
Expand Down Expand Up @@ -591,7 +592,8 @@ jobs:
node labs/nebula/run.mts test
overlay-placement overlay-registration overlay-alignment
field-tilt emission-window component-material material
point-projection cloud-inspection compact
point-projection cloud-inspection compact shape-cloud-camera
nebula-frame bake compiler-sampling render-element-budget retained-material-bank optical-composite-preparation
detect-shapes structure-wavelets structure-map ridge-graph
material-solver shape-prior solver
acquisition footprint image-links image-ranking
Expand All @@ -601,6 +603,8 @@ jobs:
workspace-sections workspace-portals workspace-objects camera-model-panel image-appearance-panel
catalogue object-browser papers survey-images
geometry-model observation-alignment structures-model
build lens-levels lens-difference lens-radial lens-radial-panel
registration photometric-mge photometric-prior compiler-defaults simulation-guided compiler-published

ci-guard:
name: Report the first CI failure
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,9 @@ src/objects/*/source/**/*.bpc
# the accepted bytes instead of replaying them (`--verify-replay` still can).
/labs/nebula/models/*/candidates/prepared/*.webp
/labs/nebula/models/*/clouds-observation/source/target.png
# Reference derivatives rebuilt by `acquire-images` from the hash-pinned publisher TIFF in the ignored cache.
# Their `.webp.json` sidecars stay tracked: the pins and the interpretation are the record, the pixels are not.
/labs/nebula/sources/*.webp
# Reacquirable distant-world paper originals; acquisition recipes pin exact bytes.
/src/objects/oumuamua/source/reference/*.html
/src/objects/sedna/source/reference/*.html
Expand Down Expand Up @@ -293,6 +296,7 @@ src/objects/*/source/**/*.bpc
/src/objects/m8/prepared/
/src/objects/smc/prepared/
/src/objects/lmc/prepared/
/src/objects/omega-centauri/prepared/
/src/objects/betelgeuse-shell/.prepared-*/
/src/objects/hd-181327-disc/.prepared-*/
/src/objects/m42/.prepared-*/
Expand All @@ -303,6 +307,7 @@ src/objects/*/source/**/*.bpc
/src/objects/lmc/.prepared-*/
/src/objects/m45/.prepared-*/
/src/objects/m8/.prepared-*/
/src/objects/omega-centauri/.prepared-*/
# Binary kernels in shared SPICE kernel banks are restored by tools/spice/kernel-bank.mts; text kernels are committed.
src/spice/**/*.bsp
src/spice/**/*.bc
Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ For a body's sources, processing, evidence and known problems, read its
| Querying VO archives, selecting bounded science products and retaining acquisition evidence | [VO observation access](vo-observation-access.md) |
| Which upstream packages own a mechanical boundary here, and which contracts stay ours | [Astronomy package ownership](astronomy-package-ownership.md) |
| One example picture per telescope, each made from a product that telescope's toolkit produced here | [Telescope examples](telescope-examples.md) |
| Pinned sources, public commands and retained outputs for the 18 telescope data families | [Telescope family examples](telescope-family-examples/README.md) |
| Exoplanet light curves to maps: eigencurve fitting and its checks | [Eclipse mapping](eclipse-mapping.md) |
| JWST images to sky band composites: MAST programs, the re-run level-3 stage, its oracle and depth from a model | [JWST imaging](jwst-imaging.md) |
| What JWST's public archive holds by observing mode, what this project can already reduce, and which shipped objects JWST has observed | [JWST ledger](jwst-ledger.md) |
Expand Down
19 changes: 12 additions & 7 deletions docs/provenance/investigation-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Generated by `pnpm investigations:index`. Every unresolved or deferred decision
decisions, not scientific readiness.

**Ledgers:** 496 of 496 catalogued objects.
**Open decisions:** 1023 (900 unresolved, 123 deferred).
**Open decisions:** 1027 (901 unresolved, 126 deferred).

## Where the reopening evidence would appear

Expand All @@ -13,7 +13,7 @@ The source each decision examined. Watching these is how a decision reopens.
| Source | Open | Bodies |
| --- | ---: | --- |
| damit.cuni.cz | 257 | abundantia, adelheid, aegina, aethra, aglaja, alexandra, +168 more |
| arxiv.org | 72 | adelheid, aegina, aemilia, agenor, aglaja, alkmene, +55 more |
| arxiv.org | 73 | adelheid, aegina, aemilia, agenor, aglaja, alkmene, +56 more |
| doi.org | 42 | bienor, braille, ce-tauri, chariklo, comet-1p, comet-209p, +28 more |
| sbnarchive.psi.edu | 29 | atlas, comet-109p, comet-153p, comet-167p, comet-17p, comet-21p, +23 more |
| tilmanndenk.de | 23 | albiorix, bebhionn, bergelmir, bestla, erriapus, fornjot, +16 more |
Expand All @@ -26,11 +26,12 @@ The source each decision examined. Watching these is how a decision reopens.
| www.hou.usra.edu | 5 | ariel, hydra, nix, varuna, annefrank |
| astro.troja.mff.cuni.cz | 4 | eurybates, orus, patroclus, polymele |
| echo.jpl.nasa.gov | 4 | comet-209p, comet-2p, comet-8p, nereus |
| zenodo.org | 4 | hd-189733b, wasp-43b, ganymede, omega-centauri |
| space.jpl.nasa.gov | 3 | juliet, nereid, ophelia |
| www.lpi.usra.edu | 3 | asteroid-1998-ml14, comet-1p, methone |
| zenodo.org | 3 | hd-189733b, wasp-43b, ganymede |
| almascience.eso.org | 2 | r-doradus, haumea |
| archive.eso.org | 2 | betelgeuse, r-doradus |
| cdsarc.cds.unistra.fr | 2 | smc, omega-centauri |
| github.com | 2 | dinkinesh, wasp-43b |
| naif.jpl.nasa.gov | 2 | annefrank, dinkinesh |
| opus.pds-rings.seti.org | 2 | phoebe, metis |
Expand All @@ -43,7 +44,6 @@ The source each decision examined. Watching these is how a decision reopens.
| archives.esac.esa.int | 1 | comet-67p |
| asc-planetarynames-data.s3.us-west-2.amazonaws.com | 1 | dactyl |
| astrogeology.usgs.gov | 1 | ida |
| cdsarc.cds.unistra.fr | 1 | smc |
| comet-toolbox.com | 1 | lutetia |
| data.caltech.edu | 1 | titan |
| data.darts.isas.jaxa.jp | 1 | itokawa |
Expand Down Expand Up @@ -166,6 +166,7 @@ The source each decision examined. Watching these is how a decision reopens.
| `dark-red-spot-colour-variation` | 1 | haumea | A published surface map or rotationally resolved colour model fixes the region's extent and contrast in a body-fixed frame. |
| `dated-report` | 1 | pluto | A dated run for this Pluto version is recorded in the package. |
| `deep-impact-li-2013-photometric-normalization` | 1 | comet-9p | A verified formulation and matching filter calibration improve both retained terrain coverage and independent overlaps. |
| `delivery-blocker` | 1 | omega-centauri | The unchanged actual-renderer handoff gate and main-app visual acceptance pass, including acceptable close-zoom presentation. Navigation, context visibility, cold replay and R2 restoration do not waive these requirements. |
| `deposit-temperature-conversion` | 1 | wasp-43b | The conversion code or stellar spectrum behind the deposited maps is published. |
| `detailed-shape-dem-and-geology` | 1 | belinda | A Belinda source release provides the missing downloadable mapped data, projection, measured quantity and coverage for direct comparison with the selected inputs. |
| `diffuse-material` | 1 | helix | Audit source separation and finite emission with positive source evidence, retaining real knots and verified compact anchors, then inspect the same spectral front/side views. |
Expand Down Expand Up @@ -206,6 +207,7 @@ The source each decision examined. Watching these is how a decision reopens.
| `hst-photometry-and-keck-near-infrared-photometry` | 1 | juliet | A spatially resolved Juliet measurement supplies original spectral or image samples with body-fixed coordinates and enough coverage to qualify a mapped lens. |
| `hst-photometry-ground-based-near-infrared-studies-an` | 1 | cordelia | A spatially resolved Cordelia measurement supplies original spectral or image samples with body-fixed coordinates and enough coverage to qualify a mapped lens. |
| `hst-photometry-recovery-and-observer-account` | 1 | ophelia | A spatially resolved Ophelia measurement supplies original spectral or image samples with body-fixed coordinates and enough coverage to qualify a mapped lens. |
| `hst-registration-companion` | 1 | omega-centauri | Independent absolute astrometry is required beyond the existing relative native-image registration. |
| `hubble-companion-follow-up` | 1 | deedee | A published companion detection or resolved shape product changes the system interpretation. |
| `image-to-shape-feature-registration` | 1 | comet-1p | Independent surface features with a verified model frame validate the photographic placement within stated source uncertainty. |
| `interacting-orbit-2024` | 1 | hiiaka | The interacting solution is acquired with its frame, epoch and uncertainty and independently checked for the application epoch. |
Expand Down Expand Up @@ -259,6 +261,7 @@ The source each decision examined. Watching these is how a decision reopens.
| `middle-axis-uncertainty-discrepancy` | 1 | haumea | An erratum or a later publication settles the middle-axis uncertainty. |
| `missing-sample-continuation` | 1 | sun | A synoptic release supplies observed polar coverage for these instruments. |
| `mission-shape-publications` | 1 | dinkinesh | A released numeric shape, backplane, control-point or camera bundle associated with one of these papers. |
| `modern-inclination` | 1 | omega-centauri | A coherent photometric/kinematic refit supports combining the newer inclination with a compatible projected profile. |
| `mosaic-coverage-mask` | 1 | steins | A source validity mask or independent per-pixel coverage/registration reference can replace or qualify the documented heuristic. |
| `mp3c-thermal-size-comparison` | 1 | abundantia | The individual source methods and observation geometry can be compared against model 4625, or an occultation, resolved outline or shape-aware thermophysical fit supplies a volume calibration. |
| `mps-other-presentations` | 1 | comet-1p | A distinct photographed region and independent registration demonstrate useful new coverage. |
Expand Down Expand Up @@ -339,7 +342,7 @@ The source each decision examined. Watching these is how a decision reopens.
| `shape-pole-rotation` | 1 | comet-3i | A lightcurve inversion, pole solution or rotation period is published. |
| `shape-uniqueness` | 1 | asteroid-2002-tx300 | A multi-chord occultation or resolved imaging determines the third axis. |
| `shell-depth-approximation` | 1 | milky-way | A source supplies measured cloud depths that can replace the authored shell. |
| `shell-focus-link` | 1 | smc | The initial-focus payload resolves its host chain, or host validation moves off the single-object fragment. |
| `shell-focus-link` | 1 | smc | The direct SMC browser inspection runs against a complete installed runtime closure. |
| `side-view-limit` | 1 | m2-9 | Improve the owning symmetry/material assumptions against fixed views without masking the defect through exposure or a fabricated depth field. |
| `sio-band` | 1 | betelgeuse | A reduction that keeps the SiO channels unflagged, or a stated closure-phase error model, fits them at reduced chi-squared near 1. |
| `sio-far-emission` | 1 | betelgeuse-shell | A self-calibrated SiO cube of this member, or another epoch of the line, which would show whether the northern emission and its continuum peak persist. |
Expand Down Expand Up @@ -396,13 +399,14 @@ The source each decision examined. Watching these is how a decision reopens.
| `vmc-intake` | 1 | smc | The VMC intake is re-acquired with the wrap-corrected match set and the shape fit is re-run against it. |
| `voyager-clear-candidates` | 1 | nereid | A controlled reconstruction demonstrates independent body-fixed registration and useful surface information at the native sampling, or a finer observation becomes available. |
| `voyager-pds-iss` | 1 | belinda | A Belinda observation or controlled reconstruction demonstrates useful native surface detail, body-fixed geometry and independent registration beyond the cited sampling or coverage limits. |
| `wilson-fit` | 1 | omega-centauri | A specified model comparison justifies implementing the correct Wilson distribution-function solution. |
| `wisp-and-physical-arrays` | 1 | m45 | Acquire the original numerical observations with masks, uncertainty and usable rights before implementing a physical scattering or layered-depth operator. |
| `zubarev-2025-mosaic` | 1 | hyperion | Its pixel or model release becomes publicly downloadable. |

## Backlog: no external source recorded

478 of these open decisions name no source outside this repository, so nothing says where to look
(641 with the excluded decisions, which the ledger test tracks). Give each one the archive,
479 of these open decisions name no source outside this repository, so nothing says where to look
(642 with the excluded decisions, which the ledger test tracks). Give each one the archive,
deposit or paper it was checked against, or record that its next move is work here.

| Waiting on | Open | Bodies |
Expand Down Expand Up @@ -457,6 +461,7 @@ deposit or paper it was checked against, or record that its next move is work he
| `d-g-e-ring-profiles` | 1 | saturn |
| `daily-viirs-imagery` | 1 | earth |
| `dated-report` | 1 | pluto |
| `delivery-blocker` | 1 | omega-centauri |
| `detailed-shape-dem-and-geology` | 1 | belinda |
| `diffuse-material` | 1 | helix |
| `disconnected-color-encounters` | 1 | prometheus |
Expand Down
Loading
Loading