iPool & Apollo — Changes Brief (February–April 2026)
Prepared for: Support Website Team Date: 2026-04-23 Covers: iPool v26.022 (Feb 27), v26.03 (Mar 17), v26.04 (Apr 14) | Apollo (Feb–Apr 2026)
How to Read This Document
This document summarizes all user-facing changes across iPool and Apollo from the last ~3 months. Each section is organized by product and version. Changes are grouped as:
- New Features — new capabilities users can access
- Bug Fixes — corrections to existing behavior
- Behavioral Changes — existing features that now work differently
- Breaking Changes — changes that require user action or awareness
Internal/developer-only changes (TypeScript migration, code refactors with no user-visible effect) are excluded.
PART 1: iPool
iPool v26.04 (Released 2026-04-14)
New Features
Contract Tracing (TraceCon.csv)
New per-interval output file capturing contract settlement data during simulation. Each row represents one contract at one dispatch interval.
Columns: ID, NetPrc, StrPrc, RefPrc, Qty
- ID — Contract identifier
- StrPrc — Strike/contract price (the agreed price)
- RefPrc — Reference/spot price at settlement
- NetPrc — Net price (Strike minus Reference — the contract's value above or below spot)
- Qty — Contracted MW quantity (can vary by interval)
Who uses this: Users running portfolio simulations who need to trace individual contract settlements interval-by-interval — useful for contract valuation and hedging analysis.
Contracts in Scenario Summary (ScenObj.csv)
ScenObj.csv now includes a contracts section (T6/D6 rows) listing each contract's ID, buy/sell direction (BOUGHT or SOLD), participant ID, and portfolio ID. These rows appear interleaved within the portfolio section of the file.
-port Flag (Replaces -portfolio)
New command line option for loading multiple portfolios.
Syntax:
iPool.exe -o ScenarioID -port EERI -port MERALCO -x # Load specific portfolios
iPool.exe -o ScenarioID -port ALL -x # Load all portfolios
BREAKING: The old -portfolio flag no longer works. Any scripts or batch files must be updated.
Revenue & Cost in Trace Reports
Three trace files now include financial columns:
| File | New Columns | What They Show |
|---|---|---|
TraceLod.csv | Rev, Cost | Per-load-site revenue (Price x Generation) and cost (Price x Demand) per interval |
TraceSte.csv | Cost, Fuel | Per-site cost and fuel type string per interval |
TracePrt.csv | Cost | Per-participant cost per interval |
BREAKING for parsers: TraceLod.csv header changed from Price,Gen,Dem,Cap to Price,Gen,Dem,Cap,Rev,Cost. Any downstream tools that rely on column position or count need updating.
Fuel-Specific Price Caps
New revenue-reporting price caps for coal and CCGT generation units.
How to configure: Add lines to Defaults.csv (located in the iPool data directory):
PrcCapCOAL,300.00
PrcCapCCGT,150.00
What they do: When a region's clearing price exceeds the cap, the unit's reported revenue is calculated at the capped price instead. The actual market clearing price is unchanged — this is a per-unit revenue adjustment for modelling administered price scenarios, not a market-wide intervention.
Important notes:
- Only affects COAL and CCGT fuel types. OCGT and other fuels are not capped.
- Set to 0 (or omit from the file) to disable.
- Not available as a CLI flag or UI setting —
Defaults.csvis the only configuration point. - A freshly auto-generated
Defaults.csvdoes not include these keys — they must be added manually.
Bug Fixes
| Fix | Description |
|---|---|
| Marginal price detection | Fixed a case where the bid stack would traverse past the true marginal bid and settle on an incorrect (often higher) price. Significant price accuracy improvement. |
| Demand bid unloading | Tightened the floor condition for demand bid unloading, preventing over-loading of demand in the dispatch engine. |
| Fractional MW precision | Multiple fixes to preserve decimal precision throughout the system — region demand, demand forecasts, hourly averaging, link flows, and sent-out generation are no longer truncated to integers. Particularly important for 5-minute historical data. |
| GWAP calculation | Volume-weighted average price now correctly uses generation energy only, not generation plus demand. Fixes settlement reporting accuracy. |
| Outage event filtering | Spurious outage events from single zero-generation intervals eliminated. Outages now require 30+ minutes of zero output before being recorded. |
| Interval size in revenue/cost | Revenue and cost calculations now correctly scale by the configured dispatch resolution (5-minute or 30-minute intervals). |
| RECALC mode | Fixed interval size not being set before fast simulation in RECALC mode, causing incorrect revenue/cost multiplications. |
| Save-As from command line | Fixed scenario saving from command line to use proper Save-As with new simulation ID. |
Behavioral Changes
Link Derating Detection (Major Rewrite)
Detection threshold lowered from 1 hour (12 consecutive intervals) to 20 minutes (4 intervals). Events are now detected earlier, with improved handling of flow-level changes during a derating event and correct termination at end-of-simulation. A 1 MW tolerance is applied to handle rounding in 5-minute historical data.
Link Flow Precision
Link flows changed from integer to double precision. Eliminates up to 0.5 MW error per link per interval that was compounding in constrained network dispatches. Particularly important when using 5-minute historical data with fractional MW flows.
NoDis Mode — Revenue Revaluation
-NoDis (No Dispatch) mode skips the market dispatch engine entirely and revalues revenue/cost using pre-loaded price profiles. This is used for two scenarios:
- RECALC (Price Revaluation): Re-run the financial summary of an already-dispatched scenario using different prices, without re-running the market simulation. Useful for price sensitivity analysis.
- Fast Simulation: Quick financial summary using demand and price profiles when full market modelling isn't needed (e.g., contracted customer analysis).
Typical RECALC workflow:
# Step 1: Run a full simulation
iPool.exe -o ScenarioID -run ScenarioID -x
# Step 2: Revalue with different prices, scoped to a portfolio participant
iPool.exe -o ScenarioID -NoDis -port EERI -p NewPrices.csv -x
When combined with -port, only that participant's units, meters, and contracts (both buy and sell) are included in the revaluation.
ELP Optimisation (-opELP ALL)
ELP (Energy Limited Plant) optimisation now accepts ALL to enable optimisation for every storage in the model, rather than naming each individually.
What is an Energy Limited Plant? A generator whose total output over a period is constrained by a finite energy budget — not just an instantaneous capacity limit. This includes battery storage (BESS), pump storage, and hydro with reservoir constraints.
What does -opELP do? It activates a Load Duration Curve (LDC) peak-lopping strategy:
- Computes the "duck curve" — gross demand minus must-run solar/wind generation — to find the residual demand that needs dispatching.
- Each week (or daily for batteries), builds a duration curve and finds a trigger level — the demand threshold above which it's worth dispatching the storage.
- Each interval, sets the storage's output based on how far demand exceeds the trigger: full output when demand is well above, reduced output near the threshold, zero output below.
- For charging, the logic is inverted — charge when demand is low.
Output: OptBid_{StorID}.csv per storage, containing the optimal bid prices, energy summary, and the cheapest daily charging windows.
Syntax:
iPool.exe -o ScenarioID -opELP ALL -x # All storages
iPool.exe -o ScenarioID -opELP BESS1 -x # Specific storage
Related flag: -opbid <StorID> produces the same optimal bid report but does NOT change how units are dispatched during the simulation — it's report-only.
Bid Band Creation
Bid bands are now always fully populated across all 10 bands. Previously, the last band (Band 10) was automatically pegged to 0.9999 x VOLL (Value of Lost Load = 90,000, the Market Price Cap). This pegging has been removed because it produced unrealistic price outcomes and masked dispatch problems.
Now, unused upper bands are filled with zero MW at stepped prices (base price + 2000/band increment) rather than near-ceiling prices.
-remark Flag (Restored)
The -remark flag appends user-supplied text to the scenario description when saving.
Syntax: iPool.exe -o ScenarioID -remark "Sensitivity test with high gas prices" -s NewScenID -x
The remark text appears in the saved scenario's description and in ScenInfo.csv / Summary.csv output files. Multi-word remarks must be quoted.
Other Behavioral Changes
| Change | Description |
|---|---|
| Must-run/duck-curve metrics | Region reports now correctly compute must-run generation (MRGen), duck-curve demand (Dem-MRGen), and dispatchable demand (DispDem) during price-only revaluation. These appear in TracePool.csv, TraceReg.csv, and TraceZone.csv. |
| Net demand precision | NetDem.csv and demand file output now show one decimal place instead of integers. |
iPool v26.03 (Released 2026-03-17)
New Features
-genlist — Generator List from IEMOP Registry
Reconciles iPool's generator database against the IEMOP generator registry CSV file. Automates what was previously a manual process.
What it does:
- Reads the IEMOP registry file (columns: Resource Name, Description, Region, Station, Trading Participant)
- For each generator: updates name, site, fuel type, and owner in the model
- Auto-detects fuel type from keywords in the DUID or description (e.g., "Solar", "Battery", "Coal", "Biomass", "Natural Gas")
- Automatically marks solar, wind, and biomass sites as must-run
- Creates new units/sites for generators not yet in the database
- Cross-checks: warns about model units that don't appear in the registry
Syntax:
iPool.exe -genlist mnm_genlist.csv -x # In-memory only
iPool.exe -genlist mnm_genlist.csv -updatedb -x # Write changes to database
The file must be placed in the database directory. Without -updatedb, changes are in-memory only and not persisted.
-CAPEGFile — Capacity Update from IEMOP CAPEG Report
Updates registered maximum capacities from the IEMOP CAPEG CSV file (columns: Trading Day, Trading Participant, Resource Name, Maximum Capacity MW).
Syntax: iPool.exe -CAPEGFile CAPEG_20250804.csv -x
Changes are in-memory only — does not write to the database. Capacities are only updated upward (never reduced). The file must be placed in the database directory.
Typical WESM model maintenance workflow:
-CAPEGFile— update registered capacities from IEMOP CAPEG report-genlist -updatedb— reconcile full generator registry, write to database-hist— run historical simulation (Out-of-Merit generators are auto-detected and a.bidfile is created for them)
-histskip — Continue Historical Simulations Despite Missing Data
Historical simulations can continue running when data files are missing for certain days. Missing days are logged and skipped while all available data is still processed.
Use case: Extract partial historical datasets without the simulation stopping on incomplete data.
Syntax: iPool.exe -o ScenarioID -hist -histskip -x
-p Prices.csv — External Price Profile Loading
Load price profiles from a CSV file for use in RECALC/revaluation scenarios.
Syntax: iPool.exe -o ScenarioID -NoDis -p Prices.csv -x
Note: Despite what some internal documentation states, -p always takes a file path, never a participant ID. Use -port for portfolio scoping.
-FCMax — Demand Forecast Flexing
Applies a target peak demand to reshape the forecast load curve while preserving its shape. Used in combination with -DFac (demand growth factor) and -ObID (region/meter identifier).
Key concepts:
- Scaling (
-DFac): Multiplies every interval uniformly by the growth factor. The entire load curve shifts up or down proportionally. - Flexing (
-FCMax): Reshapes the curve to hit a target maximum demand — peaks are raised toward the target while base load stays roughly unchanged. This preserves the load shape better than flat scaling.
When both are used, scaling is applied first (volume adjustment), then flexing (peak targeting).
Syntax:
iPool.exe -iLoad Forecast -ObID LUZON -DFac 1.05 -FCMax 12000 -ObID VISAYAS -DFac 1.03 -FCMax 8000 -x
This applies a 5% growth factor and 12,000 MW peak target to LUZON, and a 3% growth factor with 8,000 MW peak target to VISAYAS.
Important: -FCMax only takes effect for forecasts of 32 days or longer (Forecast2 long-term mode). For shorter periods, only -DFac scaling applies.
iLoad modes (selectable in Apollo or via -iLoad CLI):
| Mode | Purpose |
|---|---|
| Analyze | Analyse existing load profiles |
| Forecast | Generate demand, generation, and meter forecasts |
| ReForecast | Re-run forecast with updated parameters |
| Compare | Compare forecast results |
Output files: DemFC_<ScenID>.csv (regional demand), GenFC_<ScenID>.csv (site generation capacity factors), MtrFC_<ScenID>.csv (meter demand).
Historical Event Capture
Historical simulation (-hist) now automatically captures and writes events to Ev_HST.csv:
- Unit outages — generators at zero output for more than 30 minutes
- Link derating events — interconnector flow constraints
Use case: Analyse outage patterns and link constraints from historical runs without manual event identification.
Storage in Fast Simulation
Fast simulation mode (-NoDis) now includes storage dispatch calculations. Previously, storage assets were excluded from fast simulation results.
Zonal Reports
Four new report files provide analysis broken down by market zone. Zonal mode activates automatically when regions in the database have a non-empty Zone field — no CLI flag is needed.
What is a zone? A zone groups multiple regions together. In the WESM market, three zones are pre-defined: CLUZ (Luzon), CVIS (Visayas), CMIN (Mindanao). Zones are configured via the Zone column in the Regions database table.
| Report | Content | Row Granularity |
|---|---|---|
| TraceZone.csv | Price, Gen, Dem, Cap, MRGen, Dem-MRGen, DispDem, reserve prices, marginal unit | Per zone per dispatch interval |
| BidZone.csv | MW quantity by price band (16 bands from ≤-100 to >30000) | Per zone per interval (WESM only) |
| FuelZone.csv | Generation by fuel type (COAL, HYDRO, WIND, SOL, BIO, PUMP, OCGT, CCGT, etc.) | Per zone per interval |
| Zone rows in Summary.csv | Full summary metrics (capacity, energy, costs, revenues, prices) | Per zone |
Zonal pricing requires -iprul 2 (Zonal Highest) or -iprul 3 (Zonal Average). Without this flag, zone reports still emit rows but pricing remains nodal.
NetDem.csv — Net System Load Report
Reports Net Demand = Total Demand minus Must-Run Generation (solar, wind, and other must-run units) for the Pool and each Region, per dispatch interval.
This is the "duck curve" metric — the residual demand that dispatchable generators must serve after accounting for non-dispatchable renewable output. Useful for understanding the impact of renewable penetration on dispatchable demand requirements.
Columns: DateTimeEnding, <PoolID>, <Region1ID>, <Region2ID>, ...
Reserve Revenue
Tracks reserve market participation and calculates associated revenues for each generating unit and site.
Data source: Users must manually download two WESM market data files and place them in the history directory (DirHst):
| File Pattern | Contains | Granularity |
|---|---|---|
RTDRS_YYYYMMDD.csv | Per-unit reserve schedule (type, MW, price) | 5-minute intervals |
RTDOPRSVSUMM_YYYYMMDD.csv | Per-region reserve prices | 5-minute intervals |
Four reserve types are tracked: Fr (Frequency Regulation), Ru (Ramp Up), Rd (Ramp Down), Dr (Dispatchable Reserve).
Output in Summary.csv: Reserve prices by type, Reserve Energy (GWh), Reserve Revenue (PM), Alternative Spot Revenue (what those MW would have earned at spot price — a benchmark comparison).
Important: Reserve data is only loaded at report level 3 or higher (-rep 3). At lower report levels, the RTDRS and RTDOPRSVSUMM files are silently skipped and reserve revenue will show as zero.
Related flags:
-bWAP— Use week-ahead projection files instead of real-time (hourly resolution, no per-unit reserve breakdown)-bDAP— Use day-ahead projection files instead of real-time
Solar/Wind in Capacity Factor Reports
Dedicated SOLAR and WIND columns added to MRGCFac and MRHCFac must-run capacity factor reports, providing clearer visibility into renewable energy performance.
Fuel Type in Summary.csv
Generation results now include a fuel type column in the summary output, enabling fuel-mix analysis without separate post-processing.
Bug Fixes
| Fix | Description |
|---|---|
| Demand bid dispatch | Fixed critical bug where demand-side bids remained operating under high prices in network-constrained conditions. |
| Long-term forecasting | Fixed day type matching to correctly handle leap years and holidays. |
| FLEX function | Corrected to use Flex (peak reshaping) instead of Scale (uniform multiplication) when changing Target Max Demand. |
| Demand scaling | Fixed demand scaling factor (DEF_DFAC) being applied twice during event management. |
| Zonal fuel tracking | Fixed array indexing bug in the fuel matrix when running in non-zonal mode. |
| Save-As | Debugged and corrected the -s SaveAs command line option. |
| Gas & Hydro OptBid | Corrected optimization bidding behavior for gas and hydro generation units. |
Behavioral Changes
| Change | Description |
|---|---|
| Storage dispatch triggers | Enhanced energy level thresholds with allowances: storage stops discharging when energy level falls below minimum + current discharge amount, and stops charging when level exceeds maximum - current charge amount. This prevents over-cycling at the boundaries. |
| Storage-Price pairing | Improved algorithm for finding the optimal charge/discharge price pair. The search now correctly scans from highest to lowest price levels and accounts for round-trip efficiency losses when calculating required charging hours. |
| ELP Optimisation | Simplified and improved the Energy Limited Plant optimization algorithm. |
| Must-Run dispatch priority | Enhanced dispatch priority handling for must-run generation units in the merit order. |
| Block price updates | Block price (the average market price by hour-of-day and day-of-week) is now updated during report refresh. This is used internally to find the cheapest consecutive hours for storage charging in the ELP optimal bid calculation. |
PART 2: Apollo
Apollo Changes (February–April 2026)
New Features
Shareable Chart State Links
Charts can now be shared via URL. Two modes:
- Full state URL (
?state=<blob>) — Encodes scenario, node, time view, series visibility, styles, y-axis, grid lines, and comparison state into a compressed URL parameter. - Short-code URL (
?v=<xxxx-xxxx-xxxx>) — Stores the state on the server and provides a shorter, shareable link. Falls back to the full URL if the server is unavailable.
How to use: Click the "Copy Link" button on any chart. The URL is copied to the clipboard. When a recipient opens the link, Apollo automatically loads the scenario, navigates to the correct node, and restores all chart settings.
Legacy ?s= and ?sc= URL parameters continue to work for backward compatibility.
Command Module UI Redesign
Major restructure from 2-column to 3-column layout:
| Column | Content |
|---|---|
| Left sidebar | Command sequence (the ordered list of simulation steps) |
| Middle panel | Navigation between parameter categories |
| Right panel | Parameter editor for the selected category |
Five focused panels replace the single large form: Simulation Rules, Scaling Options, Object Options, Optimisation, and Advanced Simulation Settings.
Template selection moved from drag-and-drop to a searchable modal with tabs (Default / Custom / Edit Scenario) and preview.
A Classic View toggle preserves the original 2-column layout for users who prefer it (persisted to localStorage).
Full-width action bar at bottom: Run, Load, Save, Batch, Settings, Bid Generation.
Full iPool v26.3 CLI Coverage (100%)
The Scenario Designer now exposes all ~122 iPool command line flags through the UI (up from ~62, or ~51% coverage). Users no longer need to manually edit command lines to access any iPool feature. Key additions:
- RECALC workflow: RECALC scenario type in Type dropdown, NoDis Mode selector (3 states: Dispatch / NoDis / NoDis+ESites), Price Profile file selector
- Portfolio controls: Portfolio chip list for repeatable
-portflags, Save-As dropdown (Don't Save / Save In-Place / Save As) - Storage & Optimisation: Optimal ELP (
-opELP), Optimal Bid (-opbid), Storage Filter chip list - Demand Forecasting: New 4th tab with iLoad mode selector, 6 file inputs, 7 forecast settings
- v26.3 Features: CAPEG File selector, FC Max Flexible checkbox, MR Solar/Wind files
Note on NoDis mode in the UI: The Scenario Designer presents NoDis as a 3-state selector. In the current iPool code, all NoDis states behave identically (all trigger fast simulation). The UI distinction may reflect planned future differentiation.
DGP View Dashboard
New dashboard tab showing Demand, Generation, and Price without the bid stack complexity. Available for Pool, Region, Zone, Site, and Unit object types.
Use case: Quick overview when you need price/generation/demand trends but don't need the full bid stack analysis.
Contracts Support
Full contract visualization in Apollo, reading from iPool's new TraceCon.csv and ScenObj.csv contract data.
Portfolio tree restructuring:
Portfolios
├── EERI (Portfolio)
│ ├── Sites (sub-group)
│ │ └── 03EERI (Site)
│ └── Contracts (sub-group)
│ └── MYCONT3 — SOLD (Contract)
└── A_DEMO (Portfolio)
├── Loads (sub-group)
│ ├── COMMERCIAL (Load)
│ └── RESIDENTIAL (Load)
└── Contracts (sub-group)
├── MYCONT3 — BOUGHT (Contract)
└── MYCONT1 — BOUGHT (Contract)
Contract Settlement dashboard: Dual-axis chart showing:
- Left Y-axis (lines): Strike Price, Reference Price, Net Price (PHP/MWh)
- Right Y-axis (columns): Quantity (MW)
Statistics bar shows average Strike, Reference, Net prices and Quantity.
Data source: Contract data comes from iPool — ScenObj.csv defines the contracts (T6/D6 sections), TraceCon.csv contains the time-series settlement data. The T6 row is a header; D6 rows contain: Contract ID, Direction (BOUGHT/SOLD), Portfolio ID.
Sub-Group Overview
Portfolio sub-groups (Sites, Loads, etc.) now have dedicated charts with selectable traces for Demand, Price, and Generation. Enables drill-down analysis within portfolio structure.
Load Object Type
Load nodes (COMMERCIAL, INDUSTRIAL, RESIDENTIAL, SOLARLOAD) under Portfolio LOADS sub-groups are now correctly typed and routed to TraceLod.csv data, showing proper load demand/generation data instead of the generic site view.
Vantage Module Redesign
Complete UI overhaul of the data download and forecast management module:
Cards-based main view: Each data category (Demand Regional, Demand Zonal, VRE MHCF, Database, Bid Sets) has its own card showing:
- Current status with freshness badges: up-to-date (check), new (warning), update-available (warning)
- Download destination paths
- Download Latest and Browse History actions
First-run setup wizard (3 steps):
- Connect — License authentication
- Download Folders — Configure 5 download directories (with "Use same folder for Regional and Zonal" option and "Use Defaults from Defaults.csv" button)
- Auto-Refresh — Enable/disable with interval selection (5 min to 4 hours)
Category browser: Browse, filter, select, and download specific historical files by category, horizon, geography, and date range.
User Calibration Settings (Vantage)
Users can define scaling rules to adjust demand and capacity factor forecasts, upload them to the Gateway for processing, and use the resulting custom forecast files.
What is CFAC? Capacity Factor — specifically the calibration applied to VRE (Variable Renewable Energy) station data in the MHCF (Must-Run Hourly Capacity Factor) forecast file. CFAC calibration adjusts how much generation a solar or wind station is forecast to produce.
Demand calibration rules:
| Field | Description | Example |
|---|---|---|
| Zone | One of 18 Philippine zone codes | 02METRO |
| Day Type | When to apply | weekday, saturday, sunday, holiday, or all |
| Hours | Which hours | all or a range like 8-17 |
| Scale | Multiplier | 1.08 = increase forecast by 8% |
| Note | Annotation | "Metro Manila under-forecast correction" |
Example demand rules:
- Zone 02METRO, all days, all hours, scale 1.08 — "Metro Manila systematic 8% under-forecast"
- Zone 01NLUZ, weekdays, hours 9-18, scale 1.05 — "Business hours consistently underestimated"
- Zone 05CEBU, Saturday, all hours, scale 0.95 — "Weekend over-forecast — reduce by 5%"
CFAC calibration rules:
| Field | Description | Example |
|---|---|---|
| Station | VRE station name from MHCF file headers | 01BURGOS_W (W=Wind, S=Solar) |
| Hours | Which hours | all or 6-18 |
| Scale | Multiplier | 0.90 = reduce forecast by 10% |
| Note | Annotation | "Wind over-forecast correction" |
End-to-end workflow:
- Open Vantage Settings → add calibration rules (or bulk-import from CSV)
- Click "Submit Calibration" — rules are uploaded to the Gateway
- The Gateway re-runs its forecast pipeline with the scaling rules applied (progress is polled automatically)
- Custom forecast files appear in the Forecast Cards with a Standard/Custom toggle
Important: Calibration is Electron desktop only — not available in Apollo web mode. Station names must be typed exactly as they appear in the MHCF CSV column headers (~120 VRE stations, no autocomplete).
Web Deployment
Apollo can now run as a web application served by Express or the iEnergy Gateway, accessible via web browser without Electron installation.
Available in web mode: All chart viewing, scenario browsing, analysis, comparison, and export features.
Not available in web mode (Electron-only):
- Command Module (scenario design and simulation execution)
- Database Editor
- Vantage downloads and calibration
- License validation dialog
- Directory picker
Authentication: Gateway mode uses license ID + optional password login with JWT session tokens. Express mode uses password-only login.
Other New Features
| Feature | Description |
|---|---|
| Support Chat Persistence | Chat messages survive panel close/reopen within the same app session. "New Chat" button resets. |
| Gateway JWT Authentication | License ID + optional password login for Gateway mode. JWT stored for session persistence. |
npm run deploy Script | Cross-platform build-and-deploy command for deployment. |
Bug Fixes
| Fix | Description |
|---|---|
| Vantage forecast file paths on Gateway | All Vantage/forecast/calibration endpoints were incorrectly prefixed with /api/v1/ — Gateway serves these at root. Fixed 12 endpoint calls. |
| Chart export (CSV/XLSX) | Fixed silent failures across Profile, Comparison, and MultiScenarioProfile charts. CSV and XLSX exports now work correctly for all chart types. |
Chart data export [object Object] | Category-based charts were exporting Point objects instead of numeric values. Fixed with proper data unwrapping. |
| Chart container layout | Fixed Highcharts export menu causing the chart container to grow/expand. |
| Comparison chart settings | Series style overrides (color, type, line width, dash style) now persist across chart rebuilds. Grid line and axis label settings now applied on initial chart build, not just via settings panel. |
| Comparison View color swatch | Color swatch in Analysis Summary now updates when series color is changed via context menu. |
| Economics View date corruption | Switching to/from Economics dashboard no longer corrupts dates to year 2001. Fixed timestamp formatting. |
| Scenario Designer file pickers | All file-picker dropdowns were empty. Fixed across ScenarioOptions, InputOptions, and BidOptions tabs. |
| Command module right panel | Fixed invisible right panel caused by missing CSS import when using lazy component loading. |
| ScenarioOptions loading guard | Fixed loading guard that was always false, preventing scenario options from displaying. |
| Support chat in web mode | Fixed crash caused by unconditional Electron API call. Now gracefully handles web mode. |
| Login page flicker | Eliminated flash of login screen before auth status check completes on web load. |
| Gateway API base path | Fixed multiple issues with API base path configuration for Gateway-hosted deployments. |
| TreeView fuel filters in web mode | Fixed silent filter initialization failure when hierarchy arrives as a prop in web mode. |
| Missing CSS variables | Added 6 missing theme variables for tree node badges, icons, and hover states. |
| License ID for support features | Support chat and support site now receive the actual license key (was always null). |
| Gatekeeper error codes | Added missing PASSWORD_REQUIRED and INVALID_PASSWORD error code mappings. |
Behavioral Changes
| Change | Description |
|---|---|
-portfolio → -port | Command module updated to use -port flag (matching iPool v26.3 rename). |
| NoDis mode in UI | Converted from boolean to 3-state selector (Dispatch / NoDis / NoDis+ESites) in the Scenario Designer. |
| Highcharts branding | "Highcharts.com" watermark removed globally from all charts. |
| Portfolio sub-group labels | "Portfolio Stations" renamed to "Sites" across the app to align with iPool terminology. |
| Gateway version fallback | Default Gateway version fallback changed from '2.7.0' to '3.0.0' (no v2 Gateway exists). |
Breaking Changes (for integrations/scripts)
-portfolioflag renamed to-portin the Command Module — existing saved templates using-portfolioneed to be re-saved.
PART 3: Key Themes for Support Content
Priority Topics for Support Website
1. New CLI Flags Reference
All new flags need dedicated documentation:
| Flag | Purpose | Key Detail |
|---|---|---|
-port <ID> | Load specific portfolios | Replaces -portfolio. Accepts multiple IDs or ALL |
-histskip | Skip missing data days in historical sim | Logs skipped days, continues processing |
-genlist <file> | Reconcile generator registry from IEMOP | Add -updatedb to persist changes |
-CAPEGFile <file> | Update max capacities from IEMOP CAPEG report | In-memory only, does not write to DB |
-p <file> | Load external price profile CSV | Always a file path, never a participant ID |
-FCMax <MW> | Set target peak demand for forecast flexing | Requires -ObID and -DFac. Only works for 32+ day forecasts |
-opELP ALL | Enable ELP optimisation for all storages | Individual storage IDs also accepted |
-remark "text" | Append text to scenario description | Appears in saved scenario and ScenInfo.csv |
-NoDis | Skip dispatch, revalue revenue only | Combine with -port and -p for RECALC workflow |
2. Zonal Reporting Guide
Zones activate automatically when regions have a Zone database field set. Document the 3 WESM zones (CLUZ, CVIS, CMIN), the 4 new report files, and the -iprul pricing rule flag.
3. Contract Tracing & Portfolio Enhancements
Both iPool (TraceCon.csv, ScenObj.csv contracts section) and Apollo (contract dashboards, portfolio sub-groups) have significant new contract-related features. Explain the T6/D6 data format and how contracts appear in the Apollo tree.
4. RECALC / Price Revaluation Workflow
Step-by-step guide: run simulation → revalue with -NoDis -port <ID> -p Prices.csv. Explain what changes (revenue/cost) and what doesn't (dispatch/generation).
5. Apollo Web Access
Document what's available in web mode vs. Electron-only features. Explain Gateway vs. Express authentication.
6. Vantage Module
Complete rewrite of Vantage documentation needed. Cover the cards-based UI, setup wizard, calibration workflow with examples, and the Standard/Custom forecast toggle.
7. Command Module Redesign
New 3-column layout with 100% flag coverage. Update all screenshots and navigation instructions. Document the Classic View toggle.
8. ELP Optimisation Guide
Explain the duck-curve concept, LDC peak-lopping strategy, optimal charging windows, and the difference between -opELP (changes dispatch) and -opbid (report only).
9. Reserve Revenue
Document the RTDRS/RTDOPRSVSUMM file requirements, the -rep 3 minimum report level, and where reserve data appears in Summary.csv. Explain the 4 reserve types (Fr, Ru, Rd, Dr).
10. Demand Forecasting (iLoad)
Document the 4 iLoad modes, the scaling vs. flexing distinction, the -ObID -DFac -FCMax syntax, and the 32-day threshold for long-term forecasting.
Known Issues / Caveats for Support Team
- MCDebug.log — iPool writes
MCDebug.logunconditionally toC:\TEMP\during Monte Carlo runs. This may be a debug artifact; flagged for review. - Calibration is Electron-only — Vantage user calibration features do not work in web mode.
- Web mode limitations — Command Module, Database Editor, Vantage downloads, and license validation are not available in Apollo web mode.
- Reserve data requires
-rep 3— At report levels 0, 1, or 2, WESM reserve files are silently skipped and reserve revenue shows as zero. No error or warning is displayed. -FCMaxrequires 32+ day forecast — For forecasts shorter than 32 days, the-FCMaxtarget peak is silently ignored; only-DFacscaling applies.- Price caps not in auto-generated Defaults.csv —
PrcCapCOALandPrcCapCCGTmust be manually added toDefaults.csv; they are not included when the file is auto-generated. - CFAC station names — Users must type exact MHCF CSV column header names for calibration stations (~120 VRE stations). No autocomplete or validation is provided.
- CLI Reference doc errors — The internal CLI Reference (PKG-70) incorrectly states that
-ptakes a participant ID in RECALC mode. It always takes a file path. Portfolio scoping uses-port.
Document generated: 2026-04-23 Sources: iPool_CHANGELOG.md (v26.022–v26.04), APOLLO_CHANGELOG.md (Unreleased, Feb–Apr 2026), verified against iPool and Apollo source code