Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
466 commits
Select commit Hold shift + click to select a range
9abacef
Regenerate DEM tiles with legacy gdal2customtiles (zoom 10-15)
devin-ai-integration[bot] Apr 22, 2026
f916658
Add typeof guard for populateCogScale call in DataShaders
devin-ai-integration[bot] Apr 22, 2026
4bf2c9c
Cleanup: remove zoom-15 tiles, add 0 to noDataValues, precise BBOX, e…
devin-ai-integration[bot] Apr 22, 2026
66a395d
Fix: pass bounds to outer GL layer so data layer bounding box is obeyed
devin-ai-integration[bot] Apr 22, 2026
a3fef57
Merge pull request #38 from JPL-Devin/devin/1776892918-data-layer-rgb…
tariqksoliman Apr 22, 2026
ccd5419
Merge branch 'NASA-AMMOS:development' into development
tariqksoliman Apr 22, 2026
2bf56dd
Fix DEM tile corruption by using nearest-neighbor resampling for RGBA…
devin-ai-integration[bot] Apr 22, 2026
9576c6b
chore: bump version to 4.3.19-20260422 [version bump]
github-actions[bot] Apr 22, 2026
ba19a59
Regenerate Reference-Mission RGBA DEM tiles with fixed gdal2customtil…
devin-ai-integration[bot] Apr 22, 2026
18cbd5d
Merge pull request #39 from JPL-Devin/devin/1776899162-fix-dem-tile-r…
tariqksoliman Apr 22, 2026
dc188bb
Merge branch 'NASA-AMMOS:development' into development
tariqksoliman Apr 22, 2026
16b3cd9
feat: add production fail-safe checks, test DB credential separation,…
devin-ai-integration[bot] Apr 27, 2026
a1dc55d
chore: bump version to 4.3.26-20260427 [version bump]
github-actions[bot] Apr 27, 2026
d6fdd07
remove .cursorrules — not used
devin-ai-integration[bot] Apr 27, 2026
fe9c464
fix: handle promise rejection from clean() safety checks
devin-ai-integration[bot] Apr 27, 2026
b9d9a3a
fix: remove DATABASE_URL check, update error wording, require explici…
devin-ai-integration[bot] Apr 27, 2026
7fb6b5e
feat: add mmgis-stac-test DB isolation and STAC_DB_NAME env var
devin-ai-integration[bot] Apr 27, 2026
dfde5f6
fix: comment out empty env vars in sample.env, fix STAC cleanup indep…
devin-ai-integration[bot] Apr 27, 2026
c95033f
fix: move test env vars to Optional Variables section in ENVs.md
devin-ai-integration[bot] Apr 27, 2026
0c5eafe
fix: require DB_USER_TEST/DB_PASS_TEST in global-setup.js (no fallback)
devin-ai-integration[bot] Apr 27, 2026
c9ad74e
fix: remove STAC_DB_NAME env var, hardcode mmgis-stac and mmgis-stac-…
devin-ai-integration[bot] Apr 27, 2026
f4d5b17
fix: update sample.env comment — test creds required in both files, n…
devin-ai-integration[bot] Apr 27, 2026
7d63190
fix: add windowsHide to suppress console windows on Windows
devin-ai-integration[bot] Apr 27, 2026
83cd475
Merge pull request #46 from JPL-Devin/devin/1777318895-test-safety-im…
tariqksoliman Apr 27, 2026
a3f827d
Merge branch 'NASA-AMMOS:development' into development
tariqksoliman Apr 27, 2026
9b813e8
Re-apply 36 UI improvements on development's React architecture
devin-ai-integration[bot] Apr 28, 2026
ef49e62
Add theming system (6 presets), floating tool panel, CSS variable sup…
devin-ai-integration[bot] Apr 28, 2026
35407a7
Fix useTheme.js for React 16 compatibility (useState/useEffect instea…
devin-ai-integration[bot] Apr 28, 2026
54244b7
Fix layout to match PR #47: floating tool panel, bottom bar, toolbar,…
devin-ai-integration[bot] Apr 28, 2026
a214766
Fix TopBar: stays full-width when tool panel opens (matches PR #47)
devin-ai-integration[bot] Apr 28, 2026
6160530
Fix ToolPanel drag handle offset: use panelLeftOffset instead of hard…
devin-ai-integration[bot] Apr 28, 2026
081a910
Fix TopBar solid background and splitscreens positioning below TopBar
devin-ai-integration[bot] Apr 28, 2026
321c770
Port separated tools and Legend changes from PR #47
devin-ai-integration[bot] Apr 28, 2026
72120de
Show MMGIS logo by default (was hidden behind minimalist() call)
devin-ai-integration[bot] Apr 28, 2026
4fa6dfd
Add tool panel close button, separated tool improvements
devin-ai-integration[bot] Apr 28, 2026
d1c9561
Fix bottom bar layout for all 4 tool/TimeUI combinations
devin-ai-integration[bot] Apr 29, 2026
3ea7753
Fix 13 UI/layout issues in PR #48
devin-ai-integration[bot] Apr 29, 2026
47b816c
Fix 16 UI issues (#14-29)
devin-ai-integration[bot] Apr 29, 2026
3ee73b3
Fix computeToolsSplitMoveResult min clamp to preserve splitterSize/4 …
devin-ai-integration[bot] Apr 29, 2026
f248bec
Fix 8 UI issues (#30-37)
devin-ai-integration[bot] Apr 29, 2026
2ae6a83
React 18 upgrade + Base UI adoption + CSS Modules migration
devin-ai-integration[bot] Apr 29, 2026
5334162
Upgrade react-chartjs-2 to ^4.3.1 for React 18 peer dep compatibility
devin-ai-integration[bot] Apr 29, 2026
631f1a7
Fix #topBarInfo ID conflict: rename About button to #bottomBarAbout
devin-ai-integration[bot] Apr 29, 2026
5ce338c
Address Devin Review findings: infourl, theme override, dead code
devin-ai-integration[bot] Apr 29, 2026
aeeab98
Fix config visibility toggles for kebab menu items + clean up dead ha…
devin-ai-integration[bot] Apr 29, 2026
6ada6ac
Fix toggleTimeUI() reading state from removed #toggleTimeUI element
devin-ai-integration[bot] Apr 29, 2026
f131c80
Improve Base UI adoption and reduce :global() overuse
devin-ai-integration[bot] Apr 29, 2026
291da96
Fix: remove stale setShowUserCard call in handleLogout
devin-ai-integration[bot] Apr 29, 2026
c093882
Migrate Ancillary UI components from jQuery to React/native DOM
devin-ai-integration[bot] Apr 29, 2026
8cad3c8
Migrate Ancillary components to true React + Base UI
devin-ai-integration[bot] Apr 29, 2026
28d2799
Fix modal, tooltip, measure, and context menu bugs
devin-ai-integration[bot] Apr 29, 2026
00aa989
Fix Modal: remove close button, fix blur persistence, add fade animation
devin-ai-integration[bot] Apr 29, 2026
851cf2b
Rename Ancillary React components to .jsx, fix modal blur via Zustand…
devin-ai-integration[bot] Apr 29, 2026
17eec24
Revert aboutModalContent type back to 'markdown' — Maker.js already h…
devin-ai-integration[bot] Apr 29, 2026
e01cd85
Fix Help.jsx: check res.ok on fetch, sanitize HTML with DOMPurify
devin-ai-integration[bot] Apr 29, 2026
af2cbe8
Fix ContextMenu WKT null guard, fix Modal blur timing during fade-out
devin-ai-integration[bot] Apr 29, 2026
fc50ad4
Reorganize folder structure: dissolve Ancillary, nest components
devin-ai-integration[bot] Apr 29, 2026
dee2d40
Fix Modal.set() race condition and themeApplier CSS variable override…
devin-ai-integration[bot] Apr 29, 2026
5b60f15
Sync toggleTimeUI DOM state to Zustand store
devin-ai-integration[bot] Apr 29, 2026
5a8fd65
Restore #toggleTimeUI element in Coordinates markup
devin-ai-integration[bot] Apr 29, 2026
3df4400
Fix #toggleTimeUI: restore click handler, tippy, active class; remove…
devin-ai-integration[bot] Apr 29, 2026
cfc38a0
Fix CurtainTool.destroy() using undefined ReactDOM.unmountComponentAt…
devin-ai-integration[bot] Apr 29, 2026
58fc8af
Fix tooltips, scale indicator position, modal blur, help close button
devin-ai-integration[bot] Apr 29, 2026
ac065ca
Remove dead CSS: delete tools.css, clean ~600 lines from mmgisUI.css …
devin-ai-integration[bot] Apr 29, 2026
2a33320
UI fixes: tooltips, splitter hover, mobile toolbar, color schemes
devin-ai-integration[bot] Apr 30, 2026
e7c068d
Fix assignment operator used instead of comparison in TimeControl.fina()
devin-ai-integration[bot] Apr 30, 2026
d7f96c5
Restructure Configure page UI tab: add all themes, Custom mode, enabl…
devin-ai-integration[bot] Apr 30, 2026
c0aed05
Revert tooltips to tippy.js, fix dropdown menus, redesign About modal
devin-ai-integration[bot] Apr 30, 2026
2e5998c
Restore .mmgisHelpButton base styles lost during Help.css module migr…
devin-ai-integration[bot] Apr 30, 2026
192a7f4
Fix session logout regression, About modal refinements, High Contrast…
devin-ai-integration[bot] Apr 30, 2026
fd24511
Restore defaulttooldropdown case handler in Maker.js
devin-ai-integration[bot] Apr 30, 2026
ca7493f
High Contrast tooltip text, panel toggle styling, scale position swap
devin-ai-integration[bot] Apr 30, 2026
2b9554e
Reposition Viewer and Globe panel buttons to top-right
devin-ai-integration[bot] Apr 30, 2026
08510e3
Consistent modal theming + session security fix
devin-ai-integration[bot] Apr 30, 2026
9fc9606
UI fixes: viewer settings, button sizing, menu contrast, coords, logi…
devin-ai-integration[bot] Apr 30, 2026
1d78f56
UI polish: nav popover, sep tools, compass, zoom controls, status ind…
devin-ai-integration[bot] Apr 30, 2026
72ec742
Fix 14 tool UI issues: headers, backgrounds, layout, functional bugs
devin-ai-integration[bot] Apr 30, 2026
7ddde48
Fix mapToolBar pointer events, login padding, default tool, About mod…
devin-ai-integration[bot] Apr 30, 2026
d503609
Fix tool headers to 40px, ViewshedTool subheader, AnimationTool heade…
devin-ai-integration[bot] Apr 30, 2026
02be0d4
Remove title attr from StatusIndicator (conflicts with tippy tooltip)
devin-ai-integration[bot] Apr 30, 2026
9b13c94
Fix TimeUI dropdown z-index above tool panel, reposition toasts to to…
devin-ai-integration[bot] Apr 30, 2026
950980e
Fix StatusIndicator spacing, CurtainTool close btn, header title font…
devin-ai-integration[bot] Apr 30, 2026
0ac0b80
Legend empty state, scalefactor position, sep-tool-header unbold
devin-ai-integration[bot] Apr 30, 2026
12be38a
Guard Legend empty state message to only show when panel is active
devin-ai-integration[bot] Apr 30, 2026
3e340c2
Fix TimeUI dropdown covered by toolPanel: remove splitscreens stackin…
devin-ai-integration[bot] Apr 30, 2026
0d7e66c
Migrate ~69 CursorInfo toast-like calls to proper Toast component
devin-ai-integration[bot] Apr 30, 2026
51a2a28
Fix Toast.js missing from git, CoordinatesDiv z-index, Legend duplica…
devin-ai-integration[bot] Apr 30, 2026
ace2fa9
Fix Legend empty message: scope selector to content container via tar…
devin-ai-integration[bot] Apr 30, 2026
aef855c
Move Toast.js to design-system, fix --color-a3 text contrast, update …
devin-ai-integration[bot] Apr 30, 2026
279b807
Fix topBarTitleName padding override: increase specificity and add !i…
devin-ai-integration[bot] Apr 30, 2026
38a485c
Fix IdentifierTool deactivation: update icon ID reference in separate…
devin-ai-integration[bot] Apr 30, 2026
331d432
Hide toolPanelDrag when no tool is open
devin-ai-integration[bot] Apr 30, 2026
63daf00
Add hover effect to MMGIS logo (opacity + brightness transition)
devin-ai-integration[bot] Apr 30, 2026
80a4587
Fix MMGIS logo hover: keep full opacity, use subtle background highli…
devin-ai-integration[bot] Apr 30, 2026
9e9819e
Merge branch 'NASA-AMMOS:development' into development
tariqksoliman Apr 30, 2026
7bd4b40
Merge origin/development: resolve Map_.js conflict (incorporate Simpl…
devin-ai-integration[bot] Apr 30, 2026
ef325e4
Selective tile fade: fade on pan/zoom, instant on refresh/reload
devin-ai-integration[bot] Apr 30, 2026
b4a793b
Per-layer fade control: time-enabled + shade/viewshed layers never fade
devin-ai-integration[bot] Apr 30, 2026
921c2cc
Merge pull request #49 from JPL-Devin/devin/1777480145-react18-baseui…
tariqksoliman Apr 30, 2026
a03aa50
fix: mobile UI improvements — move hamburger to right menu, show pane…
devin-ai-integration[bot] Apr 30, 2026
96a2c7d
chore: bump version to 4.3.28-20260430 [version bump]
github-actions[bot] Apr 30, 2026
860f92a
fix: mobile toolbar 40px height, bottomFloatingBar flush, timeUI togg…
devin-ai-integration[bot] Apr 30, 2026
b973ebc
fix: mobile topBar padding-left 34px
devin-ai-integration[bot] Apr 30, 2026
460f94e
fix: update MobileCoordButton topBar paddingLeft from 80px to 34px
devin-ai-integration[bot] Apr 30, 2026
eef3a1a
fix: MobileTimeUIToggle — inline toggle logic, float right, hide from…
devin-ai-integration[bot] Apr 30, 2026
d6c7f3f
fix: push scalebar/compass/scale up 40px on mobile, keep #timeUI in DOM
devin-ai-integration[bot] Apr 30, 2026
2e2c023
fix: mobile TimeUI — only show endtime, always expanded
devin-ai-integration[bot] Apr 30, 2026
2a28be5
fix: mobile TimeUI opens in tool panel with header, end time, expande…
devin-ai-integration[bot] Apr 30, 2026
0e909c0
feat: rewrite separated tools system from jQuery to React components
devin-ai-integration[bot] May 1, 2026
e2d1102
chore: bump version to 4.3.28-20260501 [version bump]
github-actions[bot] May 1, 2026
465fa18
fix: TimeUI mobile checks — use Zustand store instead of L_.UserInter…
devin-ai-integration[bot] May 1, 2026
59d68c3
chore: bump version to 4.3.29-20260501 [version bump]
github-actions[bot] May 1, 2026
3974201
fix: move displayOnStart logic from Map_.js to ToolController_.finali…
devin-ai-integration[bot] May 1, 2026
562681e
revert: remove all TimeUI-related mobile changes
devin-ai-integration[bot] May 1, 2026
06230b7
simplify: remove DOM polling, use simple setTimeout(0) for auto-open
devin-ai-integration[bot] May 1, 2026
c43c61f
feat: mobile TimeUI — fix isMobile detection, staging container, tool…
devin-ai-integration[bot] May 1, 2026
13f48c9
fix: rescue #timeUI back to staging when another tool opens
devin-ai-integration[bot] May 1, 2026
b80e090
chore: remove separatedTool/justification config toggles, fix review …
devin-ai-integration[bot] May 1, 2026
a29191c
fix: circular import in TimeUI.js, toolbar/bottomFloatingBar position…
devin-ai-integration[bot] May 1, 2026
293e9b6
LegendTool fix empty message
tariqksoliman May 1, 2026
9145ec4
chore: remove separated tools offset logic from Globe_.js
devin-ai-integration[bot] May 1, 2026
44dd110
Merge pull request #51 from JPL-Devin/devin/1777593443-react-separate…
tariqksoliman May 1, 2026
fb5cd9a
merge: resolve version bump conflicts with development
devin-ai-integration[bot] May 1, 2026
acf4844
fix: skip _makeHistogram on mobile (no timeline slider, timestamps un…
devin-ai-integration[bot] May 1, 2026
38a33a6
fix: mobile TimeUI — populate expanded rows, fix Invalid date, fix pa…
devin-ai-integration[bot] May 1, 2026
a797683
fix: mobile TimeUI justify-content center, restore toolbar border-bottom
devin-ai-integration[bot] May 1, 2026
7f15338
fix: mobile TimeUI overflow hidden, scalebar/compass fixed at 40px of…
devin-ai-integration[bot] May 1, 2026
3c83375
Implement multi-tier knowledge architecture
devin-ai-integration[bot] May 1, 2026
87a7aec
chore: bump version to 4.3.29-20260501 [version bump]
github-actions[bot] May 1, 2026
496a080
fix: mobile toolbar active button style matches desktop, fix icon ali…
devin-ai-integration[bot] May 1, 2026
8fd634a
Add Devin knowledge notes from past MMGIS sessions
devin-ai-integration[bot] May 1, 2026
2d85aee
fix: mobile toolbar active button style, icon alignment, tool deactiv…
devin-ai-integration[bot] May 1, 2026
7037f8c
Fix cross-references: convert backtick refs to markdown links, add De…
devin-ai-integration[bot] May 1, 2026
9834d3d
fix: mobile toolbar icon height 40px, button margins for active padding
devin-ai-integration[bot] May 1, 2026
6d9fd1e
Rename knowledge/ to .knowledge/ for consistency with .specify/ conve…
devin-ai-integration[bot] May 1, 2026
4ceedc5
fix: mobile toolbar icon line-height 40px, active button padding via …
devin-ai-integration[bot] May 1, 2026
6fe729f
Fix broken cross-reference: 06.2 -> 06.1-configure-rest-api.md
devin-ai-integration[bot] May 1, 2026
59db76d
fix: close active tool + cancel deferred cleanup in MobileCoordButton…
devin-ai-integration[bot] May 1, 2026
9bcd546
fix: active mobile toolbar buttons 34x34px (square)
devin-ai-integration[bot] May 1, 2026
c36d4aa
Drastically compress .knowledge/ — keep only unique agent content
devin-ai-integration[bot] May 1, 2026
2fba855
Rename to knowledge-notes.md, remove Devin branding and fork-specific…
devin-ai-integration[bot] May 1, 2026
b1dbde7
fix: hide mmgis-map-logo on mobile
devin-ai-integration[bot] May 1, 2026
e1b7ff2
Restore Database Safety Rules for AI Agents section in AGENTS.md
devin-ai-integration[bot] May 1, 2026
a8974a4
fix: shift compass and map scale 6px to the right (both mobile and de…
devin-ai-integration[bot] May 1, 2026
0ffb0bf
Add back Important Instructions, code pattern templates, and detailed…
devin-ai-integration[bot] May 1, 2026
276a848
Merge pull request #50 from JPL-Devin/devin/1777590638-mobile-ui-fixes
tariqksoliman May 1, 2026
0f5ad2d
Update project structure trees to reflect current filesystem
devin-ai-integration[bot] May 1, 2026
5f5f116
chore: bump version to 4.3.30-20260501 [version bump]
github-actions[bot] May 1, 2026
4f03727
Add Layers_.js to project structure (key singleton L_)
devin-ai-integration[bot] May 1, 2026
ca46225
Fix project structure: correct API layout, frontend modules, code tem…
devin-ai-integration[bot] May 1, 2026
99a5caf
Merge origin/development: resolve version bump conflicts (keep 4.3.30)
devin-ai-integration[bot] May 1, 2026
9855424
Merge pull request #52 from JPL-Devin/devin/1777596996-knowledge-arch…
tariqksoliman May 1, 2026
e33bda3
refactor: remove test infrastructure (Test_ module, testModules, Draw…
devin-ai-integration[bot] May 1, 2026
d2256e6
chore: bump version to 4.3.31-20260501 [version bump]
github-actions[bot] May 1, 2026
6e6abbb
Merge pull request #53 from JPL-Devin/devin/1777607123-remove-test-in…
tariqksoliman May 1, 2026
66ee07a
style: move Cesium link button to top-right and match Leaflet zoom bu…
devin-ai-integration[bot] May 1, 2026
48e7d4d
fix: anchor map logo to viewport instead of Leaflet map panel
devin-ai-integration[bot] May 1, 2026
4c10f33
docs: remove references to deleted test infrastructure (Test_, DrawTo…
devin-ai-integration[bot] May 1, 2026
c3e4f89
chore: bump version to 4.3.32-20260501 [version bump]
github-actions[bot] May 1, 2026
fab5a0a
Merge pull request #57 from JPL-Devin/devin/1777607507-update-docs-re…
tariqksoliman May 1, 2026
1206f45
fix: append logo to document.body to avoid filter containing block
devin-ai-integration[bot] May 1, 2026
b5affc7
Merge pull request #55 from JPL-Devin/devin/1777607462-cesium-link-bu…
tariqksoliman May 1, 2026
b096dca
Merge pull request #56 from JPL-Devin/devin/1777607493-fix-map-logo-v…
tariqksoliman May 1, 2026
3ccbffb
fix: prevent mobile topBarTitleName text wrapping by replacing max-wi…
devin-ai-integration[bot] May 1, 2026
89f4ae3
chore: bump version to 4.3.33-20260501 [version bump]
github-actions[bot] May 1, 2026
c525efd
Merge pull request #58 from JPL-Devin/devin/1777608073-fix-mobile-top…
tariqksoliman May 1, 2026
0977d17
chore: bump version to 5.0.0 and update changelog
devin-ai-integration[bot] May 1, 2026
ee47f8b
refactor(ui): move Screenshot/Fullscreen to BottomBar, About to TopBa…
devin-ai-integration[bot] May 5, 2026
cbe2db8
chore: bump version to 5.0.1-20260505 [version bump]
github-actions[bot] May 5, 2026
9f89654
feat(mobile): enforce exclusive panel toggling on mobile in TopBar
devin-ai-integration[bot] May 5, 2026
9472eab
chore: bump version to 5.0.1-20260505 [version bump]
github-actions[bot] May 5, 2026
a8c0506
style: reposition LithoSphere globe controls to match Leaflet/Cesium …
devin-ai-integration[bot] May 5, 2026
5605a20
chore: bump version to 5.0.1-20260505 [version bump]
github-actions[bot] May 5, 2026
a532e23
feat(topbar): hide Viewer/Globe toggles based on configured panels
devin-ai-integration[bot] May 5, 2026
85c53f6
style(bottombar): reorder buttons (Copy Link, Screenshot, Fullscreen)…
devin-ai-integration[bot] May 5, 2026
23c0173
Merge pull request #60 from JPL-Devin/devin/1777945712-mobile-exclusi…
tariqksoliman May 5, 2026
6550c71
style(bottombar): increase padding-bottom to 12px and button margin t…
devin-ai-integration[bot] May 5, 2026
4d57c94
style: rearrange globe controls — compass top-right circular, nav row…
devin-ai-integration[bot] May 5, 2026
020a89c
chore: bump version to 5.0.2-20260505 [version bump]
github-actions[bot] May 5, 2026
cd61bf6
chore: bump version to 5.0.2-20260505 [version bump]
github-actions[bot] May 5, 2026
283e6f0
Merge origin/development: resolve version-bump conflicts (keep 5.0.2-…
devin-ai-integration[bot] May 5, 2026
f3c5219
style: anchor observe settings panel right:34px and float nav hover p…
devin-ai-integration[bot] May 5, 2026
39ce765
feat(theming): add 5 new themes, --color-shadow variable, and configu…
devin-ai-integration[bot] May 5, 2026
a57fb9b
chore: bump version to 5.0.2-20260505 [version bump]
github-actions[bot] May 5, 2026
2dde452
Merge pull request #59 from JPL-Devin/devin/1777945527-bottombar-topb…
tariqksoliman May 5, 2026
e3e6273
fix(configure/ThemePreview): tighten top spacing and live-preview Cus…
devin-ai-integration[bot] May 5, 2026
b963bb0
chore: bump version to 5.0.3-20260505 [version bump]
github-actions[bot] May 5, 2026
3c4851f
Merge pull request #61 from JPL-Devin/devin/1777945903-litho-globe-co…
tariqksoliman May 5, 2026
a803d06
Merge origin/development: resolve version-bump conflicts (keep 5.0.3-…
devin-ai-integration[bot] May 5, 2026
571fa25
feat(themes): add Dark Heliosphere, Dark Monokai, and Light Solarized
devin-ai-integration[bot] May 5, 2026
a88fab7
fix(coordinates): respect time.initiallyOpen when live deep-link is set
tariqksoliman May 5, 2026
61c214e
chore: bump version to 5.0.3-20260505 [version bump]
github-actions[bot] May 5, 2026
f1a2f78
refactor(theming): remove Custom theme + per-field color overrides
devin-ai-integration[bot] May 5, 2026
faa40fb
Merge pull request #64 from JPL-Devin/devin/1778003265-fix-initiallyo…
tariqksoliman May 5, 2026
13143de
style(time-ui): round corners on TimeUI shell, action wrappers, mode …
devin-ai-integration[bot] May 5, 2026
449faaf
chore: bump version to 5.0.4-20260505 [version bump]
github-actions[bot] May 5, 2026
c5df2a4
feat(configure): mark light themes as (experimental) in dropdown label
devin-ai-integration[bot] May 5, 2026
ed6b5db
Merge origin/development: resolve version conflicts (keep 5.0.4-20260…
devin-ai-integration[bot] May 5, 2026
6430cd5
Merge pull request #63 from JPL-Devin/devin/1778001624-themes-shadow-…
tariqksoliman May 5, 2026
c0f0de4
Merge branch 'development' of https://github.com/JPL-Devin/MMGIS into…
tariqksoliman May 5, 2026
f071b92
Fix timeUI border radius
tariqksoliman May 5, 2026
b0c15d3
fix(mobile): rescue #timeUI before tool make() destroys it
devin-ai-integration[bot] May 5, 2026
ad51481
fix(mobile): move re-initialized #timeUI from staging into #tools
devin-ai-integration[bot] May 5, 2026
407ca65
fix(mobile): preserve #timeUI when Coordinates tool empties #tools
devin-ai-integration[bot] May 5, 2026
64fdbd9
fix(mobile): harden TimeUI fallback recovery (call fina(), de-dupe po…
devin-ai-integration[bot] May 5, 2026
101a699
chore: bump version to 5.0.5-20260505 [version bump]
github-actions[bot] May 5, 2026
10f7556
fix(mobile): Coordinates teardown only removes its own DOM
devin-ai-integration[bot] May 5, 2026
fff4beb
Bump DrawTool Temporal Drawings upward
tariqksoliman May 5, 2026
48fe443
Merge pull request #62 from JPL-Devin/devin/1778001123-mobile-timeui-…
tariqksoliman May 5, 2026
fef60ad
Merge upstream NASA-AMMOS/MMGIS development into JPL-Devin/MMGIS deve…
devin-ai-integration[bot] May 5, 2026
726ab37
chore: bump version to 5.0.6-20260505 [version bump]
github-actions[bot] May 5, 2026
668379b
Merge pull request #65 from JPL-Devin/sync-upstream-dev
tariqksoliman May 5, 2026
9958128
chore: reset version to 5.0.0
devin-ai-integration[bot] May 5, 2026
053efd1
test(e2e): fix 9 pre-existing failures (test-only changes)
devin-ai-integration[bot] May 5, 2026
4880204
chore: bump version to 5.0.1-20260505 [version bump]
github-actions[bot] May 5, 2026
1d7ddbb
Revert "chore: bump version to 5.0.1-20260505 [version bump]"
devin-ai-integration[bot] May 5, 2026
96a31ed
Merge pull request #66 from JPL-Devin/devin/1778022890-fix-test-failures
tariqksoliman May 5, 2026
3f496af
fix: prevent filter operator dropdown clipping in Layers panel
devin-ai-integration[bot] May 7, 2026
d67c369
chore: bump version to 5.0.1-20260507 [version bump]
github-actions[bot] May 7, 2026
4a38272
revert: keep dropy openUp:true for operator dropdowns
devin-ai-integration[bot] May 7, 2026
a0004f3
Revert "chore: bump version to 5.0.1-20260507 [version bump]"
devin-ai-integration[bot] May 7, 2026
29565ed
chore: bump version to 5.0.1-20260507 [version bump]
github-actions[bot] May 7, 2026
1d02e85
Revert "chore: bump version to 5.0.1-20260507 [version bump]"
devin-ai-integration[bot] May 7, 2026
50e3576
chore: bump version to 5.0.1-20260507 [version bump]
github-actions[bot] May 7, 2026
a9c5e3d
Revert "chore: bump version to 5.0.1-20260507 [version bump]"
devin-ai-integration[bot] May 7, 2026
a1f74db
chore: bump version to 5.0.1-20260507 [version bump]
github-actions[bot] May 7, 2026
deb5e1e
Merge pull request #69 from JPL-Devin/devin/1778193752-fix-filter-ope…
tariqksoliman May 7, 2026
8db7205
Merge upstream NASA-AMMOS/MMGIS development into JPL-Devin/MMGIS deve…
devin-ai-integration[bot] May 11, 2026
10e5f35
chore: bump version to 5.0.2-20260511 [version bump]
github-actions[bot] May 11, 2026
9652783
Merge pull request #70 from JPL-Devin/devin/1778521035-sync-upstream-dev
tariqksoliman May 11, 2026
337b482
fix: render Globe panel immediately on first open without window resize
devin-ai-integration[bot] May 11, 2026
d445c4e
chore: bump version to 5.0.3-20260511 [version bump]
github-actions[bot] May 11, 2026
1db566b
Merge pull request #71 from JPL-Devin/devin/1778524166-fix-globe-rend…
tariqksoliman May 11, 2026
3da520f
feat: add theme borders to panels and gradient backgrounds to splitters
devin-ai-integration[bot] May 11, 2026
2b01a57
chore: bump version to 5.0.4-20260511 [version bump]
github-actions[bot] May 11, 2026
e94ef0b
style: bump split shadow gradient opacity to 0.4
devin-ai-integration[bot] May 11, 2026
9ebb428
style: hotkeys modal 3-col grid + smaller leaflet zoom button gap
devin-ai-integration[bot] May 11, 2026
e011035
style: prevent hotkey label/value wrapping (ellipsis instead)
devin-ai-integration[bot] May 11, 2026
1573014
style: hotkeys modal single column, no wrap, no truncation
devin-ai-integration[bot] May 11, 2026
223f01d
chore: bump version to 5.0.4-20260511 [version bump]
github-actions[bot] May 11, 2026
1eeb687
style: hotkeys modal dividers, invert title/subtitle colors, rename t…
devin-ai-integration[bot] May 11, 2026
df6bf4c
Merge pull request #72 from JPL-Devin/devin/1778526059-panel-borders-…
tariqksoliman May 11, 2026
0b1fe9b
style: move splitter gradient to themed CSS class, restore hover feed…
devin-ai-integration[bot] May 11, 2026
8c2536f
chore: bump version to 5.0.5-20260511 [version bump]
github-actions[bot] May 11, 2026
3d3ddee
style: hotkeys section titles use --color-h (matches rest of app)
devin-ai-integration[bot] May 11, 2026
72d0005
chore: bump version to 5.0.5-20260511 [version bump]
github-actions[bot] May 11, 2026
ca12177
Merge branch 'development' into devin/1778526896-hotkeys-modal-3col
tariqksoliman May 11, 2026
f14dc22
Merge pull request #73 from JPL-Devin/devin/1778526896-hotkeys-modal-…
tariqksoliman May 11, 2026
e717217
Merge branch 'development' into devin/1778527726-splitter-theme-hover…
tariqksoliman May 11, 2026
82c7fd2
Merge pull request #74 from JPL-Devin/devin/1778527726-splitter-theme…
tariqksoliman May 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
24 changes: 24 additions & 0 deletions .knowledge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# .knowledge/

Agent-optimized context for MMGIS. For full documentation, see `docs/pages/`.

## Contents

| File | What's in it |
|------|-------------|
| [AI-GETTING-STARTED.md](AI-GETTING-STARTED.md) | Setup walkthrough, port map, key commands, mission creation |
| [AI-DEVELOPMENT.md](AI-DEVELOPMENT.md) | Spec-kit workflow, constitution, when to use it |
| [code-patterns.md](code-patterns.md) | Full project tree, key directories, Express/Sequelize/Tool/WebSocket templates |
| [conventions-and-gotchas.md](conventions-and-gotchas.md) | Naming patterns, code style, component placement, common issues |
| [knowledge-notes.md](knowledge-notes.md) | Auth behavior, DB init, path security, error handling gotchas |

## Where to find everything else

Detailed documentation lives in `docs/pages/` — not duplicated here:
- **Layer types**: `docs/pages/Configure/Layers/`
- **Tools**: `docs/pages/Tools/`
- **APIs**: `docs/pages/APIs/`
- **Database**: `docs/pages/Database/`
- **Environment variables**: `docs/pages/Setup/ENVs/ENVs.md`
- **Configure page**: `docs/pages/Configure/`
- **Migration**: `docs/pages/Migration/`
292 changes: 292 additions & 0 deletions .knowledge/code-patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
# Code Patterns & Project Structure

Copy-paste-modify templates for the main code patterns in MMGIS, plus the detailed directory map.

## Project Structure

```
MMGIS/
├── API/ # Backend Express server
│ ├── Backend/ # Feature-domain modules
│ │ ├── Accounts/ # Account management (routes/, setup.js)
│ │ ├── Config/ # Mission configuration (routes/, models/, setup.js)
│ │ ├── Datasets/ # Dataset management (routes/, models/, setup.js)
│ │ ├── Draw/ # Vector drawing & collaboration (routes/, models/, setup.js)
│ │ ├── Geodatasets/ # Geodata management (routes/, models/, setup.js)
│ │ ├── LongTermToken/ # API token management (routes/, models/, setup.js)
│ │ ├── Shortener/ # URL shortening (routes/, models/, setup.js)
│ │ ├── Stac/ # STAC catalog integration (routes/, setup.js)
│ │ ├── Users/ # User auth & management (routes/, models/, setup.js)
│ │ ├── Utils/ # Shared backend utilities (routes/)
│ │ ├── Webhooks/ # Webhook processing (routes/, models/, processes/)
│ │ ├── GeneralOptions/ # General options (models/, setup.js)
│ │ └── setupTemplate.js # Template for new backend modules
│ ├── connection.js # Database connection config
│ ├── database.js # Database initialization
│ ├── logger.js # Winston logger configuration
│ ├── setups.js # Loads all Backend/*/setup.js modules
│ ├── utils.js # Shared API utilities
│ └── websocket.js # WebSocket server setup
├── src/ # Frontend source code
│ ├── design-system/ # Reusable, generic UI components & theming
│ │ ├── components/ # Generic components (Toast, Modal, Tooltip, Button, Toggle, Dropdown, IconButton)
│ │ ├── themes.js # Color scheme definitions
│ │ └── themeApplier.js # Runtime theme application
│ └── essence/ # Core MMGIS frontend
│ ├── Basics/ # Global singleton controllers
│ │ ├── Layers_/ # L_ — layer lifecycle, visibility, state
│ │ ├── Map_/ # Map_ — 2D rendering (Leaflet)
│ │ ├── Globe_/ # Globe_ — 3D rendering (Cesium/LithoSphere)
│ │ ├── Formulae_/ # F_ — utility/math functions
│ │ ├── ToolController_/ # Tool lifecycle manager
│ │ ├── Viewer_/ # Viewer panel controller
│ │ ├── UserInterface_/ # MMGIS-specific UI (TopBar, Toolbar, Coordinates, CursorInfo)
│ │ ├── TimeControl_/ # Temporal data control and UI
│ │ └── ComponentController_/ # Component lifecycle manager
│ ├── Tools/ # Interactive tool plugins
│ │ ├── Analysis/ # Data analysis
│ │ ├── Animation/ # Map animation creation (GIF/MP4)
│ │ ├── Chemistry/ # Chemical composition visualization
│ │ ├── Curtain/ # GPR subsurface imagery
│ │ ├── Draw/ # Collaborative vector drawing
│ │ ├── Identifier/ # Pixel value queries
│ │ ├── Info/ # Feature property display
│ │ ├── Isochrone/ # Terrain traversability analysis
│ │ ├── Kinds/ # Layer click behavior configuration
│ │ ├── Layers/ # Layer management interface
│ │ ├── Legend/ # Map legend display
│ │ ├── Measure/ # Distance & elevation profiles
│ │ ├── SegmentTool/ # Segment analysis
│ │ ├── Shade/ # Sun/shadow illumination
│ │ ├── Sites/ # Quick navigation bookmarks
│ │ └── Viewshed/ # Line-of-sight visibility
│ ├── Components/ # Shared UI components
│ ├── Helpers/ # Frontend helper utilities
│ ├── LandingPage/ # Mission selection landing page
│ ├── mmgisAPI/ # JavaScript API for external integration
│ ├── services/ # Frontend service modules
│ └── essence.js # Main frontend entry point
├── configure/ # Admin configuration interface (separate React app)
├── scripts/ # Build and utility scripts
│ ├── build.js # Webpack build script
│ ├── server.js # Express server startup
│ ├── init-db.js # Database initialization
│ └── middleware.js # Request middleware (path validation, auth)
├── tests/ # Test suite
│ ├── e2e/ # Playwright E2E tests
│ ├── unit/ # Jest unit tests
│ ├── pages/ # Page object models
│ ├── fixtures/ # Test data
│ ├── helpers/ # Test utilities
│ ├── global-setup.js # Test environment setup
│ └── test-db-clean.js # Test database cleanup
├── configuration/ # Build configuration
│ ├── webpack.config.js # Webpack configuration
│ └── webpackDevServer.config.js # Dev server configuration
├── .knowledge/ # Agent context: setup, conventions, gotchas
│ ├── AI-GETTING-STARTED.md # Agent setup guide
│ ├── AI-DEVELOPMENT.md # Spec-kit workflow guide
│ ├── code-patterns.md # This file — project tree + code templates
│ ├── conventions-and-gotchas.md # Naming, style, common issues
│ └── knowledge-notes.md # Auth, DB init, path security gotchas
├── .specify/ # Spec-kit infrastructure
│ ├── memory/
│ │ └── constitution.md # Project governance principles
│ ├── templates/ # Spec, plan, tasks templates
│ └── scripts/bash/ # Workflow automation scripts
├── .github/ # GitHub Actions CI/CD, PR templates, CodeQL
├── specs/ # Feature specifications (retrospective + new)
├── docs/ # Jekyll documentation site (docs/pages/)
├── Missions/ # Mission data storage
├── blueprints/ # Mission templates (Reference-Mission)
├── adjacent-servers/ # TiTiler, STAC, TiPG, Veloserver proxy configs
├── auxiliary/ # GDAL tiling and data processing scripts
├── build/ # Production build output (compiled frontend)
├── examples/ # Example integrations (ReactWrappedIframe, etc.)
├── private/ # Private API scripts (Python GDAL raster extraction)
├── public/ # Static assets, index.html, login pages
├── spice/ # SPICE kernel download and management
├── views/ # Pug templates (login, admin login, error pages)
├── AGENTS.md # AI agent context (top-level, ~120 lines)
├── CLAUDE.md # Claude Code context (references AGENTS.md)
├── Dockerfile # Docker image definition
└── docker-compose.sample.yml # Sample Docker services definition
```

### Key Directories

- **`API/Backend/*/`** — Each backend feature is a self-contained module with `setup.js` (registers routes), `routes/` (Express handlers), and `models/` (Sequelize definitions). See `API/Backend/setupTemplate.js` for the pattern.
- **`src/design-system/`** — Generic, reusable UI components and theming. Components here (Toast, Modal, Tooltip, Button, Toggle, Dropdown, IconButton) are **not MMGIS-specific**. New generic UI components belong here.
- **`src/essence/Basics/UserInterface_/`** — MMGIS-specific UI (TopBar, Toolbar, Coordinates, CursorInfo, BottomBar). Tightly coupled to MMGIS state. **Do not place generic components here** — use `src/design-system/` instead.
- **`src/essence/Tools/`** — Plugin-based interactive mapping tools. Each tool is self-contained with `make()`/`destroy()` lifecycle.
- **`src/essence/Basics/Layers_/`** — The `L_` singleton — manages all layer state, visibility, and lifecycle. One of the most important modules.
- **`src/essence/Basics/Map_/`** — The `Map_` singleton — core 2D map rendering engine (Leaflet).
- **`configure/`** — Separate admin interface for mission configuration. Needs its own `npm install && npm run build`.
- **`specs/`** — Feature specifications following spec-kit format.

---

## Express Route Handler

```javascript
// API/Backend/FeatureName/routes/featurename.js
const express = require("express");
const router = express.Router();
const logger = require("../../../logger");
const database = require("../../../database");
const { sequelize } = require("../../../connection");

router.post("/", async (req, res) => {
try {
// Validate input
const { field } = req.body;
if (!field) {
return res.status(400).json({ error: "field is required" });
}

// Business logic
const result = await SomeModel.create({ field });

// Response
res.status(201).json({ success: true, data: result });
} catch (err) {
logger("error", "Error in /api/feature:", "FeatureName", null, err);
res.status(500).json({ error: "Internal server error" });
}
});

module.exports = { router };
```

### Backend Module setup.js

```javascript
// API/Backend/FeatureName/setup.js
const routerFeature = require("./routes/featurename").router;

let setup = {
onceInit: (s) => {
s.app.use(
s.ROOT_PATH + "/api/featurename",
s.ensureUser(),
s.checkHeadersCodeInjection,
s.setContentType,
routerFeature
);
},
onceSynced: (s) => {
// Called after sequelize.sync() — run migrations here
},
};

module.exports = setup;
```

## Sequelize Model

```javascript
// API/Backend/FeatureName/models/featurename.js
const Sequelize = require("sequelize");
const { sequelize } = require("../../../connection");
const logger = require("../../../logger");

const attributes = {
name: {
type: Sequelize.STRING,
unique: false,
allowNull: false,
},
geometry: {
type: Sequelize.DataTypes.GEOMETRY("POINT", 4326),
allowNull: true,
},
};

const FeatureName = sequelize.define("feature_name", attributes);

const up = async () => {
// Schema migrations — runs in onceSynced callback
// ALTER TABLE ... ADD COLUMN IF NOT EXISTS
};

module.exports = { FeatureName, up };
```

## Frontend Tool Plugin

```javascript
// src/essence/Tools/ToolName/ToolNameTool.js
import $ from "jquery";
import F_ from "../../Basics/Formulae_/Formulae_";
import L_ from "../../Basics/Layers_/Layers_";
import Map_ from "../../Basics/Map_/Map_";

const markup = [`<div id='toolName'>`, `</div>`].join("\n");

const ToolName = {
height: 0,
width: 300,
MMGISInterface: null,
make: function () {
this.MMGISInterface = new interfaceWithMMGIS();
},
destroy: function () {
this.MMGISInterface.separateFromMMGIS();
},
getUrlString: function () {
return "";
},
};

function interfaceWithMMGIS() {
this.separateFromMMGIS = function () {
separateFromMMGIS();
};

let tools = $("#toolPanel");
tools.css("background", "var(--color-k)");
tools.empty();
tools.html('<div style="height: 100%">' + markup + "</div>");

// Add event functions and whatnot

function separateFromMMGIS() {
// Event cleanup
}
}

export default ToolName;
```

## WebSocket Message Handler

```javascript
// API/websocket.js
ws.on("message", function (message) {
try {
const msg = JSON.parse(message);

// Validate message structure
if (!msg.type || !msg.room) {
return ws.send(JSON.stringify({ error: "Invalid message format" }));
}

// Authenticate
if (!isAuthenticated(ws.userId)) {
return ws.send(JSON.stringify({ error: "Unauthorized" }));
}

// Route message
switch (msg.type) {
case "draw":
broadcastToRoom(msg.room, msg, ws);
break;
default:
ws.send(JSON.stringify({ error: "Unknown message type" }));
}
} catch (err) {
console.error("WebSocket error:", err);
ws.send(JSON.stringify({ error: "Invalid JSON" }));
}
});
```
51 changes: 51 additions & 0 deletions .knowledge/conventions-and-gotchas.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Conventions & Gotchas

Quick-reference for patterns and common issues. For full docs see `docs/pages/`.

## Naming

| Category | Convention | Example |
|----------|-----------|---------|
| Singletons | Trailing `_` | `L_`, `Map_`, `Globe_`, `F_`, `ToolController_`, `Viewer_` |
| Files | PascalCase | `User.js`, `Map_.js` |
| CSS Classes | kebab-case | `.tool-panel`, `.map-container` |
| Constants/ENVs | UPPER_SNAKE | `DB_HOST`, `AUTH` |

## Code Style

- 4-space indent, single quotes, async/await over callbacks
- Prettier defaults (VSCode extension)

## Component Placement

- **Generic UI** → `src/design-system/components/`
- **MMGIS-specific UI** → `src/essence/Basics/UserInterface_/`
- **Tool UI** → `src/essence/Tools/ToolName/`

## Tool Plugin Rules

- Must implement `make()` and `destroy()` in `src/essence/Tools/ToolName/`
- Use `interfaceWithMMGIS()` for event handling and cleanup
- Register in config via `config.json`
- Tools should only modify `#tools` div, viewer, map, or globe

## Git

- Branches: `master` (production), `development` (active), `feature/NNN-name`, `hotfix/desc`
- Commits: imperative mood, prefix with feature number if applicable

## Common Issues

**Configure page blank** → Build it: `cd configure && npm install && npm run build && cd ..`

**Wrong port in dev** → Browse at **8889** (PORT+1), not 8888. API is on 8888, webpack dev server proxies to it.

**DB connection fails** → Check `.env` creds, verify PostgreSQL + PostGIS running, `DB_HOST=db` in Docker.

**WebSocket not working** → Set `ENABLE_MMGIS_WEBSOCKETS=true`, ensure proxy supports WS upgrade.

**SECRET too short** → Must be ≥24 characters.

**ENV not taking effect** → Remember triple-update: `.env`, `sample.env`, `docs/pages/Setup/ENVs/ENVs.md`.

**SPICE errors** → Check `SPICE_SCHEDULED_KERNEL_DOWNLOAD=true` and `/Missions/spice-kernels-conf.json`.
Loading
Loading