Skip to content

deps: pin stac-fastapi-api/types/extensions to 6.2.1 - #1061

Merged
tariqksoliman merged 1803 commits into
NASA-AMMOS:developmentfrom
JPL-Devin:development
Aug 25, 2026
Merged

deps: pin stac-fastapi-api/types/extensions to 6.2.1#1061
tariqksoliman merged 1803 commits into
NASA-AMMOS:developmentfrom
JPL-Devin:development

Conversation

@tariqksoliman

Copy link
Copy Markdown
Member

With Devin: JPL-Devin#125

devin-ai-integration Bot and others added 30 commits July 30, 2026 17:39
…nt type subtitle, header description, full-width search) and move Data Formats to top of Configure nav

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…y layer-type metaconfig

- LayerModal.handleClose: guard the field-repopulation pass on config.tabs so
  a missing/unresolved plugin metaconfig no longer throws and leaves the modal
  stuck open (and no longer risks wiping the layer); the modal always closes.
- pluginValidation: re-check capabilities is a valid object before reading
  defaultInteractions so a manifest with capabilities:null reports an error
  instead of throwing out of registry generation.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- Dropy global dropdown (topbar External Links links): open below the
  trigger and raise z-index above #topBar so the list is no longer pinned
  behind the topbar and invisible.
- Configure LayerModal 'Core' tab: collapse MUI's disabled scroll button
  so it no longer leaves an empty 40px gap before the first tab.
- Configure: surface a snackbar error when the layer-type registry fails
  to load, instead of a silently blank layer editor.
- GlobeRenderer._addCesiumLayer: restore the pre-migration warning for a
  layer type with no Cesium globe renderer (e.g. model).
- Shorten LayerModal handleClose comment.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- DataShaders.colorize: recompute min/max on the tile layer's 'load' event
  (all visible tiles settled), not only per-tile 'tileload'. Fixes data
  legends stuck at NaN until a pan/zoom or opening layer settings.
- Configure LayerModal: when the async layer-type registry has no metaconfig
  for a known layer type (still loading or failed), show an explicit notice
  and disable Done instead of rendering a silent, no-op blank editor.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Route the vectortile click pipeline through resolveLayerInteractions (as
the two Map_ call sites already do) so manifest capabilities.defaultInteractions
are merged with precedence type-defaults -> legacy kind -> explicit interactions.
No built-in ships defaultInteractions, so behavior is unchanged today.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
- pluginValidation: _skipValue now recognizes regex literals (via _skipRegex
  + _regexAllowedAfter) so a /re/ containing brackets/quotes no longer corrupts
  brace/string tracking and hides later operation/phase typos. Adds unit test.
- DataFormats: distinguish 'no results for search' from 'registry empty/failed'
  in both By-Format and By-Layer-Type views.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Plugin-backed globe types dispatch through the async LayerInterface.run, so
addLayer previously returned a Promise for those types but the raw handle for
gradient_polyline / not-yet-migrated fallbacks. Make addLayer async so it
resolves uniformly to the engine handle for every type, and update the
gradient_polyline handle-storing call sites to await/.then the result (errors
now surface via .catch instead of a sync throw).

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Manifests intentionally differ for name vs typeId (ThreeDTiles/3dtiles,
VectorTile/vectortile); the search now matches the visible heading name in
addition to the internal typeId.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
The accordions are uncontrolled, so defaultExpanded={Boolean(q)} was only read
on mount and already-listed rows stayed collapsed on search. Include the
search-active flag in the key so they remount (and re-read defaultExpanded)
when a search starts/stops.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
GlobeRenderer.addLayer became async, and the gradient_polyline call sites now
chain .then()/.catch(). When a mission has no globe panel the litho instance is
getMockLitho(), whose addLayer() returned undefined, so .then threw a synchronous
TypeError that .catch could not intercept — aborting toggleLayer before the 2D
layer was added. Mock addLayer now returns Promise.resolve() to honor the
contract.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…egistry-driven LayersTool colors

- plugin-cli: 'create layertype <Name>' scaffold (plugin.json + map module +
  metaconfig + colocated test), plus contract-valid E2E coverage
- tests: LayerInterface.run phase pipeline/shorthand, GlobeRenderer.addLayer
  always-async contract guard, per-type registry smoke + created-type registers
- LayersTool: resolve per-type indicator color from plugin.json manifest
  (registry) via inline --lt-color, instead of hardcoded --color-<type> CSS vars,
  so new/external layer types are colored by their own manifest

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
The registry is a generated, gitignored artifact and may not exist in a fresh
checkout/CI. Generate it via updateLayerTypes() in beforeAll (matching
updateTools.spec.js) instead of assuming the committed file is present.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Wire the remaining map lifecycle operations through the layer-type map
plugin so the 2D map honors the same contract the globe already does:

- Add LayerInterface.runMap: a synchronous variant of run() for the
  Leaflet surface (callers read state right after dispatch), running
  before -> main ?? coreDefault -> after inline.
- setOpacity/setVisibility/setStyle -> runMap in Layers_ with current
  core behavior as coreDefault.
- destroy -> MapRenderer.removeLayer (now a real dispatch) and the
  layer-delete teardown path.
- timeChange -> async run() in TimeControl (reload is async) with the
  refreshLayer reload as coreDefault.
- make is unchanged (still phase-dispatched around the make lock);
  load is folded into make on both surfaces.

Built-in types declare no map ops, so coreDefault runs unchanged.

Also fix the gradient-polyline orphan race introduced by the
always-async GlobeRenderer.addLayer: centralize add/remove in
L_.addGradientPolyline / L_.removeGradientPolyline, tracking the
in-flight build with a generation + wantsOn flag so a teardown that
races ahead of the async build discards the primitive instead of
leaving it stuck on the globe. Routes all gradient add/remove sites in
Layers_ and LayerConstructors through the helpers.

Add runMap unit tests (sync ordering, coreDefault fallback, main
override, no-module built-in path, every canonical op).

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
… runSync)

Devin Review flagged that GlobeRenderer fire-and-forgets the async
LayerInterface.run for destroy/setVisibility/setOpacity/timeChange/
setStyle and then immediately does its own core cleanup (e.g. removeLayer
deletes this._layers[name] right after dispatching destroy). This works
only because shipped modules declare no 'before' phase; the documented
contract allows 'before' on every op, and as soon as a module adds one,
run() defers main onto a microtask so it runs AFTER core cleanup -> the
Cesium primitive/imagery/data-source is never torn down (and visibility/
opacity/style changes are dropped).

Fix: dispatch these ops through the synchronous runner so main always
runs inline, before the core bookkeeping. Since this is the same
sync-ordering guarantee the 2D map needs, generalize the helper:
rename LayerInterface.runMap -> runSync (surface-neutral) and use it on
both surfaces. addLayer/make keep async run() (they return the handle,
per the earlier always-async decision).

Add a runSync test asserting main runs inline even when 'before' is
async (the exact ordering the globe relies on).

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Two Devin Review findings from the async/color work:

- Configure Layers list rows briefly rendered the neutral default color +
  generic icon until the async layerTypeConfiguration registry fetch
  resolved (and stayed that way if it failed), a regression from the old
  synchronous hardcoded switch. Add a static BUILTIN_LAYER_TYPE_VISUALS
  fallback in layerTypeVisuals.js (kept in sync with each built-in's
  plugin.json) that getLayerTypeVisual consults when the registry has no
  manifest for the type. Registry manifest still wins; external types
  still resolve from it once loaded; built-ins are correct on first paint.
  Drops the now-redundant in-registry gate in Layers.js.

- _runPendingVectorReload fire-and-forgot the now-async GlobeRenderer
  .addLayer with no .catch, so a failed queued reload surfaced as an
  unhandled rejection instead of a logged warning. Add a .catch that
  logs and leaves the previous features on screen.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Hardening for the by-layer-type search: only string metadata contributes
to the search haystack, so a manifest supplying a non-string label/
category/description can't stringify into matchable text.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…-plugins

Layer types as plugins: migrate all built-in layer types + supportedData metadata
…ender/ registry/ interface/

Pure file moves plus import-path updates. VectorLayerCore.js becomes
commons/vector.js. Layers_.js and LayerUtils.js stay at the root, Filtering/
and LayerGeologic/ are untouched.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…tions.js

Bodies moved verbatim; each takes L_ explicitly and Layers_.js keeps a thin
delegator so L_'s public surface is unchanged.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…ycle/

init/onceLoaded/loaded/fullyLoaded/clear/fina/setSite/home/global-loading move
to lifecycle/lifecycle.js and the module-scope parseConfig to lifecycle/config.js.
Method bodies that used `this` now take L_ explicitly.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…yle.js

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…display/sublayers.js

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…tures/selection.js

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…ility.js

Last section of the split. Layers_.js is now the ~360-line facade: state
fields plus delegators; imports that only the moved bodies used are dropped.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Its only importer is the VectorTile map renderer and it shares nothing with
Map_/, so the plugin owns it now.

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
tariqksoliman and others added 24 commits August 20, 2026 17:14
…mporal-fixes

Fix geodataset temporal bugs: legacy tables, start-only time filters, recreate with new time mappings
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…nd-time-histogram-fixes

Fix LithoSphere globe layer ops, vector time-filter race, and time-tile histogram
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…ening

Harden websocket, server defaults, and HTML rendering
…f use

Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…action-pins

ci: correct checkout pin comments, bump CI Node to 22, harden head_ref use
Co-Authored-By: tariq.k.soliman <tariqksoliman@gmail.com>
…api-deps

deps: pin stac-fastapi-api/types/extensions to 6.2.1
@tariqksoliman tariqksoliman self-assigned this Aug 25, 2026
@tariqksoliman tariqksoliman added the bug Something isn't working label Aug 25, 2026
@tariqksoliman
tariqksoliman merged commit a5d1800 into NASA-AMMOS:development Aug 25, 2026
4 of 5 checks passed
@github-project-automation github-project-automation Bot moved this to Done in MMGIS Aug 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant