← EnergyViewExact search and memory work (2026-11-02)
A — exact search
All capacities remain evaluated. No plateau threshold was introduced: monotonicity alone does not prove that a later capacity cannot improve after a plateau. A general reachability truncation was rejected because it changed floating-point tie paths. Only the forced-empty state is pruned, with full original search for every other case. The strict sizing maximum has a deterministic hardware tie-break; the existing 95% recommendation rule is unchanged. Finite time-budget prioritisation is preserved.
Five sequential fresh Node 24 processes per scenario, same machine, no concurrent test/build/benchmark jobs. V8 Inspector sampling at 1 ms records CPU profiles and GC share (not the CLI --cpu-prof flag). Ambient VM contention cannot be excluded. Spread below is full min–max; values in MiB.
| Scenario | Before seconds (range) | A seconds (range) | Before RSS (range) | A RSS (range) | Before / A GC % (range) |
|---|
| dynamic-ev-battery | 21.12 (19.84–25.38) | 19.28 (18.06–20.90) | 986.45 (971.66–1002.03) | 1005.16 (980.98–1053.71) | 8.87 (8.25–10.33) / 7.57 (7.00–7.76) |
| battery-study | 9.83 (9.27–12.80) | 8.77 (7.68–9.97) | 817.82 (778.62–834.62) | 840.04 (830.34–852.17) | 9.32 (8.80–11.18) / 7.90 (7.71–8.79) |
| purchase-plan | 25.81 (21.57–27.14) | 22.84 (21.42–24.31) | 1050.57 (1049.35–1058.55) | 1063.20 (1035.80–1085.85) | 9.19 (8.08–10.00) / 7.59 (7.04–7.82) |
No speedup is claimed: median time differences are smaller than baseline ranges. Peak RSS did not improve. Exact call counts remain unchanged: battery-study dynamicBattery 9,516, purchase-plan 36,330.
Validation: 195/195 tests, lint/typecheck/format, unchanged golden master pass. The test suite includes the three deployment builds and byte-reproducible Pages output. No real-browser behavior was verified in this step.
Reproduce: node scripts/perf/repeated.mjs .perf-results/my-run 5. Call counts: node scripts/perf/count-calls.mjs battery-study .perf-results/calls.json. Raw samples/profiles are local ignored .perf-results artifacts; the checked-in report contains the measured summary.
B1
Reuse bounded (1 MiB, six entries) owned scratch Float64Array buffers and replay checkpoints into the existing buffer. Cached policies and returned traces/profiles are never pooled. Median differences remain within the preceding full timing spreads; no demonstrated speedup or peak-memory reduction is claimed. Initial full-suite run: one new offline fixture failed because SheetJS in a VM cannot write files; the fixture was corrected to use the public buffer writer. Repeat: 197/197 tests pass, unchanged golden master passes, lint/type/format pass. No existing test or reference was weakened.
| Scenario | Before seconds (min–max) | After seconds (min–max) | Before RSS MiB (min–max) | After RSS MiB (min–max) | Before / after GC % (min–max) |
|---|
| dynamic-ev-battery | 19.28 (18.06–20.90) | 18.02 (17.53–18.78) | 1005.16 (980.98–1053.71) | 986.04 (957.81–1004.76) | 7.57 (7.00–7.76) / 8.14 (7.22–8.74) |
| battery-study | 8.77 (7.68–9.97) | 8.34 (7.86–9.08) | 840.04 (830.34–852.17) | 821.38 (806.57–866.65) | 7.90 (7.71–8.79) / 9.26 (7.58–9.74) |
| purchase-plan | 22.84 (21.42–24.31) | 21.79 (20.99–22.48) | 1063.20 (1035.80–1085.85) | 1045.54 (1032.77–1074.98) | 7.59 (7.04–7.82) / 8.03 (7.74–8.99) |
B2
Cache complete-month geometry by immutable profile identity and explicitly share only clock metadata through meter conversion, PV storage, DP storage and curtailment. calendarAt already had a timestamp cache and was not duplicated. Public period arrays remain defensive copies; no parent profile is strongly retained. All 198 tests, unchanged golden, lint/type/format pass, including deployment reproducibility. No overall speed or RSS win exceeds the observed spreads; the isolated peak-period hotspot is lower, but total time is statistically inconclusive. Profiles must remain immutable, as already required by the existing pricing/simulator caches.
| Scenario | Before seconds (min–max) | After seconds (min–max) | Before RSS MiB (min–max) | After RSS MiB (min–max) | Before / after GC % (min–max) |
|---|
| dynamic-ev-battery | 18.02 (17.53–18.78) | 18.69 (17.77–20.62) | 986.04 (957.81–1004.76) | 992.67 (987.46–1046.93) | 8.14 (7.22–8.74) / 7.00 (6.73–7.28) |
| battery-study | 8.34 (7.86–9.08) | 8.31 (7.53–9.66) | 821.38 (806.57–866.65) | 833.24 (806.93–853.88) | 9.26 (7.58–9.74) / 8.32 (7.60–9.79) |
| purchase-plan | 21.79 (20.99–22.48) | 21.62 (20.59–25.16) | 1045.54 (1032.77–1074.98) | 1038.86 (1027.37–1067.43) | 8.03 (7.74–8.99) / 7.20 (6.71–7.77) |
B3 experiment (rejected)
Tested report-local product/profile repricing memoization plus canonical source-product reuse. All 199 tests, golden, lint/type/format pass. Supplemental precise V8 block coverage shows ZERO hits among 11,506 repricing requests in battery-study: existing complete-bill caches already eliminate repeats. Five-run medians show no demonstrated gain; purchase-plan has a 1,235 MiB outlier. This additional runtime cache is rejected and removed in the following commit. The existing reportPricing quotes/rates and historical monthly aggregation caches remain. Precise-coverage times are not benchmark times.
| Scenario | Before seconds (min–max) | After seconds (min–max) | Before RSS MiB (min–max) | After RSS MiB (min–max) | Before / after GC % (min–max) |
|---|
| dynamic-ev-battery | 18.69 (17.77–20.62) | 18.98 (17.34–21.56) | 992.67 (987.46–1046.93) | 999.39 (963.68–1021.51) | 7.00 (6.73–7.28) / 6.71 (6.58–7.35) |
| battery-study | 8.31 (7.53–9.66) | 8.57 (7.44–10.27) | 833.24 (806.93–853.88) | 833.12 (826.12–855.02) | 8.32 (7.60–9.79) / 7.94 (7.27–8.59) |
| purchase-plan | 21.62 (20.59–25.16) | 23.00 (20.11–25.44) | 1038.86 (1027.37–1067.43) | 1060.89 (1006.98–1234.65) | 7.20 (6.71–7.77) / 7.34 (7.00–8.32) |
B3 disposition: runtime code was restored byte-for-byte to the already validated B2 pricing implementation. No unused cache remains. To reproduce the rejected experiment, check out its preceding commit and run the retained scripts/perf/count-repricing-cache.mjs battery-study instrumentation. The next B4 measurements compare against B2, which is the identical runtime baseline.
B4
Remove emptied rolling-cache tracking lists from the strong Set; register reused lists again and release session representatives only when no future-contract entries remain. Retained advice schedules and other-contract entries are unchanged; repeated release/rebuild is covered. All 198 tests, golden, lint/type/format and deployments pass. One new regression initially had a duplicate local name; it was corrected without weakening assertions. Because that short test overlapped the last timing round, the entire fifth round was resampled after all checks completed; superseded raw samples remain marked and are excluded. No total-time or RSS improvement is claimed unless larger than both observed spreads. The baseline is B2, since B3 runtime was restored exactly.
| Scenario | Before seconds (min–max) | After seconds (min–max) | Before RSS MiB (min–max) | After RSS MiB (min–max) | Before / after GC % (min–max) |
|---|
| dynamic-ev-battery | 18.69 (17.77–20.62) | 18.63 (18.21–19.50) | 992.67 (987.46–1046.93) | 985.24 (967.53–994.85) | 7.00 (6.73–7.28) / 6.76 (6.57–7.18) |
| battery-study | 8.31 (7.53–9.66) | 7.86 (7.69–8.96) | 833.24 (806.93–853.88) | 850.03 (826.34–882.06) | 8.32 (7.60–9.79) / 7.98 (7.57–8.15) |
| purchase-plan | 21.62 (20.59–25.16) | 22.32 (20.67–23.88) | 1038.86 (1027.37–1067.43) | 1049.61 (997.78–1070.13) | 7.20 (6.71–7.77) / 7.27 (7.00–7.73) |
Eindstand vóór de presentatieaanpassingen van C
| Scenario | Baseline mediaan s | Eindmediaan s | Baseline/eind piek-RSS mediaan MiB | Baseline/eind GC mediaan % |
|---|
| dynamic-ev-battery | 21.12 | 18.63 | 986.5 / 985.2 | 8.87 / 6.76 |
| battery-study | 9.83 | 7.86 | 817.8 / 850.0 | 9.32 / 7.98 |
| purchase-plan | 25.81 | 22.32 | 1050.6 / 1049.6 | 9.19 / 7.27 |
Alle medianen en min–maxspreidingen per tussenstap staan hierboven en in abc-five-runs.json. Lagere medianen leveren hier geen bewezen forse totale versnelling op: verschillen blijven kleiner dan de baseline-spreiding. Het piekgeheugen blijft rond één GiB voor de zwaarste scenario's. Dit mobiele risico is dus niet opgelost. De nulmeting van deze machine gebruikt Node 24; de eerder aangeleverde Node 22-auditcijfers zijn geen rechtstreekse vergelijkingsbasis.
De extra herprijzingscache is bewust verwijderd na nul treffers. De bestaande cache voor maandkalenders/afrekeningen blijft staan. De bestaande convexe Monge-versnelling in de DP is niet nogmaals vervangen: dit was laagste prioriteit en een nieuwe solver brengt risico voor exacte tie-breaking mee. Geen financiële regel, tariefbestand of golden-referentie is gewijzigd. De volledige reeks batterijgroottes blijft beschikbaar; het aantal DP-oproepen is niet gereduceerd.
Metingen zijn Node-/synthetische analysemetingen, geen mobiele browsermetingen. De CPU-profielen zijn gemaakt met V8 Inspector op 1 ms, niet met de CLI-vlag --cpu-prof. Er wordt geen claim gemaakt over iOS-geheugen, mobiele time-to-result, Lighthouse of Long Tasks op basis van deze Node-cijfers.
C — vernieuwing en presentatie
grootte, URL/redirects, bestaande V-test/netparsers, productaantallen, eindige tarieven, gasgrenzen en twaalf curvemaanden met Belgische klokwissels.
- Nieuwe build-time downloader ontdekt officiële VNR-bestanden, controleert
curve november, stroom- en gasnettarieven 2026 en de Fluvius-gemeentemapping. Alles bleef een voorstel buiten de canonieke appdata. De oude oktobercurve opnieuw importeren geeft maximaal 1,99e-13 EUR/MWh afrondingsverschil per maand.
- Het volledige live download-/validatiepad is uitgevoerd voor V-test oktober,
geven geen nieuwe waarnemingsdatum of PR, ook niet alleen door een andere URL. Een lokale Git-smoketest controleert de expliciete lease vanuit een single-branch checkout en bescherming tegen gelijktijdige edits. De echte GitHub-hosted workflow, repositoryrechten en PR-aanmaak zijn niet uitgevoerd: deze checkout heeft een Sites-bronrepository, geen GitHub Actions-runner.
- De dagelijkse GitHub Action maakt uitsluitend voorstel-PR's. Identieke bytes
Een ontbrekende gas-bijwerkdatum blijft expliciet onbekend. Geen nieuwe browserrequests. Datumtest alleen via ?debug=1; bestaande actieve simulatie behoudt waarschuwing en reset. Uur-/dagimportmelding noemt jaarverbruik als alternatief. De UTC-maandgrens en harde stale-curve-weigering blijven intact.
- Bronnen en methode toont publicatiemaand en bekende bijwerk-/controledag.
formatcontrole slagen. Lint/typecheck houden de bestaande auditbaseline aan (738/492 bestaande meldingen, nul nieuwe groepen). De suite controleert de drie deployments en byte-identieke Pages-builds. Een nieuwe dataversietekst werd na de bestaande 'geen gas'-guard geplaatst; de bestaande regressietest bleef ongewijzigd. Een eerder voortijdig geëindigde lange controleketen is vervangen door een volledig afgeronde zelfstandige testuitvoering.
- Definitief: 199/199 tests, ongewijzigde golden master, lint, typecheck en
?debug=1 toont de datumtest; bronnenpagina toont oktober en echte bestaande bijwerkdata. Visueel de desktopinstellingen bekeken. Geen claim over iOS, Android, Firefox, 360-px layout, throttled browserperformance of echte Home Assistant-installatie: die zijn in deze ronde niet getest.
- Echte Chrome-preview gecontroleerd: gewone instellingen zonder datumtest;
Brononderzoek, voorwaarden, handmatige heffingencheck en review-/releaseproces: docs/data-renewal.md. Open keuze: eventuele vorige-maandcurve met Brusselse maandgrens en coulance tot dag vijf of zeven. Niet geïmplementeerd zonder akkoord. Voor exacte batterijzoekruimte is geen stopdrempel geselecteerd.