Nora
|
aae8c38a20
|
security(gate3): Security-Review-Haertung ueber 4 Pakete (luna-pro)
Phase 6 / Gate 3 — Security-Review auf den fertigen Code, 4 thematische Pakete:
- P1 Secrets+Injection (client/phraser/diagnostics): validate haertet URL/Entity/
Unicode-Umgehungen (// , &entity; , Cc/Cf/Zl/Zp); kein Key-Leak.
- P2 XSS+externe (card/ha_entity/frontend): kein XSS; DoS-Caps (Forecast 400, Karte 60).
- P3 Mutator+Startup (coordinator/__init__/const): nicht-blockierender Startup via
Background-Task, LLM-/Store-Ops defensiv, weather_entity_id-Guard, build_items
NaN/inf+Caps, Warn-Log ohne Secret.
- P4 Flows (config_flow): test_entity exception-frei, _clean_item defensiv, finite
Bandgrenzen + sanitized_options-Normalisierung, echte bool-Coercion, Typ-Log.
- 24 Findings, 14 uebernommen (mit Regressionstests), 10 verworfen mit Evidenz.
Suite gruen 188/188. Gate 3 BESTANDEN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 16:01:31 +00:00 |
|
Nora
|
2996400098
|
feat(4.2): LLM-Phraser mit Prompt-Haertung & Ausgabe-Validierung
Story 4.2 (TDD, reiner Kern, Suite gruen 157/157):
- logic/phraser.py: build_prompt (nur strukturierte Empfehlung, JSON-escaped
Untrusted-Stuecknamen + Ignorier-Instruktion, nie Fotos/Koordinaten/Entity-IDs),
validate (a-e: kein Markup/Link/Code/Steuerzeichen, <=700, jeder Stueckname+Luecke,
>=20; Verstoss->None=Regeltext), Injection-Katalog (AD-16/FR-6.6).
- luna-pro-Security-Review: 4/5 Findings uebernommen, 1 verworfen (Evidenz im Ledger).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 15:24:42 +00:00 |
|
Nora
|
e11e320093
|
feat(1.7): Coordinator (einziger Mutator) + reine Pipeline/Zieldatum
Story 1.7 (TDD, phcc, Suite gruen 97/97):
- logic/pipeline.py: reine End-to-End-Pipeline (normalize->rules->matcher->assemble)
inkl. no-coverage-Fehlerpfad; logic/schedule.py: Zieldatum/Umschaltzeit (halboffen).
- coordinator.py: DataUpdateCoordinator, asyncio.Lock, timeout(10), einheitlicher
Fehler-Contract (UpdateFailed mit Vorgaenger / fehler_prognose sonst), changed via
helpers.storage.Store, last_success_utc, defensiver Item-Aufbau aus Subentries.
- luna-pro-Story-Review: 5/6 Findings uebernommen, 1 verworfen (.time()-naiv-Evidenz).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 14:05:57 +00:00 |
|
Nora
|
2a83ab7394
|
feat(1.5): Texte (de/en) & kanonische Payload-Projektionen
Story 1.5 (TDD, Suite gruen 72/72) — schliesst den reinen logic/-Kern ab:
- logic/texts.py: de/en-Katalog, build_short/build_full (webt Gruende + Datenlage ein).
- logic/assemble.py: reine Recommendation-Zusammenstellung + Sprach-Subtag.
- logic/model.py: to_payload + 4 Projektionen (state/attributes/event/response),
Shedding-Kaskade mit finalem Groessen-Garant, compute_signature (AD-14/19/20).
- luna-pro-Story-Review: 5/6 Findings uebernommen, 1 verworfen (orjson-Evidenz).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 13:52:20 +00:00 |
|
Nora
|
4bf183530e
|
feat(1.4): Matcher — Outfit-Komposition, Schichtung, Aussenschicht, Luecken
Story 1.4 (TDD, Suite gruen 59/59, inkl. normativer §8-Abnahmetest):
- logic/matcher.py: vollstaendiges Outfit (Basis + Schichten top->sweater->jacket
bis Waermebedarf, Hosen-/Schuh-Mindestwaerme), Aussenschicht-Attribute auf
aeusserster Schicht, sprachneutrale Grund-Keys, benannte Luecken (§4/§4a).
- §4.6-Prioritaetskonflikt Waerme<->Attribut, temp-range-Filter inklusiv (AD-22).
- luna-pro-Story-Review: 6/7 Findings uebernommen, 1 verworfen (Evidenz im Ledger).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 13:43:35 +00:00 |
|
Nora
|
6d87e1082b
|
feat(1.3): deterministische Regel-Engine (Requirements aus Normprognose)
Story 1.3 (TDD, Suite gruen 47/47):
- logic/rules.py: Regeltabelle Addendum §3 + §3a-Degradation, Basis-Outfit immer,
Offset genau einmal (+1 = Schwellen +2°C nach oben, mehr Waerme), kanonischer
Merge (max-Prioritaet, warmth-Floor via max), Schwellen aus Options (AD-21/23).
- Doku-Fix: Offset-Beispiel in epics.md-AC korrigiert (Richtung).
- luna-pro-Story-Review: 1 Finding verworfen mit Evidenz (§3a 'uebrige Regeln').
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 13:32:54 +00:00 |
|
Nora
|
67430837c8
|
feat(1.2): SI-Forecast-Normalizer mit expliziter Missingness
Story 1.2 (TDD, Suite gruen 31/31):
- logic/normalize.py: RawForecast -> NormForecast (SI), NormField je Feld,
Einheiten explizit konvertiert (nie geraten), Plausibilitaet nach Konvertierung,
Morgenfenster [06:00,09:00) lokal, hourly-only-Ableitung, Condition-Mapping (AD-4/17).
- luna-pro-Story-Review fand echten Zeitzonen-Bug (UTC->lokal vor Fensterauswertung);
6/8 Findings uebernommen, 1 teils, 1 verworfen (Evidenz im Ledger).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 13:27:48 +00:00 |
|
Nora
|
eff3fa28a9
|
feat(1.1): Skeleton, pure-core Datenmodell, Options-Schema & Layering-Guard
Story 1.1 (TDD, Suite gruen 19/19):
- logic/model.py: frozen Dataclasses (NormField, RawForecast, NormForecast,
Requirement, Item, ChosenItem, Gap, Outfit, Recommendation) + Enums
RequirementKey/Category/Priority (AD-14/21/22).
- const.py: normatives flaches Options-Schema + default_options()-Deepcopy,
TO_REDACT, Timeouts, LLM-URLs (AD-5/6/23).
- manifest.json/hacs.json (min HA 2025.3), Layering-Guard per AST (AD-1).
- luna-pro-Story-Review: 4/6 Findings uebernommen, 2 verworfen (Evidenz im Ledger).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 13:20:42 +00:00 |
|