• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FlexMeasures / flexmeasures / 29407634153
82%

Build:
DEFAULT BRANCH: main
Ran 15 Jul 2026 10:34AM UTC
Jobs 1
Files 169
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

15 Jul 2026 10:17AM UTC coverage: 81.528% (-0.04%) from 81.563%
29407634153

push

github

web-flow
Track devices via a typed device inventory in the StorageScheduler (#2321)

* test: lock multi-device flex-model alignment (currently broken)

Add strict-xfail regression tests for four confirmed device-alignment bugs
in multi-device storage scheduling:

- A stock-only entry listed before device entries shifts every device's
  properties (power capacity, efficiencies) by one, because per-device
  properties are read from the unfiltered flex-model list.
- A device without a state-of-charge sensor silently loses its own SoC
  parameters when a stock-only entry is present, because the synthetic
  stock keys diverge between _prepare and _build_stock_groups.
- Flex-context commitments are assigned device indices by enumerating the
  unfiltered flex-model list, so stock-only entries receive commitments
  meant for devices.
- A device referencing its power sensor only via a nested consumption/
  production output reference is misclassified as stock-only and dropped
  (carried over from PR #2319, which this branch subsumes).

The xfail markers are removed in the commits that fix each bug.

Signed-off-by: F.N. Claessen <felix@seita.nl>

* feat: add a typed device inventory for schedulers

Introduce planning/devices.py: every flex-model entry is classified exactly
once into a DeviceInventory, which becomes the single source of truth for

- entry roles (device / stock-only, extensible to group entries and
  converter ports),
- canonical solver device indices (flexible devices first, then top-level
  inflexible devices, then per-commodity-context inflexible devices),
- stock groups and their SoC parameters (sharing one key space, so
  parameters can no longer be lost to diverging synthetic keys), and
- sensor-id and commodity lookups.

Power sensors are resolved from the top-level sensor field or, failing
that, from a nested consumption/production output reference, so such
devices are no longer misclassified as stock-only entries.

The raw deserialized flex-model... (continued)

175 of 190 new or added lines in 5 files covered. (92.11%)

19 existing lines in 2 files now uncovered.

14671 of 17995 relevant lines covered (81.53%)

0.82 hits per line

Uncovered Changes

Lines Coverage ∆ File
14
91.57
flexmeasures/data/models/planning/devices.py
1
91.03
-0.11% flexmeasures/data/models/planning/storage.py

Coverage Regressions

Lines Coverage ∆ File
17
78.26
-6.1% flexmeasures/data/models/planning/__init__.py
2
91.03
-0.11% flexmeasures/data/models/planning/storage.py
Jobs
ID Job ID Ran Files Coverage
1 29407634153.1 15 Jul 2026 10:34AM UTC 169
81.53
GitHub Action Run
Source Files on build 29407634153
  • Tree
  • List 169
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29407634153
  • 97a5ef1c on github
  • Prev Build on main (#29402415424)
  • Next Build on main (#29442981886)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc