Commit graph

3 commits

Author SHA1 Message Date
Khalim Conn-Kowlessar
8f7f5b3a88 fix(modelling): set-and-forget trigger state, visible back link, filter clearing
Post-review UX feedback on the run journey:

- The post-trigger card computed its ETA from the just-cleared scenario
  selection, so it always promised "~5 minutes" whatever the run size.
  ETA now comes from the captured run (estimateRunMinutes, TDD'd) and the
  done state is a compact status banner above a still-visible Recent runs
  table, which polls every 5s while a run is moving (historyRefetchInterval,
  TDD'd) — trigger, glance, leave.
- The only way back was a text-xs gray-400 breadcrumb (~2.5:1, sub-AA);
  replaced with an accessible "← Back to {portfolio}" link.
- "Remove all filters" button on Step 2.
- Scenario rows were a checkbox nested inside a button (state invisible to
  screen readers); now a label wrapping a real checkbox.
- Large-run confirm lists the scenario names and selection being committed,
  is labelled, closes on Escape, and starts focus on "Go back".
- Postcode filter no longer fails silently: loading and error-with-retry
  states.
- Run status "Dispatched" reads "Starting up"; scenarios page gains a
  "Run modelling" entry point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 17:37:16 +00:00
Khalim Conn-Kowlessar
83117e90c5 feat(modelling-runs): run config on tasks.inputs; backend contract updates
- The run's config now lives on the task row's new `inputs` column
  (migration PR #361) instead of a config subtask — sub_tasks belong
  entirely to the distributor's execution work.
- Distributor path corrected to /v1/modelling/trigger-run.
- Sub-task granularity is batches, not properties: history shows progress
  as a percentage under the status chip; the Plans column always shows the
  plan count (batch counts are never comparable to property/plan numbers).
- ADR-0008 amended accordingly.

Live verification of the task write waits for PR #361 to be applied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 10:46:29 +00:00
Khalim Conn-Kowlessar
35eb681f8f feat(modelling-runs): pure domain core — filters, run record, status, bounds
TDD'd per ADR-0008: normaliseRunFilters (canonical postcodes, enum
vocabularies + Unknown, 40-postcode cap, absence = all), buildRunRecord /
parseRunConfig (app-authored task + config-subtask inputs, null-safe
round-trip), selectionSummary, deriveRunStatus (dispatched / in-progress
with subtask progress / complete / failed), isLargeRun (10k gate).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:51:55 +00:00