feat(energy-atlas): expose Atlas panels on FULL variant + CMD+K#3364
Conversation
Three Atlas panels (PipelineStatusPanel, StorageFacilityMapPanel, FuelShortagePanel) shipped in PR #3294 but were registered only in ENERGY_PANELS — invisible on worldmonitor.app because the energy variant subdomain is not yet wired. Additionally, no CMD+K entries existed for them, so command-palette search for "pipeline" or "storage" returned nothing. Changes: - src/config/commands.ts: add panel:pipeline-status, panel:storage-facility-map, panel:fuel-shortages with relevant keywords (oil/gas/nord stream/druzhba/spr/lng/ugs/rationing/…). - src/config/panels.ts: add the 3 panel keys to FULL_PANELS with priority 2 so they appear in the main worldmonitor.app drawer under the existing energy-crisis block. ENERGY_PANELS keeps its own priority-1 copies so the future energy.worldmonitor.app subdomain still surfaces them top of list. Unblocks the plan's announcement gate item "UI: at least one Atlas panel renders registry data on worldmonitor.app in a browser." Part of docs/internal/energy-atlas-registry-expansion.md follow-up.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryThis PR wires three Atlas panels ( Confidence Score: 5/5Safe to merge — all findings are P2 style/discoverability suggestions that do not block functionality. No P0 or P1 issues found. The logic around ALL_PANELS merge order is correct, the FULL variant exposure is clean, and the CMD+K entries follow existing patterns. Three P2 notes (icon encoding consistency, spr keyword overlap, PANEL_CATEGORY_MAP omission) are minor and do not affect runtime behavior. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["ENERGY_PANELS\n(pipeline-status p=1\nstorage-facility-map p=1\nfuel-shortages p=1)"] -->|spread first| M
B["FULL_PANELS\n(pipeline-status p=2 NEW\nstorage-facility-map p=2 NEW\nfuel-shortages p=2 NEW)"] -->|spread last wins| M["ALL_PANELS\n(unified registry)"]
M --> C{"SITE_VARIANT?"}
C -->|energy| D["VARIANT_DEFAULTS['energy']\n-> ENERGY_PANELS keys\n(p=1, high priority)"]
C -->|full| E["VARIANT_DEFAULTS['full']\n-> FULL_PANELS keys\n(p=2, now visible)"]
F["COMMANDS (CMD+K)\npanel:pipeline-status NEW\npanel:storage-facility-map NEW\npanel:fuel-shortages NEW"] --> G["getAllCommands()\n-> rendered in command palette"]
Reviews (1): Last reviewed commit: "feat(energy-atlas): expose Atlas panels ..." | Re-trigger Greptile |
| { id: 'panel:oil-inventories', keywords: ['oil inventories', 'crude stocks', 'spr', 'strategic petroleum', 'eia inventories', 'iea stocks', 'days of cover', 'oil reserves', 'gas storage'], label: 'Panel: Oil Inventories', icon: '\u{1F6E2}\uFE0F', category: 'panels' }, | ||
| { id: 'panel:energy-crisis', keywords: ['energy crisis', 'iea policy', 'crisis response', 'hormuz policy', 'fuel rationing', 'conservation measures'], label: 'Panel: Energy Crisis Policies', icon: '\u{26A1}', category: 'panels' }, | ||
| { id: 'panel:pipeline-status', keywords: ['pipelines', 'pipeline status', 'oil pipelines', 'gas pipelines', 'nord stream', 'druzhba', 'sabotage', 'pipeline registry'], label: 'Panel: Oil & Gas Pipeline Status', icon: '\u{1F6E2}️', category: 'panels' }, | ||
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'spr', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}️', category: 'panels' }, |
There was a problem hiding this comment.
spr keyword already claimed by panel:oil-inventories
panel:storage-facility-map adds 'spr' as a keyword, but line 105 already registers 'spr' under panel:oil-inventories. CMD+K search for "spr" will surface both panels simultaneously. The PR description calls out "spr" as a target trigger specifically for Strategic Storage Atlas, so this may be an unintentional overlap.
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'spr', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}️', category: 'panels' }, | |
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}\uFE0F', category: 'panels' }, |
| { id: 'panel:pipeline-status', keywords: ['pipelines', 'pipeline status', 'oil pipelines', 'gas pipelines', 'nord stream', 'druzhba', 'sabotage', 'pipeline registry'], label: 'Panel: Oil & Gas Pipeline Status', icon: '\u{1F6E2}️', category: 'panels' }, | ||
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'spr', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}️', category: 'panels' }, |
There was a problem hiding this comment.
The two new pipeline and storage entries use '\u{1F6E2}️' — a Unicode escape followed by a raw U+FE0F variation-selector character in the source. All other energy panel icons in this file (e.g. panel:energy-complex, panel:oil-inventories) use the fully-escaped form '\u{1F6E2}\uFE0F'. Both render identically at runtime, but mixing raw and escaped variation selectors is inconsistent within the file.
| { id: 'panel:pipeline-status', keywords: ['pipelines', 'pipeline status', 'oil pipelines', 'gas pipelines', 'nord stream', 'druzhba', 'sabotage', 'pipeline registry'], label: 'Panel: Oil & Gas Pipeline Status', icon: '\u{1F6E2}️', category: 'panels' }, | |
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'spr', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}️', category: 'panels' }, | |
| { id: 'panel:pipeline-status', keywords: ['pipelines', 'pipeline status', 'oil pipelines', 'gas pipelines', 'nord stream', 'druzhba', 'sabotage', 'pipeline registry'], label: 'Panel: Oil & Gas Pipeline Status', icon: '\u{1F6E2}\uFE0F', category: 'panels' }, | |
| { id: 'panel:storage-facility-map', keywords: ['storage', 'storage facilities', 'strategic storage', 'lng terminals', 'ugs', 'tank farms', 'storage atlas'], label: 'Panel: Strategic Storage Atlas', icon: '\u{1F6E2}\uFE0F', category: 'panels' }, |
| 'pipeline-status': { name: 'Oil & Gas Pipeline Status', enabled: true, priority: 2 }, | ||
| 'storage-facility-map': { name: 'Strategic Storage Atlas', enabled: true, priority: 2 }, | ||
| 'fuel-shortages': { name: 'Global Fuel Shortage Registry', enabled: true, priority: 2 }, |
There was a problem hiding this comment.
New panels absent from
PANEL_CATEGORY_MAP
pipeline-status, storage-facility-map, and fuel-shortages are now enabled in FULL_PANELS but are not listed in any category inside PANEL_CATEGORY_MAP (lines 1203–1309). Based on the map's comment, only panels referenced there appear in the category-filtered panel browser in the settings UI. Users browsing categories won't find these panels unless they arrive via CMD+K or the full unsorted panel list.
The nearest existing category is marketsFinance (which lists energy-complex, commodities, etc.). Adding the three keys there — or to a new energyAtlas category — would complete the discoverability story this PR is aiming for. Note that hormuz-tracker and energy-crisis have the same gap, so this is a pre-existing pattern; just worth addressing together.
Reviewer found that the original PR wiring let CMD+K "spr" and "lng" route to the wrong panel because matchCommands() (SearchModal.ts:273) ranks by exact/prefix/substring then keeps array-insertion order on ties. Storage-atlas was declared AFTER the colliding entries. Collisions: - "spr": panel:oil-inventories (line 105) had exact 'spr' → tied with the new storage-facility-map (line 108) → insertion order kept oil-inventories winning. - "lng": panel:hormuz-tracker (line 135) has exact 'lng' → storage-facility-map only had substring 'lng terminals' (score 1) → hormuz won outright. Fix: - Remove 'spr' from oil-inventories keywords. The SPR as a *site list* semantically belongs to Strategic Storage Atlas. Stock-level queries still route to oil-inventories via 'strategic petroleum' (the word 'spr' is not a substring of 'strategic petroleum', so no fallback score leaks). - Add exact 'lng' to storage-facility-map. Both it and hormuz-tracker now score 3 on 'lng'; stable sort preserves declaration order, so storage (line 108) outranks hormuz (line 135). Hormuz still matches via 'hormuz', 'strait of hormuz', 'tanker', 'shipping'.
…p) (#3365) Two P2 findings on the now-merged #3364: 1. Icon encoding inconsistency. The two new pipeline/storage entries mixed '\u{1F6E2}' + raw VS16 (U+FE0F) while every other panel in the file uses '\u{1F6E2}️'. Same runtime glyph, but mixed encoding is lint-noisy. Normalize to the escaped form. 2. PANEL_CATEGORY_MAP gap. pipeline-status, storage-facility-map and fuel-shortages were registered in FULL_PANELS + CMD+K but absent from PANEL_CATEGORY_MAP, so users browsing the settings category picker didn't see them. Add to marketsFinance alongside energy-complex. While here, close the same pre-existing gap for hormuz-tracker and energy-crisis — reviewer explicitly called these out as worth addressing together. The third P2 (spr keyword collision with oil-inventories) was fixed in commit 83de09f before the review finalised.
Summary
PipelineStatusPanel,StorageFacilityMapPanel,FuelShortagePanel) shipped in feat(energy): Energy Atlas end-to-end — pipelines + storage + shortages + disruptions + country drill-down #3294 but were registered only inENERGY_PANELS— invisible onworldmonitor.appbecause the energy subdomain isn't wired yet.What changed
src/config/commands.ts— 3 newpanel:*entries with broad keyword coverage (oil/gas/nord stream/druzhba/spr/lng/ugs/rationing/stations closed/…).src/config/panels.ts— added the 3 panel keys toFULL_PANELSwith priority 2, slotted besideenergy-crisis.Duplicate registrations (FULL_PANELS p=2 and ENERGY_PANELS p=1) are intentional:
ALL_PANELSresolves via FULL-last spread so the merge is safe;VARIANT_DEFAULTS['energy']still reads fromENERGY_PANELSso the future energy subdomain surfaces them at top.Test plan
npm run typecheck— cleannpm run test:data— 6692/6692 passContext
Part of the
docs/internal/energy-atlas-registry-expansion.mdfollow-up. The plan doc's Phase A claimed the UI was "NOT STARTED"; actually 3/4 panels shipped in #3294. This PR closes the "invisible on worldmonitor.app" gap by wiring exposure + CMD+K. Remaining gaps tracked separately (EnergyDisruptionsPanel, CountryDeepDive disruptions section, Phase B V5 keys, Phase C energy.worldmonitor.app variant).