Skip to content

Commit 67bd22d

Browse files
committed
Spec: mark tomlkit array-comment risk as de-risked via spike
1 parent b108e06 commit 67bd22d

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

‎docs/superpowers/specs/2026-05-31-uv-constraint-dependencies-design.md‎

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,26 @@ Erweiterung von `_update_pyproject` in [src/mxdev/uv.py](../../../src/mxdev/uv.p
8989
- Leeres Filterergebnis → Key nicht schreiben; ein bestehender, mxdev-verwalteter Key wird in
9090
dem Fall geleert/entfernt, damit kein veralteter Stand stehen bleibt.
9191

92-
### ⚠️ Technisches Hauptrisiko: tomlkit & Array-interne Kommentare
93-
94-
Array-interne Kommentare über viele Zeilen sind die heikelste tomlkit-Stelle. **Früh im Plan
95-
verifizieren** (kleiner Spike), dass tomlkit interspersed comments in einem multiline-Array
96-
korrekt **und idempotent** serialisiert (zweiter Lauf = byte-identisch).
97-
98-
Falls tomlkit das nicht sauber round-trippt, **Fallback** (Reihenfolge bleibt erhalten):
99-
Herkunft als **Inline-Kommentar pro Eintrag** statt als eigene Kommentarzeile, z.B.
100-
`"Zope==6.0", # from <url>`. Das unterstützt tomlkit zuverlässig. Die begin/end-Blockheader
101-
werden dann zu einem Inline-`# from <url>`-Suffix pro Eintrag verdichtet; die disabled-Marker
102-
entfallen in diesem Fallback.
92+
### Technisches Hauptrisiko: tomlkit & Array-interne Kommentare — ✅ durch Spike abgesichert
93+
94+
Array-interne Kommentare über viele Zeilen waren die heikelste tomlkit-Stelle. Ein Spike
95+
(tomlkit 0.15.0) hat den Hauptweg bestätigt:
96+
97+
- `arr.add_line(comment="…")` erzeugt eine eigenständige Kommentarzeile im multiline-Array;
98+
`arr.add_line("Zope==6.0")` einen Eintrag.
99+
- Quell-Gruppen mit `# begin/end constraints from`-Headern bleiben in Reihenfolge erhalten.
100+
- Environment-Markers bleiben erhalten (valides TOML; `tomllib` liest sie korrekt zurück).
101+
- Ersetzen eines bestehenden managed-Arrays entfernt alte Einträge; andere pyproject-Sektionen
102+
(`project`, `override-dependencies`, `[tool.uv.sources]`) bleiben unangetastet.
103+
- **Idempotenz bestätigt:** zweiter Lauf ist byte-identisch zum ersten.
104+
105+
Implementierung: Array bei jedem Lauf komplett neu bauen und per
106+
`doc["tool"]["uv"]["constraint-dependencies"] = arr` ersetzen.
107+
108+
**Fallback (nicht benötigt, nur als Notnagel dokumentiert):** Herkunft als Inline-Kommentar
109+
pro Eintrag (`"Zope==6.0", # from <url>`). Wird nur relevant, falls eine künftige
110+
tomlkit-Version die standalone-Kommentarzeilen brechen sollte; ein Idempotenz-Test im
111+
Test-Suite fängt das ab.
103112

104113
### 3. Opt-out
105114

0 commit comments

Comments
 (0)