Commit 0e62303
Muse spark (#106)
* feat(charging): overlay Tesla bills, fix energy baseline
Two related charging-accuracy fixes:
1. Charge energy delta baselines now use State() strictly before StartedAt instead of at StartedAt, since Fleet Telemetry can emit the session-start batch after energy has already begun accumulating, causing undercounted energy in both the live handler and the completed-session tracker.
2. New Tesla Supercharger invoice overlay: ChargingHandler.Get resolves the vehicle's VIN and matches it against tesla_charging_history via a new FindBestMatch repo method (closest charge_start_datetime within a 2h window). When a match is found, billed energy/cost/currency/rate are added to the response and preferred for display on the frontend KPI tiles, with vehicle-measured energy shown as a secondary subtitle.
* Fix FSD trip meter glitch attribution
Treat spurious trip-meter resets and implausible counter jumps as discontinuities instead of driven distance. Adds reset/restore cursor logic and tests so include_fields zero snap-backs do not inflate FSD or driving aggregates.
* Add Grok dynamics briefing
Adds a live Grok powertrain read to Driving Dynamics using motor and chassis signals, with interpretation logic and tests. Also adds shared client-side pagination for FSD insight lists and DataTable-backed FSD tables.
* Add telemetry honesty insights
Adds honesty-focused UI across the fleet dashboard, status bar, charging, battery, driving, and FSD views. Surfaces Supercharger bill site/fee metadata, preserves signal ingest timestamps for Tesla physics clocks, paginates physics evidence instead of truncating it, and fixes nav highlighting to prefer the most specific active route.
* feat(driving): scope dynamics history by trip
Add trip selection and date-scoped motor history, preserve active drives, and evenly sample backend history responses across the selected window.
* fix(charging): correct history attribution
Preserve and backfill charge coordinates without creating geofences from stale GPS, use Tesla billed energy for tariff pricing, and resolve date windows in the vehicle timezone.
* Fix sparse FSD drive detail attribution
Expand the drive detail FSD insights range to look around 24 hours so sparse counter bookends are included, preventing unknown/blank attribution for valid deltas. Adds backend and frontend regression coverage for the wider range behavior.
* Scope FSD insights to drive detail
Adds drive_id support for FSD insights with a 7-day bookend lookup and focused attribution, while filtering negligible fidget drives so they do not steal sparse counter deltas. Updates drive detail and list UI to use the drive-scoped hook and omit unknown FSD badges.
* feat: add charging autopilot, OCPP, TCO ledger, and session insights
Wire always-on charge autopilot, shared-charger queue planning, OCPP charge
points, Tesla bill variance, session share reports, TCO fixed ledger, and
related warranty, silence, and trip copilot surfaces.
Register new i18n namespaces (autopilot, chargeQueue, ocpp) so the strict
namespace audit and Docker web build pass. Fix TypeScript i18n count types,
geofence hook typing, and AutomationFull.conflicts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(charging): add charge autopilot
Add per-vehicle autopilot profiles, TOU-based charge previews, health guardrails, and savings tracking. Integrate the configuration and preview panel into Smart Charge with API and UI tests.
* feat: expand charging and automation insights
Add next-charge recommendations comparing home TOU costs with Supercharger quotes, surfaced on dashboards and vehicle details. Expand automation, routine, and alert template catalogs with category filtering, localization, and tests.
* Expand automation and alert templates
Adds ecosystem automation presets and routine templates covering more Tesla commands, locations, charging, climate, media, and security scenarios. Updates catalogue tests and alert rule template coverage thresholds for the expanded preset set.
* feat: storm guardian severe-weather auto-prep
Watches Open-Meteo forecasts at each armed vehicle's home coords and
pre-charges before storms: hourly evaluator raises the charge limit on
fresh warnings when SOC is below target. Includes status/config/events
API, StormGuardPanel on Emergency Resilience, and backend+UI tests.
* feat: cabin comfort autopilot with calendar-aware preconditioning
Polls a per-vehicle ICS subscription, finds the next offsite event in
the lead window, and preconditions once per event (5-minute evaluator).
Includes next/config/now/runs API, ComfortPanel on Automations, offline
refusal for the actuation endpoint, and backend+UI tests.
* feat: warranty claim autopilot drafts service tickets
BuildClaimDraft assembles a ready-to-paste ticket from the owner issue,
live warranty countdown, matched TSBs, ranked symptoms, and evidence.
New claim-draft endpoint, ClaimDraftPanel on Service Intelligence, and
backend+UI tests.
* feat: ghost-driver alerting for unknown-driver drives
Flags recent drives that fit no named profile and sit far from their
cluster centroid (median-adaptive score, deterministic pure function).
New GET /driver-attribution/ghost-drives endpoint plus a GhostDrivesPanel
on the Driver Attribution page with alert banner, score table, and
one-click labelling that re-anchors the cluster.
* feat: supercharger wait-time oracle from fleet history
Predicts queue waits per site and arrival time: hour-of-week demand
from tesla_charging_sessions feeds Little's-law load plus an Erlang-C
queue model (stalls estimated from peak overlap, documented lower
bound). Read-only GET /waitoracle/sites + /forecast; WaitOraclePanel
on the fleet sessions page with site/arrival pickers, verdict hero,
best-hour suggestion, and the full-day wait curve.
* fix(fsd): accept quantized FSD mileage ticks
Allow one Tesla 1-mile wire quantum above the physical travel threshold so valid 10-second counter samples are retained, while still rejecting implausible jumps. Add unit and drive analytics regression coverage.
* fix: align wait-oracle, ghost, claim, comfort, storm with conventions
Route new panels through Icons, SI seconds for wait forecasts, queryPolicy/scopedPath on hooks, ICS host allowlist, catalog i18n keys, and useDataState fatalError surfaces.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(journey): trip sessions with status machine and versioned plans
Slice 1 of Journey Autopilot: persistent journey_sessions
(planned/active/paused/completed/aborted, one active per vehicle,
race-safe conditional transitions) plus append-only versioned plans
for future replan diffs. New /journeys page with session manager:
plan form, status filter, lifecycle actions driven by server
next_statuses, plan history.
Also regenerates routetemplates_gen.go, absorbing 19 previously
unregenerated routes so the freshness gate passes.
* docs: redesign site and add feature catalogue
Refresh the VitePress theme, navigation, landing pages, and onboarding. Add generated screen catalogues, Markdown page tools, and new homepage visuals.
* fix(journey): clamp limits and localize status
Cap journey list limits at 100 with safe defaults and tests. Localize status labels and inherit theme-aware icon colors.
* feat(i18n): add journey status labels
Add English translations for planned, active, paused, completed, and aborted journey statuses.
* test(trips): align journey panel i18n
Update localized JourneyPanel assertions and align journey namespace ordering in English manifests.
* refactor: tighten package boundaries
Extract weekly FSD digest logic from the API package, remove unused helpers, document migrations 235–242, clean up translations and lint findings, and refresh gRPC and telemetry dependencies.
* chore: document packages and update grpc
Adds package documentation and layer annotations, upgrades gRPC to v1.83.2, and removes an unused React test import.
* fix(ci): empty-state audit exemptions and Gitleaks policy fixture mount
EmptyState CTA audit now passes with documented no-action comments.
Gitleaks policy self-test writes fixtures under the workspace and scans
directories so Docker bind-mounts work on self-hosted runners.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): arch ratchet, chart-legend, CodeQL node, visual snapshots
Move fleet state handler into handler/v1/fleetstate so internal/handler/v1
stays under the max_files ratchet. Waive SharedSessionReport legend toggle.
Install Node before CodeQL JS extraction. Refresh Windows visual baselines
from the failing Playwright actuals.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): restore CodeQL SHA pin and run SI gate on ubuntu-latest
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): run SI canonical gate on push so the required workflow has jobs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): classify new mutation hooks for live-mode audit
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): waive FSD observatory pagination in virtualization audit
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): unblock frontend vitest QueryClient, breadcrumbs, and panel tests
Stub chart annotation hooks globally, parent Tesla Physics nested routes,
and keep ChartContainer/page tests from requiring a QueryClient. Align
Power Flow / Temperature Impact / Ghost Drives tests with current UI
and surface ghost-scan errors instead of an empty table.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): show warranty claim draft when query data is present
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): restore i18n provider and annotation hook tests under global stubs
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(web): unblock remaining frontend vitest failures
Clamp Intl fraction digits to 0-20, add a no-op toast fallback when
ToastProvider is missing, unique Smart Charge field ids, catalog
/journeys, and test matchers for Beta/required labels/driver payload.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): stop si-canonical-gate 0s push failures
Drop the push trigger (matches main) and only read runner input on
workflow_dispatch so GitHub does not reject the workflow file.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): run si-canonical-gate on push with a valid runner
Keep the push trigger so required checks fire, but never read
inputs.runner except on workflow_dispatch.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): always run si-canonical-gate on push and PR
Required checks plus path filters produced 0-job workflow-file
failures. Run on every push/PR with ubuntu-latest so the job starts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): move SI canonical gate Python out of invalid YAML
Unindented heredocs made GitHub treat the workflow as a file issue
(0 jobs). Run the checks from .github/scripts/si_canonical_gate.py.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): repair span-budget, proto-gen, and load-test gates
Enable CGO for -race on ubuntu-latest, drop make from proto-gen-check,
and capture teslasync-api logs in the nightly k6 job.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): run k6 on host network so load-test reaches the API
grafana/k6-action isolated localhost from compose-published :8080.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(ci): treat 4xx as smoke-ok and write k6 summary in script cwd
Unauthenticated CI hits ForwardAuth 401/403; only 5xx should fail api_errors.
Write summary.json next to the script so the k6 container can persist it.
* fix(ci): persist k6 summary.json with host uid on bind mount
The grafana/k6 image is non-root, so handleSummary could not write
tests/k6/summary.json and the artifact upload warned with no files.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 55a2804 commit 0e62303
135 files changed
Lines changed: 859 additions & 765 deletions
File tree
- .github
- scripts
- workflows
- cmd/notification-worker
- internal
- ai/tools
- api
- comfort
- datarepair
- exports
- geocode
- journey
- nextcharge
- ocpp
- rul
- sleep
- stormguard
- telemetry
- teslaphysics
- vehicle
- waitoracle
- app
- actioncentersvc
- ownershipintelsvc
- automation/presets
- database
- datarepair
- ocpp
- fsdweekly
- handler/v1/fleetstate
- integrations/nhtsa
- notification/fsddigest
- ops/migrations
- tests/k6
- web
- e2e/.snapshots
- visual-1440-dark/visual.spec.ts
- visual-1440-light/visual.spec.ts
- visual-390-dark/visual.spec.ts
- visual-390-light/visual.spec.ts
- visual-degraded/visual.spec.ts
- visual-density-compact/visual.spec.ts
- visual-density-spacious/visual.spec.ts
- visual-forced-colors/visual.spec.ts
- visual-large-fleet/visual.spec.ts
- visual-long-content/visual.spec.ts
- scripts
- src
- api/hooks
- components/feedback
- features
- analytics/components/weekly-digest
- automations
- components
- pages
- battery
- components
- pages
- charging
- components
- pages
- dashboard/widgets
- driving
- components
- driving-dynamics
- __tests__
- fsd-insights
- pages
- explore
- fleet-ops
- components
- pages
- maps/pages
- notifications/components
- ownership/components
- resale-vault/components
- service-intelligence/components
- settings/components/fleet-setup
- sharing/pages
- trips/components
- vehicles/components
- i18n/en
- lib
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
74 | | - | |
75 | | - | |
76 | | - | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
77 | 89 | | |
78 | | - | |
79 | 90 | | |
80 | 91 | | |
81 | 92 | | |
| |||
88 | 99 | | |
89 | 100 | | |
90 | 101 | | |
91 | | - | |
| 102 | + | |
92 | 103 | | |
93 | 104 | | |
94 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | | - | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
136 | 136 | | |
137 | 137 | | |
138 | 138 | | |
139 | | - | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
140 | 144 | | |
141 | 145 | | |
142 | 146 | | |
143 | 147 | | |
144 | 148 | | |
145 | 149 | | |
146 | 150 | | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
151 | 154 | | |
152 | 155 | | |
153 | 156 | | |
154 | | - | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
155 | 166 | | |
156 | 167 | | |
157 | 168 | | |
| |||
160 | 171 | | |
161 | 172 | | |
162 | 173 | | |
| 174 | + | |
163 | 175 | | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
171 | 181 | | |
172 | 182 | | |
173 | 183 | | |
174 | 184 | | |
| 185 | + | |
175 | 186 | | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
183 | 192 | | |
184 | 193 | | |
185 | 194 | | |
| |||
193 | 202 | | |
194 | 203 | | |
195 | 204 | | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
196 | 209 | | |
197 | 210 | | |
198 | 211 | | |
| |||
0 commit comments