diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 782267e..80b2a89 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,12 +4,26 @@ version: 2 # Central Package Management, so every bump lands in Directory.Packages.props rather than # in individual csproj files. # -# PR-budget policy (see CLAUDE.md): at most 5 Dependabot PRs exist at any time — every -# block bundles its minor+patch updates into ONE collective PR and carries -# open-pull-requests-limit: 1, so majors queue behind the collective PR instead of fanning -# out. The first live run in 2026-08 opened 21 individual PRs at once; that noise level is -# deliberately not allowed to repeat. (Note: any edit to this file makes Dependabot -# re-run every block and supersede open singles with the collective PRs.) +# EDITING THIS FILE IMMEDIATELY RE-RUNS EVERY BLOCK. Dependabot does not wait for the +# Monday schedule after a config change: it re-evaluates all five blocks within minutes of +# the merge, opening new collective PRs and superseding open singles. Batch config edits into +# one change instead of merging them one after another — on 2026-08-07 two consecutive +# taming attempts each set off another wave, and on 2026-08-09 two separate Spectre fixes did +# it again. The waves were the config edits, not a Dependabot malfunction. +# +# PR-budget policy (see CLAUDE.md): every block bundles its minor+patch updates into ONE +# collective PR and carries open-pull-requests-limit: 1. That bounds the COLLECTIVE PRs at +# five — one per block — but it is NOT a cap of five overall: the groups below declare +# update-types [minor, patch] only, so every pending MAJOR falls outside them and arrives as +# its own PR. The realistic steady state is "up to five collective PRs plus one per pending +# major" (measured 2026-08-09: four collective + four majors = eight open). +# +# Majors are deliberately left ungrouped. Bundling them would make the number smaller and the +# review worse: the 2026-08-09 grouped NuGet PR carried a Spectre.Console split past a fully +# green CI, and it was only caught by reading the diff. A major deserves its own PR. +# +# The first live run in 2026-08 opened 21 individual PRs at once; that noise level is +# deliberately not allowed to repeat. updates: - package-ecosystem: nuget directory: "/" diff --git a/CLAUDE.md b/CLAUDE.md index 2c7d634..83c08b5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -78,7 +78,8 @@ ist nicht nötig. **Immer erst `pg_ctl start`, dann `dotnet run`.** ## Arbeitsweise für Claude - **Branching:** Nicht-triviale Arbeit auf einem neuen Branch beginnen, **bevor** editiert wird; nachfragen nur, wenn der Branch-Name unklar ist. Triviale Einzeiler (z. B. `.gitignore`) bekommen **keinen** eigenen Branch/PR — in die laufende Arbeit einfalten. -- **PR-Budget: maximal 5 PRs gleichzeitig.** Gilt für eigene Arbeits-Batches (größere Vorhaben in ≤5 PRs schneiden) genauso wie für Dependabot (`.github/dependabot.yml`: Minor/Patch pro Ökosystem in einem Sammel-PR gebündelt, `open-pull-requests-limit: 1` je Block → hartes Gesamtlimit 5; Majors warten hinter dem Sammel-PR). +- **PR-Budget: maximal 5 PRs gleichzeitig** für eigene Arbeits-Batches (größere Vorhaben in ≤5 PRs schneiden). Für **Dependabot gilt diese Zahl nicht**: `.github/dependabot.yml` bündelt Minor/Patch pro Ökosystem in einen Sammel-PR (`open-pull-requests-limit: 1` je Block → max. 5 **Sammel**-PRs), aber die Gruppen deklarieren nur `update-types: [minor, patch]` — jeder offene **Major fällt heraus und bekommt einen eigenen PR**. Realistisch also „bis zu 5 Sammel-PRs plus je einer pro offenem Major" (gemessen 2026-08-09: 4 + 4 = 8). Majors bleiben bewusst ungruppiert, weil ein Bündel den Review verschlechtert — der Spectre-Split kam 2026-08-09 bei grünem CI durch einen Sammel-PR und fiel nur beim Diff-Lesen auf. +- **Jede Änderung an `.github/dependabot.yml` löst sofort alle Blöcke neu aus** (unabhängig vom Montags-Zeitplan) und erzeugt binnen Minuten neue PRs. Config-Edits deshalb **bündeln**, nicht nacheinander mergen. - **Scope:** Minimaler Root-Cause-Fix. Würde ein Fix deutlich mehr Dateien anfassen als das benannte Problem → stoppen und den geplanten Scope in 3 Bullets nennen, bevor editiert wird. - **PowerShell 5.1 / Windows:** Kein Inline-SQL durch PowerShell-Quoting — Query in eine `.sql`-Datei schreiben und per `psql -f` ausführen. Dateien als UTF-8 **ohne** BOM schreiben. Keine `sed`/Regex-Zeilen-Edits auf Source-Dateien (CRLF bricht sie) — Edit-Tool verwenden. Kein `$args`-Splatting; explizite benannte Parameter. - **Reporting:** Knapp berichten — was geändert, was verifiziert, was offen. Keine Per-File-Walkthroughs, kein Plan-Nacherzählen. Interaktive Rückfragen nur, wenn die Antwort wirklich blockiert.