@@ -6,26 +6,29 @@ coordinate-alignment intro rules all have a v1 implementation. The high-level
66schedule lives in [ ` goals.md ` ] ( goals.md ) (opt-in → default → 1.0); this file
77tracks the concrete items per stage.
88
9- One open ** design** decision remains — [ #744 ] MultiIndex storage. No open
10- arithmetic-rule questions.
9+ The one open ** design** decision — [ #744 ] MultiIndex storage — is ** resolved** :
10+ v1 disallows first-class ` pd.MultiIndex ` (a flat dim + auxiliary level coords),
11+ implemented in [ #803 ] . No open arithmetic-rule questions remain; everything left
12+ is rollout + cleanup.
1113
1214## Stage 1 — release v1 (opt-in)
1315
1416Legacy stays the default. The transition surface must already be ** complete**
1517here ([ ` goals.md ` ] step 1: * warn on legacy, raise on v1* ).
1618
17- - [ ] ** Resolve [ #744 ] — MultiIndex storage — before #717 merges.** First-class
18- ` pd.MultiIndex ` vs. a flat dim + auxiliary level coords. §11's
19- stacked-MultiIndex rule and the storage of a ` snapshot ` -style
20- ` (period, timestep) ` dim both depend on it — and §11 ** ships in #717 ** , so
21- changing the model after v1 is released would change observable §11 behaviour.
22- Must be locked (and its implementation in the same release cut) before #717
23- ships v1, not deferred to the default flip.
19+ - [x] ** Resolve [ #744 ] — MultiIndex storage — before #717 merges.** Resolved:
20+ v1 disallows first-class ` pd.MultiIndex ` (flat dim + auxiliary level coords).
21+ §11's stacked-MultiIndex rule and the storage of a ` snapshot ` -style
22+ ` (period, timestep) ` dim both depend on this, and §11 ** ships in #717 ** — so
23+ the implementation ([ #803 ] ) must land in the ** same release cut** as #717 ,
24+ else released §11 behaviour would change when it lands.
2425- [ ] Land [ #717 ] (v1 semantics) → ` master `
26+ - [ ] Land [ #803 ] (v1 MultiIndex drop) with it — same cut, so §11 ships final
2527- [ ] ** Transition surface complete** — every behaviour-change site raises under
2628 v1 * and* warns under legacy (` warn_legacy ` , naming the fix). This is the
2729 "no silent change" guarantee ([ ` goals.md ` ] transitioning goal #3 ): shipping v1
28- with a gap would silently change any model that opts in.
30+ with a gap would silently change any model that opts in. Includes #803 's
31+ MultiIndex rejects and the multi-key-` groupby ` -flat change as new fork sites.
2932- [ ] Changelog note — v1 available via ` options['semantics'] = 'v1' ` ; legacy
3033 remains the default; link [ ` convention.md ` ] .
3134
@@ -40,8 +43,9 @@ here ([`goals.md`] step 1: *warn on legacy, raise on v1*).
4043- [ ] The ** strip** : the concentrated MI machinery (the ` alignment.py `
4144 level-projection subsystem, netcdf MI (de)serialize) * and* the scattered
4245 surface (` assign_multiindex_safe ` ×39, ` isinstance(MultiIndex) ` guards, MI
43- branches) — plus every other ` grep "LEGACY: remove at 1.0" ` marker.
44- Dependency-ordered checklist in [ ` legacy-removal.md ` ] .
46+ branches) — all kept live for legacy until now — plus every other
47+ ` grep "LEGACY: remove at 1.0" ` marker. Dependency-ordered checklist in
48+ [ ` legacy-removal.md ` ] .
4549- [ ] Reframe [ ` convention.md ` ] / [ ` goals.md ` ] — drop the "v1"/legacy framing
4650 once there is only one convention.
4751
@@ -55,15 +59,19 @@ here ([`goals.md`] step 1: *warn on legacy, raise on v1*).
5559
5660## Decisions
5761
58- - [ ] ** [ #744 ] — MultiIndex storage** — the one open design decision; gates the
59- ** v1 release** (§11 ships in #717 and depends on it), not just the default flip.
62+ - [x] ** [ #744 ] — MultiIndex storage** → v1 disallows MI (flat + aux coords),
63+ implemented in [ #803 ] ; must land in the same release cut as #717 (§11 depends
64+ on it).
65+ - [x] ** Legacy warnings live from the opt-in release** → yes; the transition
66+ surface is complete at stage 1, not deferred.
6067- [ ] ** When v1 becomes the default** — pick the release; gated on the migration
6168 guide.
6269
6370<!-- references -->
6471[ #744 ] : https://github.com/PyPSA/linopy/issues/744
6572[ #714 ] : https://github.com/PyPSA/linopy/issues/714
6673[ #717 ] : https://github.com/PyPSA/linopy/pull/717
74+ [ #803 ] : https://github.com/PyPSA/linopy/pull/803
6775[ `goals.md` ] : goals.md
6876[ `docs-plan.md` ] : docs-plan.md
6977[ `legacy-removal.md` ] : legacy-removal.md
0 commit comments