Skip to content

feat: add MET Norway provider with normalization#1

Open
henemm wants to merge 1 commit into
mainfrom
claude/review-project-011CUUZjy9MbhsvNqf7pFKZX
Open

feat: add MET Norway provider with normalization#1
henemm wants to merge 1 commit into
mainfrom
claude/review-project-011CUUZjy9MbhsvNqf7pFKZX

Conversation

@henemm

@henemm henemm commented Jan 11, 2026

Copy link
Copy Markdown
Owner
  • Implement MET LocationForecast 2.0 adapter
  • Normalize API response to schema-compliant format
  • Add symbol mapping (day/night suffix stripping)
  • Add thunder detection (symbol contains "thunder" -> HIGH)
  • Add unit conversion (m/s -> km/h)
  • Include realistic test fixtures and expected outputs
  • Tests: 4 new tests, all passing (6/6 total)
  • Ruff clean, mypy clean for new code

- Implement MET LocationForecast 2.0 adapter
- Normalize API response to schema-compliant format
- Add symbol mapping (day/night suffix stripping)
- Add thunder detection (symbol contains "thunder" -> HIGH)
- Add unit conversion (m/s -> km/h)
- Include realistic test fixtures and expected outputs
- Tests: 4 new tests, all passing (6/6 total)
- Ruff clean, mypy clean for new code
henemm added a commit that referenced this pull request May 10, 2026
#136)

Erste sichtbare Komponente des neuen Trip-Wizards auf /trips/new — die
Wrapper-Hülle mit Stepper, Step-Slot und Footer-Navigation. Step-Inhalte
selbst sind leere Platzhalter; sie werden in den Folge-Issues #161#164
gefüllt.

## Neue Dateien

- frontend/src/lib/components/trip-wizard/TripWizardShell.svelte:
  Shell mit Header (h1 + Eyebrow), Stepper, Step-Slot (Step1Profile,
  Step2Stages, Step3Waypoints, Step4Briefings via {#if currentStep === N}),
  Save-Status-Region (role="status", aria-live="polite", nur sichtbar wenn
  saveStatus !== 'idle'), Footer-Buttons mit dynamischem Speichern-Label.
- frontend/src/lib/components/trip-wizard/Stepper.svelte:
  Pure presentational 4-Step-Indikator. Atom Dot (tone="success") für done,
  Border-Kreis mit Akzent für active, gedämpfter Border-Kreis für pending.
  Connector-Linien zwischen Steps in Akzent oder Faint.
- frontend/src/lib/components/trip-wizard/stepperState.ts:
  Pure-Function `stepperStateOf(index, current): 'done'|'active'|'pending'`
  — testbar ohne DOM-Setup.
- frontend/src/lib/components/trip-wizard/steps/Step{1..4}*.svelte:
  Vier leere Platzhalter mit data-testid-Anker für E2E-Navigationstests.

## Änderungen

- frontend/src/routes/trips/new/+page.svelte:
  Mountet TripWizardShell statt altem TripWizard. WizardState im
  <script>-Block instanziiert (Factory-Pattern, NIEMALS top-level —
  Safari-Reaktivitätsrisiko mit Svelte-5-Runen). Context per
  setContext('trip-wizard-state', state) bereitgestellt.
- frontend/e2e/trip-wizard.spec.ts:
  Outer test.describe → test.describe.skip mit Cleanup-Verweis (alter
  Wizard läuft noch im Edit-Pfad TripEditView.svelte).
- frontend/tsconfig.json + package.json:
  @types/node ergänzt, sodass Test-Dateien (`node:test`, `node:assert/strict`)
  typegeprüft werden können.

## Tests

- Unit: 6 Cases für stepperStateOf — alle grün
- Unit gesamt (inkl. Master-Spec-Tests): 29/29 grün
- E2E: 9 Cases gegen Acceptance Criteria #1, #3-#8, #5a, #11 + 1 Bonus —
  alle grün
- Build: clean
- svelte-check: 0 Errors im #160-Code (verbleibende 23 Errors alle in
  vor-existenten Dateien außerhalb #160)

## TestID-Inventar (Spec §7)

trip-wizard-shell, trip-wizard-stepper, trip-wizard-step-{1..4} (mit
data-state="done|active|pending"), trip-wizard-step{1..4}-{name}
(Step-Slot-Container), trip-wizard-back/cancel/next/save,
trip-wizard-save-status.

## Acceptance Criteria

12/12 erfüllt — siehe docs/specs/modules/epic_136_step0_shell.md.

## Adversary-Validation

VERIFIED. F001 (svelte-check Errors) und F003 (Save-Status-Region rendert
im Idle leer) wurden vor diesem Commit behoben.

## Out of Scope

- Step-Inhalte 1-4 (Folge-Issues #161-#164)
- Step-Validation/canAdvance (Folge-Issue mit Master-Spec-Update)
- Vorlagen-Picker (#165)
- Edit-Pfad-Refactor (Folge-Issue nach #165)

Master-Spec: docs/specs/modules/epic_136_trip_wizard.md (approved 2026-05-09)
Sub-Spec:    docs/specs/modules/epic_136_step0_shell.md (approved 2026-05-10)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
henemm added a commit that referenced this pull request May 17, 2026
#136)

Erste sichtbare Komponente des neuen Trip-Wizards auf /trips/new — die
Wrapper-Hülle mit Stepper, Step-Slot und Footer-Navigation. Step-Inhalte
selbst sind leere Platzhalter; sie werden in den Folge-Issues #161#164
gefüllt.

## Neue Dateien

- frontend/src/lib/components/trip-wizard/TripWizardShell.svelte:
  Shell mit Header (h1 + Eyebrow), Stepper, Step-Slot (Step1Profile,
  Step2Stages, Step3Waypoints, Step4Briefings via {#if currentStep === N}),
  Save-Status-Region (role="status", aria-live="polite", nur sichtbar wenn
  saveStatus !== 'idle'), Footer-Buttons mit dynamischem Speichern-Label.
- frontend/src/lib/components/trip-wizard/Stepper.svelte:
  Pure presentational 4-Step-Indikator. Atom Dot (tone="success") für done,
  Border-Kreis mit Akzent für active, gedämpfter Border-Kreis für pending.
  Connector-Linien zwischen Steps in Akzent oder Faint.
- frontend/src/lib/components/trip-wizard/stepperState.ts:
  Pure-Function `stepperStateOf(index, current): 'done'|'active'|'pending'`
  — testbar ohne DOM-Setup.
- frontend/src/lib/components/trip-wizard/steps/Step{1..4}*.svelte:
  Vier leere Platzhalter mit data-testid-Anker für E2E-Navigationstests.

## Änderungen

- frontend/src/routes/trips/new/+page.svelte:
  Mountet TripWizardShell statt altem TripWizard. WizardState im
  <script>-Block instanziiert (Factory-Pattern, NIEMALS top-level —
  Safari-Reaktivitätsrisiko mit Svelte-5-Runen). Context per
  setContext('trip-wizard-state', state) bereitgestellt.
- frontend/e2e/trip-wizard.spec.ts:
  Outer test.describe → test.describe.skip mit Cleanup-Verweis (alter
  Wizard läuft noch im Edit-Pfad TripEditView.svelte).
- frontend/tsconfig.json + package.json:
  @types/node ergänzt, sodass Test-Dateien (`node:test`, `node:assert/strict`)
  typegeprüft werden können.

## Tests

- Unit: 6 Cases für stepperStateOf — alle grün
- Unit gesamt (inkl. Master-Spec-Tests): 29/29 grün
- E2E: 9 Cases gegen Acceptance Criteria #1, #3-#8, #5a, #11 + 1 Bonus —
  alle grün
- Build: clean
- svelte-check: 0 Errors im #160-Code (verbleibende 23 Errors alle in
  vor-existenten Dateien außerhalb #160)

## TestID-Inventar (Spec §7)

trip-wizard-shell, trip-wizard-stepper, trip-wizard-step-{1..4} (mit
data-state="done|active|pending"), trip-wizard-step{1..4}-{name}
(Step-Slot-Container), trip-wizard-back/cancel/next/save,
trip-wizard-save-status.

## Acceptance Criteria

12/12 erfüllt — siehe docs/specs/modules/epic_136_step0_shell.md.

## Adversary-Validation

VERIFIED. F001 (svelte-check Errors) und F003 (Save-Status-Region rendert
im Idle leer) wurden vor diesem Commit behoben.

## Out of Scope

- Step-Inhalte 1-4 (Folge-Issues #161-#164)
- Step-Validation/canAdvance (Folge-Issue mit Master-Spec-Update)
- Vorlagen-Picker (#165)
- Edit-Pfad-Refactor (Folge-Issue nach #165)

Master-Spec: docs/specs/modules/epic_136_trip_wizard.md (approved 2026-05-09)
Sub-Spec:    docs/specs/modules/epic_136_step0_shell.md (approved 2026-05-10)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants