Skip to content

Commit 6324c61

Browse files
pt9912claude
andcommitted
Fix Prometheus DI layering, PR-filter wording, k3d framing, F-M6-02-01 trigger
Four review findings addressed: - Observability port registration now respects the existing ApplicationServiceRegistration (NoOp) vs. TelemetryRegistration.AddBessTelemetry() (Prometheus) split, like the three existing metrics ports. Registering the Prometheus implementation in the Application composition root would break the layer separation and prevent the telemetry host from swapping in the real adapter. - Cluster-smoke PR-filter wording now distinguishes the two mechanisms: GitHub paths-filter in v1.1.0 stage 1, job-internal skip sentinel from stage 2 onward (since required checks can't use paths). Logical path list stays identical. - "k3d-basiert" claim in the image-strategy block softened to "Cluster-Tool als Slice-Plan-Entscheidung, Vorschlag k3d", since the open-decisions list still lists k3d/kind/minikube as an open choice. - F-M6-02-01 split out of the "Isolation-Trigger" group — its actual trigger per the source spec is tick-budget/performance (sequential per-asset execution exceeding CycleInterval), not isolation. F-M6-02-02 (worker-per-asset) and F-M6-02-03 (per-asset sidecar) now listed separately with their actual triggers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 581319e commit 6324c61

1 file changed

Lines changed: 46 additions & 15 deletions

File tree

docs/plan/planning/next/note-v1.1.0-scope.md

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,27 @@ Diese Notiz fixiert pro Kandidat:
8484
Observability-Port `IOptimizationLockMetrics` analog zu den
8585
bestehenden Ports
8686
(`IOptimizationRunMetrics`/`IControlCycleMetrics`/`IOptimizationCoreMetrics`)
87-
mit Pflicht-Implementierungen:
88-
- `NoOpOptimizationLockMetrics` (Application-Default, gleicher
89-
Slot wie die anderen `NoOp*Metrics`).
90-
- Prometheus-Adapter analog zu den anderen Metrics-Adaptern
91-
(vermutlich im selben Observability-Adapter-Projekt wie
92-
die übrigen Prometheus-Implementierungen).
93-
- Unit-Test für die Gauge-Ausgabe (gibt der Adapter den
94-
aktuellen Tabellen-Stand korrekt frei, Label-Set passt).
95-
- DI-Registrierung in `ApplicationServiceRegistration` analog zu
96-
den vorhandenen Metrics-Ports.
87+
mit Pflicht-Implementierungen und der bestehenden
88+
**Layer-Trennung zwischen Application- und Telemetry-Adapter**:
89+
- `NoOpOptimizationLockMetrics` in
90+
`BatteryEms.Application.Observability` (Default), registriert
91+
via `ApplicationServiceRegistration` — wie
92+
`NoOpOptimizationRunMetrics` und die anderen NoOp-Defaults.
93+
- `PrometheusOptimizationLockMetrics` in
94+
`BatteryEms.Adapters.Telemetry/Prometheus/`, registriert in
95+
`TelemetryRegistration.AddBessTelemetry()` neben den
96+
bestehenden `PrometheusControlCycleMetrics`,
97+
`PrometheusOptimizationRunMetrics` und
98+
`PrometheusOptimizationCoreMetrics`. **Nicht** in
99+
`ApplicationServiceRegistration` registrieren — dort gehört
100+
nur der NoOp-Default hin (sonst Layering-Bruch und
101+
Telemetry-Host würde NoOp nicht ersetzen).
102+
- Unit-Test für die Gauge-Ausgabe in den Telemetry-Tests (gibt
103+
der Adapter den aktuellen Tabellen-Stand korrekt frei,
104+
Label-Set passt).
105+
- Registration-Test, dass `AddBessTelemetry()` den NoOp-Default
106+
durch den Prometheus-Adapter ersetzt — analog zu existierenden
107+
Registration-Tests für die anderen Metrics-Ports.
97108
- **Begründung trotz fehlendem externen Trigger:** Präventive
98109
Hardening-Maßnahme; das Risiko-Profil verschlechtert sich mit
99110
jeder produktiven Stunde stillschweigend (Memory-Leak-Klasse),
@@ -242,7 +253,8 @@ Diese Notiz fixiert pro Kandidat:
242253
das Chart tatsächlich gegen einen Cluster (k3d/kind/minikube),
243254
prüft Pod-Health und tear-down.
244255
- **Nach v1.1.0:** Neuer Make-Target `make helm-cluster-smoke`
245-
(k3d-basiert, Compose-Smoke-Vorbild). Workflow-Integration
256+
(Cluster-Tool als Slice-Plan-Entscheidung, Vorschlag k3d,
257+
Compose-Smoke-Vorbild). Workflow-Integration
246258
bewusst **nicht als blockierendes Gate**, sondern als
247259
**path-filtered optionaler PR-Check** plus `nightly`-Schedule
248260
auf `main`.
@@ -318,8 +330,21 @@ Diese Notiz fixiert pro Kandidat:
318330
(kein Path-Filter — Scheduled Runs haben keinen PR-Diff zum
319331
Filtern, und nur ein verlässlich jede Nacht laufender Job
320332
beweist die für die Promotion geforderte Stabilitäts-Serie).
321-
Der PR-Filter gilt für PR-Checks in allen drei Promotion-
322-
Stufen:
333+
Der Filter-Mechanismus wechselt **bei der Required-Promotion**:
334+
- **v1.1.0 (Stufe 1, optionaler PR-Check):** GitHub-`paths`-
335+
Filter im Workflow-Trigger. Wenn keiner der unten genannten
336+
Pfade berührt ist, startet der Job nicht.
337+
- **Ab Stufe 2 (required):** GitHub erlaubt für `required`-
338+
Checks keinen `paths`-Filter (`required` mit `paths` blockt
339+
sonst alle Nicht-Helm-PRs, weil der Job nie startet).
340+
Trigger wird auf `pull_request` ohne `paths` umgestellt, und
341+
der Skip-Sentinel innerhalb des Jobs (`git diff --name-only`
342+
gegen denselben Pfad-Set) gibt bei Nicht-Helm-PRs **Success**
343+
zurück. Die *logische* Pfad-Liste bleibt also gleich; nur
344+
der Mechanismus wechselt von Workflow-Filter zu Job-internem
345+
Skip.
346+
347+
Die logische Pfad-Liste für beide Mechanismen:
323348
- `deploy/helm/**` (das Chart)
324349
- `Makefile` (Target-Definition)
325350
- `.github/workflows/cluster-smoke.yml` (oder wie immer der
@@ -467,8 +492,14 @@ Drift in v1.1.0 wäre Anti-Muster:
467492
- **MPC-Sidecar-First** (F-M5-12) — wartet auf konkreten Sidecar-
468493
Bedarf
469494
- **Multi-Asset-MPC** (F-M6-02-04) — wartet auf Flotten-Use-Case
470-
- **Per-Asset-Sidecar/Worker-pro-Asset** (F-M6-02-01/02/03) —
471-
warten auf Isolation-Trigger
495+
- **Parallel-Fanout im shared Worker** (F-M6-02-01) — wartet
496+
auf Tick-Budget-/Performance-Trigger (gemessene Tick-Dauer
497+
überschreitet `CycleInterval`-Budget, langsames Asset blockiert
498+
andere)
499+
- **Worker-pro-Asset als Deployment-Pattern** (F-M6-02-02) —
500+
wartet auf Isolation-/Fault-Domain-Trigger
501+
- **Per-Asset-Sidecar oder Sidecar-Pool** (F-M6-02-03) — wartet
502+
auf Asset-spezifisches Optimization-/MPC-Backend-Bedarf
472503
- **Edge-Adapter** (F-M6-05-01) — wartet auf konkrete Hardware-
473504
Auswahl
474505
- **Zertifizierungswelle** (F-M6-06-01) — wartet auf TSO-/Anlagen-

0 commit comments

Comments
 (0)