Commit graph

32 commits

Author SHA1 Message Date
Nora
0f3f07835b docs: Release-Abschluss v1.0.0 (Forgejo) + Retrospektive im Ledger
Some checks failed
CI / hassfest (push) Has been cancelled
CI / HACS validation (push) Has been cancelled
CI / pytest (latest) (push) Has been cancelled
CI / pytest (min) (push) Has been cancelled
- Phase 7: Code auf Forgejo its-consulting/what_to_wear (main), v1.0.0 getaggt +
  Release-Eintrag. GitHub-Mirror/brands-PR/HACS-Default bewusst als Benutzer-Schritte
  aufgeschoben (E-3). Platzhalter-Icons fuer v1.0.
- Retrospektive v1.0.0 dokumentiert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 17:42:00 +00:00
Nora
b95c0101a8 chore: ruff-clean (line-length 110, B905/UP042 ignoriert) + Release-Stand
Some checks are pending
CI / hassfest (push) Waiting to run
CI / HACS validation (push) Waiting to run
CI / pytest (latest) (push) Waiting to run
CI / pytest (min) (push) Waiting to run
- Alle Integrationsdateien ruff-clean (E/F/I/UP/B); B907/UP042 als opinioniert
  ignoriert, restliche E501/B007 behoben. Suite gruen 188/188.
- Ledger: Stand RELEASEFERTIG — 23 Stories + Gate 1/2/3 durch, E2E verifiziert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 16:05:28 +00:00
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
9a74d40194 feat(5.3): README, E2E-Verifikation & Release-Doku — alle Stories fertig
Story 5.3 (Suite gruen 182/182):
- README.md: Pflichtabschnitte Datenschutz de+en (FR-6.5) + at-rest/Backup (FR-6.4)
  + LLM-Restrisiko (AD-16), Inventar-Loeschwarnung (FR-2.4), YAML-Mode-Schritt (AD-12),
  Blueprint-Import-Badges (FR-7.4), Custom-Repository-Install (S-3).
- CHANGELOG.md, docs/beta/PROTOCOL.md, manifest.version=1.0.0.
- tests/test_e2e_golden_path.py: End-to-End im echten HA-Core (phcc) — Install ->
  Beispiel-Set -> Sensor-Outfit -> Karten-Ressource -> Service; NFR-1 (keine Netzlast
  im Default) + C-2/NFR-2 (keine Blocking-Warnung) asserted.
- Alle 23 Stories (5 Epics) implementiert, getestet, per-Story-reviewed, committet.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:43:31 +00:00
Nora
1bfb1b5290 feat(5.2): CI-Matrix, HACS/Brands/Lizenz-Konformitaet
Story 5.2 (Suite gruen 178/178):
- LICENSE (Apache-2.0, E-1) + NOTICE (keine gebuendelten Fremdlizenzen, NFR-9).
- .github/workflows/ci.yaml: Matrix min(Py3.13+phcc0.13.225=HA2025.3.4)/latest(Py3.14),
  hassfest + hacs/action, permissions contents:read (AD-10/NFR-4/NFR-5).
- brands-assets/custom_integrations/what_to_wear/icon.png(256)+icon@2x.png(512)
  (Platzhalter, vor brands-PR ersetzen) + brand/-Ordner in der Integration (ab 2026.3).
- tests/test_release_metadata.py: Konformitaet LICENSE/NOTICE/hacs.json/manifest/Icons/CI.
- CI-gruen bezieht sich auf den Runner, entkoppelt vom GitHub-Mirror (E-3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:38:30 +00:00
Nora
2b9fa1f399 feat(5.1): vollstaendige i18n-Validierung (de/en-Paritaet)
Story 5.1 (Validierungs-Tests, Suite gruen 172/172):
- tests/test_i18n.py: en/de-Key-Parität, nur hassfest-erlaubte Top-Level-Keys,
  alle Uebersetzungs-Leaves nicht-leer, dynamischer Katalog (texts.py) deckt de+en
  fuer alle RequirementKeys/Noten/Fehler/Beispiel-Set, Sprachbindung differenziert (AD-13/FR-8.1).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:35:43 +00:00
Nora
34d028c01a feat(4.4): Diagnostics-Whitelist — Epic 4 komplett
Story 4.4 (TDD, phcc, Suite gruen 167/167):
- diagnostics.py: Whitelist statt redigiertem Dump — Options ohne Secrets, KEIN
  entry.data-Dump (Entity-ID), Stueck-ANZAHL je Kategorie (gegen Enum normalisiert,
  nie Namen), keine source/Namen; Substring-Test beweist kein Leak (AD-5/FR-6.4).
- luna-pro-Security-Review: 2/5 Findings uebernommen, 3 verworfen (Evidenz im Ledger).

Epic 4 (optionaler LLM-Ton) komplett: Optionen+Disclosure, Phraser, Client, Diagnostics.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:34:17 +00:00
Nora
49c30fd320 feat(4.3): LLM-Client (raw-HTTP, gehaertet) & Ton-Fallback
Story 4.3 (TDD, phcc/aioclient_mock, Suite gruen 165/165):
- llm/client.py: async_phrase — async_get_clientsession, URL-Konstanten,
  allow_redirects=False, asyncio.timeout(18s), Body-Cap 64KB via iter_chunked,
  ein Versuch; OpenAI Bearer / Anthropic x-api-key+anthropic-version; jeder
  Fehler -> (None, reason) llm_auth/llm_timeout/llm_error (AD-6).
- coordinator._apply_llm_tone: bei aktivem LLM phrase+validate -> tone=llm/llm_text,
  sonst tone=rules + reason in data_notes (AD-16, NFR-7-Budget).
- luna-pro-Security-Review: 3/4 Findings uebernommen, 1 verworfen (llm_invalid-Evidenz).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:30:20 +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
5bfd969260 feat(4.1): LLM-Optionen & Datenschutz-Disclosure
Story 4.1 (TDD, Suite gruen 148/148):
- config_flow.py: additive LLM-Sektion im Options-Flow — Passwort-Selector (Key nie
  vorbefuellt), leeres Feld=Key behalten, Deaktivieren=Key loeschen, Provider-Whitelist
  serverseitig, Whitespace-Key als leer behandelt (AD-5/FR-6.1).
- translations: Datenschutz-Disclosure de+en (Stuecknamen/Wetter/Sprache, Drittland,
  at-rest/Backup) als Step-Description (FR-6.5).
- luna-pro-Security-Review: 3/4 Findings uebernommen, 1 verworfen (Disclosure-Evidenz).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:18:39 +00:00
Nora
3336fc0c2c feat(3.2): Schema-Versionierung, Migration & Options-Robustheit
Story 3.2 (TDD, phcc, Suite gruen 141/141):
- __init__.py: async_migrate_entry (v1->v1 no-op, NFR-10/AD-8).
- const.py: sanitized_options — fehlend->Default, typfalsch->Default+Warn,
  unbekannt->erhalten, Bereichs-/isfinite-/HH:MM:SS-Pruefung, non-Mapping-Guard,
  nie Setup-Abbruch (AD-8).
- coordinator._options + Switchover-Listener nutzen den Sanitizer.
- luna-pro-Story-Review: 4/5 Findings uebernommen, 1 verworfen (Version-Evidenz).
  Eigener Fund: Mapping-vs-dict-Guard (entry.options=MappingProxyType) korrigiert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:13:25 +00:00
Nora
ff35d62679 feat(3.1): Options-Flow (Schwellen, Offset, Umschaltzeit, Entität)
Story 3.1 (TDD, phcc, Suite gruen 135/135):
- config_flow.py: WhatToWearOptionsFlow (Property-Muster), _build_options
  (Validierung+Normalisierung, Bandgrenzen strikt monoton, HH:MM:SS kanonisch,
  LLM-Block bewahrt), atomares async_update_entry(data+options)+abort -> ein Reload.
- async_test_entity als Modulfunktion mit switchover-Param (Zieldatum korrekt).
- coordinator/__init__: data-Snapshot -> Reload auch bei Wetter-Entitaet-Wechsel.
- translations options/abort/error; async_get_options_flow.
- luna-pro-Story-Review: 7/7 Findings uebernommen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 15:04:14 +00:00
Nora
8effa251cf feat(2.5): Blueprints Push & TTS — Epic 2 komplett
Story 2.5 (deklaratives Artefakt, Struktur-Validierung, Suite gruen 130/130):
- blueprints/automation/what_to_wear/notify_push.yaml: device(mobile_app)+time+
  boolean, Bedingung changed/gaps_count/alert, notify.mobile_app_ via slugify.
- announce_tts.yaml: tts+media_player+trigger-Selector, tts.speak.
- Beide: what_to_wear.recommend via response_variable, rec.llm_text || full_text,
  min_version 2025.3.0, gehaertete Templates (.get()+Defaults), continue_on_error.
- luna-pro-Story-Review: 5/6 Findings uebernommen, 1 verworfen (flat-response-Evidenz).

Epic 2 (15-Minuten-Wow) komplett: Kleiderschrank->Karte->Service->Push/TTS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:55:01 +00:00
Nora
dc941a127f feat(2.4): Service what_to_wear.recommend (OPTIONAL-Response + Event)
Story 2.4 (TDD, phcc, Suite gruen 127/127):
- services.py: SupportsResponse.OPTIONAL, await coordinator.async_refresh
  (Coordinator-Lock serialisiert -> Response post-Call frisch, AD-11), Event
  immer, stale-Stempelung aus last_success_utc, ownership-getrackte Registrierung.
- services.yaml + translations services.recommend; __init__ Registrierung/Cleanup.
- Frische-Garantie + Parallel-Serialisierung getestet.
- luna-pro-Story-Review: 2/4 Findings uebernommen, 2 verworfen (Evidenz im Ledger).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:48:01 +00:00
Nora
e1ef05ef34 feat(2.3): read-only Lovelace-Karte + Auto-Registrierung
Story 2.3 (TDD, phcc, Suite gruen 122/122):
- frontend.py: async_setup_card (StaticPath + Lovelace-Ressource idempotent,
  Storage-Mode-Attribut-Zugriff, ?v= Cache-Busting, race-safe via Lock),
  async_unregister_card_resource; __init__ async_remove_entry (AD-12).
- www/what-to-wear-card.js: Vanilla-JS Custom-Element, XSS-sicher (nur textContent/
  createElement), Platzhalter, stale+tone-Indikator, Zieldatum+Label, Null-Guards.
- luna-pro-Story-Review: 6/7 Findings uebernommen, 1 verworfen (dependency-Evidenz).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:43:01 +00:00
Nora
7d2f434828 feat(2.2): Beispiel-Kleiderschrank (12 §8-Stücke beim Setup)
Story 2.2 (TDD, phcc, Suite gruen 118/118, stabil):
- logic/texts.py: example_items(lang) — 12 §8-Stücke, Namen de/en lokalisiert,
  englisches Schema, Handschuhe bewusst fehlend (J4-Luecke, FR-1.5).
- config_flow.py: create_example-Checkbox -> async_create_entry(subentries=),
  nur im initialen user-Step (single_config_entry -> kein Duplikat).
- tests: §8-Frost/Regen-Abnahmetest mit echtem Set; conftest entlaedt Entries
  (kein Coordinator-Timer-Flake unter Randomisierung).
- luna-pro-Story-Review: 2/2 Findings uebernommen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:36:43 +00:00
Nora
e877efa265 feat(2.1): Kleidungsstücke verwalten (ItemSubentryFlow)
Story 2.1 (TDD, phcc, Suite gruen 114/114):
- config_flow.py: async_get_supported_subentry_types + ItemSubentryFlow (user +
  reconfigure mit Kompat-Accessor 2025.3/2025.4), Item-Schema (AD-22), Validierung
  (name 1-60, temp_range), Werte-Erhalt bei Fehler.
- coordinator/__init__: Options-vs-Subentry-Unterscheidung via Snapshot (Options->reload,
  Subentry->refresh, AD-7).
- translations/{en,de}.json: config_subentries + selector-Optionen (AD-13).
- luna-pro-Story-Review: 3/4 Findings uebernommen, 1 verworfen (Evidenz im Ledger).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:29:52 +00:00
Nora
d603947a14 feat(1.9): Sensor sensor.what_to_wear — Epic 1 komplett
Story 1.9 (TDD, phcc, Suite gruen 108/108) — schliesst Epic 1 ab:
- sensor.py: CoordinatorEntity+SensorEntity, stabile ID sensor.what_to_wear
  (unique_id + self.entity_id vor add_entities), Stale-Besitz (Einmal-Timer auf
  last_success+6h), native_value=to_state, extra_state_attributes=to_attributes
  (kein llm_text), leerer Schrank=ok (AD-2/14/15).
- __init__.py PLATFORMS=[SENSOR]; translations entity-Name de/en.
- luna-pro-Story-Review: 2/3 Findings uebernommen, 1 verworfen (to_state-Evidenz).

Epic 1 (Wetter->Outfit->Sensor) vollstaendig: 9 Stories, installierbar & sichtbar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:20:07 +00:00
Nora
95a077f0c1 feat(1.8): Config-Flow (Test-Abruf, 4 Fehler) + Entry-Lebenszyklus
Story 1.8 (TDD, phcc, Suite gruen 105/105):
- config_flow.py: EntitySelector + Offset, sofortiger Test-Abruf, 4 unterscheidbare
  uebersetzte Fehler (no_weather_entity/no_forecast/forecast_too_short/temporary).
- __init__.py: async_setup/unload_entry, Coordinator + Zeit-/Entity-Listener leak-frei
  via async_on_unload, update_listener->reload, PLATFORMS=[] (Sensor kommt 1.9).
- translations/{en,de}.json (inkrementell, AD-13); requirements-test.txt (yanked-Pin
  + frontend); conftest hass_storage gegen Lingering-Timer.
- luna-pro-Story-Review: 2/3 Findings uebernommen, 1 verworfen (Evidenz im Ledger).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 14:15:45 +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
5f5cdac259 feat(1.6): Wetter-Adapter — WeatherProvider-Port + HA-Entitaet
Story 1.6 (TDD, phcc, Suite gruen 79/79):
- weather/provider.py: runtime-checkable Protocol WeatherProvider (INV-6).
- weather/ha_entity.py: get_forecasts (blocking+return_response), Feature-Check
  (nur twice_daily->ForecastUnsupported), dt_util-Parsing/Verwerfen naiver Zeit-
  stempel, Einheiten aus State-Attributen (AD-17/24); defensive Struktur-Guards.
- tests/conftest.py: phcc enable_custom_integrations.
- luna-pro-Story-Review: 4/4 Findings uebernommen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 13:57:32 +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
Nora
2686f253d6 epics: Epic-/Story-Zerlegung final (5 Epics, 23 Stories) — Party-Mode + Readiness
Phase 4 der AI-Dev-Method abgeschlossen:
- 5 Epics, 23 Stories, alle mit Given/When/Then + FR-/AD-Referenzen.
- Pflicht-Party-Mode (4 Linsen Architekt/Dev/PM/UX): Draft reorganisiert —
  '15-Minuten-Wow'-Pfad (S-2) landet Ende Epic 2; grosse Epic-1-Stories gesplittet.
- Readiness-Check (adversarial): READY-MIT-AUFLAGEN, alle 34 FR / 10 NFR / 24 AD
  abgedeckt; 3 Auflagen eingearbeitet (Plattform-Naht, NFR-1-Assert, Reason-Keys).
- Test-Umgebung provisioniert (.venv Py3.13 + phcc 0.13.225 = HA 2025.3.4).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 13:12:33 +00:00
Nora
03dd8b573c arch: Architektur-Spine final (24 ADs) — Gate 2 bestanden, 6-Linsen-Review
Phase 3 der AI-Dev-Method abgeschlossen:
- 4 Recherche-Agenten verifizieren alle genutzten HA-APIs gegen Core-Tag 2025.3.0
  (E-2/NFR-4): min-HA 2025.3 haltbar (Subentry-Reconfigure ab 2025.3).
- Pipes-and-Filters-Kern (logic/, hass-frei) in Ports-and-Adapters-Schale.
- 6 adversariale Reviewer-Linsen -> Spine Rev. 2 (neue AD-19..24: kanonischer
  Payload, Textmodell, Requirement-/Item-/Options-Registry, Parsing-Besitz).
- Gate 2 (luna-pro, qwen offline): 9 Findings, 6 uebernommen / 3 verworfen (Evidenz).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 12:47:24 +00:00
Nora
40570907bf prd: final — E-1 Apache-2.0, E-2 HA>=2025.3, E-3 Forgejo-Quelle+GitHub-Mirror, E-4 Foto->v1.1
Phase 2 (BMAD) abgeschlossen: PRD Rev. 3 final nach 4-Linsen-Validierung,
Gate 1 (luna-pro) und Benutzerentscheidungen. Naechster Schritt: Phase 3 Architektur.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:22:26 +00:00
Nora
8c4af2ea83 prd: Rev. 3 — Gate 1 (luna-pro als qwen-Ersatz) bestanden, 12/12 Findings eingearbeitet
- Zieldatum-Recompute exakt am Umschaltzeitpunkt; Service-Response statt Event-Race
- FR-6.6 objektiv abnehmbar (Ausgabe-Kriterien + Injection-Testkatalog)
- Config-Flow: Timeout + 4. temporaerer Fehlerfall; Offset-Scope nur °C-Schwellen
- Addendum: zusammengesetzte Waermebedarf-Luecke, Lovelace-Registrierungsdetails,
  TZ-Zeitzuordnung + prognose_stand, normatives Beispiel-Set (§8)
- LEDGER: Gate-1-Protokoll inkl. woertlicher NICHT-melden-Liste und Urteilen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:14:04 +00:00
Nora
a6d5635236 prd: Rev. 2 nach adversarialer 4-Linsen-Validierung (28 Findings eingearbeitet)
- BMAD v6.10.0 installiert (bmm, de), {output_folder}-Bug gefixt
- PRD + technisches Addendum (verbindliche Regel-/Degradations-/Mapping-Tabellen)
- Outfit-Komposition (Basis + Schichtsumme), Zieldatum-Logik, Min-HA >= 2025.3,
  HACS-konforme Karten-/Blueprint-Auslieferung, Datenschutz/Injection-FRs,
  messbare Metriken inkl. Retention, Foto -> v1.1 (E-4)
- 4 Detail-Reviews unter docs/reviews/prd/, Urteile im LEDGER (28 uebernommen, 3 verworfen mit Evidenz)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 21:09:12 +00:00
Nora
4d7ef85406 docs: Design-Spec v1 für What to Wear (WTW) + Projekt-Scaffolding
Brainstorming-Ergebnis der AI-Dev-Method (Phase 0/Design):
- HACS-Custom-Integration what_to_wear, Open-Source, standalone in Kunden-HA
- Kleiderschrank-Inventar (Sub-Entries), Regeln→Anforderungen→Matcher, optionaler LLM-Ton (BYO-Key)
- Wetter v1 aus HA-Wetter-Entität; Open-Meteo/LagerLens/CRUD-Karte = v1.1
- LEDGER inkl. Kritiker-Konsultation (gpt-5.6-luna-pro) zur Wetterquelle

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 20:18:10 +00:00