- {WINDOW_PRESETS.map((preset) => (
-
- ))}
{formatDateTime(window.start)} → {formatDateTime(window.end)}
diff --git a/web/src/features/settings/pages/FleetSetupPage.test.tsx b/web/src/features/settings/pages/FleetSetupPage.test.tsx
index f1733cbe39..2c9d702578 100644
--- a/web/src/features/settings/pages/FleetSetupPage.test.tsx
+++ b/web/src/features/settings/pages/FleetSetupPage.test.tsx
@@ -359,7 +359,7 @@ describe('FleetSetupPage source recovery', () => {
return original(...args)
})
renderPage()
- expect(await screen.findByRole('button', { name: 'Refresh data · Error' })).toBeInTheDocument()
+ expect(await screen.findByRole('button', { name: 'Refresh data · error' })).toBeInTheDocument()
expect(await screen.findByText('Auto-refresh on')).toBeInTheDocument()
const steps = screen.getByRole('list', { name: 'Onboarding steps' })
expect(within(steps).getByText('Unknown')).toBeInTheDocument()
diff --git a/web/src/i18n/ar.json b/web/src/i18n/ar.json
index 7d05374025..32884ffb99 100644
--- a/web/src/i18n/ar.json
+++ b/web/src/i18n/ar.json
@@ -32,5 +32,50 @@
"skip_dc": "Skip {{site}} ({{sc}}) — home now is {{home}} for the same energy.",
"charge_home_now": "Charge at home now — the cheapest window is already open (or too far out to wait)."
}
+ },
+ "admin": {
+ "vehicleCost": {
+ "rangeLimit": "اختر نطاقًا لمساحة العمل لا يتجاوز 90 يومًا لعرض تكلفة استيعاب بيانات المركبات."
+ }
+ },
+ "energyFlow": {
+ "rangeLimit": "اختر نطاقًا لمساحة العمل لا يتجاوز 3650 يومًا لعرض سجل الطاقة.",
+ "summary": {
+ "selectedWindow": "نطاق مساحة العمل المحدد",
+ "boundedSource": "تُرشّح الرحلات المكتملة وفق بداية نطاق مساحة العمل ونهايته غير المشمولة؛ وتبقى القدرة المباشرة لقطة مستقلة."
+ }
+ },
+ "science": {
+ "rangeLimit": "اختر نطاقًا لمساحة العمل لا يتجاوز 30 يومًا لعرض الأدلة العلمية."
+ },
+ "chargeAdvisor": {
+ "planningWindow": "تغطي فترة التخطيط الأيام السبعة المحلية القادمة، بدءًا من الغد."
+ },
+ "automations": {
+ "copyName": "{{name}} (نسخة)"
+ },
+ "costAnalysis": {
+ "category": {
+ "home": "المنزل",
+ "supercharger": "شاحن فائق",
+ "public": "عام",
+ "publicDC": "تيار مستمر عام",
+ "workL2": "العمل / المستوى الثاني",
+ "other": "أخرى"
+ }
+ },
+ "anomaly": {
+ "explanation": {
+ "zScore": "تبعد قيمة {{signal}} البالغة {{value}} بمقدار {{sigma}} انحراف معياري عن المتوسط ({{baseline}}).",
+ "belowMinimum": "قيمة {{signal}} البالغة {{value}} أقل من الحد الأدنى الآمن ({{minimum}}).",
+ "aboveMaximum": "تتجاوز قيمة {{signal}} البالغة {{value}} الحد الأقصى الآمن ({{maximum}}).",
+ "increased": "ارتفع {{signal}} خلال آخر 24 ساعة مقارنة بمتوسط سبعة أيام (من {{baseline}} إلى {{value}}).",
+ "decreased": "انخفض {{signal}} خلال آخر 24 ساعة مقارنة بمتوسط سبعة أيام (من {{baseline}} إلى {{value}}).",
+ "increasedPercent": "ارتفع {{signal}} بنسبة {{percent}}% خلال آخر 24 ساعة مقارنة بمتوسط سبعة أيام (من {{baseline}} إلى {{value}}).",
+ "decreasedPercent": "انخفض {{signal}} بنسبة {{percent}}% خلال آخر 24 ساعة مقارنة بمتوسط سبعة أيام (من {{baseline}} إلى {{value}})."
+ }
+ },
+ "widget": {
+ "overview": "نظرة عامة على الأداة"
}
}
diff --git a/web/src/i18n/authorized-canonical-recovery.test.ts b/web/src/i18n/authorized-canonical-recovery.test.ts
index 9541cc9b69..badcb375fb 100644
--- a/web/src/i18n/authorized-canonical-recovery.test.ts
+++ b/web/src/i18n/authorized-canonical-recovery.test.ts
@@ -19022,9 +19022,9 @@ describe('authorized exact canonical catalog recovery attempt3', () => {
...finalFourAdditions, ...acceptedInterveningAdditions,
].map(([key]) => JSON.stringify(key.split('.'))))
const predecessor = entries.filter(([path]) => !exactAdded.has(JSON.stringify(path)))
- expect(predecessor).toHaveLength(30945)
- expect(createHash('sha256').update(JSON.stringify(predecessor)).digest('hex')).toBe("541bef8ba649705697a857a7eea640216ead64e2100f5259c94ad2e7c2987e57")
- expect(entries).toHaveLength(32977)
+ expect(predecessor).toHaveLength(30966)
+ expect(createHash('sha256').update(JSON.stringify(predecessor)).digest('hex')).toBe("2f0df28fd3480b3742b776566a8b3840ebff51e429f1e9a189307f59f07f5ad1")
+ expect(entries).toHaveLength(32998)
expect(preservedResolutions).toHaveLength(28)
for (const [key, value] of preservedResolutions) expect(nested(catalog, key), key).toBe(value)
expect(catalog.settings.title).toBe('Settings')
diff --git a/web/src/i18n/authorized-owner-recovery.test.ts b/web/src/i18n/authorized-owner-recovery.test.ts
index 9781898735..85d276b825 100644
--- a/web/src/i18n/authorized-owner-recovery.test.ts
+++ b/web/src/i18n/authorized-owner-recovery.test.ts
@@ -427,9 +427,9 @@ describe('same attempt3 authorized feature-owned scalar collision recovery', ()
.toEqual([[path, value]])
}
const predecessor = entries.filter(([parts]) => !acceptedPaths.has(JSON.stringify(parts)))
- expect(predecessor).toHaveLength(32866)
- expect(hash(JSON.stringify(predecessor))).toBe("fe207124835a0058255223e2d0b82af25252cfa8a9101beb65bea2762433acad")
- expect(entries).toHaveLength(32977)
+ expect(predecessor).toHaveLength(32887)
+ expect(hash(JSON.stringify(predecessor))).toBe("63b48fd1eb62455f15e6a3ae62db2ef72c308eb846c7516550ea31a6f1495a25")
+ expect(entries).toHaveLength(32998)
expect(catalog.vehicle).toBe('vehicle')
expect(catalog.dashboard.settings).toBe('Settings')
expect(catalog.share.curve).toBe('Charge curve')
diff --git a/web/src/i18n/authorized-shell-preservation.test.ts b/web/src/i18n/authorized-shell-preservation.test.ts
index 8a17f46acc..3e19b8e875 100644
--- a/web/src/i18n/authorized-shell-preservation.test.ts
+++ b/web/src/i18n/authorized-shell-preservation.test.ts
@@ -12,9 +12,9 @@ describe('exact accepted shell inverse, independent of recovery test registratio
it('reconstructs the actual Layout canonical predecessor without changing shipping source', () => {
const file = 'web/src/components/layout/Layout.tsx'
const current = currentSource(file)
- expect(hash(current)).toBe('2001a691cd1157e7c0c0a8db2ffd0bcaa41acea1d4acfaa855c6694b884a43c7')
+ expect(hash(current)).toBe('5b3df0325cb2ee6065320d2a6cdd348226b38c434abc6880b01d213bc7e96433')
expect(hash(restoreAcceptedShellSource(file, current)))
- .toBe('3dce0ff77ca4cd560150f941da1fc11446f46a38e7e52ff779517004a44522cd')
+ .toBe('7d4ce1ff038472b093c5d3b750d7319ff64a94000d40c3ac5040e30795e07c64')
expect(currentSource(file)).toBe(current)
})
diff --git a/web/src/i18n/authorized-shell-preservation.ts b/web/src/i18n/authorized-shell-preservation.ts
index 37923f2627..55b32ad4be 100644
--- a/web/src/i18n/authorized-shell-preservation.ts
+++ b/web/src/i18n/authorized-shell-preservation.ts
@@ -4,7 +4,7 @@ import { createHash } from 'node:crypto'
export const acceptedShellDeltas = [
{
path: 'web/src/components/layout/Layout.tsx',
- predecessorSHA256: '3dce0ff77ca4cd560150f941da1fc11446f46a38e7e52ff779517004a44522cd',
+ predecessorSHA256: '7d4ce1ff038472b093c5d3b750d7319ff64a94000d40c3ac5040e30795e07c64',
fragments: [
{
current: "import { RouteTransition } from '@/components/motion/runtime'\nimport {\n",
diff --git a/web/src/i18n/catalog-split.test.ts b/web/src/i18n/catalog-split.test.ts
index ba518a1bc3..207a83e4d6 100644
--- a/web/src/i18n/catalog-split.test.ts
+++ b/web/src/i18n/catalog-split.test.ts
@@ -703,7 +703,15 @@ describe('checked-in locale artifacts', () => {
it('keeps enlarged emptyState reachable through its real lazy namespace fallback', async () => {
expect(JSON.stringify(catalog.emptyState).length).toBeGreaterThan(256)
- expect(usageManifest.detailNamespaces).toHaveLength(181)
+ expect(usageManifest.detailNamespaces).toHaveLength(183)
+ // The shared automation hook now localizes copy names; its namespace needs
+ // the same independently loadable fallback as other shared producers.
+ expect(usageManifest.detailNamespaces).toContain('automations')
+ expect(usageManifest.namespaceFallbackBundles.automations).toBe('detail-automations')
+ expect(emitted.get('detail-automations')).toEqual({ automations: catalog.automations })
+ expect(usageManifest.detailNamespaces).toContain('anomaly')
+ expect(usageManifest.namespaceFallbackBundles.anomaly).toBe('detail-anomaly')
+ expect(emitted.get('detail-anomaly')).toEqual({ anomaly: catalog.anomaly })
expect(usageManifest.detailNamespaces).toContain('emptyState')
expect(usageManifest.namespaceFallbackBundles.emptyState).toBe('detail-emptyState')
expect(runtimeManifest.complete).not.toContain('emptyState')
diff --git a/web/src/i18n/copy-owner-contracts.test.ts b/web/src/i18n/copy-owner-contracts.test.ts
index f7b387e2da..6ddac7b320 100644
--- a/web/src/i18n/copy-owner-contracts.test.ts
+++ b/web/src/i18n/copy-owner-contracts.test.ts
@@ -126,12 +126,12 @@ describe('five source-backed copy-owner contracts', () => {
approved.add(key)
}
const entries = leaves(catalog)
- expect(entries).toHaveLength(32977)
+ expect(entries).toHaveLength(32998)
const predecessor = entries.filter(([key]) => !approved.has(key))
.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
- expect(predecessor).toHaveLength(30933)
+ expect(predecessor).toHaveLength(30954)
expect(createHash('sha256').update(JSON.stringify(predecessor)).digest('hex'))
- .toBe("f8d0b70e5e832064d6110dd6c960d911a0ed143f461e8b9f36425c8592ab7d52")
+ .toBe("975937edcce7f3742416e4af5f8edafa13fa2cd2309123291d298cb415da6e24")
})
it('executes the actual guarded incident count producer with English plurals', () => {
diff --git a/web/src/i18n/en.json b/web/src/i18n/en.json
index 0a7b38860e..859b7cb735 100644
--- a/web/src/i18n/en.json
+++ b/web/src/i18n/en.json
@@ -2001,7 +2001,8 @@
"weekdayEvidence": "Weekday and frequency evidence",
"burnEvidence": "Daily trend and consumption distribution",
"chargingEvidence": "Charging profile and timing",
- "summaryScope": "History evidence uses the returned drive and charging windows; current SoC is a separate observed snapshot."
+ "summaryScope": "History evidence uses the returned drive and charging windows; current SoC is a separate observed snapshot.",
+ "planningWindow": "The planning window covers the next seven local days, starting tomorrow."
},
"driveCalendar": {
"brief": {
@@ -11019,7 +11020,8 @@
"window1d": "Last 1 day",
"window7d": "Last 7 days",
"window30d": "Last 30 days",
- "window90d": "Last 90 days"
+ "window90d": "Last 90 days",
+ "rangeLimit": "Choose a workspace range of at most 90 days to view vehicle ingest cost."
},
"systemStatus": {
"clientPerformance": {
@@ -15509,7 +15511,8 @@
"active": "Active",
"disabled": "Disabled",
"auto-disabled": "Auto-disabled"
- }
+ },
+ "copyName": "{{name}} (copy)"
},
"energy": {
"tou": {
@@ -17074,7 +17077,15 @@
},
"kpis": "Cost summary metrics",
"trends": "Cost trends",
- "impact": "Lifetime and environmental impact"
+ "impact": "Lifetime and environmental impact",
+ "category": {
+ "home": "Home",
+ "supercharger": "Supercharger",
+ "public": "Public",
+ "publicDC": "Public DC",
+ "workL2": "Work / L2",
+ "other": "Other"
+ }
},
"chargePlanner": {
"modernization": {
@@ -19999,7 +20010,8 @@
"exportFailed": "Failed",
"exportQueued": "Queued",
"exportRunning": "Running",
- "exportDone": "Done"
+ "exportDone": "Done",
+ "overview": "Widget overview"
},
"operationalSummary": {
"retained": "Retained source data",
@@ -20123,7 +20135,16 @@
"badge": "Helix"
},
"colSignal": "Signal",
- "overview": "Anomaly overview"
+ "overview": "Anomaly overview",
+ "explanation": {
+ "zScore": "{{signal}} value {{value}} is {{sigma}} standard deviations from the mean ({{baseline}}).",
+ "belowMinimum": "{{signal}} value {{value}} is below the safe minimum ({{minimum}}).",
+ "aboveMaximum": "{{signal}} value {{value}} exceeds the safe maximum ({{maximum}}).",
+ "increased": "{{signal}} increased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreased": "{{signal}} decreased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increasedPercent": "{{signal}} increased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreasedPercent": "{{signal}} decreased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}})."
+ }
},
"driveDetail": {
"report": {
@@ -37719,7 +37740,9 @@
"trailingWindow": "Trailing {{days}} days",
"trailingWindow_one": "Trailing {{days}} day",
"trailingWindow_other": "Trailing {{days}} days",
- "windowReason": "The energy endpoint uses a trailing day count; custom calendar bounds are not applied by this source."
+ "windowReason": "The energy endpoint uses a trailing day count; custom calendar bounds are not applied by this source.",
+ "selectedWindow": "Selected workspace range",
+ "boundedSource": "Completed drives are filtered by the workspace start and exclusive end; live power remains a separate snapshot."
},
"metrics": {
"estimated": "Estimated",
@@ -37805,7 +37828,8 @@
"title": "Daily energy history",
"noData": "No energy history records available.",
"empty": "No energy records found."
- }
+ },
+ "rangeLimit": "Choose a workspace range of at most 3650 days to view energy history."
},
"vehicleSystems": {
"brief": {
@@ -38858,7 +38882,8 @@
"provenance": "Historical inputs and derived fits; source eligibility, assumptions and uncertainty apply. Counts are not a health grade.",
"pressureImbalance": "Reported corner-pressure imbalance in the selected source window.",
"underinflation": "Source underinflation fraction relative to the assumed placard pressure."
- }
+ },
+ "rangeLimit": "Choose a workspace range of at most 30 days to view science evidence."
},
"serverConnect": {
"connect": {
diff --git a/web/src/i18n/en/locale-admin.json b/web/src/i18n/en/locale-admin.json
index aa76fc4247..283b1e9109 100644
--- a/web/src/i18n/en/locale-admin.json
+++ b/web/src/i18n/en/locale-admin.json
@@ -137,7 +137,8 @@
"window1d": "Last 1 day",
"window7d": "Last 7 days",
"window30d": "Last 30 days",
- "window90d": "Last 90 days"
+ "window90d": "Last 90 days",
+ "rangeLimit": "Choose a workspace range of at most 90 days to view vehicle ingest cost."
},
"systemStatus": {
"clientPerformance": {
diff --git a/web/src/i18n/en/locale-automations.json b/web/src/i18n/en/locale-automations.json
index 2585fa4b8b..dd04b627d0 100644
--- a/web/src/i18n/en/locale-automations.json
+++ b/web/src/i18n/en/locale-automations.json
@@ -74,629 +74,144 @@
"unnamed": "Untitled automation",
"loading": "Loading automations…"
},
- "automations": {
- "historyPage": {
- "availability": {
- "failed": "This history section could not be loaded.",
- "notApplicable": "No vehicle is associated with this execution.",
- "unavailable": "History availability is unknown.",
- "truncated": "Only part of this history is shown.",
- "incomplete": "This execution window is still open; history may be incomplete.",
- "noActionResults": "No action results are recorded for this execution.",
- "noTransitions": "No vehicle state transitions were recorded during this execution window."
- },
- "title": "Automation history",
- "subtitle": "Review every execution and its outcome across the selected period.",
- "new": "New automation",
- "allRules": "All rules",
- "allStatuses": "All statuses",
- "filterRule": "Filter executions by rule",
- "filterStatus": "Filter executions by status",
- "ruleId": "Rule #{{id}}",
- "selectedRule": "Selected rule",
- "loading": "Loading executions",
- "empty": "No executions match this period and filters.",
- "manage": "Manage automation rules",
- "summary": "Execution summary",
- "total": "Completed runs",
- "success": "Succeeded",
- "failed": "Failed",
- "partial": "Partial",
- "rate": "Success rate",
- "duration": "Average duration",
- "durationColumn": "Duration",
- "trend": "Execution activity",
- "trendAria": "Execution outcomes across the selected period",
- "period": "Period",
- "other": "Other outcomes",
- "time": "Triggered",
- "rule": "Automation",
- "outcome": "Outcome",
- "trigger": "Trigger",
- "actions": "Actions",
- "error": "Error",
- "detail": "Execution details",
- "actionResults": "Action results",
- "transitions": "Vehicle state transitions",
- "status": {
- "running": "Running",
- "success": "Succeeded",
- "partial": "Partial",
- "failed": "Failed",
- "skipped": "Skipped",
- "cancelled": "Cancelled",
- "test": "Test",
- "undo": "Undone"
- },
- "detailUnavailable": "Execution details are unavailable.",
- "loadFailed": "Could not load execution history."
+ "comfort": {
+ "title": "Cabin comfort Autopilot",
+ "armed": "Armed",
+ "disarmed": "Off",
+ "noVehicle": "Select a vehicle to configure cabin comfort.",
+ "statusError": "Comfort status unavailable.",
+ "saveError": "Save failed",
+ "nowError": "Precondition failed",
+ "nextEvent": "{{title}} at {{when}} — {{where}}",
+ "untitled": "Untitled event",
+ "noUpcoming": "No offsite events inside the lead window.",
+ "noFeed": "Add a calendar subscription to watch for events.",
+ "arm": "Precondition before calendar events",
+ "icsUrl": "Calendar subscription URL (ICS)",
+ "targetTemp": "Cabin target temperature",
+ "lead": "Precondition lead time",
+ "save": "Save Autopilot",
+ "now": "Precondition now",
+ "recent": "Recent runs"
+ },
+ "pinned": {
+ "section": {
+ "title": "Pinned",
+ "watching": "Watching"
},
- "readOnly": {
- "title": "Automation controls are read-only"
+ "empty": {
+ "vehicle": "Pin frequently-used vehicles to keep them at the top.",
+ "alert_rule": "Pin alert rules to keep them under \"Watching\".",
+ "widget": "Pin widgets to keep them at the top of your dashboard.",
+ "geofence": "Pin geofences to keep them at the top of the list.",
+ "automation": "Pin automations to keep them at the top of the list.",
+ "default": "Nothing pinned yet."
+ }
+ },
+ "achievements": {
+ "dismiss": "Dismiss achievement notification",
+ "toastEyebrow": "Achievement unlocked",
+ "view": "View"
+ },
+ "activity": {
+ "action": {
+ "alert": "Alert change",
+ "alertRuleCreate": "Alert rule created",
+ "alertRuleDelete": "Alert rule deleted",
+ "alertRuleUpdate": "Alert rule updated",
+ "apiKey": "API key change",
+ "apiKeyCreate": "API key created",
+ "apiKeyDelete": "API key revoked",
+ "apiKeyUpdate": "API key updated",
+ "auth": "Authentication",
+ "authLogin": "Signed in",
+ "authLogout": "Signed out",
+ "automation": "Automation change",
+ "automationAutoDisabled": "Automation auto-disabled",
+ "automationCreate": "Automation created",
+ "automationCreated": "Automation created",
+ "automationDelete": "Automation deleted",
+ "automationDeleted": "Automation deleted",
+ "automationDisabled": "Automation disabled",
+ "automationEnabled": "Automation enabled",
+ "automationExecuted": "Automation ran",
+ "automationExported": "Automations exported",
+ "automationFailed": "Automation failed",
+ "automationImported": "Automations imported",
+ "automationReEnabled": "Automation re-enabled",
+ "automationTestRun": "Automation test run",
+ "automationUndo": "Automation undone",
+ "automationUpdate": "Automation updated",
+ "automationUpdated": "Automation updated",
+ "dashboard": "Dashboard change",
+ "dashboardLayoutSave": "Dashboard layout saved",
+ "dataExport": "Data export",
+ "dataExportCreate": "Data export requested",
+ "settings": "Settings change",
+ "settingsUpdate": "Settings updated",
+ "unknown": "Activity",
+ "vehicleCommand": "Vehicle command",
+ "vehicleCommandCharge": "Charging command",
+ "vehicleCommandClimate": "Climate command",
+ "vehicleCommandFlash": "Flash lights",
+ "vehicleCommandHonk": "Honk horn",
+ "vehicleCommandLock": "Lock vehicle",
+ "vehicleCommandUnlock": "Unlock vehicle",
+ "vehicleCommandWake": "Wake vehicle"
},
- "builder": {
- "readOnly": {
- "title": "Automation publishing is read-only"
+ "myActivity": {
+ "empty": "No recent activity in this window."
+ }
+ },
+ "admin": {
+ "liveSignals": {
+ "kpi": {
+ "staleHint": "Past 2-min window"
+ }
+ }
+ },
+ "ai": {
+ "common": {
+ "errorUnknown": "unknown",
+ "noOutput": "No output was generated."
+ },
+ "confirm": {
+ "argsLabel": "Arguments",
+ "cancel": "Cancel",
+ "intro": {
+ "mutates": "The assistant wants to make a change to your data. Review what it will do, then approve or cancel.",
+ "read": "The assistant wants to run a tool. Review the inputs, then approve or cancel."
},
- "aiBuilder": {
- "title": "Draft from natural language",
- "description": "Describe the automation you want and get a typed graph draft you can review and save below.",
- "badge": "Helix",
- "draftButton": "Draft automation",
- "placeholder": "e.g. precondition the cabin to 22°C when I leave work on weekdays",
- "inputLabel": "Automation description",
- "noVehicle": "Pick a vehicle above to let Helix draft an automation for it.",
- "noPrompt": "Describe the automation you want Helix to draft."
+ "run": "Approve",
+ "title": "Approve Helix action",
+ "toolLabel": "Tool"
+ },
+ "limit": {
+ "desc": {
+ "burst": "Too many Helix requests are in flight. The limiter is keeping the system responsive.",
+ "costCap": "You have reached your daily Helix cost limit. Helix features will resume tomorrow or after you raise the cap in Settings.",
+ "costCapUnavailable": "Could not read your Helix usage history. Failing closed for safety.",
+ "featureMisconfigured": "This page is missing a Helix feature registration. Please report this to your administrator.",
+ "generic": "Helix features are temporarily unavailable. The non-Helix baseline continues to work.",
+ "perDay": "You have used your daily Helix request budget. The budget resets at UTC midnight.",
+ "perMinute": "You have sent more Helix requests than allowed per minute. The window resets shortly.",
+ "providerUnavailable": "The Helix provider is not responding. The system will retry automatically.",
+ "settingsUnavailable": "Could not load your Helix settings. Helix is paused until settings are reachable.",
+ "tokens": "Your Helix token quota for this minute is exhausted. Try a shorter prompt."
},
- "aiGeofenceAware": {
- "title": "Suggest a geofence-aware automation",
- "description": "Describe an automation that uses one of your existing geofences. Helix proposes a typed graph anchored to a place_id you already have — review and apply to the form below before saving.",
- "badge": "Helix",
- "suggestButton": "Suggest automation",
- "placeholder": "e.g. when I arrive home on a weekday after sunset, turn on cabin overheat protection",
- "proposalLabel": "Proposed automation",
- "applyButton": "Apply to form",
- "rejectedLabel": "Proposal rejected by validator",
- "triggersLabel": "Triggers",
- "conditionsLabel": "Conditions",
- "actionsLabel": "Actions",
- "unnamed": "(unnamed)",
- "promptAria": "Describe the geofence-aware automation to draft"
- },
- "actionType": "Action type",
- "actionNumber": "Action {{number}}",
- "chargeLimit": "Charge limit",
- "chargingAmps": "Charging current (A)",
- "driverTemp": "Driver temperature",
- "passengerTemp": "Passenger temperature",
- "showAdvancedParams": "Advanced parameters (JSON)",
- "hideAdvancedParams": "Hide advanced parameters",
- "geofenceHelp": "Create a place first, then return here to choose when the vehicle arrives or leaves.",
- "managePlaces": "Manage places",
- "retryGeofences": "Retry loading places",
- "moveUp": "Move up",
- "moveDown": "Move down",
- "removeAction": "Remove action",
- "addAction": "Add action",
- "selectCommand": "Select command...",
- "command": "Command",
- "commandParams": "Params (JSON, optional)",
- "invalidJson": "Invalid JSON",
- "commandParamsPlaceholder": "{}",
- "channel": "Channel",
- "noChannels": "No channels configured",
- "notifyMessage": "Message",
- "notifyPlaceholder": "Car is warming up!",
- "settingKey": "Setting key",
- "settingKeyPlaceholder": "charge_limit",
- "valueType": "Value type",
- "valueText": "Text",
- "valueNumber": "Number",
- "valueBoolean": "Boolean",
- "value": "Value",
- "valueNumberPlaceholder": "80",
- "valueTextPlaceholder": "enabled",
- "targetAutomationId": "Target automation ID",
- "waitDuration": "Wait duration (seconds)",
- "editTitle": "Edit automation",
- "presetTitle": "Install preset",
- "createTitle": "Create automation",
- "editBreadcrumb": "Edit: {{name}}",
- "vehicleFallback": "Vehicle {{id}}",
- "allVehicles": "All vehicles",
- "selectTrigger": "Select trigger type...",
- "errorName": "Name is required",
- "errorTrigger": "Trigger type is required",
- "errorTriggerPlace": "Select a geofence for the trigger",
- "errorConditionPlace": "Select a geofence for each geofence condition",
- "errorActions": "At least one action is required",
- "errorActionDetails": "Complete every action before saving",
- "notFound": "Automation not found",
- "backToList": "Back to Automations",
- "general": "General",
- "name": "Name",
- "namePlaceholder": "Morning commute prep",
- "description": "Description",
- "vehicle": "Vehicle",
- "enabled": "Enabled",
- "when": "When (trigger)",
- "triggerType": "Trigger type",
- "onlyIf": "Only if (conditions)",
- "then": "Then (actions)",
- "saveError": "Save error",
- "save": "Save",
- "create": "Create",
- "testRun": "Test run",
- "cancel": "Cancel",
- "testRunStarted": "Test run started!",
- "selectGeofence": "Select geofence...",
- "conditionType": "Condition type",
- "removeCondition": "Remove condition",
- "addCondition": "Add condition",
- "signal": "Signal",
- "operator": "Operator",
- "minValue": "Min",
- "maxValue": "Max",
- "statePlaceholder": "online",
- "startTime": "Start",
- "endTime": "End",
- "timezone": "Timezone",
- "days": "Days",
- "geofence": "Geofence",
- "state": "State",
- "otherAutomationId": "Automation ID",
- "conflict": "Potential conflict",
- "noTrigger": "No trigger configured",
- "time": "Time",
- "cronExpr": "Cron expression",
- "cronPlaceholder": "0 8 * * 1-5",
- "advancedCron": "Use advanced cron expression",
- "simpleCron": "Switch to simple mode",
- "event": "Event",
- "geofenceEvent": "Event",
- "dwellMinutes": "Dwell minutes",
- "dwellHint": "Required for dwell triggers",
- "changedOnly": "Fire on any change",
- "signals": {
- "batteryLevel": "Battery level",
- "insideTemp": "Inside temperature",
- "outsideTemp": "Outside temperature",
- "speed": "Speed",
- "isLocked": "Is locked",
- "isCharging": "Is charging",
- "isClimateOn": "Climate on",
- "sentryMode": "Sentry Mode",
- "state": "Vehicle state"
- },
- "triggerNone": "Not set",
- "brief": {
- "context": "Current editor draft only. Publishing still requires validation and an explicit save.",
- "eyebrow": "Automation draft",
- "scope": "Editor configuration; not execution history",
- "unsaved": "Local changes not published",
- "editor": "Current editor state"
- },
- "summaryTrigger": "Trigger",
- "summaryConditions": "Conditions",
- "onlyIfDesc": "Optional checks that must pass before actions run.",
- "summaryActions": "Actions",
- "thenDesc": "Actions are executed in order.",
- "statusEnabled": "Enabled",
- "statusDisabled": "Disabled",
- "summaryStatus": "Status",
- "readyName": "Name added",
- "readyTrigger": "Trigger configured",
- "readyActions": "At least one action",
- "subtitle": "Configure supported typed triggers, conditions, and actions for your automation.",
- "summary": "Automation summary",
- "readyToSave": "Ready to save",
- "notReady": "Not ready yet",
- "descriptionPlaceholder": "Prepare the car for the morning commute",
- "whenDesc": "Choose the supported typed contract that starts this automation.",
- "emptyTrigger": "Select a supported trigger type to configure when this automation starts.",
- "assistant": "Builder assistant",
- "readiness": "Readiness",
- "readyDone": "complete",
- "readyPending": "incomplete",
- "presetHint": "Not sure where to start? Browse typed automation templates.",
- "triggerSchedule": "Schedule",
- "triggerEvent": "Vehicle event",
- "triggerGeofence": "Geofence",
- "triggerSignal": "Signal threshold",
- "cronHint": "minute hour day-of-month month day-of-week",
- "geofenceLoading": "Loading geofences…",
- "geofenceError": "Could not load geofences",
- "geofenceEmpty": "No geofences configured yet",
- "commandParamsObjectError": "Params must be a JSON object."
- },
- "recentActivity": "Recent activity",
- "live": "Live",
- "reconnecting": "Reconnecting",
- "totalRuns": "total",
- "successRate": "success",
- "avgDuration": "avg",
- "noHistory": "No execution history yet",
- "firing": "Firing",
- "toggleLabel": "Toggle automation",
- "card": {
- "pinLabel": "Pin automation {{name}}",
- "toggleLabel": "Toggle automation {{name}}",
- "menuLabel": "Actions for {{name}}"
- },
- "menu": "Actions menu",
- "testRun": "Test run",
- "reEnable": "Re-enable",
- "duplicate": "Duplicate",
- "export": "Export",
- "delete": "Delete",
- "allVehicles": "All vehicles",
- "lastRun": "Last",
- "neverRun": "Never run",
- "runs": "Runs",
- "fails": "Fails",
- "nextFire": "Next",
- "conflictWith": "Conflict with",
- "deleteTitle": "Delete automation",
- "deleteMessage": "Are you sure you want to delete \"{{name}}\"? This cannot be undone.",
- "deleteConfirm": "Delete",
- "title": "Automations",
- "importUnknownError": "Unknown error",
- "subtitle": "Automate vehicle actions with typed triggers, conditions, and action chains",
- "import": "Import",
- "create": "Create",
- "stats": {
- "total": "Total",
- "active": "Active",
- "disabled": "Disabled",
- "autoDisabled": "Auto-disabled",
- "aria": "Automation summary"
- },
- "filterStatus": "Filter by status",
- "search": "Search automations...",
- "manageRules": "Manage rules",
- "history": {
- "actions": "Actions",
- "allAutomations": "All automations",
- "allStatuses": "All statuses",
- "automation": "Automation",
- "avgDuration": "Average duration",
- "count": "Executions",
- "dailyTrend": "Daily activity",
- "dailyTrendAria": "Daily automation runs by outcome across the selected period",
- "day": "Day",
- "duration": "Duration",
- "empty": "No executions match these filters",
- "filters": "Filter executions",
- "loading": "Loading executions",
- "noChartData": "No executions in this range",
- "refresh": "Refresh",
- "results": "Executions",
- "statusBreakdown": "Execution outcomes",
- "statusBreakdownAria": "Automation runs by outcome across the selected period",
- "statusLabel": "Status",
- "successRate": "Success rate (completed runs)",
- "title": "Execution history",
- "total": "{{count}} matching records",
- "totalRuns": "Matching executions",
- "trigger": "Trigger",
- "summaryScope": "Totals cover the selected period, not just this page.",
- "clearFilters": "Clear filters",
- "firstPage": "Go to first page",
- "createAutomation": "Create automation",
- "report": "Execution activity",
- "reportDescription": "See how your automations ran over the selected period.",
- "summary": "Execution summary",
- "succeeded": "Successful runs",
- "failed": "Failed runs",
- "failedActions": "({{count}} failed)",
- "emptyWindow": "No automation runs in this period",
- "status": {
- "success": "success",
- "partial": "partial",
- "failed": "failed",
- "skipped": "skipped",
- "running": "running",
- "cancelled": "cancelled",
- "test": "test",
- "undo": "undo"
- }
- },
- "presets": {
- "title": "Quick start templates",
- "hint": "One-click install",
- "actionCount": "{{count}} actions",
- "actionOne": "1 action",
- "details": "Details for {{name}}",
- "install": "Install",
- "empty": "No preset templates available",
- "emptyCategory": "No templates match your filters",
- "allCategory": "All",
- "filterAria": "Filter presets by category",
- "searchLabel": "Search templates",
- "searchPlaceholder": "Search templates...",
- "showing": "{{count}} of {{total}} templates",
- "expand": "Click to expand",
- "collapse": "Click to collapse",
- "toggleAria": "Show or hide quick start templates",
- "installNamed": "Install {{name}}",
- "resource": "Automation presets"
- },
- "empty": "No automations yet. Create a typed automation to get started!",
- "noMatch": "No automations match your filters",
- "historyBrief": {
- "context": "Server summary across the selected period and rule/status filters, not just this page of rows.",
- "noRuns": "No completed runs in this summary; a rate and average duration are undefined.",
- "eyebrow": "Automation executions",
- "loading": "Loading executions",
- "unavailable": "Summary unavailable",
- "retained": "Retained execution summary",
- "available": "Summary loaded",
- "unknownScope": "Execution window supplied by the caller",
- "freshness": "History response; live events are a separate source",
- "bounds": "{{start}} inclusive → {{end}} exclusive · rule: {{rule}} · status: {{status}}"
- },
- "brief": {
- "countContext": "Full loaded rule set, before status and search filters.",
- "counterContext": "Cumulative counters on loaded rules; their start time is not supplied.",
- "eyebrow": "Automation rules",
- "title": "Rule inventory",
- "description": "Review the loaded rules without changing their triggers, conditions, or actions.",
- "loading": "Loading rules",
- "unavailable": "Rules unavailable",
- "retained": "Retained rules",
- "available": "Rules loaded",
- "scope": "All loaded rules · unfiltered",
- "freshness": "Rule response; not a live execution stream"
- },
- "activityBrief": {
- "context": "History aggregate window is not supplied. Independent live events and recent rows are not this summary denominator.",
- "eyebrow": "Execution history",
- "scope": "History aggregate · window unknown"
- },
- "totalRunsCount": "{{count}} total",
- "successRateValue": "{{value}} success",
- "avgDurationValue": "{{value}} avg",
- "filters": {
- "all": "All",
- "active": "Active",
- "disabled": "Disabled",
- "autoDisabled": "Auto-disabled"
- },
- "importTypedEnvelopeRequired": "Import a typed TeslaSync CTI automation export file. Legacy automation exports are rejected rather than translated.",
- "importFailedWithReason": "Typed automation import failed: {{message}}",
- "importFileLabel": "Choose automation export file",
- "autoDisabledTitle": "Attention needed",
- "autoDisabledWarning": "{{count}} automation(s) have been auto-disabled due to repeated failures.",
- "filterCount": "{{shown}} / {{total}}",
- "yourAutomations": "Your automations",
- "showingCount": "Showing {{count}}",
- "emptyCta": "Create automation",
- "noMatchCta": "Reset filters",
- "events": {
- "driveStart": "Drive starts",
- "driveEnd": "Drive ends",
- "chargeStart": "Charging starts",
- "chargeEnd": "Charging ends",
- "sleepStart": "Sleep starts",
- "sleepEnd": "Sleep ends",
- "online": "Comes online",
- "offline": "Goes offline",
- "sentryAlert": "Sentry alert"
- },
- "geofence": {
- "enter": "Enter",
- "exit": "Exit",
- "dwell": "Dwell",
- "inside": "Inside",
- "outside": "Outside"
- },
- "operators": {
- "equals": "=",
- "notEquals": "!=",
- "lessThan": "<",
- "lessThanOrEqual": "<=",
- "greaterThan": ">",
- "greaterThanOrEqual": ">=",
- "changed": "Changed",
- "crossedAbove": "Crossed above",
- "crossedBelow": "Crossed below",
- "between": "Between",
- "in": "In"
- },
- "event": {
- "triggered": "triggered",
- "succeeded": "succeeded",
- "failed": "failed",
- "skipped": "skipped",
- "state_changed": "state_changed"
- },
- "routines": {
- "actionCount": "{{count}} actions",
- "install": "Install",
- "place": "Place",
- "onEnter": "On geofence enter",
- "onExit": "On geofence exit",
- "installNamed": "Install {{name}}",
- "resource": "Geofence routines",
- "title": "Geofence routines",
- "choosePlace": "Choose a place…",
- "noPlaces": "Create a geofence place first to install routines.",
- "noTemplates": "No geofence routine templates are available yet.",
- "createCustomHint": "You can still create a custom automation from the automations page."
- },
- "importRetryFailedOnly": "Correct and import only the failed entries listed below. Do not re-import successful entries; doing so creates duplicates.",
- "importEntryError": "Entry {{entry}} ({{name}}): {{message}}",
- "actions": {
- "command": "Vehicle command",
- "notify": "Send notification",
- "setSetting": "Set setting",
- "callAutomation": "Call automation",
- "wait": "Wait"
- },
- "conditions": {
- "signal": "Signal check",
- "timeWindow": "Time window",
- "geofence": "Geofence state",
- "otherAutomation": "Other automation"
- },
- "otherAutomation": {
- "enabled": "Enabled",
- "disabled": "Disabled",
- "recentlyTriggered": "Recently triggered"
- },
- "commandGroups": {
- "security": "Security & access",
- "climate": "Climate",
- "charging": "Charging",
- "doors": "Doors & trunk",
- "alerts": "Alerts",
- "navigation": "Navigation",
- "driveSoftware": "Drive & software"
- },
- "status": {
- "active": "Active",
- "disabled": "Disabled",
- "auto-disabled": "Auto-disabled"
- }
- },
- "comfort": {
- "title": "Cabin comfort Autopilot",
- "armed": "Armed",
- "disarmed": "Off",
- "noVehicle": "Select a vehicle to configure cabin comfort.",
- "statusError": "Comfort status unavailable.",
- "saveError": "Save failed",
- "nowError": "Precondition failed",
- "nextEvent": "{{title}} at {{when}} — {{where}}",
- "untitled": "Untitled event",
- "noUpcoming": "No offsite events inside the lead window.",
- "noFeed": "Add a calendar subscription to watch for events.",
- "arm": "Precondition before calendar events",
- "icsUrl": "Calendar subscription URL (ICS)",
- "targetTemp": "Cabin target temperature",
- "lead": "Precondition lead time",
- "save": "Save Autopilot",
- "now": "Precondition now",
- "recent": "Recent runs"
- },
- "pinned": {
- "section": {
- "title": "Pinned",
- "watching": "Watching"
- },
- "empty": {
- "vehicle": "Pin frequently-used vehicles to keep them at the top.",
- "alert_rule": "Pin alert rules to keep them under \"Watching\".",
- "widget": "Pin widgets to keep them at the top of your dashboard.",
- "geofence": "Pin geofences to keep them at the top of the list.",
- "automation": "Pin automations to keep them at the top of the list.",
- "default": "Nothing pinned yet."
- }
- },
- "achievements": {
- "dismiss": "Dismiss achievement notification",
- "toastEyebrow": "Achievement unlocked",
- "view": "View"
- },
- "activity": {
- "action": {
- "alert": "Alert change",
- "alertRuleCreate": "Alert rule created",
- "alertRuleDelete": "Alert rule deleted",
- "alertRuleUpdate": "Alert rule updated",
- "apiKey": "API key change",
- "apiKeyCreate": "API key created",
- "apiKeyDelete": "API key revoked",
- "apiKeyUpdate": "API key updated",
- "auth": "Authentication",
- "authLogin": "Signed in",
- "authLogout": "Signed out",
- "automation": "Automation change",
- "automationAutoDisabled": "Automation auto-disabled",
- "automationCreate": "Automation created",
- "automationCreated": "Automation created",
- "automationDelete": "Automation deleted",
- "automationDeleted": "Automation deleted",
- "automationDisabled": "Automation disabled",
- "automationEnabled": "Automation enabled",
- "automationExecuted": "Automation ran",
- "automationExported": "Automations exported",
- "automationFailed": "Automation failed",
- "automationImported": "Automations imported",
- "automationReEnabled": "Automation re-enabled",
- "automationTestRun": "Automation test run",
- "automationUndo": "Automation undone",
- "automationUpdate": "Automation updated",
- "automationUpdated": "Automation updated",
- "dashboard": "Dashboard change",
- "dashboardLayoutSave": "Dashboard layout saved",
- "dataExport": "Data export",
- "dataExportCreate": "Data export requested",
- "settings": "Settings change",
- "settingsUpdate": "Settings updated",
- "unknown": "Activity",
- "vehicleCommand": "Vehicle command",
- "vehicleCommandCharge": "Charging command",
- "vehicleCommandClimate": "Climate command",
- "vehicleCommandFlash": "Flash lights",
- "vehicleCommandHonk": "Honk horn",
- "vehicleCommandLock": "Lock vehicle",
- "vehicleCommandUnlock": "Unlock vehicle",
- "vehicleCommandWake": "Wake vehicle"
- },
- "myActivity": {
- "empty": "No recent activity in this window."
- }
- },
- "admin": {
- "liveSignals": {
- "kpi": {
- "staleHint": "Past 2-min window"
- }
- }
- },
- "ai": {
- "common": {
- "errorUnknown": "unknown",
- "noOutput": "No output was generated."
- },
- "confirm": {
- "argsLabel": "Arguments",
- "cancel": "Cancel",
- "intro": {
- "mutates": "The assistant wants to make a change to your data. Review what it will do, then approve or cancel.",
- "read": "The assistant wants to run a tool. Review the inputs, then approve or cancel."
- },
- "run": "Approve",
- "title": "Approve Helix action",
- "toolLabel": "Tool"
- },
- "limit": {
- "desc": {
- "burst": "Too many Helix requests are in flight. The limiter is keeping the system responsive.",
- "costCap": "You have reached your daily Helix cost limit. Helix features will resume tomorrow or after you raise the cap in Settings.",
- "costCapUnavailable": "Could not read your Helix usage history. Failing closed for safety.",
- "featureMisconfigured": "This page is missing a Helix feature registration. Please report this to your administrator.",
- "generic": "Helix features are temporarily unavailable. The non-Helix baseline continues to work.",
- "perDay": "You have used your daily Helix request budget. The budget resets at UTC midnight.",
- "perMinute": "You have sent more Helix requests than allowed per minute. The window resets shortly.",
- "providerUnavailable": "The Helix provider is not responding. The system will retry automatically.",
- "settingsUnavailable": "Could not load your Helix settings. Helix is paused until settings are reachable.",
- "tokens": "Your Helix token quota for this minute is exhausted. Try a shorter prompt."
- },
- "retry": "Retry",
- "retryIn": "Try again in {{seconds}}s",
- "title": {
- "burst": "Too many Helix requests at once",
- "costCap": "Daily cost cap reached",
- "costCapUnavailable": "Cost cap check unavailable",
- "featureMisconfigured": "Helix feature misconfigured",
- "generic": "Helix temporarily unavailable",
- "perDay": "Daily Helix usage limit reached",
- "perMinute": "Helix rate limit hit",
- "providerUnavailable": "Helix provider unavailable",
- "settingsUnavailable": "Helix settings unavailable",
- "tokens": "Helix token quota exhausted"
+ "retry": "Retry",
+ "retryIn": "Try again in {{seconds}}s",
+ "title": {
+ "burst": "Too many Helix requests at once",
+ "costCap": "Daily cost cap reached",
+ "costCapUnavailable": "Cost cap check unavailable",
+ "featureMisconfigured": "Helix feature misconfigured",
+ "generic": "Helix temporarily unavailable",
+ "perDay": "Daily Helix usage limit reached",
+ "perMinute": "Helix rate limit hit",
+ "providerUnavailable": "Helix provider unavailable",
+ "settingsUnavailable": "Helix settings unavailable",
+ "tokens": "Helix token quota exhausted"
},
"useBaseline": "Use baseline"
}
@@ -984,43 +499,471 @@
"message": "{{VehicleName}} reports the rear driver window is {{Value}}.",
"name": "Rear driver window changed"
},
- "work-arrived": {
- "message": "{{VehicleName}} reports arrival at work.",
- "name": "Arrived at work"
+ "work-arrived": {
+ "message": "{{VehicleName}} reports arrival at work.",
+ "name": "Arrived at work"
+ },
+ "work-left": {
+ "message": "{{VehicleName}} no longer reports being at work.",
+ "name": "Left work"
+ }
+ }
+ },
+ "analytics": {
+ "weeklyDigest": {
+ "aiNarration": {
+ "badge": "Helix",
+ "description": "Get a short, Helix-written recap of your week from the digest data above.",
+ "generateButton": "Generate narration",
+ "noVehicleHint": "Pick a vehicle to enable Helix narration.",
+ "title": "Helix narration",
+ "utcScope": "Narration uses Monday-to-Monday UTC weeks, which may differ from the local-time totals above.",
+ "weekLimit": "Narration is available only for the current UTC week and the previous 12 weeks. Select a supported week to generate its recap."
+ }
+ }
+ },
+ "anomaly": {
+ "aiBaseline": {
+ "badge": "Helix",
+ "description": "Compute statistical anomaly bounds (mean, stddev, p5/p95) from this vehicle's recent signal history and walk through how each signal compares to the static safe-range fallback.",
+ "generateButton": "Train baseline",
+ "title": "Learn per-vehicle baseline"
+ },
+ "aiExplanation": {
+ "badge": "Helix",
+ "description": "Generate independent, inferred narration for the selected vehicle over 30 days, not an explanation of the detector’s 7-day results or the baseline’s 14-day training data.",
+ "emptyHint": "Select a vehicle above to explain its anomalies.",
+ "generateButton": "Generate explanation",
+ "title": "Helix explanation"
+ }
+ },
+ "automations": {
+ "actions": {
+ "callAutomation": "Call automation",
+ "command": "Vehicle command",
+ "notify": "Send notification",
+ "setSetting": "Set setting",
+ "wait": "Wait"
+ },
+ "activityBrief": {
+ "context": "History aggregate window is not supplied. Independent live events and recent rows are not this summary denominator.",
+ "eyebrow": "Execution history",
+ "scope": "History aggregate · window unknown"
+ },
+ "allVehicles": "All vehicles",
+ "autoDisabledTitle": "Attention needed",
+ "autoDisabledWarning": "{{count}} automation(s) have been auto-disabled due to repeated failures.",
+ "avgDurationValue": "{{value}} avg",
+ "brief": {
+ "available": "Rules loaded",
+ "countContext": "Full loaded rule set, before status and search filters.",
+ "counterContext": "Cumulative counters on loaded rules; their start time is not supplied.",
+ "description": "Review the loaded rules without changing their triggers, conditions, or actions.",
+ "eyebrow": "Automation rules",
+ "freshness": "Rule response; not a live execution stream",
+ "loading": "Loading rules",
+ "retained": "Retained rules",
+ "scope": "All loaded rules · unfiltered",
+ "title": "Rule inventory",
+ "unavailable": "Rules unavailable"
+ },
+ "builder": {
+ "actionNumber": "Action {{number}}",
+ "actionType": "Action type",
+ "addAction": "Add action",
+ "addCondition": "Add condition",
+ "advancedCron": "Use advanced cron expression",
+ "aiBuilder": {
+ "badge": "Helix",
+ "description": "Describe the automation you want and get a typed graph draft you can review and save below.",
+ "draftButton": "Draft automation",
+ "inputLabel": "Automation description",
+ "noPrompt": "Describe the automation you want Helix to draft.",
+ "noVehicle": "Pick a vehicle above to let Helix draft an automation for it.",
+ "placeholder": "e.g. precondition the cabin to 22°C when I leave work on weekdays",
+ "title": "Draft from natural language"
+ },
+ "aiGeofenceAware": {
+ "actionsLabel": "Actions",
+ "applyButton": "Apply to form",
+ "badge": "Helix",
+ "conditionsLabel": "Conditions",
+ "description": "Describe an automation that uses one of your existing geofences. Helix proposes a typed graph anchored to a place_id you already have — review and apply to the form below before saving.",
+ "placeholder": "e.g. when I arrive home on a weekday after sunset, turn on cabin overheat protection",
+ "promptAria": "Describe the geofence-aware automation to draft",
+ "proposalLabel": "Proposed automation",
+ "rejectedLabel": "Proposal rejected by validator",
+ "suggestButton": "Suggest automation",
+ "title": "Suggest a geofence-aware automation",
+ "triggersLabel": "Triggers",
+ "unnamed": "(unnamed)"
+ },
+ "allVehicles": "All vehicles",
+ "assistant": "Builder assistant",
+ "backToList": "Back to Automations",
+ "brief": {
+ "context": "Current editor draft only. Publishing still requires validation and an explicit save.",
+ "editor": "Current editor state",
+ "eyebrow": "Automation draft",
+ "scope": "Editor configuration; not execution history",
+ "unsaved": "Local changes not published"
+ },
+ "cancel": "Cancel",
+ "changedOnly": "Fire on any change",
+ "channel": "Channel",
+ "chargeLimit": "Charge limit",
+ "chargingAmps": "Charging current (A)",
+ "command": "Command",
+ "commandParams": "Params (JSON, optional)",
+ "commandParamsObjectError": "Params must be a JSON object.",
+ "commandParamsPlaceholder": "{}",
+ "conditionType": "Condition type",
+ "conflict": "Potential conflict",
+ "create": "Create",
+ "createTitle": "Create automation",
+ "cronExpr": "Cron expression",
+ "cronHint": "minute hour day-of-month month day-of-week",
+ "cronPlaceholder": "0 8 * * 1-5",
+ "days": "Days",
+ "description": "Description",
+ "descriptionPlaceholder": "Prepare the car for the morning commute",
+ "driverTemp": "Driver temperature",
+ "dwellHint": "Required for dwell triggers",
+ "dwellMinutes": "Dwell minutes",
+ "editBreadcrumb": "Edit: {{name}}",
+ "editTitle": "Edit automation",
+ "emptyTrigger": "Select a supported trigger type to configure when this automation starts.",
+ "enabled": "Enabled",
+ "endTime": "End",
+ "errorActionDetails": "Complete every action before saving",
+ "errorActions": "At least one action is required",
+ "errorConditionPlace": "Select a geofence for each geofence condition",
+ "errorName": "Name is required",
+ "errorTrigger": "Trigger type is required",
+ "errorTriggerPlace": "Select a geofence for the trigger",
+ "event": "Event",
+ "general": "General",
+ "geofence": "Geofence",
+ "geofenceEmpty": "No geofences configured yet",
+ "geofenceError": "Could not load geofences",
+ "geofenceEvent": "Event",
+ "geofenceHelp": "Create a place first, then return here to choose when the vehicle arrives or leaves.",
+ "geofenceLoading": "Loading geofences…",
+ "hideAdvancedParams": "Hide advanced parameters",
+ "invalidJson": "Invalid JSON",
+ "managePlaces": "Manage places",
+ "maxValue": "Max",
+ "minValue": "Min",
+ "moveDown": "Move down",
+ "moveUp": "Move up",
+ "name": "Name",
+ "namePlaceholder": "Morning commute prep",
+ "noChannels": "No channels configured",
+ "noTrigger": "No trigger configured",
+ "notFound": "Automation not found",
+ "notReady": "Not ready yet",
+ "notifyMessage": "Message",
+ "notifyPlaceholder": "Car is warming up!",
+ "onlyIf": "Only if (conditions)",
+ "onlyIfDesc": "Optional checks that must pass before actions run.",
+ "operator": "Operator",
+ "otherAutomationId": "Automation ID",
+ "passengerTemp": "Passenger temperature",
+ "presetHint": "Not sure where to start? Browse typed automation templates.",
+ "presetTitle": "Install preset",
+ "readOnly": {
+ "title": "Automation publishing is read-only"
+ },
+ "readiness": "Readiness",
+ "readyActions": "At least one action",
+ "readyDone": "complete",
+ "readyName": "Name added",
+ "readyPending": "incomplete",
+ "readyToSave": "Ready to save",
+ "readyTrigger": "Trigger configured",
+ "removeAction": "Remove action",
+ "removeCondition": "Remove condition",
+ "retryGeofences": "Retry loading places",
+ "save": "Save",
+ "saveError": "Save error",
+ "selectCommand": "Select command...",
+ "selectGeofence": "Select geofence...",
+ "selectTrigger": "Select trigger type...",
+ "settingKey": "Setting key",
+ "settingKeyPlaceholder": "charge_limit",
+ "showAdvancedParams": "Advanced parameters (JSON)",
+ "signal": "Signal",
+ "signals": {
+ "batteryLevel": "Battery level",
+ "insideTemp": "Inside temperature",
+ "isCharging": "Is charging",
+ "isClimateOn": "Climate on",
+ "isLocked": "Is locked",
+ "outsideTemp": "Outside temperature",
+ "sentryMode": "Sentry Mode",
+ "speed": "Speed",
+ "state": "Vehicle state"
+ },
+ "simpleCron": "Switch to simple mode",
+ "startTime": "Start",
+ "state": "State",
+ "statePlaceholder": "online",
+ "statusDisabled": "Disabled",
+ "statusEnabled": "Enabled",
+ "subtitle": "Configure supported typed triggers, conditions, and actions for your automation.",
+ "summary": "Automation summary",
+ "summaryActions": "Actions",
+ "summaryConditions": "Conditions",
+ "summaryStatus": "Status",
+ "summaryTrigger": "Trigger",
+ "targetAutomationId": "Target automation ID",
+ "testRun": "Test run",
+ "testRunStarted": "Test run started!",
+ "then": "Then (actions)",
+ "thenDesc": "Actions are executed in order.",
+ "time": "Time",
+ "timezone": "Timezone",
+ "triggerEvent": "Vehicle event",
+ "triggerGeofence": "Geofence",
+ "triggerNone": "Not set",
+ "triggerSchedule": "Schedule",
+ "triggerSignal": "Signal threshold",
+ "triggerType": "Trigger type",
+ "value": "Value",
+ "valueBoolean": "Boolean",
+ "valueNumber": "Number",
+ "valueNumberPlaceholder": "80",
+ "valueText": "Text",
+ "valueTextPlaceholder": "enabled",
+ "valueType": "Value type",
+ "vehicle": "Vehicle",
+ "vehicleFallback": "Vehicle {{id}}",
+ "waitDuration": "Wait duration (seconds)",
+ "when": "When (trigger)",
+ "whenDesc": "Choose the supported typed contract that starts this automation."
+ },
+ "card": {
+ "menuLabel": "Actions for {{name}}",
+ "pinLabel": "Pin automation {{name}}",
+ "toggleLabel": "Toggle automation {{name}}"
+ },
+ "commandGroups": {
+ "alerts": "Alerts",
+ "charging": "Charging",
+ "climate": "Climate",
+ "doors": "Doors & trunk",
+ "driveSoftware": "Drive & software",
+ "navigation": "Navigation",
+ "security": "Security & access"
+ },
+ "conditions": {
+ "geofence": "Geofence state",
+ "otherAutomation": "Other automation",
+ "signal": "Signal check",
+ "timeWindow": "Time window"
+ },
+ "conflictWith": "Conflict with",
+ "copyName": "{{name}} (copy)",
+ "create": "Create",
+ "delete": "Delete",
+ "deleteConfirm": "Delete",
+ "deleteMessage": "Are you sure you want to delete \"{{name}}\"? This cannot be undone.",
+ "deleteTitle": "Delete automation",
+ "duplicate": "Duplicate",
+ "empty": "No automations yet. Create a typed automation to get started!",
+ "emptyCta": "Create automation",
+ "event": {
+ "failed": "failed",
+ "skipped": "skipped",
+ "state_changed": "state_changed",
+ "succeeded": "succeeded",
+ "triggered": "triggered"
+ },
+ "events": {
+ "chargeEnd": "Charging ends",
+ "chargeStart": "Charging starts",
+ "driveEnd": "Drive ends",
+ "driveStart": "Drive starts",
+ "offline": "Goes offline",
+ "online": "Comes online",
+ "sentryAlert": "Sentry alert",
+ "sleepEnd": "Sleep ends",
+ "sleepStart": "Sleep starts"
+ },
+ "fails": "Fails",
+ "filterCount": "{{shown}} / {{total}}",
+ "filterStatus": "Filter by status",
+ "filters": {
+ "active": "Active",
+ "all": "All",
+ "autoDisabled": "Auto-disabled",
+ "disabled": "Disabled"
+ },
+ "firing": "Firing",
+ "geofence": {
+ "dwell": "Dwell",
+ "enter": "Enter",
+ "exit": "Exit",
+ "inside": "Inside",
+ "outside": "Outside"
+ },
+ "historyBrief": {
+ "available": "Summary loaded",
+ "bounds": "{{start}} inclusive → {{end}} exclusive · rule: {{rule}} · status: {{status}}",
+ "context": "Server summary across the selected period and rule/status filters, not just this page of rows.",
+ "eyebrow": "Automation executions",
+ "freshness": "History response; live events are a separate source",
+ "loading": "Loading executions",
+ "noRuns": "No completed runs in this summary; a rate and average duration are undefined.",
+ "retained": "Retained execution summary",
+ "unavailable": "Summary unavailable",
+ "unknownScope": "Execution window supplied by the caller"
+ },
+ "historyPage": {
+ "actionResults": "Action results",
+ "actions": "Actions",
+ "allRules": "All rules",
+ "allStatuses": "All statuses",
+ "availability": {
+ "failed": "This history section could not be loaded.",
+ "incomplete": "This execution window is still open; history may be incomplete.",
+ "noActionResults": "No action results are recorded for this execution.",
+ "noTransitions": "No vehicle state transitions were recorded during this execution window.",
+ "notApplicable": "No vehicle is associated with this execution.",
+ "truncated": "Only part of this history is shown.",
+ "unavailable": "History availability is unknown."
+ },
+ "detail": "Execution details",
+ "detailUnavailable": "Execution details are unavailable.",
+ "duration": "Average duration",
+ "durationColumn": "Duration",
+ "empty": "No executions match this period and filters.",
+ "error": "Error",
+ "failed": "Failed",
+ "filterRule": "Filter executions by rule",
+ "filterStatus": "Filter executions by status",
+ "loadFailed": "Could not load execution history.",
+ "loading": "Loading executions",
+ "manage": "Manage automation rules",
+ "new": "New automation",
+ "other": "Other outcomes",
+ "outcome": "Outcome",
+ "partial": "Partial",
+ "period": "Period",
+ "rate": "Success rate",
+ "rule": "Automation",
+ "ruleId": "Rule #{{id}}",
+ "status": {
+ "cancelled": "Cancelled",
+ "failed": "Failed",
+ "partial": "Partial",
+ "running": "Running",
+ "skipped": "Skipped",
+ "success": "Succeeded",
+ "test": "Test",
+ "undo": "Undone"
},
- "work-left": {
- "message": "{{VehicleName}} no longer reports being at work.",
- "name": "Left work"
- }
- }
- },
- "analytics": {
- "weeklyDigest": {
- "aiNarration": {
- "badge": "Helix",
- "description": "Get a short, Helix-written recap of your week from the digest data above.",
- "generateButton": "Generate narration",
- "noVehicleHint": "Pick a vehicle to enable Helix narration.",
- "title": "Helix narration",
- "utcScope": "Narration uses Monday-to-Monday UTC weeks, which may differ from the local-time totals above.",
- "weekLimit": "Narration is available only for the current UTC week and the previous 12 weeks. Select a supported week to generate its recap."
- }
- }
- },
- "anomaly": {
- "aiBaseline": {
- "badge": "Helix",
- "description": "Compute statistical anomaly bounds (mean, stddev, p5/p95) from this vehicle's recent signal history and walk through how each signal compares to the static safe-range fallback.",
- "generateButton": "Train baseline",
- "title": "Learn per-vehicle baseline"
+ "subtitle": "Review every execution and its outcome across the selected period.",
+ "success": "Succeeded",
+ "summary": "Execution summary",
+ "time": "Triggered",
+ "title": "Automation history",
+ "total": "Completed runs",
+ "transitions": "Vehicle state transitions",
+ "trend": "Execution activity",
+ "trendAria": "Execution outcomes across the selected period",
+ "trigger": "Trigger"
},
- "aiExplanation": {
- "badge": "Helix",
- "description": "Generate independent, inferred narration for the selected vehicle over 30 days, not an explanation of the detector’s 7-day results or the baseline’s 14-day training data.",
- "emptyHint": "Select a vehicle above to explain its anomalies.",
- "generateButton": "Generate explanation",
- "title": "Helix explanation"
- }
+ "import": "Import",
+ "importEntryError": "Entry {{entry}} ({{name}}): {{message}}",
+ "importFailedWithReason": "Typed automation import failed: {{message}}",
+ "importFileLabel": "Choose automation export file",
+ "importRetryFailedOnly": "Correct and import only the failed entries listed below. Do not re-import successful entries; doing so creates duplicates.",
+ "importTypedEnvelopeRequired": "Import a typed TeslaSync CTI automation export file. Legacy automation exports are rejected rather than translated.",
+ "importUnknownError": "Unknown error",
+ "lastRun": "Last",
+ "live": "Live",
+ "manageRules": "Manage rules",
+ "neverRun": "Never run",
+ "nextFire": "Next",
+ "noHistory": "No execution history yet",
+ "noMatch": "No automations match your filters",
+ "noMatchCta": "Reset filters",
+ "operators": {
+ "between": "Between",
+ "changed": "Changed",
+ "crossedAbove": "Crossed above",
+ "crossedBelow": "Crossed below",
+ "equals": "=",
+ "greaterThan": ">",
+ "greaterThanOrEqual": ">=",
+ "in": "In",
+ "lessThan": "<",
+ "lessThanOrEqual": "<=",
+ "notEquals": "!="
+ },
+ "otherAutomation": {
+ "disabled": "Disabled",
+ "enabled": "Enabled",
+ "recentlyTriggered": "Recently triggered"
+ },
+ "presets": {
+ "actionCount": "{{count}} actions",
+ "actionOne": "1 action",
+ "allCategory": "All",
+ "collapse": "Click to collapse",
+ "details": "Details for {{name}}",
+ "empty": "No preset templates available",
+ "emptyCategory": "No templates match your filters",
+ "expand": "Click to expand",
+ "filterAria": "Filter presets by category",
+ "hint": "One-click install",
+ "install": "Install",
+ "installNamed": "Install {{name}}",
+ "resource": "Automation presets",
+ "searchLabel": "Search templates",
+ "searchPlaceholder": "Search templates...",
+ "showing": "{{count}} of {{total}} templates",
+ "title": "Quick start templates",
+ "toggleAria": "Show or hide quick start templates"
+ },
+ "reEnable": "Re-enable",
+ "readOnly": {
+ "title": "Automation controls are read-only"
+ },
+ "recentActivity": "Recent activity",
+ "reconnecting": "Reconnecting",
+ "routines": {
+ "actionCount": "{{count}} actions",
+ "choosePlace": "Choose a place…",
+ "createCustomHint": "You can still create a custom automation from the automations page.",
+ "install": "Install",
+ "installNamed": "Install {{name}}",
+ "noPlaces": "Create a geofence place first to install routines.",
+ "noTemplates": "No geofence routine templates are available yet.",
+ "onEnter": "On geofence enter",
+ "onExit": "On geofence exit",
+ "place": "Place",
+ "resource": "Geofence routines",
+ "title": "Geofence routines"
+ },
+ "runs": "Runs",
+ "search": "Search automations...",
+ "showingCount": "Showing {{count}}",
+ "stats": {
+ "aria": "Automation summary"
+ },
+ "status": {
+ "active": "Active",
+ "auto-disabled": "Auto-disabled",
+ "disabled": "Disabled"
+ },
+ "subtitle": "Automate vehicle actions with typed triggers, conditions, and action chains",
+ "successRateValue": "{{value}} success",
+ "testRun": "Test run",
+ "title": "Automations",
+ "totalRunsCount": "{{count}} total",
+ "yourAutomations": "Your automations"
},
"battery": {
"aiNarrative": {
diff --git a/web/src/i18n/en/locale-battery.json b/web/src/i18n/en/locale-battery.json
index 5abbd430c0..a14f908ff1 100644
--- a/web/src/i18n/en/locale-battery.json
+++ b/web/src/i18n/en/locale-battery.json
@@ -721,7 +721,8 @@
"weekdayEvidence": "Weekday and frequency evidence",
"burnEvidence": "Daily trend and consumption distribution",
"chargingEvidence": "Charging profile and timing",
- "summaryScope": "History evidence uses the returned drive and charging windows; current SoC is a separate observed snapshot."
+ "summaryScope": "History evidence uses the returned drive and charging windows; current SoC is a separate observed snapshot.",
+ "planningWindow": "The planning window covers the next seven local days, starting tomorrow."
},
"cycleStress": {
"modernization": {
@@ -1236,7 +1237,9 @@
"trailingWindow": "Trailing {{days}} days",
"trailingWindow_one": "Trailing {{days}} day",
"trailingWindow_other": "Trailing {{days}} days",
- "windowReason": "The energy endpoint uses a trailing day count; custom calendar bounds are not applied by this source."
+ "windowReason": "The energy endpoint uses a trailing day count; custom calendar bounds are not applied by this source.",
+ "selectedWindow": "Selected workspace range",
+ "boundedSource": "Completed drives are filtered by the workspace start and exclusive end; live power remains a separate snapshot."
},
"metrics": {
"estimated": "Estimated",
@@ -1322,7 +1325,8 @@
"title": "Daily energy history",
"noData": "No energy history records available.",
"empty": "No energy records found."
- }
+ },
+ "rangeLimit": "Choose a workspace range of at most 3650 days to view energy history."
},
"energyLedger": {
"summaryScope": "Months reconstructed from returned charging and drive history; exact complete-history bounds are not supplied.",
diff --git a/web/src/i18n/en/locale-charging.json b/web/src/i18n/en/locale-charging.json
index 76a97150ba..a97f47a88a 100644
--- a/web/src/i18n/en/locale-charging.json
+++ b/web/src/i18n/en/locale-charging.json
@@ -1215,7 +1215,15 @@
},
"kpis": "Cost summary metrics",
"trends": "Cost trends",
- "impact": "Lifetime and environmental impact"
+ "impact": "Lifetime and environmental impact",
+ "category": {
+ "home": "Home",
+ "supercharger": "Supercharger",
+ "public": "Public",
+ "publicDC": "Public DC",
+ "workL2": "Work / L2",
+ "other": "Other"
+ }
},
"metrics": {
"peakPower": "{{value}} kW peak",
diff --git a/web/src/i18n/en/locale-dashboard.json b/web/src/i18n/en/locale-dashboard.json
index 1df00a1d5e..0ff8666127 100644
--- a/web/src/i18n/en/locale-dashboard.json
+++ b/web/src/i18n/en/locale-dashboard.json
@@ -901,6 +901,15 @@
"emptyHint": "Select a vehicle above to explain its anomalies.",
"generateButton": "Generate explanation",
"title": "Helix explanation"
+ },
+ "explanation": {
+ "aboveMaximum": "{{signal}} value {{value}} exceeds the safe maximum ({{maximum}}).",
+ "belowMinimum": "{{signal}} value {{value}} is below the safe minimum ({{minimum}}).",
+ "decreased": "{{signal}} decreased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreasedPercent": "{{signal}} decreased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increased": "{{signal}} increased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increasedPercent": "{{signal}} increased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "zScore": "{{signal}} value {{value}} is {{sigma}} standard deviations from the mean ({{baseline}})."
}
},
"automations": {
@@ -941,7 +950,8 @@
"speed": "Speed",
"state": "Vehicle state"
}
- }
+ },
+ "copyName": "{{name}} (copy)"
},
"battery": {
"aiNarrative": {
@@ -3864,6 +3874,7 @@
"open": "Open",
"outside": "Outside",
"outsideTemp": "Outside temperature",
+ "overview": "Widget overview",
"playbackProgress": "Playback progress",
"playing": "Playing",
"positionHeatmap": {
diff --git a/web/src/i18n/en/locale-detail-anomaly.json b/web/src/i18n/en/locale-detail-anomaly.json
new file mode 100644
index 0000000000..6d87ba050a
--- /dev/null
+++ b/web/src/i18n/en/locale-detail-anomaly.json
@@ -0,0 +1,82 @@
+{
+ "anomaly": {
+ "summary": {
+ "snapshot": "Current detector snapshot",
+ "period": "Current snapshot · last 7 days · last 24 hours",
+ "scope": "Coverage and health categories describe the current detector snapshot. Anomaly counts retain their separate 7-day and 24-hour source windows.",
+ "sevenDays": "Last 7 days",
+ "day": "Last 24 hours",
+ "title": "Coverage and anomaly windows",
+ "available": "Detector snapshot available",
+ "unavailable": "Detector snapshot unavailable"
+ },
+ "title": "Anomaly detection",
+ "subtitle": "Automatic health monitoring and signal anomaly detection",
+ "monitored": "Signals monitored",
+ "last7d": "Anomalies (7d)",
+ "last24h": "Anomalies (24h)",
+ "categories": "Health categories",
+ "healthSummary": "System health",
+ "noHealth": "Health data will appear once telemetry is available.",
+ "timeline": "Anomaly timeline",
+ "value": "Value",
+ "baseline": "Baseline",
+ "noAnomalies": "No anomalies detected — all systems normal.",
+ "frequency": "Most frequent anomalies",
+ "count": "Anomalies",
+ "noFrequency": "Anomaly frequency data will appear after detection runs.",
+ "noData": "No data available yet.",
+ "kpis": "Summary metrics",
+ "aiInsights": "AI insights",
+ "selectVehicle": "Select a vehicle to view its anomaly analysis.",
+ "frequencyAria": "Bar chart of the most frequently anomalous signals",
+ "category": {
+ "battery": "Battery",
+ "tires": "Tires",
+ "motors": "Motors",
+ "hvac": "Climate",
+ "charging": "Charging",
+ "unknown": "Unknown"
+ },
+ "status": {
+ "normal": "Normal",
+ "warning": "Warning",
+ "critical": "Critical",
+ "unknown": "Unknown"
+ },
+ "severity": {
+ "critical": "Critical",
+ "warning": "Warning",
+ "info": "Info"
+ },
+ "type": {
+ "z_score": "Statistical",
+ "range": "Range",
+ "trend": "Trend"
+ },
+ "aiExplanation": {
+ "title": "Helix explanation",
+ "description": "Generate independent, inferred narration for the selected vehicle over 30 days, not an explanation of the detector’s 7-day results or the baseline’s 14-day training data.",
+ "generateButton": "Generate explanation",
+ "badge": "Helix",
+ "emptyHint": "Select a vehicle above to explain its anomalies."
+ },
+ "aiBaseline": {
+ "title": "Learn per-vehicle baseline",
+ "description": "Compute statistical anomaly bounds (mean, stddev, p5/p95) from this vehicle's recent signal history and walk through how each signal compares to the static safe-range fallback.",
+ "generateButton": "Train baseline",
+ "badge": "Helix"
+ },
+ "colSignal": "Signal",
+ "overview": "Anomaly overview",
+ "explanation": {
+ "zScore": "{{signal}} value {{value}} is {{sigma}} standard deviations from the mean ({{baseline}}).",
+ "belowMinimum": "{{signal}} value {{value}} is below the safe minimum ({{minimum}}).",
+ "aboveMaximum": "{{signal}} value {{value}} exceeds the safe maximum ({{maximum}}).",
+ "increased": "{{signal}} increased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreased": "{{signal}} decreased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increasedPercent": "{{signal}} increased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreasedPercent": "{{signal}} decreased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}})."
+ }
+ }
+}
diff --git a/web/src/i18n/en/locale-detail-automations.json b/web/src/i18n/en/locale-detail-automations.json
new file mode 100644
index 0000000000..f757e76990
--- /dev/null
+++ b/web/src/i18n/en/locale-detail-automations.json
@@ -0,0 +1,488 @@
+{
+ "automations": {
+ "historyPage": {
+ "availability": {
+ "failed": "This history section could not be loaded.",
+ "notApplicable": "No vehicle is associated with this execution.",
+ "unavailable": "History availability is unknown.",
+ "truncated": "Only part of this history is shown.",
+ "incomplete": "This execution window is still open; history may be incomplete.",
+ "noActionResults": "No action results are recorded for this execution.",
+ "noTransitions": "No vehicle state transitions were recorded during this execution window."
+ },
+ "title": "Automation history",
+ "subtitle": "Review every execution and its outcome across the selected period.",
+ "new": "New automation",
+ "allRules": "All rules",
+ "allStatuses": "All statuses",
+ "filterRule": "Filter executions by rule",
+ "filterStatus": "Filter executions by status",
+ "ruleId": "Rule #{{id}}",
+ "selectedRule": "Selected rule",
+ "loading": "Loading executions",
+ "empty": "No executions match this period and filters.",
+ "manage": "Manage automation rules",
+ "summary": "Execution summary",
+ "total": "Completed runs",
+ "success": "Succeeded",
+ "failed": "Failed",
+ "partial": "Partial",
+ "rate": "Success rate",
+ "duration": "Average duration",
+ "durationColumn": "Duration",
+ "trend": "Execution activity",
+ "trendAria": "Execution outcomes across the selected period",
+ "period": "Period",
+ "other": "Other outcomes",
+ "time": "Triggered",
+ "rule": "Automation",
+ "outcome": "Outcome",
+ "trigger": "Trigger",
+ "actions": "Actions",
+ "error": "Error",
+ "detail": "Execution details",
+ "actionResults": "Action results",
+ "transitions": "Vehicle state transitions",
+ "status": {
+ "running": "Running",
+ "success": "Succeeded",
+ "partial": "Partial",
+ "failed": "Failed",
+ "skipped": "Skipped",
+ "cancelled": "Cancelled",
+ "test": "Test",
+ "undo": "Undone"
+ },
+ "detailUnavailable": "Execution details are unavailable.",
+ "loadFailed": "Could not load execution history."
+ },
+ "readOnly": {
+ "title": "Automation controls are read-only"
+ },
+ "builder": {
+ "readOnly": {
+ "title": "Automation publishing is read-only"
+ },
+ "aiBuilder": {
+ "title": "Draft from natural language",
+ "description": "Describe the automation you want and get a typed graph draft you can review and save below.",
+ "badge": "Helix",
+ "draftButton": "Draft automation",
+ "placeholder": "e.g. precondition the cabin to 22°C when I leave work on weekdays",
+ "inputLabel": "Automation description",
+ "noVehicle": "Pick a vehicle above to let Helix draft an automation for it.",
+ "noPrompt": "Describe the automation you want Helix to draft."
+ },
+ "aiGeofenceAware": {
+ "title": "Suggest a geofence-aware automation",
+ "description": "Describe an automation that uses one of your existing geofences. Helix proposes a typed graph anchored to a place_id you already have — review and apply to the form below before saving.",
+ "badge": "Helix",
+ "suggestButton": "Suggest automation",
+ "placeholder": "e.g. when I arrive home on a weekday after sunset, turn on cabin overheat protection",
+ "proposalLabel": "Proposed automation",
+ "applyButton": "Apply to form",
+ "rejectedLabel": "Proposal rejected by validator",
+ "triggersLabel": "Triggers",
+ "conditionsLabel": "Conditions",
+ "actionsLabel": "Actions",
+ "unnamed": "(unnamed)",
+ "promptAria": "Describe the geofence-aware automation to draft"
+ },
+ "actionType": "Action type",
+ "actionNumber": "Action {{number}}",
+ "chargeLimit": "Charge limit",
+ "chargingAmps": "Charging current (A)",
+ "driverTemp": "Driver temperature",
+ "passengerTemp": "Passenger temperature",
+ "showAdvancedParams": "Advanced parameters (JSON)",
+ "hideAdvancedParams": "Hide advanced parameters",
+ "geofenceHelp": "Create a place first, then return here to choose when the vehicle arrives or leaves.",
+ "managePlaces": "Manage places",
+ "retryGeofences": "Retry loading places",
+ "moveUp": "Move up",
+ "moveDown": "Move down",
+ "removeAction": "Remove action",
+ "addAction": "Add action",
+ "selectCommand": "Select command...",
+ "command": "Command",
+ "commandParams": "Params (JSON, optional)",
+ "invalidJson": "Invalid JSON",
+ "commandParamsPlaceholder": "{}",
+ "channel": "Channel",
+ "noChannels": "No channels configured",
+ "notifyMessage": "Message",
+ "notifyPlaceholder": "Car is warming up!",
+ "settingKey": "Setting key",
+ "settingKeyPlaceholder": "charge_limit",
+ "valueType": "Value type",
+ "valueText": "Text",
+ "valueNumber": "Number",
+ "valueBoolean": "Boolean",
+ "value": "Value",
+ "valueNumberPlaceholder": "80",
+ "valueTextPlaceholder": "enabled",
+ "targetAutomationId": "Target automation ID",
+ "waitDuration": "Wait duration (seconds)",
+ "editTitle": "Edit automation",
+ "presetTitle": "Install preset",
+ "createTitle": "Create automation",
+ "editBreadcrumb": "Edit: {{name}}",
+ "vehicleFallback": "Vehicle {{id}}",
+ "allVehicles": "All vehicles",
+ "selectTrigger": "Select trigger type...",
+ "errorName": "Name is required",
+ "errorTrigger": "Trigger type is required",
+ "errorTriggerPlace": "Select a geofence for the trigger",
+ "errorConditionPlace": "Select a geofence for each geofence condition",
+ "errorActions": "At least one action is required",
+ "errorActionDetails": "Complete every action before saving",
+ "notFound": "Automation not found",
+ "backToList": "Back to Automations",
+ "general": "General",
+ "name": "Name",
+ "namePlaceholder": "Morning commute prep",
+ "description": "Description",
+ "vehicle": "Vehicle",
+ "enabled": "Enabled",
+ "when": "When (trigger)",
+ "triggerType": "Trigger type",
+ "onlyIf": "Only if (conditions)",
+ "then": "Then (actions)",
+ "saveError": "Save error",
+ "save": "Save",
+ "create": "Create",
+ "testRun": "Test run",
+ "cancel": "Cancel",
+ "testRunStarted": "Test run started!",
+ "selectGeofence": "Select geofence...",
+ "conditionType": "Condition type",
+ "removeCondition": "Remove condition",
+ "addCondition": "Add condition",
+ "signal": "Signal",
+ "operator": "Operator",
+ "minValue": "Min",
+ "maxValue": "Max",
+ "statePlaceholder": "online",
+ "startTime": "Start",
+ "endTime": "End",
+ "timezone": "Timezone",
+ "days": "Days",
+ "geofence": "Geofence",
+ "state": "State",
+ "otherAutomationId": "Automation ID",
+ "conflict": "Potential conflict",
+ "noTrigger": "No trigger configured",
+ "time": "Time",
+ "cronExpr": "Cron expression",
+ "cronPlaceholder": "0 8 * * 1-5",
+ "advancedCron": "Use advanced cron expression",
+ "simpleCron": "Switch to simple mode",
+ "event": "Event",
+ "geofenceEvent": "Event",
+ "dwellMinutes": "Dwell minutes",
+ "dwellHint": "Required for dwell triggers",
+ "changedOnly": "Fire on any change",
+ "signals": {
+ "batteryLevel": "Battery level",
+ "insideTemp": "Inside temperature",
+ "outsideTemp": "Outside temperature",
+ "speed": "Speed",
+ "isLocked": "Is locked",
+ "isCharging": "Is charging",
+ "isClimateOn": "Climate on",
+ "sentryMode": "Sentry Mode",
+ "state": "Vehicle state"
+ },
+ "triggerNone": "Not set",
+ "brief": {
+ "context": "Current editor draft only. Publishing still requires validation and an explicit save.",
+ "eyebrow": "Automation draft",
+ "scope": "Editor configuration; not execution history",
+ "unsaved": "Local changes not published",
+ "editor": "Current editor state"
+ },
+ "summaryTrigger": "Trigger",
+ "summaryConditions": "Conditions",
+ "onlyIfDesc": "Optional checks that must pass before actions run.",
+ "summaryActions": "Actions",
+ "thenDesc": "Actions are executed in order.",
+ "statusEnabled": "Enabled",
+ "statusDisabled": "Disabled",
+ "summaryStatus": "Status",
+ "readyName": "Name added",
+ "readyTrigger": "Trigger configured",
+ "readyActions": "At least one action",
+ "subtitle": "Configure supported typed triggers, conditions, and actions for your automation.",
+ "summary": "Automation summary",
+ "readyToSave": "Ready to save",
+ "notReady": "Not ready yet",
+ "descriptionPlaceholder": "Prepare the car for the morning commute",
+ "whenDesc": "Choose the supported typed contract that starts this automation.",
+ "emptyTrigger": "Select a supported trigger type to configure when this automation starts.",
+ "assistant": "Builder assistant",
+ "readiness": "Readiness",
+ "readyDone": "complete",
+ "readyPending": "incomplete",
+ "presetHint": "Not sure where to start? Browse typed automation templates.",
+ "triggerSchedule": "Schedule",
+ "triggerEvent": "Vehicle event",
+ "triggerGeofence": "Geofence",
+ "triggerSignal": "Signal threshold",
+ "cronHint": "minute hour day-of-month month day-of-week",
+ "geofenceLoading": "Loading geofences…",
+ "geofenceError": "Could not load geofences",
+ "geofenceEmpty": "No geofences configured yet",
+ "commandParamsObjectError": "Params must be a JSON object."
+ },
+ "recentActivity": "Recent activity",
+ "live": "Live",
+ "reconnecting": "Reconnecting",
+ "totalRuns": "total",
+ "successRate": "success",
+ "avgDuration": "avg",
+ "noHistory": "No execution history yet",
+ "firing": "Firing",
+ "toggleLabel": "Toggle automation",
+ "card": {
+ "pinLabel": "Pin automation {{name}}",
+ "toggleLabel": "Toggle automation {{name}}",
+ "menuLabel": "Actions for {{name}}"
+ },
+ "menu": "Actions menu",
+ "testRun": "Test run",
+ "reEnable": "Re-enable",
+ "duplicate": "Duplicate",
+ "export": "Export",
+ "delete": "Delete",
+ "allVehicles": "All vehicles",
+ "lastRun": "Last",
+ "neverRun": "Never run",
+ "runs": "Runs",
+ "fails": "Fails",
+ "nextFire": "Next",
+ "conflictWith": "Conflict with",
+ "deleteTitle": "Delete automation",
+ "deleteMessage": "Are you sure you want to delete \"{{name}}\"? This cannot be undone.",
+ "deleteConfirm": "Delete",
+ "title": "Automations",
+ "importUnknownError": "Unknown error",
+ "subtitle": "Automate vehicle actions with typed triggers, conditions, and action chains",
+ "import": "Import",
+ "create": "Create",
+ "stats": {
+ "total": "Total",
+ "active": "Active",
+ "disabled": "Disabled",
+ "autoDisabled": "Auto-disabled",
+ "aria": "Automation summary"
+ },
+ "filterStatus": "Filter by status",
+ "search": "Search automations...",
+ "manageRules": "Manage rules",
+ "history": {
+ "actions": "Actions",
+ "allAutomations": "All automations",
+ "allStatuses": "All statuses",
+ "automation": "Automation",
+ "avgDuration": "Average duration",
+ "count": "Executions",
+ "dailyTrend": "Daily activity",
+ "dailyTrendAria": "Daily automation runs by outcome across the selected period",
+ "day": "Day",
+ "duration": "Duration",
+ "empty": "No executions match these filters",
+ "filters": "Filter executions",
+ "loading": "Loading executions",
+ "noChartData": "No executions in this range",
+ "refresh": "Refresh",
+ "results": "Executions",
+ "statusBreakdown": "Execution outcomes",
+ "statusBreakdownAria": "Automation runs by outcome across the selected period",
+ "statusLabel": "Status",
+ "successRate": "Success rate (completed runs)",
+ "title": "Execution history",
+ "total": "{{count}} matching records",
+ "totalRuns": "Matching executions",
+ "trigger": "Trigger",
+ "summaryScope": "Totals cover the selected period, not just this page.",
+ "clearFilters": "Clear filters",
+ "firstPage": "Go to first page",
+ "createAutomation": "Create automation",
+ "report": "Execution activity",
+ "reportDescription": "See how your automations ran over the selected period.",
+ "summary": "Execution summary",
+ "succeeded": "Successful runs",
+ "failed": "Failed runs",
+ "failedActions": "({{count}} failed)",
+ "emptyWindow": "No automation runs in this period",
+ "status": {
+ "success": "success",
+ "partial": "partial",
+ "failed": "failed",
+ "skipped": "skipped",
+ "running": "running",
+ "cancelled": "cancelled",
+ "test": "test",
+ "undo": "undo"
+ }
+ },
+ "presets": {
+ "title": "Quick start templates",
+ "hint": "One-click install",
+ "actionCount": "{{count}} actions",
+ "actionOne": "1 action",
+ "details": "Details for {{name}}",
+ "install": "Install",
+ "empty": "No preset templates available",
+ "emptyCategory": "No templates match your filters",
+ "allCategory": "All",
+ "filterAria": "Filter presets by category",
+ "searchLabel": "Search templates",
+ "searchPlaceholder": "Search templates...",
+ "showing": "{{count}} of {{total}} templates",
+ "expand": "Click to expand",
+ "collapse": "Click to collapse",
+ "toggleAria": "Show or hide quick start templates",
+ "installNamed": "Install {{name}}",
+ "resource": "Automation presets"
+ },
+ "empty": "No automations yet. Create a typed automation to get started!",
+ "noMatch": "No automations match your filters",
+ "historyBrief": {
+ "context": "Server summary across the selected period and rule/status filters, not just this page of rows.",
+ "noRuns": "No completed runs in this summary; a rate and average duration are undefined.",
+ "eyebrow": "Automation executions",
+ "loading": "Loading executions",
+ "unavailable": "Summary unavailable",
+ "retained": "Retained execution summary",
+ "available": "Summary loaded",
+ "unknownScope": "Execution window supplied by the caller",
+ "freshness": "History response; live events are a separate source",
+ "bounds": "{{start}} inclusive → {{end}} exclusive · rule: {{rule}} · status: {{status}}"
+ },
+ "brief": {
+ "countContext": "Full loaded rule set, before status and search filters.",
+ "counterContext": "Cumulative counters on loaded rules; their start time is not supplied.",
+ "eyebrow": "Automation rules",
+ "title": "Rule inventory",
+ "description": "Review the loaded rules without changing their triggers, conditions, or actions.",
+ "loading": "Loading rules",
+ "unavailable": "Rules unavailable",
+ "retained": "Retained rules",
+ "available": "Rules loaded",
+ "scope": "All loaded rules · unfiltered",
+ "freshness": "Rule response; not a live execution stream"
+ },
+ "activityBrief": {
+ "context": "History aggregate window is not supplied. Independent live events and recent rows are not this summary denominator.",
+ "eyebrow": "Execution history",
+ "scope": "History aggregate · window unknown"
+ },
+ "totalRunsCount": "{{count}} total",
+ "successRateValue": "{{value}} success",
+ "avgDurationValue": "{{value}} avg",
+ "filters": {
+ "all": "All",
+ "active": "Active",
+ "disabled": "Disabled",
+ "autoDisabled": "Auto-disabled"
+ },
+ "importTypedEnvelopeRequired": "Import a typed TeslaSync CTI automation export file. Legacy automation exports are rejected rather than translated.",
+ "importFailedWithReason": "Typed automation import failed: {{message}}",
+ "importFileLabel": "Choose automation export file",
+ "autoDisabledTitle": "Attention needed",
+ "autoDisabledWarning": "{{count}} automation(s) have been auto-disabled due to repeated failures.",
+ "filterCount": "{{shown}} / {{total}}",
+ "yourAutomations": "Your automations",
+ "showingCount": "Showing {{count}}",
+ "emptyCta": "Create automation",
+ "noMatchCta": "Reset filters",
+ "events": {
+ "driveStart": "Drive starts",
+ "driveEnd": "Drive ends",
+ "chargeStart": "Charging starts",
+ "chargeEnd": "Charging ends",
+ "sleepStart": "Sleep starts",
+ "sleepEnd": "Sleep ends",
+ "online": "Comes online",
+ "offline": "Goes offline",
+ "sentryAlert": "Sentry alert"
+ },
+ "geofence": {
+ "enter": "Enter",
+ "exit": "Exit",
+ "dwell": "Dwell",
+ "inside": "Inside",
+ "outside": "Outside"
+ },
+ "operators": {
+ "equals": "=",
+ "notEquals": "!=",
+ "lessThan": "<",
+ "lessThanOrEqual": "<=",
+ "greaterThan": ">",
+ "greaterThanOrEqual": ">=",
+ "changed": "Changed",
+ "crossedAbove": "Crossed above",
+ "crossedBelow": "Crossed below",
+ "between": "Between",
+ "in": "In"
+ },
+ "event": {
+ "triggered": "triggered",
+ "succeeded": "succeeded",
+ "failed": "failed",
+ "skipped": "skipped",
+ "state_changed": "state_changed"
+ },
+ "routines": {
+ "actionCount": "{{count}} actions",
+ "install": "Install",
+ "place": "Place",
+ "onEnter": "On geofence enter",
+ "onExit": "On geofence exit",
+ "installNamed": "Install {{name}}",
+ "resource": "Geofence routines",
+ "title": "Geofence routines",
+ "choosePlace": "Choose a place…",
+ "noPlaces": "Create a geofence place first to install routines.",
+ "noTemplates": "No geofence routine templates are available yet.",
+ "createCustomHint": "You can still create a custom automation from the automations page."
+ },
+ "importRetryFailedOnly": "Correct and import only the failed entries listed below. Do not re-import successful entries; doing so creates duplicates.",
+ "importEntryError": "Entry {{entry}} ({{name}}): {{message}}",
+ "actions": {
+ "command": "Vehicle command",
+ "notify": "Send notification",
+ "setSetting": "Set setting",
+ "callAutomation": "Call automation",
+ "wait": "Wait"
+ },
+ "conditions": {
+ "signal": "Signal check",
+ "timeWindow": "Time window",
+ "geofence": "Geofence state",
+ "otherAutomation": "Other automation"
+ },
+ "otherAutomation": {
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "recentlyTriggered": "Recently triggered"
+ },
+ "commandGroups": {
+ "security": "Security & access",
+ "climate": "Climate",
+ "charging": "Charging",
+ "doors": "Doors & trunk",
+ "alerts": "Alerts",
+ "navigation": "Navigation",
+ "driveSoftware": "Drive & software"
+ },
+ "status": {
+ "active": "Active",
+ "disabled": "Disabled",
+ "auto-disabled": "Auto-disabled"
+ },
+ "copyName": "{{name}} (copy)"
+ }
+}
diff --git a/web/src/i18n/en/locale-detail-widget.json b/web/src/i18n/en/locale-detail-widget.json
index fe26d8e49f..a165138e6c 100644
--- a/web/src/i18n/en/locale-detail-widget.json
+++ b/web/src/i18n/en/locale-detail-widget.json
@@ -1714,6 +1714,7 @@
"exportFailed": "Failed",
"exportQueued": "Queued",
"exportRunning": "Running",
- "exportDone": "Done"
+ "exportDone": "Done",
+ "overview": "Widget overview"
}
}
diff --git a/web/src/i18n/en/locale-diagnostics.json b/web/src/i18n/en/locale-diagnostics.json
index 60f3c01185..75bd132f8f 100644
--- a/web/src/i18n/en/locale-diagnostics.json
+++ b/web/src/i18n/en/locale-diagnostics.json
@@ -1,75 +1,4 @@
{
- "anomaly": {
- "summary": {
- "snapshot": "Current detector snapshot",
- "period": "Current snapshot · last 7 days · last 24 hours",
- "scope": "Coverage and health categories describe the current detector snapshot. Anomaly counts retain their separate 7-day and 24-hour source windows.",
- "sevenDays": "Last 7 days",
- "day": "Last 24 hours",
- "title": "Coverage and anomaly windows",
- "available": "Detector snapshot available",
- "unavailable": "Detector snapshot unavailable"
- },
- "title": "Anomaly detection",
- "subtitle": "Automatic health monitoring and signal anomaly detection",
- "monitored": "Signals monitored",
- "last7d": "Anomalies (7d)",
- "last24h": "Anomalies (24h)",
- "categories": "Health categories",
- "healthSummary": "System health",
- "noHealth": "Health data will appear once telemetry is available.",
- "timeline": "Anomaly timeline",
- "value": "Value",
- "baseline": "Baseline",
- "noAnomalies": "No anomalies detected — all systems normal.",
- "frequency": "Most frequent anomalies",
- "count": "Anomalies",
- "noFrequency": "Anomaly frequency data will appear after detection runs.",
- "noData": "No data available yet.",
- "kpis": "Summary metrics",
- "aiInsights": "AI insights",
- "selectVehicle": "Select a vehicle to view its anomaly analysis.",
- "frequencyAria": "Bar chart of the most frequently anomalous signals",
- "category": {
- "battery": "Battery",
- "tires": "Tires",
- "motors": "Motors",
- "hvac": "Climate",
- "charging": "Charging",
- "unknown": "Unknown"
- },
- "status": {
- "normal": "Normal",
- "warning": "Warning",
- "critical": "Critical",
- "unknown": "Unknown"
- },
- "severity": {
- "critical": "Critical",
- "warning": "Warning",
- "info": "Info"
- },
- "type": {
- "z_score": "Statistical",
- "range": "Range",
- "trend": "Trend"
- },
- "aiExplanation": {
- "title": "Helix explanation",
- "description": "Generate independent, inferred narration for the selected vehicle over 30 days, not an explanation of the detector’s 7-day results or the baseline’s 14-day training data.",
- "generateButton": "Generate explanation",
- "badge": "Helix",
- "emptyHint": "Select a vehicle above to explain its anomalies."
- },
- "aiBaseline": {
- "title": "Learn per-vehicle baseline",
- "description": "Compute statistical anomaly bounds (mean, stddev, p5/p95) from this vehicle's recent signal history and walk through how each signal compares to the static safe-range fallback.",
- "generateButton": "Train baseline",
- "badge": "Helix"
- },
- "colSignal": "Signal",
- "overview": "Anomaly overview"
- },
"diagnostics": {
"brief": {
"provenance": "Evidence-ranked analysis of retrieved signal histories; not a diagnosis or proof of causation.",
@@ -760,6 +689,85 @@
}
}
},
+ "anomaly": {
+ "aiBaseline": {
+ "badge": "Helix",
+ "description": "Compute statistical anomaly bounds (mean, stddev, p5/p95) from this vehicle's recent signal history and walk through how each signal compares to the static safe-range fallback.",
+ "generateButton": "Train baseline",
+ "title": "Learn per-vehicle baseline"
+ },
+ "aiExplanation": {
+ "badge": "Helix",
+ "description": "Generate independent, inferred narration for the selected vehicle over 30 days, not an explanation of the detector’s 7-day results or the baseline’s 14-day training data.",
+ "emptyHint": "Select a vehicle above to explain its anomalies.",
+ "generateButton": "Generate explanation",
+ "title": "Helix explanation"
+ },
+ "aiInsights": "AI insights",
+ "baseline": "Baseline",
+ "categories": "Health categories",
+ "category": {
+ "battery": "Battery",
+ "charging": "Charging",
+ "hvac": "Climate",
+ "motors": "Motors",
+ "tires": "Tires",
+ "unknown": "Unknown"
+ },
+ "colSignal": "Signal",
+ "count": "Anomalies",
+ "explanation": {
+ "aboveMaximum": "{{signal}} value {{value}} exceeds the safe maximum ({{maximum}}).",
+ "belowMinimum": "{{signal}} value {{value}} is below the safe minimum ({{minimum}}).",
+ "decreased": "{{signal}} decreased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "decreasedPercent": "{{signal}} decreased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increased": "{{signal}} increased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "increasedPercent": "{{signal}} increased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).",
+ "zScore": "{{signal}} value {{value}} is {{sigma}} standard deviations from the mean ({{baseline}})."
+ },
+ "frequency": "Most frequent anomalies",
+ "frequencyAria": "Bar chart of the most frequently anomalous signals",
+ "healthSummary": "System health",
+ "kpis": "Summary metrics",
+ "last24h": "Anomalies (24h)",
+ "last7d": "Anomalies (7d)",
+ "monitored": "Signals monitored",
+ "noData": "No data available yet.",
+ "noFrequency": "Anomaly frequency data will appear after detection runs.",
+ "noHealth": "Health data will appear once telemetry is available.",
+ "overview": "Anomaly overview",
+ "selectVehicle": "Select a vehicle to view its anomaly analysis.",
+ "severity": {
+ "critical": "Critical",
+ "info": "Info",
+ "warning": "Warning"
+ },
+ "status": {
+ "critical": "Critical",
+ "normal": "Normal",
+ "unknown": "Unknown",
+ "warning": "Warning"
+ },
+ "subtitle": "Automatic health monitoring and signal anomaly detection",
+ "summary": {
+ "available": "Detector snapshot available",
+ "day": "Last 24 hours",
+ "period": "Current snapshot · last 7 days · last 24 hours",
+ "scope": "Coverage and health categories describe the current detector snapshot. Anomaly counts retain their separate 7-day and 24-hour source windows.",
+ "sevenDays": "Last 7 days",
+ "snapshot": "Current detector snapshot",
+ "title": "Coverage and anomaly windows",
+ "unavailable": "Detector snapshot unavailable"
+ },
+ "timeline": "Anomaly timeline",
+ "title": "Anomaly detection",
+ "type": {
+ "range": "Range",
+ "trend": "Trend",
+ "z_score": "Statistical"
+ },
+ "value": "Value"
+ },
"automations": {
"builder": {
"aiBuilder": {
diff --git a/web/src/i18n/en/locale-science.json b/web/src/i18n/en/locale-science.json
index 607bbce706..05e89a9be4 100644
--- a/web/src/i18n/en/locale-science.json
+++ b/web/src/i18n/en/locale-science.json
@@ -159,7 +159,8 @@
"provenance": "Historical inputs and derived fits; source eligibility, assumptions and uncertainty apply. Counts are not a health grade.",
"pressureImbalance": "Reported corner-pressure imbalance in the selected source window.",
"underinflation": "Source underinflation fraction relative to the assumed placard pressure."
- }
+ },
+ "rangeLimit": "Choose a workspace range of at most 30 days to view science evidence."
},
"achievements": {
"dismiss": "Dismiss achievement notification",
@@ -261,6 +262,23 @@
"value": "Value"
}
},
+ "date": {
+ "preset": {
+ "all": "All time",
+ "last1y": "Last year",
+ "last24h": "Last 24 hours",
+ "last30": "Last 30 days",
+ "last6h": "Last 6 hours",
+ "last90": "Last 90 days",
+ "lastMonth": "Last month",
+ "live": "Live",
+ "mtd": "Month to date",
+ "qtd": "Quarter to date",
+ "today": "Today",
+ "yesterday": "Yesterday",
+ "ytd": "Year to date"
+ }
+ },
"delta": {
"noComparison": "No comparison data",
"title": "{{current}} vs {{previous}}"
diff --git a/web/src/i18n/en/runtime-manifest.json b/web/src/i18n/en/runtime-manifest.json
index a6f10b8b24..d9b970acc7 100644
--- a/web/src/i18n/en/runtime-manifest.json
+++ b/web/src/i18n/en/runtime-manifest.json
@@ -61,9 +61,11 @@
"alerts",
"annotation",
"anomalies",
+ "anomaly",
"apiLogs",
"app",
"arrivalReliability",
+ "automations",
"battery",
"browserNotifications",
"bulk",
@@ -598,7 +600,6 @@
],
"automations": [
"automationList",
- "automations",
"comfort",
"pinned"
],
@@ -682,13 +683,6 @@
"tirePressure",
"vehicleSystems"
],
- "diagnostics": [
- "anomaly",
- "diagnostics",
- "rootCauseIntelligence",
- "rul",
- "serviceEvidencePack"
- ],
"maps": [
"chargingPlaces",
"geofences",
@@ -710,6 +704,12 @@
"exports": [
"exportsList"
],
+ "diagnostics": [
+ "diagnostics",
+ "rootCauseIntelligence",
+ "rul",
+ "serviceEvidencePack"
+ ],
"benchmarks": [
"benchmarks"
],
@@ -1797,6 +1797,7 @@
"alertPacks",
"analytics",
"anomaly",
+ "automations",
"battery",
"bulk",
"calculationDetails",
@@ -2399,25 +2400,25 @@
"widget",
"yearReview"
],
- "diagnostics": [
+ "maps": [
"achievements",
"activity",
"admin",
"ai",
"alertPacks",
"analytics",
+ "anomaly",
"automations",
"battery",
"bulk",
"calculationDetails",
"chargePlanner",
"charging",
- "chargingPlaces",
"chart",
"climate",
+ "combobox",
"compare",
"costAnalysis",
- "dashcam",
"dataRepair",
"date",
"delta",
@@ -2426,18 +2427,19 @@
"driveDetail",
"drives",
"editConflict",
+ "efficiency",
"emptyState",
"entityContext",
- "error",
"errorBoundary",
"export",
"exports",
"feedback",
"feedbackTriage",
+ "filters",
+ "forms",
"freshness",
"fsm",
"gas",
- "geofences",
"helix",
"help",
"impersonation",
@@ -2445,18 +2447,17 @@
"lifetime",
"live",
"liveLogs",
- "locations",
"maintenance",
+ "maps",
"mqttSseInspector",
"notifications",
"operationalMode",
- "operationalSource",
"operations",
"powerDashboards",
"powerGrafana",
"powerSql",
"problemReport",
- "provenance",
+ "productPreferences",
"pwa",
"quietHours",
"range",
@@ -2473,9 +2474,10 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
+ "system",
+ "systemStatus",
+ "tagInput",
"tco",
- "tempImpact",
- "teslaOnly",
"timeMachine",
"timeline",
"tirePressure",
@@ -2490,7 +2492,7 @@
"widget",
"yearReview"
],
- "maps": [
+ "trips": [
"achievements",
"activity",
"admin",
@@ -2509,6 +2511,7 @@
"combobox",
"compare",
"costAnalysis",
+ "dashboard",
"dataRepair",
"date",
"delta",
@@ -2517,7 +2520,6 @@
"driveDetail",
"drives",
"editConflict",
- "efficiency",
"emptyState",
"entityContext",
"errorBoundary",
@@ -2526,10 +2528,10 @@
"feedback",
"feedbackTriage",
"filters",
- "forms",
"freshness",
"fsm",
"gas",
+ "geofences",
"helix",
"help",
"impersonation",
@@ -2537,6 +2539,7 @@
"lifetime",
"live",
"liveLogs",
+ "locations",
"maintenance",
"maps",
"mqttSseInspector",
@@ -2548,6 +2551,7 @@
"powerSql",
"problemReport",
"productPreferences",
+ "provenance",
"pwa",
"quietHours",
"range",
@@ -2564,17 +2568,18 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
- "system",
+ "statistics",
+ "sweetSpot",
"systemStatus",
"tagInput",
"tco",
+ "tempImpact",
"timeMachine",
"timeline",
"tirePressure",
"toast",
"tour",
"tripPlanner",
- "trips",
"vampireDrain",
"vehicles",
"voiceMode",
@@ -2582,7 +2587,56 @@
"widget",
"yearReview"
],
- "trips": [
+ "ownership": [
+ "achievements",
+ "activity",
+ "admin",
+ "advancedIntelligence",
+ "battery",
+ "bulk",
+ "calculationDetails",
+ "chart",
+ "confirm",
+ "delta",
+ "developerReference",
+ "draft",
+ "editConflict",
+ "emptyState",
+ "energyFlow",
+ "entityContext",
+ "errorBoundary",
+ "export",
+ "feedback",
+ "fleetOps",
+ "freshness",
+ "fsm",
+ "gas",
+ "geofences",
+ "impersonation",
+ "lifetime",
+ "live",
+ "milestones",
+ "operationalMode",
+ "operations",
+ "problemReport",
+ "productPreferences",
+ "provenance",
+ "pwa",
+ "rbac",
+ "replay",
+ "requiresAuth",
+ "savedViews",
+ "shareCard",
+ "shortcuts",
+ "signalLog",
+ "sourceLayer",
+ "timeMachine",
+ "timeline",
+ "toast",
+ "tour",
+ "widget"
+ ],
+ "exports": [
"achievements",
"activity",
"admin",
@@ -2596,14 +2650,10 @@
"calculationDetails",
"chargePlanner",
"charging",
- "chart",
"climate",
- "combobox",
"compare",
"costAnalysis",
- "dashboard",
"dataRepair",
- "date",
"delta",
"developerReference",
"draft",
@@ -2617,7 +2667,6 @@
"exports",
"feedback",
"feedbackTriage",
- "filters",
"freshness",
"fsm",
"gas",
@@ -2631,7 +2680,6 @@
"liveLogs",
"locations",
"maintenance",
- "maps",
"mqttSseInspector",
"notifications",
"operationalMode",
@@ -2640,13 +2688,11 @@
"powerGrafana",
"powerSql",
"problemReport",
- "productPreferences",
"provenance",
"pwa",
"quietHours",
"range",
"rbac",
- "replay",
"requiresAuth",
"routeEfficiency",
"safetySettings",
@@ -2658,10 +2704,6 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
- "statistics",
- "sweetSpot",
- "systemStatus",
- "tagInput",
"tco",
"tempImpact",
"timeMachine",
@@ -2670,63 +2712,14 @@
"toast",
"tour",
"tripPlanner",
+ "trips",
"vampireDrain",
"vehicles",
"voiceMode",
"watchFaceNL",
- "widget",
"yearReview"
],
- "ownership": [
- "achievements",
- "activity",
- "admin",
- "advancedIntelligence",
- "battery",
- "bulk",
- "calculationDetails",
- "chart",
- "confirm",
- "delta",
- "developerReference",
- "draft",
- "editConflict",
- "emptyState",
- "energyFlow",
- "entityContext",
- "errorBoundary",
- "export",
- "feedback",
- "fleetOps",
- "freshness",
- "fsm",
- "gas",
- "geofences",
- "impersonation",
- "lifetime",
- "live",
- "milestones",
- "operationalMode",
- "operations",
- "problemReport",
- "productPreferences",
- "provenance",
- "pwa",
- "rbac",
- "replay",
- "requiresAuth",
- "savedViews",
- "shareCard",
- "shortcuts",
- "signalLog",
- "sourceLayer",
- "timeMachine",
- "timeline",
- "toast",
- "tour",
- "widget"
- ],
- "exports": [
+ "diagnostics": [
"achievements",
"activity",
"admin",
@@ -2740,10 +2733,14 @@
"calculationDetails",
"chargePlanner",
"charging",
+ "chargingPlaces",
+ "chart",
"climate",
"compare",
"costAnalysis",
+ "dashcam",
"dataRepair",
+ "date",
"delta",
"developerReference",
"draft",
@@ -2752,6 +2749,7 @@
"editConflict",
"emptyState",
"entityContext",
+ "error",
"errorBoundary",
"export",
"exports",
@@ -2773,6 +2771,7 @@
"mqttSseInspector",
"notifications",
"operationalMode",
+ "operationalSource",
"operations",
"powerDashboards",
"powerGrafana",
@@ -2783,6 +2782,7 @@
"quietHours",
"range",
"rbac",
+ "replay",
"requiresAuth",
"routeEfficiency",
"safetySettings",
@@ -2796,6 +2796,7 @@
"stateMachineDebugger",
"tco",
"tempImpact",
+ "teslaOnly",
"timeMachine",
"timeline",
"tirePressure",
@@ -2807,6 +2808,7 @@
"vehicles",
"voiceMode",
"watchFaceNL",
+ "widget",
"yearReview"
],
"benchmarks": [
@@ -3215,6 +3217,7 @@
"bulk",
"calculationDetails",
"chart",
+ "date",
"delta",
"developerReference",
"draft",
diff --git a/web/src/i18n/en/shell.json b/web/src/i18n/en/shell.json
index 8803b5038b..c9b3a682e0 100644
--- a/web/src/i18n/en/shell.json
+++ b/web/src/i18n/en/shell.json
@@ -2226,19 +2226,6 @@
}
},
"tour": {
- "launcher": {
- "close": "Close",
- "completed": "Completed",
- "empty": "No tours are available yet.",
- "recommendedHere": "Recommended for this page",
- "replay": "Replay",
- "replayAria": "Replay {{tour}} tour",
- "resetAll": "Reset all tours",
- "start": "Start",
- "startAria": "Start {{tour}} tour",
- "subtitle": "Guided walkthroughs for every major feature.",
- "title": "Take a tour"
- },
"tours": {
"alerts": {
"description": "Filter, snooze, and design alert rules with conditions, channels, and test runs.",
diff --git a/web/src/i18n/en/usage-manifest.json b/web/src/i18n/en/usage-manifest.json
index f3db4749c4..5e22c96e24 100644
--- a/web/src/i18n/en/usage-manifest.json
+++ b/web/src/i18n/en/usage-manifest.json
@@ -122,7 +122,7 @@
"timeline": "shared",
"tco": "analytics",
"carbon": "shared",
- "automations": "automations",
+ "automations": "shared",
"energy": "battery",
"battery": "shared",
"powerFlow": "battery",
@@ -158,7 +158,7 @@
"widget": "shared",
"operationalSummary": "telemetry",
"signalsWorkspace": "telemetry",
- "anomaly": "diagnostics",
+ "anomaly": "shared",
"driveDetail": "driving",
"drivetrain": "driving",
"dynamics": "driving",
@@ -821,7 +821,9 @@
"shared": [
"achievements",
"activity",
+ "anomaly",
"apiLogs",
+ "automations",
"avatar",
"battery",
"bulk",
@@ -1279,7 +1281,6 @@
],
"automations": [
"automationList",
- "automations",
"comfort",
"pinned"
],
@@ -1363,13 +1364,6 @@
"tirePressure",
"vehicleSystems"
],
- "diagnostics": [
- "anomaly",
- "diagnostics",
- "rootCauseIntelligence",
- "rul",
- "serviceEvidencePack"
- ],
"maps": [
"chargingPlaces",
"geofences",
@@ -1391,6 +1385,12 @@
"exports": [
"exportsList"
],
+ "diagnostics": [
+ "diagnostics",
+ "rootCauseIntelligence",
+ "rul",
+ "serviceEvidencePack"
+ ],
"benchmarks": [
"benchmarks"
],
@@ -1462,9 +1462,11 @@
"annotation",
"annotations",
"anomalies",
+ "anomaly",
"apiLogs",
"app",
"arrivalReliability",
+ "automations",
"avatar",
"battery",
"browserNotifications",
@@ -2937,17 +2939,6 @@
"toast.common.error",
"toast.pin.pinned.error",
"toast.pin.unpinned.error",
- "tour.launcher.close",
- "tour.launcher.completed",
- "tour.launcher.empty",
- "tour.launcher.recommendedHere",
- "tour.launcher.replay",
- "tour.launcher.replayAria",
- "tour.launcher.resetAll",
- "tour.launcher.start",
- "tour.launcher.startAria",
- "tour.launcher.subtitle",
- "tour.launcher.title",
"tour.tours.alerts.description",
"tour.tours.alerts.title",
"tour.tours.automations.description",
@@ -3492,7 +3483,7 @@
"timeline": "detail-timeline",
"tco": "analytics",
"carbon": "detail-carbon",
- "automations": "automations",
+ "automations": "detail-automations",
"energy": "battery",
"battery": "detail-battery",
"powerFlow": "battery",
@@ -3528,7 +3519,7 @@
"widget": "detail-widget",
"operationalSummary": "telemetry",
"signalsWorkspace": "telemetry",
- "anomaly": "diagnostics",
+ "anomaly": "detail-anomaly",
"driveDetail": "detail-driveDetail",
"drivetrain": "detail-drivetrain",
"dynamics": "detail-dynamics",
@@ -6003,17 +5994,6 @@
"toast.webpush.unsubscribe.success",
"tour.close",
"tour.finish",
- "tour.launcher.close",
- "tour.launcher.completed",
- "tour.launcher.empty",
- "tour.launcher.recommendedHere",
- "tour.launcher.replay",
- "tour.launcher.replayAria",
- "tour.launcher.resetAll",
- "tour.launcher.start",
- "tour.launcher.startAria",
- "tour.launcher.subtitle",
- "tour.launcher.title",
"tour.next",
"tour.prev",
"tour.skip",
@@ -17929,6 +17909,7 @@
"chargeAdvisor.method.subtitle",
"chargeAdvisor.method.timeZone",
"chargeAdvisor.method.title",
+ "chargeAdvisor.planningWindow",
"chargeAdvisor.reserveLabel",
"chargeAdvisor.reserveOption",
"chargeAdvisor.scenarios.aria",
@@ -18914,15 +18895,14 @@
"energyFlow.node.grid",
"energyFlow.node.motor",
"energyFlow.node.noLiveData",
+ "energyFlow.rangeLimit",
"energyFlow.state.initialPaused",
"energyFlow.state.missing",
"energyFlow.state.pausedTitle",
"energyFlow.subtitle",
+ "energyFlow.summary.boundedSource",
"energyFlow.summary.noData",
- "energyFlow.summary.trailingWindow",
- "energyFlow.summary.trailingWindow_one",
- "energyFlow.summary.trailingWindow_other",
- "energyFlow.summary.windowReason",
+ "energyFlow.summary.selectedWindow",
"energyFlow.table.date",
"energyFlow.table.distance",
"energyFlow.table.energy",
@@ -34763,6 +34743,7 @@
"automations.conditions.signal",
"automations.conditions.timeWindow",
"automations.conflictWith",
+ "automations.copyName",
"automations.create",
"automations.delete",
"automations.deleteConfirm",
@@ -34785,7 +34766,6 @@
"automations.events.sentryAlert",
"automations.events.sleepEnd",
"automations.events.sleepStart",
- "automations.export",
"automations.fails",
"automations.filterCount",
"automations.filterStatus",
@@ -38347,6 +38327,12 @@
"costAnalysis.calculator.usdAssumptions",
"costAnalysis.calculator.usdPerGallon",
"costAnalysis.calculator.usdPerKwh",
+ "costAnalysis.category.home",
+ "costAnalysis.category.other",
+ "costAnalysis.category.public",
+ "costAnalysis.category.publicDC",
+ "costAnalysis.category.supercharger",
+ "costAnalysis.category.workL2",
"costAnalysis.chargerType.chartAria",
"costAnalysis.chargerType.cost",
"costAnalysis.chargerType.energy",
@@ -40809,6 +40795,13 @@
"anomaly.aiExplanation.emptyHint",
"anomaly.aiExplanation.generateButton",
"anomaly.aiExplanation.title",
+ "anomaly.explanation.aboveMaximum",
+ "anomaly.explanation.belowMinimum",
+ "anomaly.explanation.decreased",
+ "anomaly.explanation.decreasedPercent",
+ "anomaly.explanation.increased",
+ "anomaly.explanation.increasedPercent",
+ "anomaly.explanation.zScore",
"auth.connectPrompt",
"auth.notConnected",
"auth.settings",
@@ -40843,6 +40836,7 @@
"automations.builder.signals.sentryMode",
"automations.builder.signals.speed",
"automations.builder.signals.state",
+ "automations.copyName",
"avatar.statusIdle",
"avatar.statusOffline",
"avatar.statusOnline",
@@ -44232,6 +44226,7 @@
"widget.open",
"widget.outside",
"widget.outsideTemp",
+ "widget.overview",
"widget.playbackProgress",
"widget.playing",
"widget.positionHeatmap.count",
@@ -49134,6 +49129,7 @@
"admin.vehicleCost.notConfigured",
"admin.vehicleCost.pageTitle",
"admin.vehicleCost.periodReason",
+ "admin.vehicleCost.rangeLimit",
"admin.vehicleCost.rateDescription",
"admin.vehicleCost.rateSub",
"admin.vehicleCost.refresh",
@@ -56360,7 +56356,7 @@
"yearReview.aiNarration.title",
"yearReview.pageTitle"
],
- "diagnostics": [
+ "maps": [
"a11y.breadcrumb",
"a11y.breadcrumbHome",
"a11y.dataFreshness",
@@ -56689,51 +56685,6 @@
"anomaly.aiExplanation.emptyHint",
"anomaly.aiExplanation.generateButton",
"anomaly.aiExplanation.title",
- "anomaly.aiInsights",
- "anomaly.baseline",
- "anomaly.categories",
- "anomaly.category.battery",
- "anomaly.category.charging",
- "anomaly.category.hvac",
- "anomaly.category.motors",
- "anomaly.category.tires",
- "anomaly.category.unknown",
- "anomaly.colSignal",
- "anomaly.count",
- "anomaly.frequency",
- "anomaly.frequencyAria",
- "anomaly.healthSummary",
- "anomaly.kpis",
- "anomaly.last24h",
- "anomaly.last7d",
- "anomaly.monitored",
- "anomaly.noData",
- "anomaly.noFrequency",
- "anomaly.noHealth",
- "anomaly.overview",
- "anomaly.selectVehicle",
- "anomaly.severity.critical",
- "anomaly.severity.info",
- "anomaly.severity.warning",
- "anomaly.status.critical",
- "anomaly.status.normal",
- "anomaly.status.unknown",
- "anomaly.status.warning",
- "anomaly.subtitle",
- "anomaly.summary.available",
- "anomaly.summary.day",
- "anomaly.summary.period",
- "anomaly.summary.scope",
- "anomaly.summary.sevenDays",
- "anomaly.summary.snapshot",
- "anomaly.summary.title",
- "anomaly.summary.unavailable",
- "anomaly.timeline",
- "anomaly.title",
- "anomaly.type.range",
- "anomaly.type.trend",
- "anomaly.type.z_score",
- "anomaly.value",
"automations.builder.aiBuilder.badge",
"automations.builder.aiBuilder.description",
"automations.builder.aiBuilder.draftButton",
@@ -56755,6 +56706,15 @@
"automations.builder.aiGeofenceAware.title",
"automations.builder.aiGeofenceAware.triggersLabel",
"automations.builder.aiGeofenceAware.unnamed",
+ "automations.builder.signals.batteryLevel",
+ "automations.builder.signals.insideTemp",
+ "automations.builder.signals.isCharging",
+ "automations.builder.signals.isClimateOn",
+ "automations.builder.signals.isLocked",
+ "automations.builder.signals.outsideTemp",
+ "automations.builder.signals.sentryMode",
+ "automations.builder.signals.speed",
+ "automations.builder.signals.state",
"avatar.statusIdle",
"avatar.statusOffline",
"avatar.statusOnline",
@@ -56820,8 +56780,138 @@
"charging.detail.aiDiagnosis.emptyHint",
"charging.detail.aiDiagnosis.generateButton",
"charging.detail.aiDiagnosis.title",
+ "chargingPlaces.activity.cost",
+ "chargingPlaces.activity.empty",
+ "chargingPlaces.activity.endedAt",
+ "chargingPlaces.activity.energy",
+ "chargingPlaces.activity.loadFailed",
+ "chargingPlaces.activity.pageInfo",
+ "chargingPlaces.activity.source",
+ "chargingPlaces.activity.startedAt",
+ "chargingPlaces.activity.title",
+ "chargingPlaces.activity.unavailable",
+ "chargingPlaces.archived",
+ "chargingPlaces.category.custom",
+ "chargingPlaces.category.home",
+ "chargingPlaces.category.restricted",
+ "chargingPlaces.category.unset",
+ "chargingPlaces.category.work",
+ "chargingPlaces.costSource.default_estimate",
+ "chargingPlaces.costSource.geofence_tariff",
+ "chargingPlaces.costSource.manual",
+ "chargingPlaces.costSource.tesla_actual",
+ "chargingPlaces.costSource.unknown",
+ "chargingPlaces.detail.activityTab",
+ "chargingPlaces.detail.archive",
+ "chargingPlaces.detail.category",
+ "chargingPlaces.detail.markReviewedAndEnable",
+ "chargingPlaces.detail.needsReviewBadge",
+ "chargingPlaces.detail.placeName",
+ "chargingPlaces.detail.pricingIntro",
+ "chargingPlaces.detail.pricingLoadFailed",
+ "chargingPlaces.detail.pricingTab",
+ "chargingPlaces.detail.rename",
+ "chargingPlaces.detail.tabsLabel",
+ "chargingPlaces.detail.unarchive",
+ "chargingPlaces.directoryUnavailable",
+ "chargingPlaces.discoveredAt",
+ "chargingPlaces.empty",
+ "chargingPlaces.emptyAll",
+ "chargingPlaces.kwh",
+ "chargingPlaces.needsSetup.empty",
+ "chargingPlaces.needsSetup.review",
+ "chargingPlaces.needsSetup.title",
+ "chargingPlaces.needsSetup.unavailable",
+ "chargingPlaces.noRate",
+ "chargingPlaces.origin.discovered",
+ "chargingPlaces.origin.manual",
+ "chargingPlaces.previewApply.applied",
+ "chargingPlaces.previewApply.applyAction",
+ "chargingPlaces.previewApply.assignAction",
+ "chargingPlaces.previewApply.attributionOnly",
+ "chargingPlaces.previewApply.confirmAttributionMessage",
+ "chargingPlaces.previewApply.confirmAttributionTitle",
+ "chargingPlaces.previewApply.confirmMessage",
+ "chargingPlaces.previewApply.confirmTitle",
+ "chargingPlaces.previewApply.eligible",
+ "chargingPlaces.previewApply.energy",
+ "chargingPlaces.previewApply.estimatedCost",
+ "chargingPlaces.previewApply.from",
+ "chargingPlaces.previewApply.help",
+ "chargingPlaces.previewApply.loadFailed",
+ "chargingPlaces.previewApply.matched",
+ "chargingPlaces.previewApply.metricsHelp",
+ "chargingPlaces.previewApply.noMatches",
+ "chargingPlaces.previewApply.protected",
+ "chargingPlaces.previewApply.refresh",
+ "chargingPlaces.previewApply.regionLabel",
+ "chargingPlaces.previewApply.selectRate",
+ "chargingPlaces.previewApply.title",
+ "chargingPlaces.previewApply.to",
+ "chargingPlaces.rateForm.currency",
+ "chargingPlaces.rateForm.effectiveFrom",
+ "chargingPlaces.rateForm.effectiveTo",
+ "chargingPlaces.rateForm.effectiveToHint",
+ "chargingPlaces.rateForm.errors.effectiveFrom",
+ "chargingPlaces.rateForm.errors.effectiveTo",
+ "chargingPlaces.rateForm.errors.order",
+ "chargingPlaces.rateForm.errors.rate",
+ "chargingPlaces.rateForm.legacyEstimateHint",
+ "chargingPlaces.rateForm.rate",
+ "chargingPlaces.rateForm.submit",
+ "chargingPlaces.rateForm.title",
+ "chargingPlaces.rateHistory.cancel",
+ "chargingPlaces.rateHistory.cancelScheduled",
+ "chargingPlaces.rateHistory.currency",
+ "chargingPlaces.rateHistory.current",
+ "chargingPlaces.rateHistory.deleteMessage",
+ "chargingPlaces.rateHistory.deleteTitle",
+ "chargingPlaces.rateHistory.effectiveFrom",
+ "chargingPlaces.rateHistory.effectiveTo",
+ "chargingPlaces.rateHistory.empty",
+ "chargingPlaces.rateHistory.previewHelp",
+ "chargingPlaces.rateHistory.previewSessions",
+ "chargingPlaces.rateHistory.rate",
+ "chargingPlaces.rateHistory.scheduled",
+ "chargingPlaces.rateHistory.title",
+ "chargingPlaces.rateHistory.unavailable",
+ "chargingPlaces.rateLoading",
+ "chargingPlaces.rateUnavailable",
+ "chargingPlaces.summary.empty",
+ "chargingPlaces.summary.energy",
+ "chargingPlaces.summary.loadFailed",
+ "chargingPlaces.summary.sessions",
+ "chargingPlaces.summary.spend",
+ "chargingPlaces.summary.title",
+ "chargingPlaces.summary.unavailable",
+ "chargingPlaces.table.category",
+ "chargingPlaces.table.manage",
+ "chargingPlaces.table.name",
+ "chargingPlaces.table.rate",
+ "chargingPlaces.table.rates",
+ "chargingPlaces.table.title",
+ "chargingPlaces.table.zone",
+ "chargingPlaces.unnamed",
+ "chargingPlaces.workspace.addPlace",
+ "chargingPlaces.workspace.bulkFailureReason",
+ "chargingPlaces.workspace.bulkIncomplete",
+ "chargingPlaces.workspace.bulkUnconfirmed",
+ "chargingPlaces.workspace.clearSearch",
"chargingPlaces.workspace.initialPaused",
+ "chargingPlaces.workspace.noPlaces",
+ "chargingPlaces.workspace.noRates",
+ "chargingPlaces.workspace.noReview",
+ "chargingPlaces.workspace.noSearchMatches",
"chargingPlaces.workspace.pausedRetained",
+ "chargingPlaces.workspace.placesLoadFailed",
+ "chargingPlaces.workspace.ratesLoadFailed",
+ "chargingPlaces.workspace.reviewLoadFailed",
+ "chargingPlaces.workspace.search",
+ "chargingPlaces.workspace.showArchived",
+ "chargingPlaces.workspace.staleRetained",
+ "chargingPlaces.workspace.unifiedAria",
+ "chargingPlaces.workspace.unifiedDescription",
+ "chargingPlaces.workspace.unifiedTitle",
"chart.a11y.fallbackTableLabel",
"chart.a11y.metricSelector",
"chart.a11y.summary",
@@ -56851,9 +56941,12 @@
"combobox.clearAria",
"combobox.closeListAria",
"combobox.loading",
+ "combobox.maxReached",
"combobox.moreHidden",
"combobox.noResults",
"combobox.openListAria",
+ "combobox.removeChip",
+ "combobox.removedChip",
"combobox.resultsCount",
"combobox.resultsCountOne",
"common.actions",
@@ -57040,9 +57133,6 @@
"costAnalysis.aiNarrative.description",
"costAnalysis.aiNarrative.generateButton",
"costAnalysis.aiNarrative.title",
- "costAnalysis.forecast.lowerBound",
- "costAnalysis.forecast.upperBound",
- "dashcam.reconstruction.pointCount",
"dataRepair.aiSuggestions.badge",
"dataRepair.aiSuggestions.button",
"dataRepair.aiSuggestions.description",
@@ -57091,6 +57181,7 @@
"dataUnavailable.vehicleOffline.whatToDo",
"dataUnavailable.whatToDo",
"date.preset.all",
+ "date.preset.label",
"date.preset.last1y",
"date.preset.last24h",
"date.preset.last30",
@@ -57104,6 +57195,18 @@
"date.preset.today",
"date.preset.yesterday",
"date.preset.ytd",
+ "date.range.apply",
+ "date.range.cancel",
+ "date.range.compare",
+ "date.range.end",
+ "date.range.loadingCalendar",
+ "date.range.newRange",
+ "date.range.pickRange",
+ "date.range.popoverLabel",
+ "date.range.start",
+ "date.range.summaryDays_one",
+ "date.range.summaryDays_other",
+ "date.range.trigger",
"delta.noComparison",
"delta.title",
"demoData.detail",
@@ -57204,21 +57307,6 @@
"developerReference.stats.valueState.invalid",
"developerReference.stats.valueState.missing",
"developerReference.stats.valueState.value",
- "diagnostics.brief.analysisTitle",
- "diagnostics.brief.available",
- "diagnostics.brief.chooseSignal",
- "diagnostics.brief.effectBasis",
- "diagnostics.brief.evidenceScore",
- "diagnostics.brief.noSignal",
- "diagnostics.brief.packTitle",
- "diagnostics.brief.partial",
- "diagnostics.brief.provenance",
- "diagnostics.brief.refreshing",
- "diagnostics.brief.scope",
- "diagnostics.brief.scoreBasis",
- "diagnostics.brief.sourceDetails",
- "diagnostics.brief.sourceUnknown",
- "diagnostics.brief.unavailable",
"draft.discardDraft",
"draft.recovery.close",
"draft.recovery.discard",
@@ -57261,6 +57349,7 @@
"editableText.error.empty",
"editableText.error.saveFailed",
"editableText.saving",
+ "efficiency.noStats",
"emptyState.alerts.list.likelyCause",
"emptyState.alerts.list.meaning",
"emptyState.analytics.efficiency.likelyCause",
@@ -57280,10 +57369,15 @@
"emptyState.signals.live.meaning",
"emptyState.vehicles.list.likelyCause",
"emptyState.vehicles.list.meaning",
+ "entityContext.alerts",
+ "entityContext.charging",
+ "entityContext.drives",
+ "entityContext.service",
+ "entityContext.telemetry",
"entityContext.title",
+ "entityContext.vehicle",
"error.forbidden.message",
"error.forbidden.title",
- "error.loadFailed",
"error.network.message",
"error.network.offlineDetail",
"error.network.offlineTitle",
@@ -57377,11 +57471,25 @@
"feedbackTriage.aiAdvisor.emptyHint",
"feedbackTriage.aiAdvisor.title",
"filter.pending",
+ "filters.activeLabel",
+ "filters.clearAll",
+ "filters.clearedAll",
+ "filters.moreCount",
+ "filters.moreLabel",
+ "filters.removeAria",
+ "filters.removed",
+ "filters.sheetActiveCount",
+ "filters.sheetDone",
+ "filters.sheetTitle",
+ "filters.sheetTrigger",
"form.required",
+ "form.validation.summaryTitleMany",
+ "form.validation.summaryTitleOne",
"forms.discard",
"forms.keepEditing",
"forms.unsavedTitle",
"forms.unsavedWarning",
+ "forms.validationFailed",
"freshness.ariaLabel",
"freshness.days",
"freshness.error",
@@ -57418,16 +57526,87 @@
"fsm.typeOption.telemetryConnection",
"fsm.typeOption.vehicle",
"gas.pollTriggered",
+ "geofences.addGeofence",
"geofences.aiSuggest.applyButton",
"geofences.aiSuggest.badge",
"geofences.aiSuggest.currentLabel",
"geofences.aiSuggest.description",
+ "geofences.aiSuggest.pickLocation",
"geofences.aiSuggest.proposalLabel",
"geofences.aiSuggest.radiusLabel",
"geofences.aiSuggest.rejectedLabel",
+ "geofences.aiSuggest.selectHint",
"geofences.aiSuggest.suggestButton",
"geofences.aiSuggest.title",
"geofences.aiSuggest.unnamed",
+ "geofences.brief.candidates",
+ "geofences.brief.description",
+ "geofences.brief.pending",
+ "geofences.brief.reviewed",
+ "geofences.brief.scope",
+ "geofences.browser",
+ "geofences.bulk.delete",
+ "geofences.bulk.deleteConfirm.body",
+ "geofences.bulk.deleteConfirm.title",
+ "geofences.chooseVehicle",
+ "geofences.createTitle",
+ "geofences.deleteGeofence",
+ "geofences.deleteMessage",
+ "geofences.deleteTitle",
+ "geofences.drawHint",
+ "geofences.drawOnMap",
+ "geofences.drawerLabel",
+ "geofences.editGeofence",
+ "geofences.editTitle",
+ "geofences.error.nameTooLong",
+ "geofences.formName",
+ "geofences.geolocationUnsupported",
+ "geofences.getLocation",
+ "geofences.gettingLocation",
+ "geofences.latitude",
+ "geofences.locationDenied",
+ "geofences.locationFailed",
+ "geofences.longitude",
+ "geofences.namePlaceholder",
+ "geofences.noPosition",
+ "geofences.radiusHint",
+ "geofences.radiusMeters",
+ "geofences.selectVehicle",
+ "geofences.subtitle",
+ "geofences.summaryAria",
+ "geofences.title",
+ "geofences.toastCreateError",
+ "geofences.toastCreated",
+ "geofences.toastDeleteError",
+ "geofences.toastDeleted",
+ "geofences.toastUpdateError",
+ "geofences.toastUpdated",
+ "geofences.totalGeofences",
+ "geofences.useCurrentLocation",
+ "geofences.vehicle",
+ "geofences.visits.candidates",
+ "geofences.visits.charging",
+ "geofences.visits.chargingShort",
+ "geofences.visits.confirm",
+ "geofences.visits.description",
+ "geofences.visits.empty",
+ "geofences.visits.evidence",
+ "geofences.visits.loadFailed",
+ "geofences.visits.otherShort",
+ "geofences.visits.pending",
+ "geofences.visits.purpose",
+ "geofences.visits.rateHint",
+ "geofences.visits.review",
+ "geofences.visits.reviewHint",
+ "geofences.visits.reviewStatus",
+ "geofences.visits.reviewed",
+ "geofences.visits.reviewedPlaces",
+ "geofences.visits.select",
+ "geofences.visits.suggestCharging",
+ "geofences.visits.suggestOther",
+ "geofences.visits.title",
+ "geofences.visits.unavailable",
+ "geofences.visits.useTemplate",
"global.loading",
"glossary.degradation.howMeasured",
"glossary.degradation.term",
@@ -57473,8 +57652,6 @@
"help.feedback",
"help.feedbackLabel",
"help.lifetime.avgEfficiency",
- "help.rootCauseIntelligence.hypotheses",
- "help.rootCauseIntelligence.quality",
"help.shortcuts",
"help.shortcutsLabel",
"help.signal.stale",
@@ -57560,6 +57737,7 @@
"liveLogs.aiSummary.description",
"liveLogs.aiSummary.emptyHint",
"liveLogs.aiSummary.title",
+ "locations.aiAutoName.applied",
"locations.aiAutoName.applyButton",
"locations.aiAutoName.badge",
"locations.aiAutoName.currentLabel",
@@ -57568,11 +57746,122 @@
"locations.aiAutoName.rejectedLabel",
"locations.aiAutoName.suggestButton",
"locations.aiAutoName.title",
+ "locations.all",
+ "locations.avg",
+ "locations.avgVisit",
+ "locations.brief.average",
+ "locations.brief.cities",
+ "locations.brief.description",
+ "locations.brief.scope",
+ "locations.brief.top",
+ "locations.byTime",
+ "locations.byTimeAria",
+ "locations.byVisits",
+ "locations.byVisitsAria",
+ "locations.clearSearch",
+ "locations.empty.cta",
+ "locations.empty.message",
+ "locations.empty.page",
+ "locations.empty.title",
+ "locations.filterLabel.search",
+ "locations.hours",
+ "locations.inspect",
+ "locations.kpis",
+ "locations.last",
+ "locations.lastVisited",
+ "locations.leaderboards",
+ "locations.loadPaused.message",
+ "locations.loadPaused.title",
+ "locations.loadUnknown.message",
+ "locations.loadUnknown.title",
+ "locations.mostVisited",
+ "locations.noMatch",
+ "locations.noTimeData",
+ "locations.noVisitData",
+ "locations.paging.exploratory",
+ "locations.preview.eyebrow",
+ "locations.preview.lastVisited",
+ "locations.preview.loadedAt",
+ "locations.resetDateRange",
+ "locations.searchPlaceholder",
+ "locations.subtitle",
+ "locations.title",
+ "locations.total",
+ "locations.totalTime",
+ "locations.totalVisits",
+ "locations.uniqueCities",
+ "locations.uniquePlaces",
+ "locations.unknown",
+ "locations.visits",
"maintenance.aiPredictive.badge",
"maintenance.aiPredictive.button",
"maintenance.aiPredictive.description",
"maintenance.aiPredictive.emptyHint",
"maintenance.aiPredictive.title",
+ "mapOverview.atHome",
+ "mapOverview.atWork",
+ "mapOverview.brief.description",
+ "mapOverview.brief.scope",
+ "mapOverview.colHeading",
+ "mapOverview.colLat",
+ "mapOverview.colLon",
+ "mapOverview.colSpeed",
+ "mapOverview.colTime",
+ "mapOverview.coordinates",
+ "mapOverview.copyCoordinates",
+ "mapOverview.details",
+ "mapOverview.geofences",
+ "mapOverview.heading",
+ "mapOverview.headingValue",
+ "mapOverview.historicalSubtitle",
+ "mapOverview.homelinkNearby",
+ "mapOverview.lastObserved",
+ "mapOverview.locationDetails",
+ "mapOverview.locations",
+ "mapOverview.mapMode",
+ "mapOverview.modeLive",
+ "mapOverview.modeRecent",
+ "mapOverview.navRoute",
+ "mapOverview.no",
+ "mapOverview.noGps",
+ "mapOverview.noHistory",
+ "mapOverview.noHistoryDescription",
+ "mapOverview.noLocation",
+ "mapOverview.noPlayback",
+ "mapOverview.noRecentRoute",
+ "mapOverview.observationFreshness",
+ "mapOverview.observedSpeed",
+ "mapOverview.odometer",
+ "mapOverview.pageTitle",
+ "mapOverview.playbackBattery",
+ "mapOverview.playbackLabel",
+ "mapOverview.playbackPosition",
+ "mapOverview.playbackPower",
+ "mapOverview.playbackSpeed",
+ "mapOverview.positionMap",
+ "mapOverview.recentHistory",
+ "mapOverview.recentRouteError",
+ "mapOverview.sourcesTitle",
+ "mapOverview.title",
+ "mapOverview.unknown",
+ "mapOverview.vehicle",
+ "mapOverview.yes",
+ "maps.animatedMarker.label",
+ "maps.layerSwitcher.dark",
+ "maps.layerSwitcher.label",
+ "maps.layerSwitcher.satellite",
+ "maps.layerSwitcher.streets",
+ "maps.layerSwitcher.terrain",
+ "maps.routePlayback.empty",
+ "maps.routePlayback.mapLabel",
+ "mapsBrief.eyebrow",
+ "mapsBrief.freshness.received",
+ "mapsBrief.freshness.unknown",
+ "mapsBrief.status.available",
+ "mapsBrief.status.loading",
+ "mapsBrief.status.partial",
+ "mapsBrief.status.retained",
+ "mapsBrief.status.unavailable",
"mask.copy",
"mask.hide",
"mask.reveal",
@@ -57583,6 +57872,98 @@
"mqttSseInspector.aiExplainer.description",
"mqttSseInspector.aiExplainer.emptyHint",
"mqttSseInspector.aiExplainer.title",
+ "nav.active",
+ "nav.atHome",
+ "nav.atWork",
+ "nav.awayFromHome",
+ "nav.brief.arrival",
+ "nav.brief.average",
+ "nav.brief.delay",
+ "nav.brief.description",
+ "nav.brief.distance",
+ "nav.brief.eta",
+ "nav.brief.heading",
+ "nav.brief.presenceDescription",
+ "nav.brief.presenceScope",
+ "nav.brief.scope",
+ "nav.chartDistanceV2",
+ "nav.chartSpeedV2",
+ "nav.chartsAria",
+ "nav.col.destination",
+ "nav.col.distance",
+ "nav.col.eta",
+ "nav.col.home",
+ "nav.col.lat",
+ "nav.col.latitude",
+ "nav.col.lon",
+ "nav.col.longitude",
+ "nav.col.time",
+ "nav.col.work",
+ "nav.currentLocation",
+ "nav.delay",
+ "nav.destination",
+ "nav.distanceRemaining",
+ "nav.eta",
+ "nav.geofences",
+ "nav.gpsFixQuality",
+ "nav.gpsState.locked",
+ "nav.gpsState.unknown",
+ "nav.gpsState.unlocked",
+ "nav.heading",
+ "nav.headingValue",
+ "nav.historyAria",
+ "nav.homeStatus",
+ "nav.homelinkNearby",
+ "nav.inactive",
+ "nav.legendDistanceToArrivalV2",
+ "nav.legendSpeedV2",
+ "nav.locationHistory",
+ "nav.locationUnavailable",
+ "nav.manageVehicles",
+ "nav.metric.avgSpeed",
+ "nav.metric.distance",
+ "nav.metric.energyAtArrival",
+ "nav.metric.eta",
+ "nav.metric.trafficDelay",
+ "nav.metricsAria",
+ "nav.minutes",
+ "nav.noActiveNav",
+ "nav.noDestinations",
+ "nav.noGps",
+ "nav.noHistory",
+ "nav.noPresence",
+ "nav.noSnapshots",
+ "nav.noVehicle",
+ "nav.noWaypoints",
+ "nav.noWaypointsDescription",
+ "nav.notAtWork",
+ "nav.pageTitle",
+ "nav.presenceAria",
+ "nav.presenceChart",
+ "nav.recentDestinations",
+ "nav.refresh",
+ "nav.resource",
+ "nav.resourceHistory",
+ "nav.routeDetailAria",
+ "nav.routeLastUpdated",
+ "nav.speedHistoryAria",
+ "nav.speedHistoryTitle",
+ "nav.speedProfile",
+ "nav.status",
+ "nav.statusAria",
+ "nav.subtitle",
+ "nav.trafficDelay",
+ "nav.trafficDelayTitle",
+ "nav.unknown",
+ "nav.waypoints",
+ "nav.workStatus",
+ "nav.wp.distance",
+ "nav.wp.kind.destination",
+ "nav.wp.kind.supercharger",
+ "nav.wp.kind.waypoint",
+ "nav.wp.name",
+ "nav.wp.type",
+ "navigation.noRoute",
"notifications.alertStudio.aiBuilder.badge",
"notifications.alertStudio.aiBuilder.description",
"notifications.alertStudio.aiBuilder.draftButton",
@@ -57618,6 +57999,15 @@
"notifications.alertStudio.aiTuning.previewLabel",
"notifications.alertStudio.aiTuning.suggestButton",
"notifications.alertStudio.aiTuning.title",
+ "notifications.alertStudio.editor.vehiclesAllOption",
+ "notifications.alertStudio.editor.vehiclesEmptyFleetHelp",
+ "notifications.alertStudio.editor.vehiclesSummaryAll",
+ "notifications.alertStudio.editor.vehiclesSummaryCount",
+ "notifications.alertStudio.editor.vehiclesSummaryNone",
+ "notifications.alertStudio.editor.vehiclesSummaryOne",
+ "notifications.alertStudio.editor.vehiclesSummaryPartial",
+ "notifications.alertStudio.editor.vehiclesUnknownBadge",
+ "notifications.alertStudio.editor.vehiclesUnknownLabel",
"notifications.inbox.aiCategorize.applyButton",
"notifications.inbox.aiCategorize.badge",
"notifications.inbox.aiCategorize.description",
@@ -57648,7 +58038,6 @@
"operationalMode.live.shortLabel",
"operationalMode.writeBlocked",
"operationalMode.writeNotice.title",
- "operationalSource.fetchedAt",
"operations.attention",
"operations.detailTitle",
"operations.emptyFieldsHidden",
@@ -57762,6 +58151,15 @@
"problemReport.policy.userEmail",
"problemReport.submitError",
"problemReport.title",
+ "productPreferences.persona.label",
+ "productPreferences.personas.administrator.description",
+ "productPreferences.personas.administrator.label",
+ "productPreferences.personas.analyst.description",
+ "productPreferences.personas.analyst.label",
+ "productPreferences.personas.fleetOperator.description",
+ "productPreferences.personas.fleetOperator.label",
+ "productPreferences.personas.owner.description",
+ "productPreferences.personas.owner.label",
"progressRing.ariaLabel",
"provenance.cached",
"provenance.historical",
@@ -57848,91 +58246,6 @@
"replay.shortcuts.startEnd",
"replay.shortcuts.title",
"requiresAuth.title",
- "rootCauseIntelligence.graph.concurrent",
- "rootCauseIntelligence.graph.consideredOnly",
- "rootCauseIntelligence.graph.focalNodeLabel",
- "rootCauseIntelligence.graph.focalTag",
- "rootCauseIntelligence.graph.lags",
- "rootCauseIntelligence.graph.leads",
- "rootCauseIntelligence.graph.noRelated",
- "rootCauseIntelligence.graph.pickOne",
- "rootCauseIntelligence.graph.relationSamples",
- "rootCauseIntelligence.graph.title",
- "rootCauseIntelligence.hypotheses.effect",
- "rootCauseIntelligence.hypotheses.helpLabel",
- "rootCauseIntelligence.hypotheses.lag",
- "rootCauseIntelligence.hypotheses.noFocalShift",
- "rootCauseIntelligence.hypotheses.noneCorroborate",
- "rootCauseIntelligence.hypotheses.pickOne",
- "rootCauseIntelligence.hypotheses.samples",
- "rootCauseIntelligence.hypotheses.score",
- "rootCauseIntelligence.hypotheses.title",
- "rootCauseIntelligence.interpretation.coverage",
- "rootCauseIntelligence.interpretation.limitationsTitle",
- "rootCauseIntelligence.interpretation.overallScore",
- "rootCauseIntelligence.interpretation.pickOne",
- "rootCauseIntelligence.interpretation.title",
- "rootCauseIntelligence.kpis.effect",
- "rootCauseIntelligence.kpis.effectNone",
- "rootCauseIntelligence.kpis.effectSubtitle",
- "rootCauseIntelligence.kpis.hypotheses",
- "rootCauseIntelligence.kpis.hypothesesSubtitle",
- "rootCauseIntelligence.kpis.quality",
- "rootCauseIntelligence.kpis.qualitySubtitle",
- "rootCauseIntelligence.kpis.samples",
- "rootCauseIntelligence.kpis.samplesSubtitle",
- "rootCauseIntelligence.kpis.sectionLabel",
- "rootCauseIntelligence.picker.focalHint",
- "rootCauseIntelligence.picker.focalLabel",
- "rootCauseIntelligence.picker.focalPlaceholder",
- "rootCauseIntelligence.picker.noSignals",
- "rootCauseIntelligence.picker.title",
- "rootCauseIntelligence.picker.window.h168",
- "rootCauseIntelligence.picker.window.h24",
- "rootCauseIntelligence.picker.window.h72",
- "rootCauseIntelligence.picker.window.h720",
- "rootCauseIntelligence.picker.windowLabel",
- "rootCauseIntelligence.quality.insufficient",
- "rootCauseIntelligence.quality.moderate",
- "rootCauseIntelligence.quality.strong",
- "rootCauseIntelligence.quality.weak",
- "rootCauseIntelligence.reasons.association",
- "rootCauseIntelligence.reasons.band.insufficient",
- "rootCauseIntelligence.reasons.band.moderate",
- "rootCauseIntelligence.reasons.band.strong",
- "rootCauseIntelligence.reasons.band.weak",
- "rootCauseIntelligence.reasons.boundedWindow",
- "rootCauseIntelligence.reasons.chooseSignal",
- "rootCauseIntelligence.reasons.concurrent",
- "rootCauseIntelligence.reasons.coverage",
- "rootCauseIntelligence.reasons.focalUnavailable",
- "rootCauseIntelligence.reasons.hypotheses",
- "rootCauseIntelligence.reasons.hypothesis",
- "rootCauseIntelligence.reasons.incompleteEvidence",
- "rootCauseIntelligence.reasons.insufficientHistory",
- "rootCauseIntelligence.reasons.isolatedShift",
- "rootCauseIntelligence.reasons.lags",
- "rootCauseIntelligence.reasons.leads",
- "rootCauseIntelligence.reasons.lowQuality",
- "rootCauseIntelligence.reasons.noCorroboration",
- "rootCauseIntelligence.reasons.noFocalShift",
- "rootCauseIntelligence.reasons.noRelated",
- "rootCauseIntelligence.reasons.rankedSummary",
- "rootCauseIntelligence.reasons.scoreDenominator",
- "rootCauseIntelligence.reasons.stableSignal",
- "rootCauseIntelligence.reasons.temporalLimit",
- "rootCauseIntelligence.sources.aggregateLimit",
- "rootCauseIntelligence.sources.refreshFailed",
- "rootCauseIntelligence.subtitle",
- "rootCauseIntelligence.timeline.ariaDescription",
- "rootCauseIntelligence.timeline.ariaLabel",
- "rootCauseIntelligence.timeline.col.time",
- "rootCauseIntelligence.timeline.loadFailed",
- "rootCauseIntelligence.timeline.notEnough",
- "rootCauseIntelligence.timeline.pickOne",
- "rootCauseIntelligence.timeline.subtitle",
- "rootCauseIntelligence.timeline.title",
- "rootCauseIntelligence.title",
"route.noLocationData",
"route.roundTrip",
"routeEfficiency.aiSuggestions.badge",
@@ -58194,69 +58507,6 @@
"routes.whatIf",
"routes.wholeHomeEnergy",
"routes.yearReview",
- "rul.basisKinds.enrollment_age",
- "rul.basisKinds.invalid_input",
- "rul.basisKinds.missing_configuration",
- "rul.basisKinds.missing_history",
- "rul.basisKinds.no_measurable_decline",
- "rul.basisKinds.soh_trend",
- "rul.basisKinds.whole_life_odometer",
- "rul.board.empty",
- "rul.board.title",
- "rul.card.aria",
- "rul.card.confidence",
- "rul.card.distanceLeft",
- "rul.card.health",
- "rul.card.overdueNow",
- "rul.card.remaining",
- "rul.card.replaceBy",
- "rul.components.brakes",
- "rul.components.cabin_filter",
- "rul.components.hv_battery",
- "rul.components.lv_battery",
- "rul.components.tires",
- "rul.confidence.high",
- "rul.confidence.low",
- "rul.confidence.medium",
- "rul.facts.confidence",
- "rul.facts.confidenceUnavailable",
- "rul.facts.health",
- "rul.facts.healthUnavailable",
- "rul.facts.model",
- "rul.facts.remainingDays",
- "rul.facts.remainingDaysUnavailable",
- "rul.facts.wearRate",
- "rul.facts.wearRateUnavailable",
- "rul.forecast.aria",
- "rul.forecast.band",
- "rul.forecast.basis",
- "rul.forecast.empty",
- "rul.forecast.eol",
- "rul.forecast.projected",
- "rul.forecast.select",
- "rul.forecast.subtitle",
- "rul.forecast.title",
- "rul.nextService.assumption",
- "rul.nextService.available",
- "rul.nextService.by",
- "rul.nextService.chooseVehicle",
- "rul.nextService.component",
- "rul.nextService.error",
- "rul.nextService.freshness",
- "rul.nextService.none",
- "rul.nextService.scope",
- "rul.nextService.source",
- "rul.nextService.title",
- "rul.nextService.unavailable",
- "rul.selectVehicle",
- "rul.status.healthy",
- "rul.status.overdue",
- "rul.status.replace_soon",
- "rul.status.watch",
- "rul.subtitle",
- "rul.title",
- "rul.units.days",
- "rul.units.years",
"runtimeHealth.affected",
"runtimeHealth.components.database",
"runtimeHealth.components.mqtt",
@@ -58307,49 +58557,6 @@
"search.history.removeAria",
"search.history.title",
"search.input.label",
- "serviceEvidencePack.errors.cryptoUnavailable",
- "serviceEvidencePack.errors.generic",
- "serviceEvidencePack.integrity.copyDigest",
- "serviceEvidencePack.integrity.explain",
- "serviceEvidencePack.integrity.export",
- "serviceEvidencePack.integrity.generate",
- "serviceEvidencePack.integrity.meta",
- "serviceEvidencePack.integrity.needsEvidence",
- "serviceEvidencePack.integrity.title",
- "serviceEvidencePack.inventory.col.domains",
- "serviceEvidencePack.inventory.col.evidence",
- "serviceEvidencePack.inventory.col.role",
- "serviceEvidencePack.inventory.col.samples",
- "serviceEvidencePack.inventory.col.signal",
- "serviceEvidencePack.inventory.evidenceNo",
- "serviceEvidencePack.inventory.evidenceYes",
- "serviceEvidencePack.inventory.noSignals",
- "serviceEvidencePack.inventory.pickOne",
- "serviceEvidencePack.inventory.roleCandidate",
- "serviceEvidencePack.inventory.roleFocal",
- "serviceEvidencePack.inventory.title",
- "serviceEvidencePack.kpis.hypotheses",
- "serviceEvidencePack.kpis.hypothesesSubtitle",
- "serviceEvidencePack.kpis.qualitySubtitle",
- "serviceEvidencePack.kpis.sectionLabel",
- "serviceEvidencePack.kpis.signals",
- "serviceEvidencePack.kpis.signalsSubtitle",
- "serviceEvidencePack.kpis.status",
- "serviceEvidencePack.kpis.statusDigest",
- "serviceEvidencePack.kpis.statusGenerated",
- "serviceEvidencePack.kpis.statusNotReady",
- "serviceEvidencePack.kpis.statusNotReadyHint",
- "serviceEvidencePack.kpis.statusReady",
- "serviceEvidencePack.kpis.statusReadyHint",
- "serviceEvidencePack.preview.empty",
- "serviceEvidencePack.preview.title",
- "serviceEvidencePack.privacy.excludedTitle",
- "serviceEvidencePack.privacy.includedTitle",
- "serviceEvidencePack.privacy.notes",
- "serviceEvidencePack.privacy.title",
- "serviceEvidencePack.softwareUpdates",
- "serviceEvidencePack.subtitle",
- "serviceEvidencePack.title",
"serviceMode.banner.defaultDegraded",
"serviceMode.banner.defaultMaintenance",
"serviceMode.banner.degradedTitle",
@@ -58525,6 +58732,8 @@
"statusBar.version.updateBanner",
"statusBar.version.uptime",
"statusBar.version.uptimeLabel",
+ "system.outage.pausedSource",
+ "systemStatus.sourceUnavailable",
"table.bulkActions.clear",
"table.bulkActions.region",
"table.bulkActions.selected",
@@ -58568,6 +58777,17 @@
"table.selection.selectAll",
"table.selection.selectRow",
"table.selection.selectRowNamed",
+ "tagInput.added",
+ "tagInput.addedOne",
+ "tagInput.duplicate",
+ "tagInput.maxReached",
+ "tagInput.maxReachedAnnounce",
+ "tagInput.maxReachedHint",
+ "tagInput.placeholder",
+ "tagInput.removeTag",
+ "tagInput.removed",
+ "tagInput.tagsList",
+ "tagInput.tagsNone",
"tco.aiNarration.badge",
"tco.aiNarration.button",
"tco.aiNarration.description",
@@ -58578,11 +58798,69 @@
"tempImpact.aiNarrative.emptyHint",
"tempImpact.aiNarrative.generateButton",
"tempImpact.aiNarrative.title",
+ "tempImpact.avgEff",
+ "tempImpact.avgEfficiency",
+ "tempImpact.avgTemp",
+ "tempImpact.bestRange",
+ "tempImpact.brief.best",
+ "tempImpact.brief.bestEfficiency",
+ "tempImpact.brief.description",
+ "tempImpact.brief.scope",
+ "tempImpact.brief.worst",
+ "tempImpact.brief.worstEfficiency",
+ "tempImpact.bucketAria",
+ "tempImpact.bucketTitle",
+ "tempImpact.detective.brief.attributed",
+ "tempImpact.detective.brief.delta",
+ "tempImpact.detective.brief.scope",
+ "tempImpact.detective.brief.temperature",
+ "tempImpact.detective.brief.temperatureDescription",
+ "tempImpact.detective.brief.title",
+ "tempImpact.detective.colder",
+ "tempImpact.detective.detail",
+ "tempImpact.detective.insufficient",
+ "tempImpact.detective.loadFailed",
+ "tempImpact.detective.noData",
+ "tempImpact.detective.pattern",
+ "tempImpact.detective.stable",
+ "tempImpact.detective.title",
+ "tempImpact.detective.warmer",
+ "tempImpact.distance",
+ "tempImpact.driveCount",
+ "tempImpact.driveDate",
+ "tempImpact.efficiency",
+ "tempImpact.kpis",
+ "tempImpact.manageVehicles",
+ "tempImpact.monthlyAria",
+ "tempImpact.monthlyTitle",
+ "tempImpact.noData",
+ "tempImpact.optimalDelta",
+ "tempImpact.optimalDesc",
+ "tempImpact.optimalDesc_one",
+ "tempImpact.optimalDesc_other",
+ "tempImpact.optimalTitle",
+ "tempImpact.recentDrivesTitle",
+ "tempImpact.regionRecs",
+ "tempImpact.regionScatter",
+ "tempImpact.regionTrends",
+ "tempImpact.scatterAria",
+ "tempImpact.scatterName",
+ "tempImpact.scatterTitle",
+ "tempImpact.selectVehicle",
+ "tempImpact.subtitle",
+ "tempImpact.temperature",
+ "tempImpact.tipCold",
+ "tempImpact.tipHot",
+ "tempImpact.tipOptimal",
+ "tempImpact.tipsTitle",
+ "tempImpact.title",
+ "tempImpact.totalPoints",
+ "tempImpact.whPerKm",
+ "tempImpact.whPerMi",
+ "tempImpact.worstRange",
"tesla.reauth.body",
"tesla.reauth.cta",
"tesla.reauth.title",
- "teslaOnly.workbench.recorded",
- "teslaOnly.workbench.requested",
"theme.accent",
"theme.accentColor",
"theme.browseModes",
@@ -58631,6 +58909,16 @@
"toast.export.account.success",
"toast.export.bulkDelete.error",
"toast.export.create.success",
+ "toast.geofence.archive.success",
+ "toast.geofence.bulkDelete.partial",
+ "toast.geofence.bulkDelete.success",
+ "toast.geofence.category.success",
+ "toast.geofence.rename.success",
+ "toast.geofence.reviewed.success",
+ "toast.geofence.unarchive.success",
+ "toast.geofenceRate.apply.success",
+ "toast.geofenceRate.create.success",
+ "toast.geofenceRate.delete.success",
"toast.notifications.archive.success",
"toast.notifications.delete.success",
"toast.notifications.markRead.success",
@@ -58706,6 +58994,7 @@
"vampireDrain.aiNarrative.title",
"vehiclePicker.aria",
"vehiclePicker.fallbackName",
+ "vehicleSelect.aria",
"vehicles.aiPaintPreview.badge",
"vehicles.aiPaintPreview.button",
"vehicles.aiPaintPreview.description",
@@ -58745,7 +59034,7 @@
"yearReview.aiNarration.title",
"yearReview.pageTitle"
],
- "maps": [
+ "trips": [
"a11y.breadcrumb",
"a11y.breadcrumbHome",
"a11y.dataFreshness",
@@ -59129,6 +59418,7 @@
"calculationDetails.noExclusions",
"calculationDetails.period",
"calculationDetails.provenance",
+ "calculationDetails.source",
"calculationDetails.sources",
"calculationDetails.title",
"calculationDetails.unavailable",
@@ -59169,142 +59459,11 @@
"charging.detail.aiDiagnosis.emptyHint",
"charging.detail.aiDiagnosis.generateButton",
"charging.detail.aiDiagnosis.title",
- "chargingPlaces.activity.cost",
- "chargingPlaces.activity.empty",
- "chargingPlaces.activity.endedAt",
- "chargingPlaces.activity.energy",
- "chargingPlaces.activity.loadFailed",
- "chargingPlaces.activity.pageInfo",
- "chargingPlaces.activity.source",
- "chargingPlaces.activity.startedAt",
- "chargingPlaces.activity.title",
- "chargingPlaces.activity.unavailable",
- "chargingPlaces.archived",
- "chargingPlaces.category.custom",
- "chargingPlaces.category.home",
- "chargingPlaces.category.restricted",
- "chargingPlaces.category.unset",
- "chargingPlaces.category.work",
- "chargingPlaces.costSource.default_estimate",
- "chargingPlaces.costSource.geofence_tariff",
- "chargingPlaces.costSource.manual",
- "chargingPlaces.costSource.tesla_actual",
- "chargingPlaces.costSource.unknown",
- "chargingPlaces.detail.activityTab",
- "chargingPlaces.detail.archive",
- "chargingPlaces.detail.category",
- "chargingPlaces.detail.markReviewedAndEnable",
- "chargingPlaces.detail.needsReviewBadge",
- "chargingPlaces.detail.placeName",
- "chargingPlaces.detail.pricingIntro",
- "chargingPlaces.detail.pricingLoadFailed",
- "chargingPlaces.detail.pricingTab",
- "chargingPlaces.detail.rename",
- "chargingPlaces.detail.tabsLabel",
- "chargingPlaces.detail.unarchive",
- "chargingPlaces.directoryUnavailable",
- "chargingPlaces.discoveredAt",
- "chargingPlaces.empty",
- "chargingPlaces.emptyAll",
- "chargingPlaces.kwh",
- "chargingPlaces.needsSetup.empty",
- "chargingPlaces.needsSetup.review",
- "chargingPlaces.needsSetup.title",
- "chargingPlaces.needsSetup.unavailable",
- "chargingPlaces.noRate",
- "chargingPlaces.origin.discovered",
- "chargingPlaces.origin.manual",
- "chargingPlaces.previewApply.applied",
- "chargingPlaces.previewApply.applyAction",
- "chargingPlaces.previewApply.assignAction",
- "chargingPlaces.previewApply.attributionOnly",
- "chargingPlaces.previewApply.confirmAttributionMessage",
- "chargingPlaces.previewApply.confirmAttributionTitle",
- "chargingPlaces.previewApply.confirmMessage",
- "chargingPlaces.previewApply.confirmTitle",
- "chargingPlaces.previewApply.eligible",
- "chargingPlaces.previewApply.energy",
- "chargingPlaces.previewApply.estimatedCost",
- "chargingPlaces.previewApply.from",
- "chargingPlaces.previewApply.help",
- "chargingPlaces.previewApply.loadFailed",
- "chargingPlaces.previewApply.matched",
- "chargingPlaces.previewApply.metricsHelp",
- "chargingPlaces.previewApply.noMatches",
- "chargingPlaces.previewApply.protected",
- "chargingPlaces.previewApply.refresh",
- "chargingPlaces.previewApply.regionLabel",
- "chargingPlaces.previewApply.selectRate",
- "chargingPlaces.previewApply.title",
- "chargingPlaces.previewApply.to",
- "chargingPlaces.rateForm.currency",
- "chargingPlaces.rateForm.effectiveFrom",
- "chargingPlaces.rateForm.effectiveTo",
- "chargingPlaces.rateForm.effectiveToHint",
- "chargingPlaces.rateForm.errors.effectiveFrom",
- "chargingPlaces.rateForm.errors.effectiveTo",
- "chargingPlaces.rateForm.errors.order",
- "chargingPlaces.rateForm.errors.rate",
- "chargingPlaces.rateForm.legacyEstimateHint",
- "chargingPlaces.rateForm.rate",
- "chargingPlaces.rateForm.submit",
- "chargingPlaces.rateForm.title",
- "chargingPlaces.rateHistory.cancel",
- "chargingPlaces.rateHistory.cancelScheduled",
- "chargingPlaces.rateHistory.currency",
- "chargingPlaces.rateHistory.current",
- "chargingPlaces.rateHistory.deleteMessage",
- "chargingPlaces.rateHistory.deleteTitle",
- "chargingPlaces.rateHistory.effectiveFrom",
- "chargingPlaces.rateHistory.effectiveTo",
- "chargingPlaces.rateHistory.empty",
- "chargingPlaces.rateHistory.previewHelp",
- "chargingPlaces.rateHistory.previewSessions",
- "chargingPlaces.rateHistory.rate",
- "chargingPlaces.rateHistory.scheduled",
- "chargingPlaces.rateHistory.title",
- "chargingPlaces.rateHistory.unavailable",
- "chargingPlaces.rateLoading",
- "chargingPlaces.rateUnavailable",
- "chargingPlaces.summary.empty",
- "chargingPlaces.summary.energy",
- "chargingPlaces.summary.loadFailed",
- "chargingPlaces.summary.sessions",
- "chargingPlaces.summary.spend",
- "chargingPlaces.summary.title",
- "chargingPlaces.summary.unavailable",
- "chargingPlaces.table.category",
- "chargingPlaces.table.manage",
- "chargingPlaces.table.name",
- "chargingPlaces.table.rate",
- "chargingPlaces.table.rates",
- "chargingPlaces.table.title",
- "chargingPlaces.table.zone",
- "chargingPlaces.unnamed",
- "chargingPlaces.workspace.addPlace",
- "chargingPlaces.workspace.bulkFailureReason",
- "chargingPlaces.workspace.bulkIncomplete",
- "chargingPlaces.workspace.bulkUnconfirmed",
- "chargingPlaces.workspace.clearSearch",
- "chargingPlaces.workspace.initialPaused",
- "chargingPlaces.workspace.noPlaces",
- "chargingPlaces.workspace.noRates",
- "chargingPlaces.workspace.noReview",
- "chargingPlaces.workspace.noSearchMatches",
- "chargingPlaces.workspace.pausedRetained",
- "chargingPlaces.workspace.placesLoadFailed",
- "chargingPlaces.workspace.ratesLoadFailed",
- "chargingPlaces.workspace.reviewLoadFailed",
- "chargingPlaces.workspace.search",
- "chargingPlaces.workspace.showArchived",
- "chargingPlaces.workspace.staleRetained",
- "chargingPlaces.workspace.unifiedAria",
- "chargingPlaces.workspace.unifiedDescription",
- "chargingPlaces.workspace.unifiedTitle",
"chart.a11y.fallbackTableLabel",
"chart.a11y.metricSelector",
"chart.a11y.summary",
"chart.col.date",
+ "chart.col.time",
"chart.col.value",
"chart.export.copy",
"chart.export.copyFailed",
@@ -59522,6 +59681,7 @@
"costAnalysis.aiNarrative.description",
"costAnalysis.aiNarrative.generateButton",
"costAnalysis.aiNarrative.title",
+ "dashboard.grid.positionHeading",
"dataRepair.aiSuggestions.badge",
"dataRepair.aiSuggestions.button",
"dataRepair.aiSuggestions.description",
@@ -59723,6 +59883,7 @@
"driveDetail.aiSpeedProfile.description",
"driveDetail.aiSpeedProfile.generateButton",
"driveDetail.aiSpeedProfile.title",
+ "driveDetail.report.telemetry",
"drives.aiSearch.badge",
"drives.aiSearch.description",
"drives.aiSearch.inputLabel",
@@ -59738,7 +59899,6 @@
"editableText.error.empty",
"editableText.error.saveFailed",
"editableText.saving",
- "efficiency.noStats",
"emptyState.alerts.list.likelyCause",
"emptyState.alerts.list.meaning",
"emptyState.analytics.efficiency.likelyCause",
@@ -59758,13 +59918,7 @@
"emptyState.signals.live.meaning",
"emptyState.vehicles.list.likelyCause",
"emptyState.vehicles.list.meaning",
- "entityContext.alerts",
- "entityContext.charging",
- "entityContext.drives",
- "entityContext.service",
- "entityContext.telemetry",
"entityContext.title",
- "entityContext.vehicle",
"error.forbidden.message",
"error.forbidden.title",
"error.network.message",
@@ -59878,7 +60032,6 @@
"forms.keepEditing",
"forms.unsavedTitle",
"forms.unsavedWarning",
- "forms.validationFailed",
"freshness.ariaLabel",
"freshness.days",
"freshness.error",
@@ -59915,87 +60068,16 @@
"fsm.typeOption.telemetryConnection",
"fsm.typeOption.vehicle",
"gas.pollTriggered",
- "geofences.addGeofence",
"geofences.aiSuggest.applyButton",
"geofences.aiSuggest.badge",
"geofences.aiSuggest.currentLabel",
"geofences.aiSuggest.description",
- "geofences.aiSuggest.pickLocation",
"geofences.aiSuggest.proposalLabel",
"geofences.aiSuggest.radiusLabel",
"geofences.aiSuggest.rejectedLabel",
- "geofences.aiSuggest.selectHint",
"geofences.aiSuggest.suggestButton",
"geofences.aiSuggest.title",
"geofences.aiSuggest.unnamed",
- "geofences.brief.candidates",
- "geofences.brief.description",
- "geofences.brief.pending",
- "geofences.brief.reviewed",
- "geofences.brief.scope",
- "geofences.browser",
- "geofences.bulk.delete",
- "geofences.bulk.deleteConfirm.body",
- "geofences.bulk.deleteConfirm.title",
- "geofences.chooseVehicle",
- "geofences.createTitle",
- "geofences.deleteGeofence",
- "geofences.deleteMessage",
- "geofences.deleteTitle",
- "geofences.drawHint",
- "geofences.drawOnMap",
- "geofences.drawerLabel",
- "geofences.editGeofence",
- "geofences.editTitle",
- "geofences.error.nameTooLong",
- "geofences.formName",
- "geofences.geolocationUnsupported",
- "geofences.getLocation",
- "geofences.gettingLocation",
- "geofences.latitude",
- "geofences.locationDenied",
- "geofences.locationFailed",
- "geofences.longitude",
- "geofences.namePlaceholder",
- "geofences.noPosition",
- "geofences.radiusHint",
- "geofences.radiusMeters",
- "geofences.selectVehicle",
- "geofences.subtitle",
- "geofences.summaryAria",
- "geofences.title",
- "geofences.toastCreateError",
- "geofences.toastCreated",
- "geofences.toastDeleteError",
- "geofences.toastDeleted",
- "geofences.toastUpdateError",
- "geofences.toastUpdated",
- "geofences.totalGeofences",
- "geofences.useCurrentLocation",
- "geofences.vehicle",
- "geofences.visits.candidates",
- "geofences.visits.charging",
- "geofences.visits.chargingShort",
- "geofences.visits.confirm",
- "geofences.visits.description",
- "geofences.visits.empty",
- "geofences.visits.evidence",
- "geofences.visits.loadFailed",
- "geofences.visits.otherShort",
- "geofences.visits.pending",
- "geofences.visits.purpose",
- "geofences.visits.rateHint",
- "geofences.visits.review",
- "geofences.visits.reviewHint",
- "geofences.visits.reviewStatus",
- "geofences.visits.reviewed",
- "geofences.visits.reviewedPlaces",
- "geofences.visits.select",
- "geofences.visits.suggestCharging",
- "geofences.visits.suggestOther",
- "geofences.visits.title",
- "geofences.visits.unavailable",
- "geofences.visits.useTemplate",
"global.loading",
"glossary.degradation.howMeasured",
"glossary.degradation.term",
@@ -60041,6 +60123,9 @@
"help.feedback",
"help.feedbackLabel",
"help.lifetime.avgEfficiency",
+ "help.replay.battery",
+ "help.replay.power",
+ "help.replay.range",
"help.shortcuts",
"help.shortcutsLabel",
"help.signal.stale",
@@ -60068,6 +60153,133 @@
"incidentTimeline.aiSummary.button",
"incidentTimeline.aiSummary.description",
"incidentTimeline.aiSummary.title",
+ "journey.action.cancel",
+ "journey.action.plan",
+ "journey.arrival.adjusted",
+ "journey.arrival.empty",
+ "journey.arrival.eta",
+ "journey.arrival.loadFailed",
+ "journey.arrival.loading",
+ "journey.arrival.moving",
+ "journey.arrival.parked",
+ "journey.arrival.shortfall",
+ "journey.arrival.title",
+ "journey.checklist.empty",
+ "journey.checklist.loadFailed",
+ "journey.checklist.loading",
+ "journey.checklist.refresh",
+ "journey.checklist.refreshFailed",
+ "journey.checklist.run",
+ "journey.checklist.runAt",
+ "journey.checklist.title",
+ "journey.col.actions",
+ "journey.col.journey",
+ "journey.col.plan",
+ "journey.col.status",
+ "journey.col.updated",
+ "journey.departure.allWarn",
+ "journey.departure.hours",
+ "journey.departure.leaveAt",
+ "journey.departure.loadFailed",
+ "journey.departure.loading",
+ "journey.departure.noOrigin",
+ "journey.departure.slots",
+ "journey.departure.socNow",
+ "journey.departure.title",
+ "journey.departure.uncovered",
+ "journey.departure.window",
+ "journey.detail.empty",
+ "journey.detail.loadFailed",
+ "journey.detail.loading",
+ "journey.detail.title",
+ "journey.filter.all",
+ "journey.filter.status",
+ "journey.form.createFailed",
+ "journey.form.destination",
+ "journey.form.name",
+ "journey.form.namePlaceholder",
+ "journey.form.origin",
+ "journey.form.submit",
+ "journey.list.empty",
+ "journey.list.loadFailed",
+ "journey.list.loading",
+ "journey.list.subtitle",
+ "journey.list.title",
+ "journey.live.checkIn",
+ "journey.live.empty",
+ "journey.live.fixes",
+ "journey.live.have",
+ "journey.live.lastFix",
+ "journey.live.loadFailed",
+ "journey.live.loading",
+ "journey.live.need",
+ "journey.live.nextStop",
+ "journey.live.noNextStop",
+ "journey.live.progress",
+ "journey.live.queued",
+ "journey.live.range",
+ "journey.live.remaining",
+ "journey.live.title",
+ "journey.live.wait",
+ "journey.noRoute",
+ "journey.nudge.blocker",
+ "journey.nudge.empty",
+ "journey.nudge.loadFailed",
+ "journey.nudge.loading",
+ "journey.nudge.slot",
+ "journey.nudge.title",
+ "journey.open",
+ "journey.page.navTitle",
+ "journey.page.subtitle",
+ "journey.page.title",
+ "journey.planVersion",
+ "journey.plans.empty",
+ "journey.plans.title",
+ "journey.replan.empty",
+ "journey.replan.loadFailed",
+ "journey.replan.loading",
+ "journey.replan.offBy",
+ "journey.replan.rescore",
+ "journey.replan.rescoreFailed",
+ "journey.replan.scoring",
+ "journey.replan.title",
+ "journey.report.checklist",
+ "journey.report.detour",
+ "journey.report.distance",
+ "journey.report.duration",
+ "journey.report.empty",
+ "journey.report.fixes",
+ "journey.report.loadFailed",
+ "journey.report.loading",
+ "journey.report.readyCount",
+ "journey.report.replanCount",
+ "journey.report.replans",
+ "journey.report.times",
+ "journey.report.title",
+ "journey.report.usually",
+ "journey.report.usuallyTimes",
+ "journey.scoring.arrival",
+ "journey.scoring.candidates",
+ "journey.scoring.col.corridor",
+ "journey.scoring.col.health",
+ "journey.scoring.col.price",
+ "journey.scoring.col.score",
+ "journey.scoring.col.stop",
+ "journey.scoring.col.wait",
+ "journey.scoring.energy",
+ "journey.scoring.loadFailed",
+ "journey.scoring.loadingSites",
+ "journey.scoring.min",
+ "journey.scoring.noCoords",
+ "journey.scoring.noSites",
+ "journey.scoring.openHistory",
+ "journey.scoring.scoreFailed",
+ "journey.scoring.scoreFor",
+ "journey.scoring.scoring",
+ "journey.scoring.submit",
+ "journey.scoring.title",
+ "journey.scoring.visits",
+ "journey.scoring.winner",
"lifetime.achievementBadge",
"lifetime.achievementNames.century",
"lifetime.achievementNames.earth-orbit",
@@ -60126,7 +60338,6 @@
"liveLogs.aiSummary.description",
"liveLogs.aiSummary.emptyHint",
"liveLogs.aiSummary.title",
- "locations.aiAutoName.applied",
"locations.aiAutoName.applyButton",
"locations.aiAutoName.badge",
"locations.aiAutoName.currentLabel",
@@ -60135,106 +60346,11 @@
"locations.aiAutoName.rejectedLabel",
"locations.aiAutoName.suggestButton",
"locations.aiAutoName.title",
- "locations.all",
- "locations.avg",
- "locations.avgVisit",
- "locations.brief.average",
- "locations.brief.cities",
- "locations.brief.description",
- "locations.brief.scope",
- "locations.brief.top",
- "locations.byTime",
- "locations.byTimeAria",
- "locations.byVisits",
- "locations.byVisitsAria",
- "locations.clearSearch",
- "locations.empty.cta",
- "locations.empty.message",
- "locations.empty.page",
- "locations.empty.title",
- "locations.filterLabel.search",
- "locations.hours",
- "locations.inspect",
- "locations.kpis",
- "locations.last",
- "locations.lastVisited",
- "locations.leaderboards",
- "locations.loadPaused.message",
- "locations.loadPaused.title",
- "locations.loadUnknown.message",
- "locations.loadUnknown.title",
- "locations.mostVisited",
- "locations.noMatch",
- "locations.noTimeData",
- "locations.noVisitData",
- "locations.paging.exploratory",
- "locations.preview.eyebrow",
- "locations.preview.lastVisited",
- "locations.preview.loadedAt",
- "locations.resetDateRange",
- "locations.searchPlaceholder",
- "locations.subtitle",
- "locations.title",
- "locations.total",
- "locations.totalTime",
- "locations.totalVisits",
- "locations.uniqueCities",
- "locations.uniquePlaces",
- "locations.unknown",
- "locations.visits",
"maintenance.aiPredictive.badge",
"maintenance.aiPredictive.button",
"maintenance.aiPredictive.description",
"maintenance.aiPredictive.emptyHint",
"maintenance.aiPredictive.title",
- "mapOverview.atHome",
- "mapOverview.atWork",
- "mapOverview.brief.description",
- "mapOverview.brief.scope",
- "mapOverview.colHeading",
- "mapOverview.colLat",
- "mapOverview.colLon",
- "mapOverview.colSpeed",
- "mapOverview.colTime",
- "mapOverview.coordinates",
- "mapOverview.copyCoordinates",
- "mapOverview.details",
- "mapOverview.geofences",
- "mapOverview.heading",
- "mapOverview.headingValue",
- "mapOverview.historicalSubtitle",
- "mapOverview.homelinkNearby",
- "mapOverview.lastObserved",
- "mapOverview.locationDetails",
- "mapOverview.locations",
- "mapOverview.mapMode",
- "mapOverview.modeLive",
- "mapOverview.modeRecent",
- "mapOverview.navRoute",
- "mapOverview.no",
- "mapOverview.noGps",
- "mapOverview.noHistory",
- "mapOverview.noHistoryDescription",
- "mapOverview.noLocation",
- "mapOverview.noPlayback",
- "mapOverview.noRecentRoute",
- "mapOverview.observationFreshness",
- "mapOverview.observedSpeed",
- "mapOverview.odometer",
- "mapOverview.pageTitle",
- "mapOverview.playbackBattery",
- "mapOverview.playbackLabel",
- "mapOverview.playbackPosition",
- "mapOverview.playbackPower",
- "mapOverview.playbackSpeed",
- "mapOverview.positionMap",
- "mapOverview.recentHistory",
- "mapOverview.recentRouteError",
- "mapOverview.sourcesTitle",
- "mapOverview.title",
- "mapOverview.unknown",
- "mapOverview.vehicle",
- "mapOverview.yes",
"maps.animatedMarker.label",
"maps.layerSwitcher.dark",
"maps.layerSwitcher.label",
@@ -60243,116 +60359,20 @@
"maps.layerSwitcher.terrain",
"maps.routePlayback.empty",
"maps.routePlayback.mapLabel",
- "mapsBrief.eyebrow",
- "mapsBrief.freshness.received",
- "mapsBrief.freshness.unknown",
- "mapsBrief.status.available",
- "mapsBrief.status.loading",
- "mapsBrief.status.partial",
- "mapsBrief.status.retained",
- "mapsBrief.status.unavailable",
"mask.copy",
"mask.hide",
"mask.reveal",
"metricCard.moreInfoAbout",
+ "mobile.refresh.pull",
+ "mobile.refresh.refreshing",
+ "mobile.refresh.release",
"modal.close",
"mqttSseInspector.aiExplainer.badge",
"mqttSseInspector.aiExplainer.button",
"mqttSseInspector.aiExplainer.description",
"mqttSseInspector.aiExplainer.emptyHint",
"mqttSseInspector.aiExplainer.title",
- "nav.active",
- "nav.atHome",
- "nav.atWork",
- "nav.awayFromHome",
- "nav.brief.arrival",
- "nav.brief.average",
- "nav.brief.delay",
- "nav.brief.description",
- "nav.brief.distance",
- "nav.brief.eta",
- "nav.brief.heading",
- "nav.brief.presenceDescription",
- "nav.brief.presenceScope",
- "nav.brief.scope",
- "nav.chartDistanceV2",
- "nav.chartSpeedV2",
- "nav.chartsAria",
- "nav.col.destination",
- "nav.col.distance",
- "nav.col.eta",
- "nav.col.home",
- "nav.col.lat",
- "nav.col.latitude",
- "nav.col.lon",
- "nav.col.longitude",
- "nav.col.time",
- "nav.col.work",
- "nav.currentLocation",
- "nav.delay",
- "nav.destination",
- "nav.distanceRemaining",
- "nav.eta",
"nav.geofences",
- "nav.gpsFixQuality",
- "nav.gpsState.locked",
- "nav.gpsState.unknown",
- "nav.gpsState.unlocked",
- "nav.heading",
- "nav.headingValue",
- "nav.historyAria",
- "nav.homeStatus",
- "nav.homelinkNearby",
- "nav.inactive",
- "nav.legendDistanceToArrivalV2",
- "nav.legendSpeedV2",
- "nav.locationHistory",
- "nav.locationUnavailable",
- "nav.manageVehicles",
- "nav.metric.avgSpeed",
- "nav.metric.distance",
- "nav.metric.energyAtArrival",
- "nav.metric.eta",
- "nav.metric.trafficDelay",
- "nav.metricsAria",
- "nav.minutes",
- "nav.noActiveNav",
- "nav.noDestinations",
- "nav.noGps",
- "nav.noHistory",
- "nav.noPresence",
- "nav.noSnapshots",
- "nav.noVehicle",
- "nav.noWaypoints",
- "nav.noWaypointsDescription",
- "nav.notAtWork",
- "nav.pageTitle",
- "nav.presenceAria",
- "nav.presenceChart",
- "nav.recentDestinations",
- "nav.refresh",
- "nav.resource",
- "nav.resourceHistory",
- "nav.routeDetailAria",
- "nav.routeLastUpdated",
- "nav.speedHistoryAria",
- "nav.speedHistoryTitle",
- "nav.speedProfile",
- "nav.status",
- "nav.statusAria",
- "nav.subtitle",
- "nav.trafficDelay",
- "nav.trafficDelayTitle",
- "nav.unknown",
- "nav.waypoints",
- "nav.workStatus",
- "nav.wp.distance",
- "nav.wp.kind.destination",
- "nav.wp.kind.supercharger",
- "nav.wp.kind.waypoint",
- "nav.wp.name",
- "nav.wp.type",
- "navigation.noRoute",
"notifications.alertStudio.aiBuilder.badge",
"notifications.alertStudio.aiBuilder.description",
"notifications.alertStudio.aiBuilder.draftButton",
@@ -60597,6 +60617,7 @@
"recentPages.shortDay",
"recentPages.shortHour",
"recentPages.shortMinute",
+ "replay.backToDrive",
"replay.controls.pause",
"replay.controls.play",
"replay.controls.progress",
@@ -60604,17 +60625,33 @@
"replay.controls.restart",
"replay.controls.speed",
"replay.controls.stop",
+ "replay.currentStats",
+ "replay.drive",
"replay.elevation.aria",
"replay.elevation.gainLoss",
"replay.elevation.label",
"replay.elevation.noData",
"replay.elevation.title",
+ "replay.map.ariaLabel",
+ "replay.map.noPositions",
+ "replay.map.section",
+ "replay.map.stationaryRouteBody",
+ "replay.map.stationaryRouteTitle",
"replay.markers.atPercent",
+ "replay.markers.chargeStart",
+ "replay.markers.chargeStop",
+ "replay.markers.fastSegment",
+ "replay.markers.lowSoc",
+ "replay.markers.regenPeak",
+ "replay.markers.start",
+ "replay.markers.stop",
+ "replay.noGps",
"replay.overview.clusterCount",
"replay.overview.clusterCount_one",
"replay.overview.clusterCount_other",
"replay.overview.label",
"replay.overview.positionUnavailable",
+ "replay.refresh",
"replay.shortcuts.end",
"replay.shortcuts.frame",
"replay.shortcuts.help",
@@ -60634,6 +60671,30 @@
"replay.shortcuts.start",
"replay.shortcuts.startEnd",
"replay.shortcuts.title",
+ "replay.sources",
+ "replay.stat.battery",
+ "replay.stat.elevation",
+ "replay.stat.power",
+ "replay.stat.range",
+ "replay.stat.speed",
+ "replay.stat.temp",
+ "replay.summary.avgSpeed",
+ "replay.summary.battery",
+ "replay.summary.distance",
+ "replay.summary.duration",
+ "replay.summary.efficiency",
+ "replay.summary.elevGain",
+ "replay.summary.elevLoss",
+ "replay.summary.maxSpeed",
+ "replay.summary.title",
+ "replay.timeline.aria",
+ "replay.timeline.noData",
+ "replay.timeline.power",
+ "replay.timeline.section",
+ "replay.timeline.speed",
+ "replay.timeline.subtitle",
+ "replay.timeline.title",
+ "replay.title",
"requiresAuth.title",
"route.noLocationData",
"route.roundTrip",
@@ -61019,6 +61080,7 @@
"stateMachineDebugger.aiNarrator.description",
"stateMachineDebugger.aiNarrator.emptyHint",
"stateMachineDebugger.aiNarrator.title",
+ "statistics.age",
"statusBar.alerts.count",
"statusBar.alerts.countMore",
"statusBar.alerts.newCritical",
@@ -61121,7 +61183,7 @@
"statusBar.version.updateBanner",
"statusBar.version.uptime",
"statusBar.version.uptimeLabel",
- "system.outage.pausedSource",
+ "sweetSpot.col.sample",
"systemStatus.sourceUnavailable",
"table.bulkActions.clear",
"table.bulkActions.region",
@@ -61187,66 +61249,6 @@
"tempImpact.aiNarrative.emptyHint",
"tempImpact.aiNarrative.generateButton",
"tempImpact.aiNarrative.title",
- "tempImpact.avgEff",
- "tempImpact.avgEfficiency",
- "tempImpact.avgTemp",
- "tempImpact.bestRange",
- "tempImpact.brief.best",
- "tempImpact.brief.bestEfficiency",
- "tempImpact.brief.description",
- "tempImpact.brief.scope",
- "tempImpact.brief.worst",
- "tempImpact.brief.worstEfficiency",
- "tempImpact.bucketAria",
- "tempImpact.bucketTitle",
- "tempImpact.detective.brief.attributed",
- "tempImpact.detective.brief.delta",
- "tempImpact.detective.brief.scope",
- "tempImpact.detective.brief.temperature",
- "tempImpact.detective.brief.temperatureDescription",
- "tempImpact.detective.brief.title",
- "tempImpact.detective.colder",
- "tempImpact.detective.detail",
- "tempImpact.detective.insufficient",
- "tempImpact.detective.loadFailed",
- "tempImpact.detective.noData",
- "tempImpact.detective.pattern",
- "tempImpact.detective.stable",
- "tempImpact.detective.title",
- "tempImpact.detective.warmer",
- "tempImpact.distance",
- "tempImpact.driveCount",
- "tempImpact.driveDate",
- "tempImpact.efficiency",
- "tempImpact.kpis",
- "tempImpact.manageVehicles",
- "tempImpact.monthlyAria",
- "tempImpact.monthlyTitle",
- "tempImpact.noData",
- "tempImpact.optimalDelta",
- "tempImpact.optimalDesc",
- "tempImpact.optimalDesc_one",
- "tempImpact.optimalDesc_other",
- "tempImpact.optimalTitle",
- "tempImpact.recentDrivesTitle",
- "tempImpact.regionRecs",
- "tempImpact.regionScatter",
- "tempImpact.regionTrends",
- "tempImpact.scatterAria",
- "tempImpact.scatterName",
- "tempImpact.scatterTitle",
- "tempImpact.selectVehicle",
- "tempImpact.subtitle",
- "tempImpact.temperature",
- "tempImpact.tipCold",
- "tempImpact.tipHot",
- "tempImpact.tipOptimal",
- "tempImpact.tipsTitle",
- "tempImpact.title",
- "tempImpact.totalPoints",
- "tempImpact.whPerKm",
- "tempImpact.whPerMi",
- "tempImpact.worstRange",
"tesla.reauth.body",
"tesla.reauth.cta",
"tesla.reauth.title",
@@ -61298,16 +61300,9 @@
"toast.export.account.success",
"toast.export.bulkDelete.error",
"toast.export.create.success",
- "toast.geofence.archive.success",
- "toast.geofence.bulkDelete.partial",
- "toast.geofence.bulkDelete.success",
- "toast.geofence.category.success",
- "toast.geofence.rename.success",
- "toast.geofence.reviewed.success",
- "toast.geofence.unarchive.success",
- "toast.geofenceRate.apply.success",
- "toast.geofenceRate.create.success",
- "toast.geofenceRate.delete.success",
+ "toast.journey.create.success",
+ "toast.journey.score.success",
+ "toast.journey.transition.success",
"toast.notifications.archive.success",
"toast.notifications.delete.success",
"toast.notifications.markRead.success",
@@ -61371,10 +61366,109 @@
"tripPlanner.aiAgent.noOrigin",
"tripPlanner.aiAgent.noVehicle",
"tripPlanner.aiAgent.title",
+ "trips.brief.allVehicles",
+ "trips.brief.detail.description",
+ "trips.brief.detail.efficiencyReason",
+ "trips.brief.detail.eyebrow",
+ "trips.brief.detail.missingScope",
+ "trips.brief.detail.provenance",
+ "trips.brief.detail.scope",
+ "trips.brief.detail.title",
+ "trips.brief.list.description",
+ "trips.brief.list.eyebrow",
+ "trips.brief.list.provenance",
+ "trips.brief.list.scope",
+ "trips.brief.list.title",
+ "trips.brief.replay.batteryContext",
+ "trips.brief.replay.description",
+ "trips.brief.replay.eyebrow",
+ "trips.brief.replay.missingScope",
+ "trips.brief.replay.provenance",
+ "trips.brief.replay.scope",
+ "trips.brief.report.description",
+ "trips.brief.report.eyebrow",
+ "trips.brief.report.provenance",
+ "trips.brief.report.scope",
+ "trips.brief.report.title",
+ "trips.brief.status.initial",
+ "trips.brief.status.initialFailure",
+ "trips.brief.status.ok",
+ "trips.brief.status.partial",
+ "trips.brief.status.stale",
+ "trips.brief.status.unavailable",
+ "trips.card.charges",
+ "trips.card.cost",
+ "trips.card.distance",
+ "trips.card.drives",
+ "trips.card.energy",
+ "trips.card.inProgress",
+ "trips.chart.aria",
+ "trips.chart.col.trip",
+ "trips.chart.distance",
+ "trips.chart.title",
"trips.detail.aiSuggestName.badge",
"trips.detail.aiSuggestName.description",
"trips.detail.aiSuggestName.generateButton",
"trips.detail.aiSuggestName.title",
+ "trips.detail.charges",
+ "trips.detail.chart.aria",
+ "trips.detail.chart.col.drive",
+ "trips.detail.chart.driveLabel",
+ "trips.detail.chart.title",
+ "trips.detail.cost",
+ "trips.detail.created",
+ "trips.detail.distance",
+ "trips.detail.drives",
+ "trips.detail.drivesEmpty",
+ "trips.detail.drivesTitle",
+ "trips.detail.duration",
+ "trips.detail.efficiency",
+ "trips.detail.ended",
+ "trips.detail.energy",
+ "trips.detail.inProgress",
+ "trips.detail.kpi.chargeCount",
+ "trips.detail.kpi.driveCount",
+ "trips.detail.kpi.label",
+ "trips.detail.name",
+ "trips.detail.notFound",
+ "trips.detail.notes",
+ "trips.detail.overview",
+ "trips.detail.resourceName",
+ "trips.detail.started",
+ "trips.detail.table.distance",
+ "trips.detail.table.duration",
+ "trips.detail.table.energy",
+ "trips.detail.table.route",
+ "trips.detail.table.started",
+ "trips.detail.title",
+ "trips.detail.tripId",
+ "trips.detail.tripNumber",
+ "trips.detail.vehicle",
+ "trips.energy.empty",
+ "trips.energy.title",
+ "trips.export.csv",
+ "trips.export.json",
+ "trips.list.aria",
+ "trips.list.count",
+ "trips.list.empty",
+ "trips.list.heading",
+ "trips.primary.aria",
+ "trips.row.trip",
+ "trips.stats.aria",
+ "trips.stats.avgPerTrip",
+ "trips.stats.avgPerTripSub",
+ "trips.stats.chargeSessions",
+ "trips.stats.charges",
+ "trips.stats.cost",
+ "trips.stats.costPer",
+ "trips.stats.distance",
+ "trips.stats.driveCount",
+ "trips.stats.energy",
+ "trips.stats.total",
+ "trips.stats.totalDrives",
+ "trips.stats.tripCount",
+ "trips.subtitle",
+ "trips.title",
"upstream.banner",
"vampireDrain.aiNarrative.badge",
"vampireDrain.aiNarrative.description",
@@ -61423,7 +61517,7 @@
"yearReview.aiNarration.title",
"yearReview.pageTitle"
],
- "trips": [
+ "ownership": [
"a11y.breadcrumb",
"a11y.breadcrumbHome",
"a11y.dataFreshness",
@@ -61531,194 +61625,9 @@
"activity.action.vehicleCommandWake",
"activity.myActivity.empty",
"admin.liveSignals.kpi.staleHint",
- "ai.common.errorUnknown",
- "ai.common.noOutput",
- "ai.confirm.argsLabel",
- "ai.confirm.cancel",
- "ai.confirm.intro.mutates",
- "ai.confirm.intro.read",
- "ai.confirm.run",
- "ai.confirm.title",
- "ai.confirm.toolLabel",
- "ai.limit.desc.burst",
- "ai.limit.desc.costCap",
- "ai.limit.desc.costCapUnavailable",
- "ai.limit.desc.featureMisconfigured",
- "ai.limit.desc.generic",
- "ai.limit.desc.perDay",
- "ai.limit.desc.perMinute",
- "ai.limit.desc.providerUnavailable",
- "ai.limit.desc.settingsUnavailable",
- "ai.limit.desc.tokens",
- "ai.limit.retry",
- "ai.limit.retryIn",
- "ai.limit.title.burst",
- "ai.limit.title.costCap",
- "ai.limit.title.costCapUnavailable",
- "ai.limit.title.featureMisconfigured",
- "ai.limit.title.generic",
- "ai.limit.title.perDay",
- "ai.limit.title.perMinute",
- "ai.limit.title.providerUnavailable",
- "ai.limit.title.settingsUnavailable",
- "ai.limit.title.tokens",
- "ai.limit.useBaseline",
- "alertPacks.aiDescription",
- "alertPacks.aiGenerate",
- "alertPacks.aiReview",
- "alertPacks.aiTitle",
- "alertPacks.goal",
- "alertPacks.goalExample",
- "alertPacks.helixMessage",
- "alertPacks.proposedCount",
- "alertPacks.proposedRules",
- "alertPacks.rules.battery-critical.message",
- "alertPacks.rules.battery-critical.name",
- "alertPacks.rules.battery-full.message",
- "alertPacks.rules.battery-full.name",
- "alertPacks.rules.battery-heating-ended.message",
- "alertPacks.rules.battery-heating-ended.name",
- "alertPacks.rules.battery-heating.message",
- "alertPacks.rules.battery-heating.name",
- "alertPacks.rules.battery-low.message",
- "alertPacks.rules.battery-low.name",
- "alertPacks.rules.battery-reserve.message",
- "alertPacks.rules.battery-reserve.name",
- "alertPacks.rules.bms-full.message",
- "alertPacks.rules.bms-full.name",
- "alertPacks.rules.cabin-cold.message",
- "alertPacks.rules.cabin-cold.name",
- "alertPacks.rules.cabin-hot.message",
- "alertPacks.rules.cabin-hot.name",
- "alertPacks.rules.charge-cold-weather.message",
- "alertPacks.rules.charge-cold-weather.name",
- "alertPacks.rules.charge-complete.message",
- "alertPacks.rules.charge-complete.name",
- "alertPacks.rules.charge-latch.message",
- "alertPacks.rules.charge-latch.name",
- "alertPacks.rules.charge-limit.message",
- "alertPacks.rules.charge-limit.name",
- "alertPacks.rules.charge-port-closed.message",
- "alertPacks.rules.charge-port-closed.name",
- "alertPacks.rules.charge-port-open.message",
- "alertPacks.rules.charge-port-open.name",
- "alertPacks.rules.charge-schedule-mode.message",
- "alertPacks.rules.charge-schedule-mode.name",
- "alertPacks.rules.charge-scheduled.message",
- "alertPacks.rules.charge-scheduled.name",
- "alertPacks.rules.charge-started.message",
- "alertPacks.rules.charge-started.name",
- "alertPacks.rules.charge-stopped.message",
- "alertPacks.rules.charge-stopped.name",
- "alertPacks.rules.climate-auto.message",
- "alertPacks.rules.climate-auto.name",
- "alertPacks.rules.climate-keeper.message",
- "alertPacks.rules.climate-keeper.name",
- "alertPacks.rules.destination-changed.message",
- "alertPacks.rules.destination-changed.name",
- "alertPacks.rules.drive-neutral.message",
- "alertPacks.rules.drive-neutral.name",
- "alertPacks.rules.drive-parked.message",
- "alertPacks.rules.drive-parked.name",
- "alertPacks.rules.drive-reverse.message",
- "alertPacks.rules.drive-reverse.name",
- "alertPacks.rules.drive-started.message",
- "alertPacks.rules.drive-started.name",
- "alertPacks.rules.driver-arrived.message",
- "alertPacks.rules.driver-arrived.name",
- "alertPacks.rules.driver-belt.message",
- "alertPacks.rules.driver-belt.name",
- "alertPacks.rules.driver-left.message",
- "alertPacks.rules.driver-left.name",
- "alertPacks.rules.fast-charger-left.message",
- "alertPacks.rules.fast-charger-left.name",
- "alertPacks.rules.fast-charger.message",
- "alertPacks.rules.fast-charger.name",
- "alertPacks.rules.favorite-arrived.message",
- "alertPacks.rules.favorite-arrived.name",
- "alertPacks.rules.favorite-left.message",
- "alertPacks.rules.favorite-left.name",
- "alertPacks.rules.guest-disabled.message",
- "alertPacks.rules.guest-disabled.name",
- "alertPacks.rules.guest-enabled.message",
- "alertPacks.rules.guest-enabled.name",
- "alertPacks.rules.home-arrived.message",
- "alertPacks.rules.home-arrived.name",
- "alertPacks.rules.home-left.message",
- "alertPacks.rules.home-left.name",
- "alertPacks.rules.hvac-off.message",
- "alertPacks.rules.hvac-off.name",
- "alertPacks.rules.hvac-on.message",
- "alertPacks.rules.hvac-on.name",
- "alertPacks.rules.locked.message",
- "alertPacks.rules.locked.name",
- "alertPacks.rules.media-artist.message",
- "alertPacks.rules.media-artist.name",
- "alertPacks.rules.media-playback.message",
- "alertPacks.rules.media-playback.name",
- "alertPacks.rules.media-source.message",
- "alertPacks.rules.media-source.name",
- "alertPacks.rules.media-station.message",
- "alertPacks.rules.media-station.name",
- "alertPacks.rules.media-track.message",
- "alertPacks.rules.media-track.name",
- "alertPacks.rules.module-cold.message",
- "alertPacks.rules.module-cold.name",
- "alertPacks.rules.module-hot.message",
- "alertPacks.rules.module-hot.name",
- "alertPacks.rules.outside-freezing.message",
- "alertPacks.rules.outside-freezing.name",
- "alertPacks.rules.outside-hot.message",
- "alertPacks.rules.outside-hot.name",
- "alertPacks.rules.pin-disabled.message",
- "alertPacks.rules.pin-disabled.name",
- "alertPacks.rules.pin-enabled.message",
- "alertPacks.rules.pin-enabled.name",
- "alertPacks.rules.powershare-state.message",
- "alertPacks.rules.powershare-state.name",
- "alertPacks.rules.powershare-stop.message",
- "alertPacks.rules.powershare-stop.name",
- "alertPacks.rules.powershare-type.message",
- "alertPacks.rules.powershare-type.name",
- "alertPacks.rules.preconditioning-ended.message",
- "alertPacks.rules.preconditioning-ended.name",
- "alertPacks.rules.preconditioning.message",
- "alertPacks.rules.preconditioning.name",
- "alertPacks.rules.sentry-state.message",
- "alertPacks.rules.sentry-state.name",
- "alertPacks.rules.software-version.message",
- "alertPacks.rules.software-version.name",
- "alertPacks.rules.unlocked.message",
- "alertPacks.rules.unlocked.name",
- "alertPacks.rules.update-available.message",
- "alertPacks.rules.update-available.name",
- "alertPacks.rules.update-ended.message",
- "alertPacks.rules.update-ended.name",
- "alertPacks.rules.update-schedule.message",
- "alertPacks.rules.update-schedule.name",
- "alertPacks.rules.update-started.message",
- "alertPacks.rules.update-started.name",
- "alertPacks.rules.update-version.message",
- "alertPacks.rules.update-version.name",
- "alertPacks.rules.valet-disabled.message",
- "alertPacks.rules.valet-disabled.name",
- "alertPacks.rules.valet-enabled.message",
- "alertPacks.rules.valet-enabled.name",
- "alertPacks.rules.window-driver.message",
- "alertPacks.rules.window-driver.name",
- "alertPacks.rules.window-rear-driver.message",
- "alertPacks.rules.window-rear-driver.name",
- "alertPacks.rules.work-arrived.message",
- "alertPacks.rules.work-arrived.name",
- "alertPacks.rules.work-left.message",
- "alertPacks.rules.work-left.name",
- "analytics.weeklyDigest.aiNarration.badge",
- "analytics.weeklyDigest.aiNarration.description",
- "analytics.weeklyDigest.aiNarration.generateButton",
- "analytics.weeklyDigest.aiNarration.noVehicleHint",
- "analytics.weeklyDigest.aiNarration.title",
- "analytics.weeklyDigest.aiNarration.utcScope",
- "analytics.weeklyDigest.aiNarration.weekLimit",
+ "advancedIntelligence.brief.quality.insufficient",
+ "advancedIntelligence.brief.quality.limited",
+ "advancedIntelligence.brief.quality.sufficient",
"annotation.add",
"annotation.addTitle",
"annotation.cat.custom",
@@ -61743,53 +61652,10 @@
"annotations.hide",
"annotations.markerRow",
"annotations.show",
- "anomaly.aiBaseline.badge",
- "anomaly.aiBaseline.description",
- "anomaly.aiBaseline.generateButton",
- "anomaly.aiBaseline.title",
- "anomaly.aiExplanation.badge",
- "anomaly.aiExplanation.description",
- "anomaly.aiExplanation.emptyHint",
- "anomaly.aiExplanation.generateButton",
- "anomaly.aiExplanation.title",
- "automations.builder.aiBuilder.badge",
- "automations.builder.aiBuilder.description",
- "automations.builder.aiBuilder.draftButton",
- "automations.builder.aiBuilder.inputLabel",
- "automations.builder.aiBuilder.noPrompt",
- "automations.builder.aiBuilder.noVehicle",
- "automations.builder.aiBuilder.placeholder",
- "automations.builder.aiBuilder.title",
- "automations.builder.aiGeofenceAware.actionsLabel",
- "automations.builder.aiGeofenceAware.applyButton",
- "automations.builder.aiGeofenceAware.badge",
- "automations.builder.aiGeofenceAware.conditionsLabel",
- "automations.builder.aiGeofenceAware.description",
- "automations.builder.aiGeofenceAware.placeholder",
- "automations.builder.aiGeofenceAware.promptAria",
- "automations.builder.aiGeofenceAware.proposalLabel",
- "automations.builder.aiGeofenceAware.rejectedLabel",
- "automations.builder.aiGeofenceAware.suggestButton",
- "automations.builder.aiGeofenceAware.title",
- "automations.builder.aiGeofenceAware.triggersLabel",
- "automations.builder.aiGeofenceAware.unnamed",
- "automations.builder.signals.batteryLevel",
- "automations.builder.signals.insideTemp",
- "automations.builder.signals.isCharging",
- "automations.builder.signals.isClimateOn",
- "automations.builder.signals.isLocked",
- "automations.builder.signals.outsideTemp",
- "automations.builder.signals.sentryMode",
- "automations.builder.signals.speed",
- "automations.builder.signals.state",
"avatar.statusIdle",
"avatar.statusOffline",
"avatar.statusOnline",
"avatar.unknown",
- "battery.aiNarrative.badge",
- "battery.aiNarrative.description",
- "battery.aiNarrative.generateButton",
- "battery.aiNarrative.title",
"battery.delta.aria",
"battery.delta.unknown",
"bulk.clear",
@@ -61807,7 +61673,6 @@
"calculationDetails.noExclusions",
"calculationDetails.period",
"calculationDetails.provenance",
- "calculationDetails.source",
"calculationDetails.sources",
"calculationDetails.title",
"calculationDetails.unavailable",
@@ -61826,33 +61691,10 @@
"changelog.openModal",
"changelog.unseenAria",
"changelog.unseenHint",
- "chargePlanner.aiAgent.badge",
- "chargePlanner.aiAgent.departureAssumption",
- "chargePlanner.aiAgent.description",
- "chargePlanner.aiAgent.emptyHint",
- "chargePlanner.aiAgent.generateButton",
- "chargePlanner.aiAgent.title",
- "chargePlanner.invalidDepartBy",
- "charging.aiClustering.badge",
- "charging.aiClustering.emptyHint",
- "charging.aiClustering.generateButton",
- "charging.aiClustering.independentDescription",
- "charging.aiClustering.title",
- "charging.aiMlClustering.badge",
- "charging.aiMlClustering.generateButton",
- "charging.aiMlClustering.independentDescription",
- "charging.aiMlClustering.noVehicleHint",
- "charging.aiMlClustering.title",
- "charging.detail.aiDiagnosis.badge",
- "charging.detail.aiDiagnosis.description",
- "charging.detail.aiDiagnosis.emptyHint",
- "charging.detail.aiDiagnosis.generateButton",
- "charging.detail.aiDiagnosis.title",
"chart.a11y.fallbackTableLabel",
"chart.a11y.metricSelector",
"chart.a11y.summary",
"chart.col.date",
- "chart.col.time",
"chart.col.value",
"chart.export.copy",
"chart.export.copyFailed",
@@ -61870,20 +61712,12 @@
"chart.noDataDescription",
"chart.sampling.a11yDisclosure",
"chart.sampling.disclosure",
- "climate.aiPreheatPrecool.badge",
- "climate.aiPreheatPrecool.description",
- "climate.aiPreheatPrecool.emptyHint",
- "climate.aiPreheatPrecool.generateButton",
- "climate.aiPreheatPrecool.title",
"combobox.clearAria",
"combobox.closeListAria",
"combobox.loading",
- "combobox.maxReached",
"combobox.moreHidden",
"combobox.noResults",
"combobox.openListAria",
- "combobox.removeChip",
- "combobox.removedChip",
"combobox.resultsCount",
"combobox.resultsCountOne",
"common.actions",
@@ -62046,13 +61880,10 @@
"common.wakeUp",
"common.yes",
"common.yesterday",
- "compare.aiNarrative.badge",
- "compare.aiNarrative.description",
- "compare.aiNarrative.generateButton",
- "compare.aiNarrative.noVehicleHint",
- "compare.aiNarrative.title",
"compat.banner.body",
"compat.banner.title",
+ "confirm.removeDraftRate.message",
+ "confirm.removeDraftRate.title",
"confirm.silence.checkbox",
"consent.banner.accept",
"consent.banner.body",
@@ -62066,15 +61897,6 @@
"consent.category.essential.body",
"consent.category.essential.title",
"contextMenu.menuLabel",
- "costAnalysis.aiNarrative.badge",
- "costAnalysis.aiNarrative.description",
- "costAnalysis.aiNarrative.generateButton",
- "costAnalysis.aiNarrative.title",
- "dashboard.grid.positionHeading",
- "dataRepair.aiSuggestions.badge",
- "dataRepair.aiSuggestions.button",
- "dataRepair.aiSuggestions.description",
- "dataRepair.aiSuggestions.title",
"dataSources.partialMessage",
"dataSources.retry",
"dataSources.staleMessage",
@@ -62118,33 +61940,6 @@
"dataUnavailable.vehicleOffline.title",
"dataUnavailable.vehicleOffline.whatToDo",
"dataUnavailable.whatToDo",
- "date.preset.all",
- "date.preset.label",
- "date.preset.last1y",
- "date.preset.last24h",
- "date.preset.last30",
- "date.preset.last6h",
- "date.preset.last7",
- "date.preset.last90",
- "date.preset.lastMonth",
- "date.preset.live",
- "date.preset.mtd",
- "date.preset.qtd",
- "date.preset.today",
- "date.preset.yesterday",
- "date.preset.ytd",
- "date.range.apply",
- "date.range.cancel",
- "date.range.compare",
- "date.range.end",
- "date.range.loadingCalendar",
- "date.range.newRange",
- "date.range.pickRange",
- "date.range.popoverLabel",
- "date.range.start",
- "date.range.summaryDays_one",
- "date.range.summaryDays_other",
- "date.range.trigger",
"delta.noComparison",
"delta.title",
"demoData.detail",
@@ -62264,21 +62059,6 @@
"draft.restoredItem",
"draft.unknownTime",
"draft.useDraft",
- "driveDetail.aiCoaching.badge",
- "driveDetail.aiCoaching.description",
- "driveDetail.aiCoaching.generateButton",
- "driveDetail.aiCoaching.title",
- "driveDetail.aiSpeedProfile.badge",
- "driveDetail.aiSpeedProfile.description",
- "driveDetail.aiSpeedProfile.generateButton",
- "driveDetail.aiSpeedProfile.title",
- "driveDetail.report.telemetry",
- "drives.aiSearch.badge",
- "drives.aiSearch.description",
- "drives.aiSearch.inputLabel",
- "drives.aiSearch.placeholder",
- "drives.aiSearch.searchButton",
- "drives.aiSearch.title",
"editConflict.banner.body",
"editConflict.banner.bodyWithLabel",
"editConflict.banner.switchHint",
@@ -62307,6 +62087,7 @@
"emptyState.signals.live.meaning",
"emptyState.vehicles.list.likelyCause",
"emptyState.vehicles.list.meaning",
+ "energyFlow.state.pausedTitle",
"entityContext.title",
"error.forbidden.message",
"error.forbidden.title",
@@ -62383,40 +62164,10 @@
"export.types.drives",
"export.types.importCharging",
"export.types.importDrives",
- "exports.aiRedaction.badge",
- "exports.aiRedaction.button",
- "exports.aiRedaction.description",
- "exports.aiRedaction.exportType.account",
- "exports.aiRedaction.exportType.analytics",
- "exports.aiRedaction.exportType.backup",
- "exports.aiRedaction.exportType.charging",
- "exports.aiRedaction.exportType.drives",
- "exports.aiRedaction.exportType.trips",
- "exports.aiRedaction.exportTypeLabel",
- "exports.aiRedaction.exportTypePlaceholder",
- "exports.aiRedaction.noTypeHint",
- "exports.aiRedaction.title",
"feedback.statSkeleton.loading",
- "feedbackTriage.aiAdvisor.badge",
- "feedbackTriage.aiAdvisor.button",
- "feedbackTriage.aiAdvisor.description",
- "feedbackTriage.aiAdvisor.emptyHint",
- "feedbackTriage.aiAdvisor.title",
"filter.pending",
- "filters.activeLabel",
- "filters.clearAll",
- "filters.clearedAll",
- "filters.moreCount",
- "filters.moreLabel",
- "filters.removeAria",
- "filters.removed",
- "filters.sheetActiveCount",
- "filters.sheetDone",
- "filters.sheetTitle",
- "filters.sheetTrigger",
+ "fleetOps.workOrderDialog.costMinor",
"form.required",
- "form.validation.summaryTitleMany",
- "form.validation.summaryTitleOne",
"forms.discard",
"forms.keepEditing",
"forms.unsavedTitle",
@@ -62457,16 +62208,8 @@
"fsm.typeOption.telemetryConnection",
"fsm.typeOption.vehicle",
"gas.pollTriggered",
- "geofences.aiSuggest.applyButton",
- "geofences.aiSuggest.badge",
- "geofences.aiSuggest.currentLabel",
- "geofences.aiSuggest.description",
- "geofences.aiSuggest.proposalLabel",
- "geofences.aiSuggest.radiusLabel",
- "geofences.aiSuggest.rejectedLabel",
- "geofences.aiSuggest.suggestButton",
- "geofences.aiSuggest.title",
- "geofences.aiSuggest.unnamed",
+ "geofences.validation.latitudeRange",
+ "geofences.validation.longitudeRange",
"global.loading",
"glossary.degradation.howMeasured",
"glossary.degradation.term",
@@ -62485,36 +62228,11 @@
"glossary.stateOfHealth.howMeasured",
"glossary.stateOfHealth.term",
"glossary.tooltipLabel",
- "helix.ariaLabel",
- "helix.askHelix",
- "helix.badge",
- "helix.errorLabel",
- "helix.evidence.gathering",
- "helix.evidence.limited",
- "helix.evidence.reading",
- "helix.evidence.successful",
- "helix.evidence.title",
- "helix.evidence.unavailable",
- "helix.thinkingButtonLabel",
- "helix.thinkingStatusLabel",
- "helix.tools.batteryStatus",
- "helix.tools.vehicleLocation",
- "helix.tools.weeklyDigest",
- "helix.tooltip",
- "help.aiHelp.askButton",
- "help.aiHelp.badge",
- "help.aiHelp.description",
- "help.aiHelp.inputLabel",
- "help.aiHelp.placeholder",
- "help.aiHelp.title",
"help.battery.degradationRate",
"help.battery.soh",
"help.feedback",
"help.feedbackLabel",
"help.lifetime.avgEfficiency",
- "help.replay.battery",
- "help.replay.power",
- "help.replay.range",
"help.shortcuts",
"help.shortcutsLabel",
"help.signal.stale",
@@ -62538,137 +62256,6 @@
"impersonation.banner.title",
"impersonation.toast.ended",
"impersonation.toast.started",
- "incidentTimeline.aiSummary.badge",
- "incidentTimeline.aiSummary.button",
- "incidentTimeline.aiSummary.description",
- "incidentTimeline.aiSummary.title",
- "journey.action.cancel",
- "journey.action.plan",
- "journey.arrival.adjusted",
- "journey.arrival.empty",
- "journey.arrival.eta",
- "journey.arrival.loadFailed",
- "journey.arrival.loading",
- "journey.arrival.moving",
- "journey.arrival.parked",
- "journey.arrival.shortfall",
- "journey.arrival.title",
- "journey.checklist.empty",
- "journey.checklist.loadFailed",
- "journey.checklist.loading",
- "journey.checklist.refresh",
- "journey.checklist.refreshFailed",
- "journey.checklist.run",
- "journey.checklist.runAt",
- "journey.checklist.title",
- "journey.col.actions",
- "journey.col.journey",
- "journey.col.plan",
- "journey.col.status",
- "journey.col.updated",
- "journey.departure.allWarn",
- "journey.departure.hours",
- "journey.departure.leaveAt",
- "journey.departure.loadFailed",
- "journey.departure.loading",
- "journey.departure.noOrigin",
- "journey.departure.slots",
- "journey.departure.socNow",
- "journey.departure.title",
- "journey.departure.uncovered",
- "journey.departure.window",
- "journey.detail.empty",
- "journey.detail.loadFailed",
- "journey.detail.loading",
- "journey.detail.title",
- "journey.filter.all",
- "journey.filter.status",
- "journey.form.createFailed",
- "journey.form.destination",
- "journey.form.name",
- "journey.form.namePlaceholder",
- "journey.form.origin",
- "journey.form.submit",
- "journey.list.empty",
- "journey.list.loadFailed",
- "journey.list.loading",
- "journey.list.subtitle",
- "journey.list.title",
- "journey.live.checkIn",
- "journey.live.empty",
- "journey.live.fixes",
- "journey.live.have",
- "journey.live.lastFix",
- "journey.live.loadFailed",
- "journey.live.loading",
- "journey.live.need",
- "journey.live.nextStop",
- "journey.live.noNextStop",
- "journey.live.progress",
- "journey.live.queued",
- "journey.live.range",
- "journey.live.remaining",
- "journey.live.title",
- "journey.live.wait",
- "journey.noRoute",
- "journey.nudge.blocker",
- "journey.nudge.empty",
- "journey.nudge.loadFailed",
- "journey.nudge.loading",
- "journey.nudge.slot",
- "journey.nudge.title",
- "journey.open",
- "journey.page.navTitle",
- "journey.page.subtitle",
- "journey.page.title",
- "journey.planVersion",
- "journey.plans.empty",
- "journey.plans.title",
- "journey.replan.empty",
- "journey.replan.loadFailed",
- "journey.replan.loading",
- "journey.replan.offBy",
- "journey.replan.rescore",
- "journey.replan.rescoreFailed",
- "journey.replan.scoring",
- "journey.replan.title",
- "journey.report.checklist",
- "journey.report.detour",
- "journey.report.distance",
- "journey.report.duration",
- "journey.report.empty",
- "journey.report.fixes",
- "journey.report.loadFailed",
- "journey.report.loading",
- "journey.report.readyCount",
- "journey.report.replanCount",
- "journey.report.replans",
- "journey.report.times",
- "journey.report.title",
- "journey.report.usually",
- "journey.report.usuallyTimes",
- "journey.scoring.arrival",
- "journey.scoring.candidates",
- "journey.scoring.col.corridor",
- "journey.scoring.col.health",
- "journey.scoring.col.price",
- "journey.scoring.col.score",
- "journey.scoring.col.stop",
- "journey.scoring.col.wait",
- "journey.scoring.energy",
- "journey.scoring.loadFailed",
- "journey.scoring.loadingSites",
- "journey.scoring.min",
- "journey.scoring.noCoords",
- "journey.scoring.noSites",
- "journey.scoring.openHistory",
- "journey.scoring.scoreFailed",
- "journey.scoring.scoreFor",
- "journey.scoring.scoring",
- "journey.scoring.submit",
- "journey.scoring.title",
- "journey.scoring.visits",
- "journey.scoring.winner",
"lifetime.achievementBadge",
"lifetime.achievementNames.century",
"lifetime.achievementNames.earth-orbit",
@@ -62687,14 +62274,6 @@
"lifetime.achievementNames.thousand-saved",
"lifetime.achievementNames.ton-co2",
"lifetime.achievementNames.tree-planter",
- "lifetime.aiQA.askButton",
- "lifetime.aiQA.badge",
- "lifetime.aiQA.description",
- "lifetime.aiQA.inputLabel",
- "lifetime.aiQA.noQuestion",
- "lifetime.aiQA.noVehicle",
- "lifetime.aiQA.placeholder",
- "lifetime.aiQA.title",
"lifetime.unlocked",
"lightbox.close",
"lightbox.counter",
@@ -62722,107 +62301,12 @@
"live.staleBanner.message",
"live.staleBanner.title",
"live.unknown",
- "liveLogs.aiSummary.badge",
- "liveLogs.aiSummary.button",
- "liveLogs.aiSummary.description",
- "liveLogs.aiSummary.emptyHint",
- "liveLogs.aiSummary.title",
- "locations.aiAutoName.applyButton",
- "locations.aiAutoName.badge",
- "locations.aiAutoName.currentLabel",
- "locations.aiAutoName.description",
- "locations.aiAutoName.proposalLabel",
- "locations.aiAutoName.rejectedLabel",
- "locations.aiAutoName.suggestButton",
- "locations.aiAutoName.title",
- "maintenance.aiPredictive.badge",
- "maintenance.aiPredictive.button",
- "maintenance.aiPredictive.description",
- "maintenance.aiPredictive.emptyHint",
- "maintenance.aiPredictive.title",
- "maps.animatedMarker.label",
- "maps.layerSwitcher.dark",
- "maps.layerSwitcher.label",
- "maps.layerSwitcher.satellite",
- "maps.layerSwitcher.streets",
- "maps.layerSwitcher.terrain",
- "maps.routePlayback.empty",
- "maps.routePlayback.mapLabel",
"mask.copy",
"mask.hide",
"mask.reveal",
"metricCard.moreInfoAbout",
- "mobile.refresh.pull",
- "mobile.refresh.refreshing",
- "mobile.refresh.release",
+ "milestones.chart.driveCount",
"modal.close",
- "mqttSseInspector.aiExplainer.badge",
- "mqttSseInspector.aiExplainer.button",
- "mqttSseInspector.aiExplainer.description",
- "mqttSseInspector.aiExplainer.emptyHint",
- "mqttSseInspector.aiExplainer.title",
- "nav.geofences",
- "notifications.alertStudio.aiBuilder.badge",
- "notifications.alertStudio.aiBuilder.description",
- "notifications.alertStudio.aiBuilder.draftButton",
- "notifications.alertStudio.aiBuilder.emptyHint",
- "notifications.alertStudio.aiBuilder.inputLabel",
- "notifications.alertStudio.aiBuilder.placeholder",
- "notifications.alertStudio.aiBuilder.title",
- "notifications.alertStudio.aiConflicts.badge",
- "notifications.alertStudio.aiConflicts.description",
- "notifications.alertStudio.aiConflicts.detectButton",
- "notifications.alertStudio.aiConflicts.emptyMessage",
- "notifications.alertStudio.aiConflicts.flag.cooldownMismatch",
- "notifications.alertStudio.aiConflicts.flag.severityMismatch",
- "notifications.alertStudio.aiConflicts.flag.subsumes",
- "notifications.alertStudio.aiConflicts.flag.triggerModeMismatch",
- "notifications.alertStudio.aiConflicts.kind.overlapping_threshold",
- "notifications.alertStudio.aiConflicts.kind.redundant_duplicate",
- "notifications.alertStudio.aiConflicts.listLabel",
- "notifications.alertStudio.aiConflicts.reviewButton",
- "notifications.alertStudio.aiConflicts.ruleLabel",
- "notifications.alertStudio.aiConflicts.title",
- "notifications.alertStudio.aiTemplate.applyButton",
- "notifications.alertStudio.aiTemplate.badge",
- "notifications.alertStudio.aiTemplate.description",
- "notifications.alertStudio.aiTemplate.emptyHint",
- "notifications.alertStudio.aiTemplate.previewLabel",
- "notifications.alertStudio.aiTemplate.previewPlaceholders",
- "notifications.alertStudio.aiTemplate.suggestButton",
- "notifications.alertStudio.aiTemplate.title",
- "notifications.alertStudio.aiTuning.applyButton",
- "notifications.alertStudio.aiTuning.badge",
- "notifications.alertStudio.aiTuning.description",
- "notifications.alertStudio.aiTuning.previewLabel",
- "notifications.alertStudio.aiTuning.suggestButton",
- "notifications.alertStudio.aiTuning.title",
- "notifications.alertStudio.editor.vehiclesAllOption",
- "notifications.alertStudio.editor.vehiclesEmptyFleetHelp",
- "notifications.alertStudio.editor.vehiclesSummaryAll",
- "notifications.alertStudio.editor.vehiclesSummaryCount",
- "notifications.alertStudio.editor.vehiclesSummaryNone",
- "notifications.alertStudio.editor.vehiclesSummaryOne",
- "notifications.alertStudio.editor.vehiclesSummaryPartial",
- "notifications.alertStudio.editor.vehiclesUnknownBadge",
- "notifications.alertStudio.editor.vehiclesUnknownLabel",
- "notifications.inbox.aiCategorize.applyButton",
- "notifications.inbox.aiCategorize.badge",
- "notifications.inbox.aiCategorize.description",
- "notifications.inbox.aiCategorize.previewLabel",
- "notifications.inbox.aiCategorize.suggestButton",
- "notifications.inbox.aiCategorize.title",
- "notifications.quietHours.aiSuggestion.applyButton",
- "notifications.quietHours.aiSuggestion.badge",
- "notifications.quietHours.aiSuggestion.button",
- "notifications.quietHours.aiSuggestion.description",
- "notifications.quietHours.aiSuggestion.previewBypass",
- "notifications.quietHours.aiSuggestion.previewExistingCount",
- "notifications.quietHours.aiSuggestion.previewInsufficientHistory",
- "notifications.quietHours.aiSuggestion.previewLabel",
- "notifications.quietHours.aiSuggestion.previewWeekdays",
- "notifications.quietHours.aiSuggestion.previewWindow",
- "notifications.quietHours.aiSuggestion.title",
"operationalMode.asOf.description",
"operationalMode.asOf.label",
"operationalMode.asOf.shortLabel",
@@ -62868,592 +62352,1370 @@
"operations.noMetricValues",
"operations.reviewAll",
"operations.reviewDetails",
- "pagination.currentPage",
- "pagination.first",
- "pagination.go",
- "pagination.goToPage",
- "pagination.invalidPage",
- "pagination.last",
- "pagination.next",
- "pagination.page",
- "pagination.pageSize",
- "pagination.previous",
- "pagination.rows",
- "pagination.rowsOption",
- "pagination.showing",
- "palette.placeholder",
- "pin.pin",
- "pin.pinned",
- "pin.unpin",
- "powerDashboards.aiDrafter.applyButton",
- "powerDashboards.aiDrafter.applyTooltip",
- "powerDashboards.aiDrafter.badge",
- "powerDashboards.aiDrafter.button",
- "powerDashboards.aiDrafter.description",
- "powerDashboards.aiDrafter.promptLabel",
- "powerDashboards.aiDrafter.promptPlaceholder",
- "powerDashboards.aiDrafter.title",
- "powerGrafana.aiDrafter.applyButton",
- "powerGrafana.aiDrafter.applyTooltip",
- "powerGrafana.aiDrafter.badge",
- "powerGrafana.aiDrafter.button",
- "powerGrafana.aiDrafter.description",
- "powerGrafana.aiDrafter.previewDatasource",
- "powerGrafana.aiDrafter.previewLabel",
- "powerGrafana.aiDrafter.previewTables",
- "powerGrafana.aiDrafter.previewTargets",
- "powerGrafana.aiDrafter.previewType",
- "powerGrafana.aiDrafter.previewUntitled",
- "powerGrafana.aiDrafter.promptLabel",
- "powerGrafana.aiDrafter.promptPlaceholder",
- "powerGrafana.aiDrafter.title",
- "powerSql.aiDrafter.applyButton",
- "powerSql.aiDrafter.applyTooltip",
- "powerSql.aiDrafter.badge",
- "powerSql.aiDrafter.button",
- "powerSql.aiDrafter.description",
- "powerSql.aiDrafter.noNarration",
- "powerSql.aiDrafter.noTypedDraft",
- "powerSql.aiDrafter.previewLabel",
- "powerSql.aiDrafter.promptLabel",
- "powerSql.aiDrafter.promptPlaceholder",
- "powerSql.aiDrafter.title",
- "presentation.kiosk.help",
- "presentation.kiosk.open",
- "presentation.report.copyHelp",
- "presentation.report.copyLink",
- "presentation.report.help",
- "presentation.report.linkCopied",
- "presentation.report.linkError",
- "presentation.report.open",
- "problemReport.context.appVersion",
- "problemReport.context.browser",
- "problemReport.context.page",
- "problemReport.context.pageNote",
- "problemReport.context.title",
- "problemReport.form.description",
- "problemReport.form.descriptionPlaceholder",
- "problemReport.form.descriptionTooShort",
- "problemReport.form.hidePreview",
- "problemReport.form.includeDiagnostics",
- "problemReport.form.includeDiagnosticsHint",
- "problemReport.form.showPreview",
- "problemReport.form.submit",
- "problemReport.form.submitting",
- "problemReport.form.title",
- "problemReport.form.titlePlaceholder",
- "problemReport.intro",
- "problemReport.policy.consoleTail",
- "problemReport.policy.files",
- "problemReport.policy.screenshots",
- "problemReport.policy.userEmail",
- "problemReport.submitError",
- "problemReport.title",
- "productPreferences.persona.label",
- "productPreferences.personas.administrator.description",
- "productPreferences.personas.administrator.label",
- "productPreferences.personas.analyst.description",
- "productPreferences.personas.analyst.label",
- "productPreferences.personas.fleetOperator.description",
- "productPreferences.personas.fleetOperator.label",
- "productPreferences.personas.owner.description",
- "productPreferences.personas.owner.label",
- "progressRing.ariaLabel",
- "provenance.cached",
- "provenance.historical",
- "provenance.inferred",
- "provenance.live",
- "provenance.repaired",
- "provenance.unknown",
- "pwa.cache.cachedAt",
- "pwa.cache.cachedRange",
- "pwa.cache.cachedUnknown",
- "pwa.cache.offlineNoData",
- "pwa.cache.regionLabel",
- "pwa.later",
- "pwa.lowBandwidth.auto",
- "pwa.lowBandwidth.effectsOff",
- "pwa.lowBandwidth.effectsOn",
- "pwa.lowBandwidth.heading",
- "pwa.lowBandwidth.label",
- "pwa.lowBandwidth.off",
- "pwa.lowBandwidth.on",
- "pwa.lowBandwidth.statusNetwork",
- "pwa.lowBandwidth.statusOff",
- "pwa.lowBandwidth.statusUser",
- "pwa.offline.banner",
- "pwa.offline.title",
- "pwa.reloadNow",
- "pwa.update.applying",
- "pwa.update.availableBody",
- "pwa.update.availableTitle",
- "pwa.update.requiredBody",
- "pwa.update.requiredTitle",
- "pwa.update.runningLabel",
- "pwa.update.serverLabel",
- "pwa.update.unsavedBlocked",
- "quietHours.severity.critical",
- "quietHours.severity.info",
- "quietHours.severity.warn",
- "range.aiPredict.badge",
- "range.aiPredict.description",
- "range.aiPredict.generateButton",
- "range.aiPredict.title",
- "ratelimit.banner",
- "ratelimit.retry",
- "rbac.toasts.saved",
- "recentPages.justNow",
- "recentPages.shortDay",
- "recentPages.shortHour",
- "recentPages.shortMinute",
- "replay.backToDrive",
- "replay.controls.pause",
- "replay.controls.play",
- "replay.controls.progress",
- "replay.controls.reset",
- "replay.controls.restart",
- "replay.controls.speed",
- "replay.controls.stop",
- "replay.currentStats",
- "replay.drive",
- "replay.elevation.aria",
- "replay.elevation.gainLoss",
- "replay.elevation.label",
- "replay.elevation.noData",
- "replay.elevation.title",
- "replay.map.ariaLabel",
- "replay.map.noPositions",
- "replay.map.section",
- "replay.map.stationaryRouteBody",
- "replay.map.stationaryRouteTitle",
- "replay.markers.atPercent",
- "replay.markers.chargeStart",
- "replay.markers.chargeStop",
- "replay.markers.fastSegment",
- "replay.markers.lowSoc",
- "replay.markers.regenPeak",
- "replay.markers.start",
- "replay.markers.stop",
- "replay.noGps",
- "replay.overview.clusterCount",
- "replay.overview.clusterCount_one",
- "replay.overview.clusterCount_other",
- "replay.overview.label",
- "replay.overview.positionUnavailable",
- "replay.refresh",
- "replay.shortcuts.end",
- "replay.shortcuts.frame",
- "replay.shortcuts.help",
- "replay.shortcuts.nextFrame",
- "replay.shortcuts.pause",
- "replay.shortcuts.percent",
- "replay.shortcuts.play",
- "replay.shortcuts.playPause",
- "replay.shortcuts.prevFrame",
- "replay.shortcuts.seekBack",
- "replay.shortcuts.seekForward",
- "replay.shortcuts.skip10",
- "replay.shortcuts.skip5",
- "replay.shortcuts.speed",
- "replay.shortcuts.speedDown",
- "replay.shortcuts.speedUp",
- "replay.shortcuts.start",
- "replay.shortcuts.startEnd",
- "replay.shortcuts.title",
- "replay.sources",
- "replay.stat.battery",
- "replay.stat.elevation",
- "replay.stat.power",
- "replay.stat.range",
- "replay.stat.speed",
- "replay.stat.temp",
- "replay.summary.avgSpeed",
- "replay.summary.battery",
- "replay.summary.distance",
- "replay.summary.duration",
- "replay.summary.efficiency",
- "replay.summary.elevGain",
- "replay.summary.elevLoss",
- "replay.summary.maxSpeed",
- "replay.summary.title",
- "replay.timeline.aria",
- "replay.timeline.noData",
- "replay.timeline.power",
- "replay.timeline.section",
- "replay.timeline.speed",
- "replay.timeline.subtitle",
- "replay.timeline.title",
- "replay.title",
- "requiresAuth.title",
- "route.noLocationData",
- "route.roundTrip",
- "routeEfficiency.aiSuggestions.badge",
- "routeEfficiency.aiSuggestions.description",
- "routeEfficiency.aiSuggestions.emptyHint",
- "routeEfficiency.aiSuggestions.generateButton",
- "routeEfficiency.aiSuggestions.title",
- "routes.aPIKeys",
- "routes.actionCenter",
- "routes.activeSessions",
- "routes.activityTimeline",
- "routes.analytics",
- "routes.anomalyDashboard",
- "routes.apiLogs",
- "routes.apiPlayground",
- "routes.arrivalReliability",
- "routes.auditLog",
- "routes.automationBuilder",
- "routes.automationHistory",
- "routes.automationList",
- "routes.automations",
- "routes.backupRestore",
- "routes.batteryCare",
- "routes.batteryCells",
- "routes.batteryDegradation",
- "routes.batteryHealth",
- "routes.batteryPassport",
- "routes.behavioralSentinel",
- "routes.cabinThermal",
- "routes.carbonIntelligence",
- "routes.causalExperimentLab",
- "routes.chargeAdvisor",
- "routes.chargeDepartureAlignment",
- "routes.chargeDetail",
- "routes.chargeInterruption",
- "routes.chargerHealth",
- "routes.chargerResilience",
- "routes.charging",
- "routes.chargingCurve",
- "routes.chargingForensics",
- "routes.chargingHeatmap",
- "routes.chargingReconciliation",
- "routes.chargingSiteTwin",
- "routes.chargingThermalTax",
- "routes.chatbot",
- "routes.climateControl",
- "routes.coldStart",
- "routes.comfortConsistency",
- "routes.commandHistory",
- "routes.commandReliability",
- "routes.commands",
- "routes.componentSurvival",
- "routes.connect",
- "routes.consumablesLifecycle",
- "routes.costAnalysis",
- "routes.cycleStress",
- "routes.dBHealthDashboard",
- "routes.dLQInspector",
- "routes.dashboard",
- "routes.dashcamIntelligence",
- "routes.dataExport",
- "routes.dataGovernance",
- "routes.dataQuality",
- "routes.dataRepair",
- "routes.dayLog",
- "routes.departureForecast",
- "routes.destinationTransitions",
- "routes.devTools",
- "routes.digitalTwin",
- "routes.diskForecast",
- "routes.driveArchetypes",
- "routes.driveCalendar",
- "routes.driveCompare",
- "routes.driveDNA",
- "routes.driveDetail",
- "routes.driveScore",
- "routes.driverAttribution",
- "routes.drives",
- "routes.drivetrainHealth",
- "routes.drivingDynamics",
- "routes.drivingRhythm",
- "routes.efficiency",
- "routes.efficiencyTarget",
- "routes.emergencyResilience",
- "routes.energy",
- "routes.energyFlow",
- "routes.energyLedger",
- "routes.energyProducts",
- "routes.explore",
- "routes.explorer",
- "routes.exports",
- "routes.fSDInsights",
- "routes.featureFlagsAdmin",
- "routes.federatedLearningStudio",
- "routes.feedbackQueue",
- "routes.firmwareCanary",
- "routes.firmwareImpact",
- "routes.fleetAPI",
- "routes.fleetCompare",
- "routes.fleetOperations",
- "routes.fleetSetup",
- "routes.fleetTelemetryCoverage",
- "routes.gDPRExport",
- "routes.gasPriceAutoPoll",
- "routes.geofences",
- "routes.glance",
- "routes.guardMode",
- "routes.helix",
- "routes.help",
- "routes.hvacCycling",
- "routes.incidentTimeline",
- "routes.ingestXRay",
- "routes.insuranceTelematics",
- "routes.intelligencePackMarketplace",
- "routes.journeyAssurance",
- "routes.journeyFragmentation",
- "routes.journeys",
- "routes.jurisdictionCompliance",
- "routes.layoutReference",
- "routes.legacyAlertRulesRedirect",
- "routes.legacyAlertStudioRedirect",
- "routes.lifetimeStats",
- "routes.liveMap",
- "routes.liveSignalInspector",
- "routes.liveSignalMonitor",
- "routes.locations",
- "routes.mQTTInspector",
- "routes.maintenance",
- "routes.mediaPlayer",
- "routes.mileage",
- "routes.mileageBudget",
- "routes.milestones",
- "routes.mobileGridReference",
- "routes.modelTrust",
- "routes.myActivity",
- "routes.navigationRoute",
- "routes.notificationHealth",
- "routes.notificationsArchived",
- "routes.notificationsAudit",
- "routes.notificationsBrowser",
- "routes.notificationsChannels",
- "routes.notificationsInbox",
- "routes.notificationsPacks",
- "routes.notificationsQuietHours",
- "routes.notificationsRules",
- "routes.notificationsStudio",
- "routes.onboarding",
- "routes.outageAutobiography",
- "routes.packCapacity",
- "routes.parkingAnalytics",
- "routes.periodCompare",
- "routes.physicsBlackBox",
- "routes.physicsCarKeptLiving",
- "routes.physicsChargePort",
- "routes.physicsClocks",
- "routes.physicsCockpit",
- "routes.physicsContradictions",
- "routes.physicsDictionary",
- "routes.physicsFirmwareEpochs",
- "routes.physicsLedger",
- "routes.physicsLifeTape",
- "routes.physicsLogbook",
- "routes.physicsMeters",
- "routes.physicsModes",
- "routes.physicsNervousSystem",
- "routes.physicsRange",
- "routes.physicsUnknown",
- "routes.physicsVault",
- "routes.powerDashboards",
- "routes.powerFlowDashboard",
- "routes.powerGrafanaPanel",
- "routes.powerSqlPlayground",
- "routes.powershare",
- "routes.preconditioningEffectiveness",
- "routes.privacy",
- "routes.privacyBenchmarks",
- "routes.projectedRange",
- "routes.quickStats",
- "routes.rangeBuffer",
- "routes.redisSignalViewer",
- "routes.regenEfficiency",
- "routes.remainingUsefulLife",
- "routes.roadHazardMesh",
- "routes.roadmap",
- "routes.rootCauseIntelligence",
- "routes.routeEfficiency",
- "routes.safetySettings",
- "routes.safetySettingsPage",
- "routes.schemaDrift",
- "routes.scienceLab",
- "routes.search",
- "routes.seasonalEfficiency",
- "routes.secretRotation",
- "routes.securityAccess",
- "routes.segments",
- "routes.serviceEvidencePack",
- "routes.serviceIntelligence",
- "routes.settings",
- "routes.shareCard",
- "routes.sharedDrive",
- "routes.sharingTrips",
- "routes.signalChangePoints",
- "routes.signalCorrelation",
- "routes.signalDeadband",
- "routes.signalDiff",
- "routes.signalEntropy",
- "routes.signalExplorer",
- "routes.signalGapDetector",
- "routes.signalLogViewer",
- "routes.signalMutualInformation",
- "routes.signalTrend",
- "routes.signalsWorkspace",
- "routes.sleepEfficiency",
- "routes.slowQueries",
- "routes.smartCharge",
- "routes.softwareUpdates",
- "routes.speedProfile",
- "routes.speedSweetSpot",
- "routes.statReference",
- "routes.stateMachineDebugger",
- "routes.statistics",
- "routes.statusApiDocs",
- "routes.subscriptionROI",
- "routes.systemStatus",
- "routes.tCOOptimizer",
- "routes.tariffLab",
- "routes.temperatureImpact",
- "routes.teslaAccount",
- "routes.teslaApiUsage",
- "routes.teslaChargingHistory",
- "routes.teslaChargingSessions",
- "routes.teslaFeatureFlags",
- "routes.teslaOrders",
- "routes.teslaPhysics",
- "routes.teslaRegion",
- "routes.timeMachine",
- "routes.timeline",
- "routes.tireDifferentialDrift",
- "routes.tirePressure",
- "routes.tripDetail",
- "routes.tripLogbook",
- "routes.tripPlanner",
- "routes.tripReplay",
- "routes.trips",
- "routes.trueCostOwnership",
- "routes.twinLab",
- "routes.twoFactorAuth",
- "routes.utilization",
- "routes.vampireDrain",
- "routes.vehicleAccess",
- "routes.vehicleCost",
- "routes.vehicleDetail",
- "routes.vehicleManagement",
- "routes.vehicles",
- "routes.warrantyCommand",
- "routes.warrantyResaleVault",
- "routes.watchFace",
- "routes.weeklyDigest",
- "routes.whatIf",
- "routes.wholeHomeEnergy",
- "routes.yearReview",
- "runtimeHealth.affected",
- "runtimeHealth.components.database",
- "runtimeHealth.components.mqtt",
- "runtimeHealth.components.redis",
- "runtimeHealth.components.telemetry",
- "runtimeHealth.components.tesla_api",
- "runtimeHealth.components.worker",
- "runtimeHealth.configureAlerts",
- "runtimeHealth.historyAvailable",
- "runtimeHealth.systemStatus",
- "runtimeHealth.telemetryLastSeen",
- "runtimeHealth.title",
- "safetySettings.aiExplainer.badge",
- "safetySettings.aiExplainer.button",
- "safetySettings.aiExplainer.description",
- "safetySettings.aiExplainer.title",
- "savedViews.announceApplied",
- "savedViews.announceCleared",
- "savedViews.appliedBadge",
- "savedViews.clearApplied",
- "savedViews.defaultBadge",
- "savedViews.deleteConfirm",
- "savedViews.deleteTitle",
- "savedViews.empty",
- "savedViews.emptyQuery",
- "savedViews.error",
- "savedViews.loading",
- "savedViews.makeDefault",
- "savedViews.manage",
- "savedViews.name",
- "savedViews.namePlaceholder",
- "savedViews.pin",
- "savedViews.renamePrompt",
- "savedViews.saveCurrent",
- "savedViews.setDefault",
- "savedViews.title",
- "savedViews.unpin",
- "savedViews.unsetDefault",
- "score.aria",
- "search.aiSearch.badge",
- "search.aiSearch.description",
- "search.aiSearch.emptyHint",
- "search.aiSearch.inputLabel",
- "search.aiSearch.placeholder",
- "search.aiSearch.searchButton",
- "search.aiSearch.title",
- "search.history.clear",
- "search.history.removeAria",
- "search.history.title",
- "search.input.label",
- "serviceMode.banner.defaultDegraded",
- "serviceMode.banner.defaultMaintenance",
- "serviceMode.banner.degradedTitle",
- "serviceMode.banner.ended",
- "serviceMode.banner.endingNow",
- "serviceMode.banner.endsIn",
- "serviceMode.banner.maintenanceTitle",
- "sharing.aiTripPostcard.badge",
- "sharing.aiTripPostcard.button",
- "sharing.aiTripPostcard.description",
- "sharing.aiTripPostcard.noTripHint",
- "sharing.aiTripPostcard.title",
- "shortcuts.empty",
- "shortcuts.filter.all",
- "shortcuts.filter.global",
- "shortcuts.filter.label",
- "shortcuts.filter.page",
- "shortcuts.gotoPrompt",
- "shortcuts.groups.replay",
- "shortcuts.search",
- "shortcuts.title",
- "signalConfig.deselectAll",
- "signalConfig.deselectCategory",
- "signalConfig.deselectSignal",
- "signalConfig.footerAt10s",
- "signalConfig.footerAt500",
- "signalConfig.footerSelected",
- "signalConfig.intervalForSignal",
- "signalConfig.masterInterval",
- "signalConfig.masterIntervalLabel",
- "signalConfig.noMatches",
- "signalConfig.noSignals",
- "signalConfig.searchLabel",
- "signalConfig.searchPlaceholder",
- "signalConfig.selectAll",
- "signalConfig.selectCategory",
- "signalConfig.selectSignal",
- "signalConfig.selectedSummary",
- "signalConfig.setAll",
- "signalConfig.setCategoryInterval",
- "signalConfig.subscribeCount",
- "signalConfig.title",
- "signalExplorer.aiFilter.applyButton",
- "signalExplorer.aiFilter.applyTooltip",
- "signalExplorer.aiFilter.badge",
- "signalExplorer.aiFilter.button",
- "signalExplorer.aiFilter.description",
- "signalExplorer.aiFilter.promptLabel",
- "signalExplorer.aiFilter.promptPlaceholder",
- "signalExplorer.aiFilter.title",
- "slider.thumbMax",
- "slider.thumbMin",
- "smallMultiples.noData",
- "softwareUpdates.aiNarration.badge",
- "softwareUpdates.aiNarration.button",
- "softwareUpdates.aiNarration.description",
- "softwareUpdates.aiNarration.noVehicleHint",
- "softwareUpdates.aiNarration.title",
+ "ownership.action.cancel",
+ "ownership.action.edit",
+ "ownership.action.header",
+ "ownership.action.remove",
+ "ownership.action.save",
+ "ownership.brief.bounds",
+ "ownership.brief.boundsUnknown",
+ "ownership.brief.eyebrow",
+ "ownership.brief.freshnessUnknown",
+ "ownership.brief.loadedAt",
+ "ownership.brief.loading",
+ "ownership.brief.notComputed",
+ "ownership.brief.observedAt",
+ "ownership.brief.provenance",
+ "ownership.brief.refreshing",
+ "ownership.brief.retained",
+ "ownership.brief.returned",
+ "ownership.brief.selectionRequired",
+ "ownership.brief.unavailable",
+ "ownership.brief.window",
+ "ownership.compliance.apportion.empty",
+ "ownership.compliance.apportion.subtitle",
+ "ownership.compliance.apportion.title",
+ "ownership.compliance.brief.description",
+ "ownership.compliance.brief.recorded",
+ "ownership.compliance.brief.title",
+ "ownership.compliance.delete.message",
+ "ownership.compliance.delete.title",
+ "ownership.compliance.digest.body",
+ "ownership.compliance.digest.title",
+ "ownership.compliance.filing.charge",
+ "ownership.compliance.filing.digest",
+ "ownership.compliance.filing.distance",
+ "ownership.compliance.filing.energy",
+ "ownership.compliance.filing.period",
+ "ownership.compliance.filing.status",
+ "ownership.compliance.filingForm.end",
+ "ownership.compliance.filingForm.start",
+ "ownership.compliance.filingForm.submit",
+ "ownership.compliance.filings.add",
+ "ownership.compliance.filings.empty",
+ "ownership.compliance.filings.subtitle",
+ "ownership.compliance.filings.title",
+ "ownership.compliance.navTitle",
+ "ownership.compliance.notice.body",
+ "ownership.compliance.notice.title",
+ "ownership.compliance.rate.bbox",
+ "ownership.compliance.rate.code",
+ "ownership.compliance.rate.grid",
+ "ownership.compliance.rate.registration",
+ "ownership.compliance.rate.roadUsage",
+ "ownership.compliance.rateForm.code",
+ "ownership.compliance.rateForm.codeHint",
+ "ownership.compliance.rateForm.grid",
+ "ownership.compliance.rateForm.gridHint",
+ "ownership.compliance.rateForm.label",
+ "ownership.compliance.rateForm.maxLat",
+ "ownership.compliance.rateForm.maxLng",
+ "ownership.compliance.rateForm.minLat",
+ "ownership.compliance.rateForm.minLng",
+ "ownership.compliance.rateForm.registration",
+ "ownership.compliance.rateForm.roadUsage",
+ "ownership.compliance.rateForm.save",
+ "ownership.compliance.rates.add",
+ "ownership.compliance.rates.empty",
+ "ownership.compliance.rates.subtitle",
+ "ownership.compliance.rates.title",
+ "ownership.compliance.row.confidence",
+ "ownership.compliance.row.distance",
+ "ownership.compliance.row.drives",
+ "ownership.compliance.row.emissions",
+ "ownership.compliance.row.emissionsRate",
+ "ownership.compliance.row.energy",
+ "ownership.compliance.row.jurisdiction",
+ "ownership.compliance.row.liability",
+ "ownership.compliance.row.registration",
+ "ownership.compliance.row.roadUsage",
+ "ownership.compliance.stat.assigned",
+ "ownership.compliance.stat.distance",
+ "ownership.compliance.stat.drives",
+ "ownership.compliance.stat.emissions",
+ "ownership.compliance.stat.liability",
+ "ownership.compliance.stat.mixedCurrency",
+ "ownership.compliance.stat.periodSource",
+ "ownership.compliance.stat.roadUsage",
+ "ownership.compliance.stat.unassigned",
+ "ownership.compliance.stat.unknownCurrency",
+ "ownership.compliance.stat.unknownDrives",
+ "ownership.compliance.stat.unknownPeriod",
+ "ownership.compliance.subtitle",
+ "ownership.compliance.summary.title",
+ "ownership.compliance.title",
+ "ownership.compliance.unsupported.polygon",
+ "ownership.compliance.unsupported.submit",
+ "ownership.consumables.brief.scope",
+ "ownership.consumables.brief.title",
+ "ownership.consumables.card.adjusted",
+ "ownership.consumables.card.binding",
+ "ownership.consumables.card.harsh",
+ "ownership.consumables.card.health",
+ "ownership.consumables.card.history",
+ "ownership.consumables.card.multiplier",
+ "ownership.consumables.card.ofRated",
+ "ownership.consumables.card.remaining",
+ "ownership.consumables.card.replace",
+ "ownership.consumables.card.used",
+ "ownership.consumables.card.wearCost",
+ "ownership.consumables.delete.message",
+ "ownership.consumables.delete.title",
+ "ownership.consumables.econ.blended",
+ "ownership.consumables.econ.blendedHint",
+ "ownership.consumables.econ.odometer",
+ "ownership.consumables.econ.parts",
+ "ownership.consumables.economics.title",
+ "ownership.consumables.economicsBrief.description",
+ "ownership.consumables.economicsBrief.title",
+ "ownership.consumables.event.cost",
+ "ownership.consumables.event.kind",
+ "ownership.consumables.event.note",
+ "ownership.consumables.event.odometer",
+ "ownership.consumables.event.submit",
+ "ownership.consumables.eventKind.inspect",
+ "ownership.consumables.eventKind.note",
+ "ownership.consumables.eventKind.replace",
+ "ownership.consumables.eventKind.rotate",
+ "ownership.consumables.eventKind.service",
+ "ownership.consumables.form.category",
+ "ownership.consumables.form.cost",
+ "ownership.consumables.form.installed",
+ "ownership.consumables.form.label",
+ "ownership.consumables.form.notes",
+ "ownership.consumables.form.odometer",
+ "ownership.consumables.form.position",
+ "ownership.consumables.form.positionHint",
+ "ownership.consumables.form.ratedDays",
+ "ownership.consumables.form.ratedDaysHint",
+ "ownership.consumables.form.ratedDistance",
+ "ownership.consumables.form.save",
+ "ownership.consumables.item.cost",
+ "ownership.consumables.item.inService",
+ "ownership.consumables.item.installed",
+ "ownership.consumables.item.label",
+ "ownership.consumables.item.log",
+ "ownership.consumables.item.rated",
+ "ownership.consumables.item.retired",
+ "ownership.consumables.items.add",
+ "ownership.consumables.items.empty",
+ "ownership.consumables.items.title",
+ "ownership.consumables.lifecycles.empty",
+ "ownership.consumables.lifecycles.title",
+ "ownership.consumables.navTitle",
+ "ownership.consumables.notice.body",
+ "ownership.consumables.notice.title",
+ "ownership.consumables.stat.due",
+ "ownership.consumables.stat.lifetime",
+ "ownership.consumables.stat.next",
+ "ownership.consumables.stat.overdue",
+ "ownership.consumables.stat.stress",
+ "ownership.consumables.stat.stressHint",
+ "ownership.consumables.stat.twelve",
+ "ownership.consumables.stress.baseline",
+ "ownership.consumables.stress.empty",
+ "ownership.consumables.stress.label",
+ "ownership.consumables.stress.multiplier",
+ "ownership.consumables.stress.observed",
+ "ownership.consumables.stress.subtitle",
+ "ownership.consumables.stress.title",
+ "ownership.consumables.subtitle",
+ "ownership.consumables.summary.title",
+ "ownership.consumables.title",
+ "ownership.consumables.unsupported.physical",
+ "ownership.consumables.unsupported.recall",
+ "ownership.driver.assign.drive",
+ "ownership.driver.assign.driver",
+ "ownership.driver.assign.pick",
+ "ownership.driver.assign.submit",
+ "ownership.driver.brief.description",
+ "ownership.driver.brief.title",
+ "ownership.driver.chart.aria",
+ "ownership.driver.chart.col.aggression",
+ "ownership.driver.chart.col.cluster",
+ "ownership.driver.chart.col.share",
+ "ownership.driver.chart.empty",
+ "ownership.driver.chart.inner",
+ "ownership.driver.chart.title",
+ "ownership.driver.cluster.aggression",
+ "ownership.driver.cluster.cohesion",
+ "ownership.driver.cluster.cost",
+ "ownership.driver.cluster.distance",
+ "ownership.driver.cluster.drives",
+ "ownership.driver.cluster.efficiency",
+ "ownership.driver.cluster.labelled",
+ "ownership.driver.cluster.name",
+ "ownership.driver.cluster.night",
+ "ownership.driver.cluster.regen",
+ "ownership.driver.cluster.speed",
+ "ownership.driver.cluster.unlabelled",
+ "ownership.driver.clusters.empty",
+ "ownership.driver.clusters.subtitle",
+ "ownership.driver.clusters.title",
+ "ownership.driver.delete.message",
+ "ownership.driver.delete.title",
+ "ownership.driver.fingerprints.empty",
+ "ownership.driver.fingerprints.more",
+ "ownership.driver.fingerprints.subtitle",
+ "ownership.driver.fingerprints.title",
+ "ownership.driver.form.accent",
+ "ownership.driver.form.accents.amber",
+ "ownership.driver.form.accents.cyan",
+ "ownership.driver.form.accents.emerald",
+ "ownership.driver.form.accents.indigo",
+ "ownership.driver.form.accents.purple",
+ "ownership.driver.form.accents.rose",
+ "ownership.driver.form.name",
+ "ownership.driver.form.primary",
+ "ownership.driver.fp.ambiguous",
+ "ownership.driver.fp.assign",
+ "ownership.driver.fp.attribution",
+ "ownership.driver.fp.confidence",
+ "ownership.driver.fp.distance",
+ "ownership.driver.fp.drive",
+ "ownership.driver.fp.duration",
+ "ownership.driver.fp.features",
+ "ownership.driver.fp.inferred",
+ "ownership.driver.fp.labelled",
+ "ownership.driver.fp.margin",
+ "ownership.driver.navTitle",
+ "ownership.driver.notice.body",
+ "ownership.driver.notice.title",
+ "ownership.driver.profile.created",
+ "ownership.driver.profile.name",
+ "ownership.driver.profile.primary",
+ "ownership.driver.profiles.add",
+ "ownership.driver.profiles.empty",
+ "ownership.driver.profiles.subtitle",
+ "ownership.driver.profiles.title",
+ "ownership.driver.stat.ambiguous",
+ "ownership.driver.stat.ambiguousHint",
+ "ownership.driver.stat.clusters",
+ "ownership.driver.stat.inferred",
+ "ownership.driver.stat.labelled",
+ "ownership.driver.stat.separation",
+ "ownership.driver.subtitle",
+ "ownership.driver.summary.title",
+ "ownership.driver.title",
+ "ownership.driver.unnamed",
+ "ownership.driver.unsupported.identity",
+ "ownership.driver.unsupported.passengers",
+ "ownership.driver.verdict.moderate",
+ "ownership.driver.verdict.strong",
+ "ownership.driver.verdict.title",
+ "ownership.driver.verdict.weak",
+ "ownership.error.body",
+ "ownership.error.title",
+ "ownership.evidence.empty",
+ "ownership.evidence.sampleLine",
+ "ownership.evidence.sources",
+ "ownership.evidence.subtitle",
+ "ownership.evidence.title",
+ "ownership.form.currency",
+ "ownership.form.moneyHint",
+ "ownership.ghost.alert.body",
+ "ownership.ghost.alert.title",
+ "ownership.ghost.clear",
+ "ownership.ghost.col.deviation",
+ "ownership.ghost.col.drive",
+ "ownership.ghost.col.reason",
+ "ownership.ghost.col.score",
+ "ownership.ghost.col.trip",
+ "ownership.ghost.confidence",
+ "ownership.ghost.count",
+ "ownership.ghost.ratio",
+ "ownership.ghost.scanning",
+ "ownership.ghost.subtitle",
+ "ownership.ghost.title",
+ "ownership.governance.brief.description",
+ "ownership.governance.brief.modeUnknown",
+ "ownership.governance.brief.scope",
+ "ownership.governance.brief.title",
+ "ownership.governance.delete.message",
+ "ownership.governance.delete.title",
+ "ownership.governance.form.bucket",
+ "ownership.governance.form.dataset",
+ "ownership.governance.form.downsampleAfter",
+ "ownership.governance.form.downsampleHint",
+ "ownership.governance.form.enabled",
+ "ownership.governance.form.hold",
+ "ownership.governance.form.pickDataset",
+ "ownership.governance.form.retention",
+ "ownership.governance.form.save",
+ "ownership.governance.impact.blocked",
+ "ownership.governance.impact.dataset",
+ "ownership.governance.impact.downsampling",
+ "ownership.governance.impact.empty",
+ "ownership.governance.impact.expiring",
+ "ownership.governance.impact.fidelity",
+ "ownership.governance.impact.flags",
+ "ownership.governance.impact.growth",
+ "ownership.governance.impact.reclaim",
+ "ownership.governance.impact.retained",
+ "ownership.governance.impact.retention",
+ "ownership.governance.impact.runway",
+ "ownership.governance.impact.runwayDays",
+ "ownership.governance.impact.subtitle",
+ "ownership.governance.impact.title",
+ "ownership.governance.impactBrief.scope",
+ "ownership.governance.impactBrief.title",
+ "ownership.governance.impactStat.bytes",
+ "ownership.governance.impactStat.fidelity",
+ "ownership.governance.impactStat.mode",
+ "ownership.governance.impactStat.never",
+ "ownership.governance.impactStat.rows",
+ "ownership.governance.inventory.bytes",
+ "ownership.governance.inventory.dataset",
+ "ownership.governance.inventory.empty",
+ "ownership.governance.inventory.hypertable",
+ "ownership.governance.inventory.include",
+ "ownership.governance.inventory.included",
+ "ownership.governance.inventory.perRow",
+ "ownership.governance.inventory.rows",
+ "ownership.governance.inventory.select",
+ "ownership.governance.inventory.span",
+ "ownership.governance.inventory.subtitle",
+ "ownership.governance.inventory.title",
+ "ownership.governance.inventory.ungoverned",
+ "ownership.governance.navTitle",
+ "ownership.governance.notice.datasetTitle",
+ "ownership.governance.notice.policyWritesBody",
+ "ownership.governance.policies.add",
+ "ownership.governance.policies.empty",
+ "ownership.governance.policies.subtitle",
+ "ownership.governance.policies.title",
+ "ownership.governance.policy.bucket",
+ "ownership.governance.policy.dataset",
+ "ownership.governance.policy.disabled",
+ "ownership.governance.policy.downsample",
+ "ownership.governance.policy.hold",
+ "ownership.governance.policy.retention",
+ "ownership.governance.run.bytes",
+ "ownership.governance.run.dataset",
+ "ownership.governance.run.dryRun",
+ "ownership.governance.run.executed",
+ "ownership.governance.run.expiring",
+ "ownership.governance.run.fidelity",
+ "ownership.governance.run.mode",
+ "ownership.governance.runs.empty",
+ "ownership.governance.runs.subtitle",
+ "ownership.governance.runs.title",
+ "ownership.governance.simulate",
+ "ownership.governance.stat.enforcing",
+ "ownership.governance.stat.governed",
+ "ownership.governance.stat.holds",
+ "ownership.governance.stat.holdsHint",
+ "ownership.governance.stat.mode",
+ "ownership.governance.stat.planOnly",
+ "ownership.governance.stat.total",
+ "ownership.governance.stat.ungoverned",
+ "ownership.governance.subtitle",
+ "ownership.governance.summary.title",
+ "ownership.governance.title",
+ "ownership.governance.unsupported.datasetDeletion",
+ "ownership.governance.unsupported.index",
+ "ownership.governance.warning.highExpiry",
+ "ownership.governance.warning.legalHold",
+ "ownership.governance.warning.noAffectedRows",
+ "ownership.insurance.brief.title",
+ "ownership.insurance.checksum.empty",
+ "ownership.insurance.checksum.hash",
+ "ownership.insurance.checksum.subtitle",
+ "ownership.insurance.checksum.title",
+ "ownership.insurance.costBrief.description",
+ "ownership.insurance.costBrief.title",
+ "ownership.insurance.delete.message",
+ "ownership.insurance.delete.title",
+ "ownership.insurance.exposureBrief.title",
+ "ownership.insurance.factor.baseline",
+ "ownership.insurance.factor.better",
+ "ownership.insurance.factor.contribution",
+ "ownership.insurance.factor.direction",
+ "ownership.insurance.factor.name",
+ "ownership.insurance.factor.observed",
+ "ownership.insurance.factor.samples",
+ "ownership.insurance.factor.score",
+ "ownership.insurance.factor.weight",
+ "ownership.insurance.factor.worse",
+ "ownership.insurance.factors.empty",
+ "ownership.insurance.factors.subtitle",
+ "ownership.insurance.factors.title",
+ "ownership.insurance.form.deductible",
+ "ownership.insurance.form.end",
+ "ownership.insurance.form.insurer",
+ "ownership.insurance.form.maxDiscount",
+ "ownership.insurance.form.premium",
+ "ownership.insurance.form.ref",
+ "ownership.insurance.form.save",
+ "ownership.insurance.form.start",
+ "ownership.insurance.form.subtitle",
+ "ownership.insurance.form.telematics",
+ "ownership.insurance.form.title",
+ "ownership.insurance.lever.confidence",
+ "ownership.insurance.lever.delta",
+ "ownership.insurance.lever.difficulty",
+ "ownership.insurance.lever.effort",
+ "ownership.insurance.lever.hours",
+ "ownership.insurance.lever.label",
+ "ownership.insurance.lever.rank",
+ "ownership.insurance.lever.save",
+ "ownership.insurance.lever.target",
+ "ownership.insurance.levers.empty",
+ "ownership.insurance.levers.subtitle",
+ "ownership.insurance.levers.title",
+ "ownership.insurance.notice.body",
+ "ownership.insurance.notice.title",
+ "ownership.insurance.policy.coverage",
+ "ownership.insurance.policy.openEnded",
+ "ownership.insurance.premium.add",
+ "ownership.insurance.premium.baseline",
+ "ownership.insurance.premium.cap",
+ "ownership.insurance.premium.deductible",
+ "ownership.insurance.premium.delta",
+ "ownership.insurance.premium.discount",
+ "ownership.insurance.premium.edit",
+ "ownership.insurance.premium.empty",
+ "ownership.insurance.premium.expectedLoss",
+ "ownership.insurance.premium.modelled",
+ "ownership.insurance.premium.perDistance",
+ "ownership.insurance.premium.subtitle",
+ "ownership.insurance.premium.title",
+ "ownership.insurance.premiumBrief.scope",
+ "ownership.insurance.premiumBrief.title",
+ "ownership.insurance.stat.drives",
+ "ownership.insurance.stat.duration",
+ "ownership.insurance.stat.exposure",
+ "ownership.insurance.stat.frequency",
+ "ownership.insurance.stat.frequencyHint",
+ "ownership.insurance.stat.lossCost",
+ "ownership.insurance.stat.lossCostHint",
+ "ownership.insurance.stat.overnightTripDistance",
+ "ownership.insurance.stat.overnightTripDistanceHint",
+ "ownership.insurance.stat.percentile",
+ "ownership.insurance.stat.score",
+ "ownership.insurance.stat.scoreHint",
+ "ownership.insurance.stat.severity",
+ "ownership.insurance.stat.severityHint",
+ "ownership.insurance.subtitle",
+ "ownership.insurance.summary.empty",
+ "ownership.insurance.summary.subtitle",
+ "ownership.insurance.summary.title",
+ "ownership.insurance.title",
+ "ownership.insurance.trend.chart",
+ "ownership.insurance.trend.chartAria",
+ "ownership.insurance.trend.col.bucket",
+ "ownership.insurance.trend.empty",
+ "ownership.insurance.trend.score",
+ "ownership.insurance.trend.subtitle",
+ "ownership.insurance.trend.title",
+ "ownership.insurance.unsupported.claims",
+ "ownership.insurance.unsupported.quote",
+ "ownership.limitations.empty",
+ "ownership.limitations.title",
+ "ownership.quality.coverage",
+ "ownership.quality.samples",
+ "ownership.quality.title",
+ "ownership.quality.unavailable",
+ "ownership.quality.window",
+ "ownership.reconcile.audit.empty",
+ "ownership.reconcile.audit.title",
+ "ownership.reconcile.brief.scope",
+ "ownership.reconcile.brief.title",
+ "ownership.reconcile.bucket.amount",
+ "ownership.reconcile.bucket.label",
+ "ownership.reconcile.bucket.lines",
+ "ownership.reconcile.bucket.no",
+ "ownership.reconcile.bucket.recoverable",
+ "ownership.reconcile.bucket.share",
+ "ownership.reconcile.bucket.yes",
+ "ownership.reconcile.buckets.empty",
+ "ownership.reconcile.buckets.subtitle",
+ "ownership.reconcile.buckets.title",
+ "ownership.reconcile.delete.message",
+ "ownership.reconcile.delete.title",
+ "ownership.reconcile.dispute.claimed",
+ "ownership.reconcile.dispute.digest",
+ "ownership.reconcile.dispute.empty",
+ "ownership.reconcile.dispute.noReasons",
+ "ownership.reconcile.dispute.none",
+ "ownership.reconcile.dispute.note",
+ "ownership.reconcile.dispute.open",
+ "ownership.reconcile.dispute.recovered",
+ "ownership.reconcile.dispute.submit",
+ "ownership.reconcile.dispute.subtitle",
+ "ownership.reconcile.dispute.title",
+ "ownership.reconcile.energyBrief.description",
+ "ownership.reconcile.energyBrief.title",
+ "ownership.reconcile.form.addLine",
+ "ownership.reconcile.form.lineEnergy",
+ "ownership.reconcile.form.lineLocation",
+ "ownership.reconcile.form.lineRef",
+ "ownership.reconcile.form.lineTotal",
+ "ownership.reconcile.form.lineWhen",
+ "ownership.reconcile.form.lines",
+ "ownership.reconcile.form.periodEnd",
+ "ownership.reconcile.form.periodStart",
+ "ownership.reconcile.form.provider",
+ "ownership.reconcile.form.ref",
+ "ownership.reconcile.form.save",
+ "ownership.reconcile.form.total",
+ "ownership.reconcile.invoice.audit",
+ "ownership.reconcile.invoice.lines",
+ "ownership.reconcile.invoice.period",
+ "ownership.reconcile.invoice.ref",
+ "ownership.reconcile.invoice.status",
+ "ownership.reconcile.invoice.total",
+ "ownership.reconcile.invoices.empty",
+ "ownership.reconcile.invoices.exportScope",
+ "ownership.reconcile.invoices.import",
+ "ownership.reconcile.invoices.subtitle",
+ "ownership.reconcile.invoices.title",
+ "ownership.reconcile.line.billed",
+ "ownership.reconcile.line.billedEnergy",
+ "ownership.reconcile.line.energyDelta",
+ "ownership.reconcile.line.expected",
+ "ownership.reconcile.line.match",
+ "ownership.reconcile.line.measuredEnergy",
+ "ownership.reconcile.line.reasons",
+ "ownership.reconcile.line.ref",
+ "ownership.reconcile.line.timeDelta",
+ "ownership.reconcile.line.unnamed",
+ "ownership.reconcile.line.variance",
+ "ownership.reconcile.lines.empty",
+ "ownership.reconcile.lines.title",
+ "ownership.reconcile.notice.body",
+ "ownership.reconcile.notice.title",
+ "ownership.reconcile.stat.billed",
+ "ownership.reconcile.stat.billedEnergy",
+ "ownership.reconcile.stat.energyVariance",
+ "ownership.reconcile.stat.expected",
+ "ownership.reconcile.stat.matched",
+ "ownership.reconcile.stat.recoverable",
+ "ownership.reconcile.stat.unmatched",
+ "ownership.reconcile.stat.variance",
+ "ownership.reconcile.subtitle",
+ "ownership.reconcile.title",
+ "ownership.reconcile.uninvoiced.empty",
+ "ownership.reconcile.uninvoiced.energy",
+ "ownership.reconcile.uninvoiced.location",
+ "ownership.reconcile.uninvoiced.narrative",
+ "ownership.reconcile.uninvoiced.session",
+ "ownership.reconcile.uninvoiced.subtitle",
+ "ownership.reconcile.uninvoiced.title",
+ "ownership.reconcile.unsupported.submit",
+ "ownership.reconcile.unsupported.tax",
+ "ownership.source.empty",
+ "ownership.source.error",
+ "ownership.subscription.billing.annual",
+ "ownership.subscription.billing.monthly",
+ "ownership.subscription.billing.once",
+ "ownership.subscription.brief.title",
+ "ownership.subscription.chart.aria",
+ "ownership.subscription.chart.col.name",
+ "ownership.subscription.chart.col.roi",
+ "ownership.subscription.chart.col.verdict",
+ "ownership.subscription.chart.empty",
+ "ownership.subscription.chart.inner",
+ "ownership.subscription.chart.title",
+ "ownership.subscription.delete.message",
+ "ownership.subscription.delete.title",
+ "ownership.subscription.form.benchmark",
+ "ownership.subscription.form.benchmarkBasis",
+ "ownership.subscription.form.benchmarkHint",
+ "ownership.subscription.form.billing",
+ "ownership.subscription.form.ended",
+ "ownership.subscription.form.endedHint",
+ "ownership.subscription.form.kind",
+ "ownership.subscription.form.metric",
+ "ownership.subscription.form.name",
+ "ownership.subscription.form.newDraft",
+ "ownership.subscription.form.price",
+ "ownership.subscription.form.save",
+ "ownership.subscription.form.started",
+ "ownership.subscription.form.utcDateBasis",
+ "ownership.subscription.kind.oneTime",
+ "ownership.subscription.kind.recurring",
+ "ownership.subscription.list.add",
+ "ownership.subscription.list.benchmark",
+ "ownership.subscription.list.empty",
+ "ownership.subscription.list.metric",
+ "ownership.subscription.list.name",
+ "ownership.subscription.list.ongoing",
+ "ownership.subscription.list.period",
+ "ownership.subscription.list.price",
+ "ownership.subscription.list.title",
+ "ownership.subscription.metric.charging_sessions",
+ "ownership.subscription.metric.connectivity_time",
+ "ownership.subscription.metric.drive_count",
+ "ownership.subscription.metric.driving_distance",
+ "ownership.subscription.metric.supercharging_energy",
+ "ownership.subscription.navTitle",
+ "ownership.subscription.notice.body",
+ "ownership.subscription.notice.title",
+ "ownership.subscription.rateBasis",
+ "ownership.subscription.roi.empty",
+ "ownership.subscription.roi.subtitle",
+ "ownership.subscription.roi.title",
+ "ownership.subscription.row.activeDays",
+ "ownership.subscription.row.breakEven",
+ "ownership.subscription.row.monthly",
+ "ownership.subscription.row.name",
+ "ownership.subscription.row.narrative",
+ "ownership.subscription.row.net",
+ "ownership.subscription.row.perMonth",
+ "ownership.subscription.row.roi",
+ "ownership.subscription.row.spend",
+ "ownership.subscription.row.usage",
+ "ownership.subscription.row.utilisation",
+ "ownership.subscription.row.value",
+ "ownership.subscription.row.verdict",
+ "ownership.subscription.stat.monthly",
+ "ownership.subscription.stat.roi",
+ "ownership.subscription.stat.saving",
+ "ownership.subscription.stat.savingHint",
+ "ownership.subscription.stat.spend",
+ "ownership.subscription.stat.value",
+ "ownership.subscription.subtitle",
+ "ownership.subscription.summary.title",
+ "ownership.subscription.title",
+ "ownership.subscription.unit.drive",
+ "ownership.subscription.unit.session",
+ "ownership.subscription.unsupported.cancel",
+ "ownership.subscription.unsupported.intangible",
+ "ownership.tariff.bands.empty",
+ "ownership.tariff.bands.none",
+ "ownership.tariff.bands.rank",
+ "ownership.tariff.bands.subtitle",
+ "ownership.tariff.bands.title",
+ "ownership.tariff.brief.currencyUnknown",
+ "ownership.tariff.brief.description",
+ "ownership.tariff.brief.scope",
+ "ownership.tariff.brief.submittedScope",
+ "ownership.tariff.brief.title",
+ "ownership.tariff.chart.aria",
+ "ownership.tariff.chart.caption",
+ "ownership.tariff.chart.col.plan",
+ "ownership.tariff.chart.col.status",
+ "ownership.tariff.chart.cost",
+ "ownership.tariff.chart.empty",
+ "ownership.tariff.chart.statusAlt",
+ "ownership.tariff.chart.statusBest",
+ "ownership.tariff.chart.statusCurrent",
+ "ownership.tariff.chart.subtitle",
+ "ownership.tariff.chart.title",
+ "ownership.tariff.controls.all",
+ "ownership.tariff.controls.run",
+ "ownership.tariff.controls.selected",
+ "ownership.tariff.controls.shiftable",
+ "ownership.tariff.controls.subtitle",
+ "ownership.tariff.controls.switchFee",
+ "ownership.tariff.controls.title",
+ "ownership.tariff.delete.message",
+ "ownership.tariff.delete.title",
+ "ownership.tariff.form.addBand",
+ "ownership.tariff.form.bandEnd",
+ "ownership.tariff.form.bandLabel",
+ "ownership.tariff.form.bandPrice",
+ "ownership.tariff.form.bandStart",
+ "ownership.tariff.form.bands",
+ "ownership.tariff.form.defaultRateLabel",
+ "ownership.tariff.form.demand",
+ "ownership.tariff.form.export",
+ "ownership.tariff.form.isCurrent",
+ "ownership.tariff.form.name",
+ "ownership.tariff.form.provider",
+ "ownership.tariff.form.save",
+ "ownership.tariff.form.standing",
+ "ownership.tariff.form.structure",
+ "ownership.tariff.notice.body",
+ "ownership.tariff.notice.title",
+ "ownership.tariff.plan.bands",
+ "ownership.tariff.plan.compare",
+ "ownership.tariff.plan.compareNamed",
+ "ownership.tariff.plan.current",
+ "ownership.tariff.plan.demand",
+ "ownership.tariff.plan.name",
+ "ownership.tariff.plan.noProvider",
+ "ownership.tariff.plan.onPlan",
+ "ownership.tariff.plan.standing",
+ "ownership.tariff.plan.structure",
+ "ownership.tariff.plans.add",
+ "ownership.tariff.plans.empty",
+ "ownership.tariff.plans.subtitle",
+ "ownership.tariff.plans.title",
+ "ownership.tariff.result.annual",
+ "ownership.tariff.result.breakEven",
+ "ownership.tariff.result.breakdown",
+ "ownership.tariff.result.currentTag",
+ "ownership.tariff.result.days",
+ "ownership.tariff.result.delta",
+ "ownership.tariff.result.effective",
+ "ownership.tariff.result.peak",
+ "ownership.tariff.result.plan",
+ "ownership.tariff.result.rank",
+ "ownership.tariff.result.shift",
+ "ownership.tariff.results.empty",
+ "ownership.tariff.results.title",
+ "ownership.tariff.stat.observed",
+ "ownership.tariff.stat.plans",
+ "ownership.tariff.stat.saving",
+ "ownership.tariff.stat.sessions",
+ "ownership.tariff.stat.shift",
+ "ownership.tariff.structure.demand",
+ "ownership.tariff.structure.flat",
+ "ownership.tariff.structure.realTime",
+ "ownership.tariff.structure.tiered",
+ "ownership.tariff.structure.tou",
+ "ownership.tariff.subtitle",
+ "ownership.tariff.summary.empty",
+ "ownership.tariff.summary.title",
+ "ownership.tariff.title",
+ "ownership.tariff.unsupported.future",
+ "ownership.tariff.unsupported.home",
+ "ownership.trust.brief.title",
+ "ownership.trust.calibration.aria",
+ "ownership.trust.calibration.chart",
+ "ownership.trust.calibration.col.bias",
+ "ownership.trust.calibration.col.bin",
+ "ownership.trust.calibration.col.error",
+ "ownership.trust.calibration.col.samples",
+ "ownership.trust.calibration.empty",
+ "ownership.trust.calibration.first",
+ "ownership.trust.calibration.for",
+ "ownership.trust.calibration.last",
+ "ownership.trust.calibration.title",
+ "ownership.trust.card.bias",
+ "ownership.trust.card.coverage",
+ "ownership.trust.card.drift",
+ "ownership.trust.card.grade",
+ "ownership.trust.card.inspect",
+ "ownership.trust.card.mape",
+ "ownership.trust.card.median",
+ "ownership.trust.card.model",
+ "ownership.trust.card.rmse",
+ "ownership.trust.card.samples",
+ "ownership.trust.card.skill",
+ "ownership.trust.cards.empty",
+ "ownership.trust.cards.subtitle",
+ "ownership.trust.cards.title",
+ "ownership.trust.form.high",
+ "ownership.trust.form.horizon",
+ "ownership.trust.form.low",
+ "ownership.trust.form.model",
+ "ownership.trust.form.reference",
+ "ownership.trust.form.referenceHint",
+ "ownership.trust.form.submit",
+ "ownership.trust.form.target",
+ "ownership.trust.form.unit",
+ "ownership.trust.form.unitHint",
+ "ownership.trust.form.value",
+ "ownership.trust.navTitle",
+ "ownership.trust.notice.body",
+ "ownership.trust.notice.title",
+ "ownership.trust.outcome.submit",
+ "ownership.trust.outcome.value",
+ "ownership.trust.pred.error",
+ "ownership.trust.pred.horizon",
+ "ownership.trust.pred.inside",
+ "ownership.trust.pred.interval",
+ "ownership.trust.pred.model",
+ "ownership.trust.pred.observed",
+ "ownership.trust.pred.outside",
+ "ownership.trust.pred.pending",
+ "ownership.trust.pred.predicted",
+ "ownership.trust.pred.reference",
+ "ownership.trust.pred.score",
+ "ownership.trust.pred.sourceError",
+ "ownership.trust.pred.when",
+ "ownership.trust.predictions.add",
+ "ownership.trust.predictions.empty",
+ "ownership.trust.predictions.subtitle",
+ "ownership.trust.predictions.title",
+ "ownership.trust.stat.portfolio",
+ "ownership.trust.stat.scored",
+ "ownership.trust.stat.trusted",
+ "ownership.trust.stat.unreliable",
+ "ownership.trust.stat.watch",
+ "ownership.trust.subtitle",
+ "ownership.trust.summary.title",
+ "ownership.trust.title",
+ "ownership.trust.unsupported.cause",
+ "ownership.trust.unsupported.retrain",
+ "ownership.unsupported.title",
+ "ownership.verdict.active",
+ "ownership.verdict.cancel",
+ "ownership.verdict.expired",
+ "ownership.verdict.keep",
+ "ownership.verdict.moderate",
+ "ownership.verdict.review",
+ "ownership.verdict.strong",
+ "ownership.verdict.too_early",
+ "ownership.verdict.unknown",
+ "ownership.verdict.weak",
+ "ownership.warranty.binding.capacity",
+ "ownership.warranty.binding.distance",
+ "ownership.warranty.binding.time",
+ "ownership.warranty.brief.scope",
+ "ownership.warranty.brief.title",
+ "ownership.warranty.bundle.body",
+ "ownership.warranty.bundle.title",
+ "ownership.warranty.card.binding",
+ "ownership.warranty.card.breach",
+ "ownership.warranty.card.capacity",
+ "ownership.warranty.card.closing",
+ "ownership.warranty.card.distance",
+ "ownership.warranty.card.distanceHint",
+ "ownership.warranty.card.headroom",
+ "ownership.warranty.card.pace",
+ "ownership.warranty.card.projected",
+ "ownership.warranty.card.readiness",
+ "ownership.warranty.card.time",
+ "ownership.warranty.card.timeHint",
+ "ownership.warranty.check.detail",
+ "ownership.warranty.check.label",
+ "ownership.warranty.check.severity",
+ "ownership.warranty.check.state",
+ "ownership.warranty.claim.amount",
+ "ownership.warranty.claim.note",
+ "ownership.warranty.claim.opened",
+ "ownership.warranty.claim.status",
+ "ownership.warranty.claim.title",
+ "ownership.warranty.claimForm.amount",
+ "ownership.warranty.claimForm.note",
+ "ownership.warranty.claimForm.status",
+ "ownership.warranty.claimForm.submit",
+ "ownership.warranty.claimForm.title",
+ "ownership.warranty.claims.empty",
+ "ownership.warranty.claims.subtitle",
+ "ownership.warranty.claims.title",
+ "ownership.warranty.coverages.empty",
+ "ownership.warranty.coverages.title",
+ "ownership.warranty.delete.message",
+ "ownership.warranty.delete.title",
+ "ownership.warranty.form.deductible",
+ "ownership.warranty.form.floor",
+ "ownership.warranty.form.floorHint",
+ "ownership.warranty.form.kind",
+ "ownership.warranty.form.label",
+ "ownership.warranty.form.notes",
+ "ownership.warranty.form.provider",
+ "ownership.warranty.form.save",
+ "ownership.warranty.form.start",
+ "ownership.warranty.form.startOdo",
+ "ownership.warranty.form.termDays",
+ "ownership.warranty.form.termDistance",
+ "ownership.warranty.form.termHint",
+ "ownership.warranty.kind.aftermarket",
+ "ownership.warranty.kind.basic",
+ "ownership.warranty.kind.battery",
+ "ownership.warranty.kind.corrosion",
+ "ownership.warranty.kind.drivetrain",
+ "ownership.warranty.kind.extended",
+ "ownership.warranty.kind.tires",
+ "ownership.warranty.list.add",
+ "ownership.warranty.list.empty",
+ "ownership.warranty.list.title",
+ "ownership.warranty.navTitle",
+ "ownership.warranty.notice.body",
+ "ownership.warranty.notice.title",
+ "ownership.warranty.readiness.empty",
+ "ownership.warranty.readiness.subtitle",
+ "ownership.warranty.readiness.title",
+ "ownership.warranty.row.claim",
+ "ownership.warranty.row.deductible",
+ "ownership.warranty.row.floor",
+ "ownership.warranty.row.label",
+ "ownership.warranty.row.start",
+ "ownership.warranty.row.term",
+ "ownership.warranty.severity.critical",
+ "ownership.warranty.severity.high",
+ "ownership.warranty.severity.low",
+ "ownership.warranty.severity.medium",
+ "ownership.warranty.stat.active",
+ "ownership.warranty.stat.claimed",
+ "ownership.warranty.stat.expiring",
+ "ownership.warranty.stat.next",
+ "ownership.warranty.stat.odometer",
+ "ownership.warranty.stat.odometerHint",
+ "ownership.warranty.status.approved",
+ "ownership.warranty.status.closed",
+ "ownership.warranty.status.denied",
+ "ownership.warranty.status.draft",
+ "ownership.warranty.status.expiring",
+ "ownership.warranty.status.submitted",
+ "ownership.warranty.subtitle",
+ "ownership.warranty.summary.title",
+ "ownership.warranty.title",
+ "ownership.warranty.unsupported.legal",
+ "ownership.warranty.unsupported.submit",
+ "ownership.window.days",
+ "ownership.window.label",
+ "pagination.currentPage",
+ "pagination.first",
+ "pagination.go",
+ "pagination.goToPage",
+ "pagination.invalidPage",
+ "pagination.last",
+ "pagination.next",
+ "pagination.page",
+ "pagination.pageSize",
+ "pagination.previous",
+ "pagination.rows",
+ "pagination.rowsOption",
+ "pagination.showing",
+ "palette.placeholder",
+ "pin.pin",
+ "pin.pinned",
+ "pin.unpin",
+ "presentation.kiosk.help",
+ "presentation.kiosk.open",
+ "presentation.report.copyHelp",
+ "presentation.report.copyLink",
+ "presentation.report.help",
+ "presentation.report.linkCopied",
+ "presentation.report.linkError",
+ "presentation.report.open",
+ "problemReport.context.appVersion",
+ "problemReport.context.browser",
+ "problemReport.context.page",
+ "problemReport.context.pageNote",
+ "problemReport.context.title",
+ "problemReport.form.description",
+ "problemReport.form.descriptionPlaceholder",
+ "problemReport.form.descriptionTooShort",
+ "problemReport.form.hidePreview",
+ "problemReport.form.includeDiagnostics",
+ "problemReport.form.includeDiagnosticsHint",
+ "problemReport.form.showPreview",
+ "problemReport.form.submit",
+ "problemReport.form.submitting",
+ "problemReport.form.title",
+ "problemReport.form.titlePlaceholder",
+ "problemReport.intro",
+ "problemReport.policy.consoleTail",
+ "problemReport.policy.files",
+ "problemReport.policy.screenshots",
+ "problemReport.policy.userEmail",
+ "problemReport.submitError",
+ "problemReport.title",
+ "productPreferences.defaultVehicle.unavailable",
+ "progressRing.ariaLabel",
+ "provenance.cached",
+ "provenance.historical",
+ "provenance.inferred",
+ "provenance.live",
+ "provenance.repaired",
+ "provenance.unknown",
+ "pwa.cache.cachedAt",
+ "pwa.cache.cachedRange",
+ "pwa.cache.cachedUnknown",
+ "pwa.cache.offlineNoData",
+ "pwa.cache.regionLabel",
+ "pwa.later",
+ "pwa.lowBandwidth.auto",
+ "pwa.lowBandwidth.effectsOff",
+ "pwa.lowBandwidth.effectsOn",
+ "pwa.lowBandwidth.heading",
+ "pwa.lowBandwidth.label",
+ "pwa.lowBandwidth.off",
+ "pwa.lowBandwidth.on",
+ "pwa.lowBandwidth.statusNetwork",
+ "pwa.lowBandwidth.statusOff",
+ "pwa.lowBandwidth.statusUser",
+ "pwa.offline.banner",
+ "pwa.offline.title",
+ "pwa.reloadNow",
+ "pwa.update.applying",
+ "pwa.update.availableBody",
+ "pwa.update.availableTitle",
+ "pwa.update.requiredBody",
+ "pwa.update.requiredTitle",
+ "pwa.update.runningLabel",
+ "pwa.update.serverLabel",
+ "pwa.update.unsavedBlocked",
+ "ratelimit.banner",
+ "ratelimit.retry",
+ "rbac.toasts.saved",
+ "recentPages.justNow",
+ "recentPages.shortDay",
+ "recentPages.shortHour",
+ "recentPages.shortMinute",
+ "replay.controls.pause",
+ "replay.controls.play",
+ "replay.controls.progress",
+ "replay.controls.reset",
+ "replay.controls.restart",
+ "replay.controls.speed",
+ "replay.controls.stop",
+ "replay.elevation.aria",
+ "replay.elevation.gainLoss",
+ "replay.elevation.label",
+ "replay.elevation.noData",
+ "replay.elevation.title",
+ "replay.markers.atPercent",
+ "replay.overview.clusterCount",
+ "replay.overview.clusterCount_one",
+ "replay.overview.clusterCount_other",
+ "replay.overview.label",
+ "replay.overview.positionUnavailable",
+ "replay.shortcuts.end",
+ "replay.shortcuts.frame",
+ "replay.shortcuts.help",
+ "replay.shortcuts.nextFrame",
+ "replay.shortcuts.pause",
+ "replay.shortcuts.percent",
+ "replay.shortcuts.play",
+ "replay.shortcuts.playPause",
+ "replay.shortcuts.prevFrame",
+ "replay.shortcuts.seekBack",
+ "replay.shortcuts.seekForward",
+ "replay.shortcuts.skip10",
+ "replay.shortcuts.skip5",
+ "replay.shortcuts.speed",
+ "replay.shortcuts.speedDown",
+ "replay.shortcuts.speedUp",
+ "replay.shortcuts.start",
+ "replay.shortcuts.startEnd",
+ "replay.shortcuts.title",
+ "requiresAuth.title",
+ "route.noLocationData",
+ "route.roundTrip",
+ "routes.aPIKeys",
+ "routes.actionCenter",
+ "routes.activeSessions",
+ "routes.activityTimeline",
+ "routes.analytics",
+ "routes.anomalyDashboard",
+ "routes.apiLogs",
+ "routes.apiPlayground",
+ "routes.arrivalReliability",
+ "routes.auditLog",
+ "routes.automationBuilder",
+ "routes.automationHistory",
+ "routes.automationList",
+ "routes.automations",
+ "routes.backupRestore",
+ "routes.batteryCare",
+ "routes.batteryCells",
+ "routes.batteryDegradation",
+ "routes.batteryHealth",
+ "routes.batteryPassport",
+ "routes.behavioralSentinel",
+ "routes.cabinThermal",
+ "routes.carbonIntelligence",
+ "routes.causalExperimentLab",
+ "routes.chargeAdvisor",
+ "routes.chargeDepartureAlignment",
+ "routes.chargeDetail",
+ "routes.chargeInterruption",
+ "routes.chargerHealth",
+ "routes.chargerResilience",
+ "routes.charging",
+ "routes.chargingCurve",
+ "routes.chargingForensics",
+ "routes.chargingHeatmap",
+ "routes.chargingReconciliation",
+ "routes.chargingSiteTwin",
+ "routes.chargingThermalTax",
+ "routes.chatbot",
+ "routes.climateControl",
+ "routes.coldStart",
+ "routes.comfortConsistency",
+ "routes.commandHistory",
+ "routes.commandReliability",
+ "routes.commands",
+ "routes.componentSurvival",
+ "routes.connect",
+ "routes.consumablesLifecycle",
+ "routes.costAnalysis",
+ "routes.cycleStress",
+ "routes.dBHealthDashboard",
+ "routes.dLQInspector",
+ "routes.dashboard",
+ "routes.dashcamIntelligence",
+ "routes.dataExport",
+ "routes.dataGovernance",
+ "routes.dataQuality",
+ "routes.dataRepair",
+ "routes.dayLog",
+ "routes.departureForecast",
+ "routes.destinationTransitions",
+ "routes.devTools",
+ "routes.digitalTwin",
+ "routes.diskForecast",
+ "routes.driveArchetypes",
+ "routes.driveCalendar",
+ "routes.driveCompare",
+ "routes.driveDNA",
+ "routes.driveDetail",
+ "routes.driveScore",
+ "routes.driverAttribution",
+ "routes.drives",
+ "routes.drivetrainHealth",
+ "routes.drivingDynamics",
+ "routes.drivingRhythm",
+ "routes.efficiency",
+ "routes.efficiencyTarget",
+ "routes.emergencyResilience",
+ "routes.energy",
+ "routes.energyFlow",
+ "routes.energyLedger",
+ "routes.energyProducts",
+ "routes.explore",
+ "routes.explorer",
+ "routes.exports",
+ "routes.fSDInsights",
+ "routes.featureFlagsAdmin",
+ "routes.federatedLearningStudio",
+ "routes.feedbackQueue",
+ "routes.firmwareCanary",
+ "routes.firmwareImpact",
+ "routes.fleetAPI",
+ "routes.fleetCompare",
+ "routes.fleetOperations",
+ "routes.fleetSetup",
+ "routes.fleetTelemetryCoverage",
+ "routes.gDPRExport",
+ "routes.gasPriceAutoPoll",
+ "routes.geofences",
+ "routes.glance",
+ "routes.guardMode",
+ "routes.helix",
+ "routes.help",
+ "routes.hvacCycling",
+ "routes.incidentTimeline",
+ "routes.ingestXRay",
+ "routes.insuranceTelematics",
+ "routes.intelligencePackMarketplace",
+ "routes.journeyAssurance",
+ "routes.journeyFragmentation",
+ "routes.journeys",
+ "routes.jurisdictionCompliance",
+ "routes.layoutReference",
+ "routes.legacyAlertRulesRedirect",
+ "routes.legacyAlertStudioRedirect",
+ "routes.lifetimeStats",
+ "routes.liveMap",
+ "routes.liveSignalInspector",
+ "routes.liveSignalMonitor",
+ "routes.locations",
+ "routes.mQTTInspector",
+ "routes.maintenance",
+ "routes.mediaPlayer",
+ "routes.mileage",
+ "routes.mileageBudget",
+ "routes.milestones",
+ "routes.mobileGridReference",
+ "routes.modelTrust",
+ "routes.myActivity",
+ "routes.navigationRoute",
+ "routes.notificationHealth",
+ "routes.notificationsArchived",
+ "routes.notificationsAudit",
+ "routes.notificationsBrowser",
+ "routes.notificationsChannels",
+ "routes.notificationsInbox",
+ "routes.notificationsPacks",
+ "routes.notificationsQuietHours",
+ "routes.notificationsRules",
+ "routes.notificationsStudio",
+ "routes.onboarding",
+ "routes.outageAutobiography",
+ "routes.packCapacity",
+ "routes.parkingAnalytics",
+ "routes.periodCompare",
+ "routes.physicsBlackBox",
+ "routes.physicsCarKeptLiving",
+ "routes.physicsChargePort",
+ "routes.physicsClocks",
+ "routes.physicsCockpit",
+ "routes.physicsContradictions",
+ "routes.physicsDictionary",
+ "routes.physicsFirmwareEpochs",
+ "routes.physicsLedger",
+ "routes.physicsLifeTape",
+ "routes.physicsLogbook",
+ "routes.physicsMeters",
+ "routes.physicsModes",
+ "routes.physicsNervousSystem",
+ "routes.physicsRange",
+ "routes.physicsUnknown",
+ "routes.physicsVault",
+ "routes.powerDashboards",
+ "routes.powerFlowDashboard",
+ "routes.powerGrafanaPanel",
+ "routes.powerSqlPlayground",
+ "routes.powershare",
+ "routes.preconditioningEffectiveness",
+ "routes.privacy",
+ "routes.privacyBenchmarks",
+ "routes.projectedRange",
+ "routes.quickStats",
+ "routes.rangeBuffer",
+ "routes.redisSignalViewer",
+ "routes.regenEfficiency",
+ "routes.remainingUsefulLife",
+ "routes.roadHazardMesh",
+ "routes.roadmap",
+ "routes.rootCauseIntelligence",
+ "routes.routeEfficiency",
+ "routes.safetySettings",
+ "routes.safetySettingsPage",
+ "routes.schemaDrift",
+ "routes.scienceLab",
+ "routes.search",
+ "routes.seasonalEfficiency",
+ "routes.secretRotation",
+ "routes.securityAccess",
+ "routes.segments",
+ "routes.serviceEvidencePack",
+ "routes.serviceIntelligence",
+ "routes.settings",
+ "routes.shareCard",
+ "routes.sharedDrive",
+ "routes.sharingTrips",
+ "routes.signalChangePoints",
+ "routes.signalCorrelation",
+ "routes.signalDeadband",
+ "routes.signalDiff",
+ "routes.signalEntropy",
+ "routes.signalExplorer",
+ "routes.signalGapDetector",
+ "routes.signalLogViewer",
+ "routes.signalMutualInformation",
+ "routes.signalTrend",
+ "routes.signalsWorkspace",
+ "routes.sleepEfficiency",
+ "routes.slowQueries",
+ "routes.smartCharge",
+ "routes.softwareUpdates",
+ "routes.speedProfile",
+ "routes.speedSweetSpot",
+ "routes.statReference",
+ "routes.stateMachineDebugger",
+ "routes.statistics",
+ "routes.statusApiDocs",
+ "routes.subscriptionROI",
+ "routes.systemStatus",
+ "routes.tCOOptimizer",
+ "routes.tariffLab",
+ "routes.temperatureImpact",
+ "routes.teslaAccount",
+ "routes.teslaApiUsage",
+ "routes.teslaChargingHistory",
+ "routes.teslaChargingSessions",
+ "routes.teslaFeatureFlags",
+ "routes.teslaOrders",
+ "routes.teslaPhysics",
+ "routes.teslaRegion",
+ "routes.timeMachine",
+ "routes.timeline",
+ "routes.tireDifferentialDrift",
+ "routes.tirePressure",
+ "routes.tripDetail",
+ "routes.tripLogbook",
+ "routes.tripPlanner",
+ "routes.tripReplay",
+ "routes.trips",
+ "routes.trueCostOwnership",
+ "routes.twinLab",
+ "routes.twoFactorAuth",
+ "routes.utilization",
+ "routes.vampireDrain",
+ "routes.vehicleAccess",
+ "routes.vehicleCost",
+ "routes.vehicleDetail",
+ "routes.vehicleManagement",
+ "routes.vehicles",
+ "routes.warrantyCommand",
+ "routes.warrantyResaleVault",
+ "routes.watchFace",
+ "routes.weeklyDigest",
+ "routes.whatIf",
+ "routes.wholeHomeEnergy",
+ "routes.yearReview",
+ "runtimeHealth.affected",
+ "runtimeHealth.components.database",
+ "runtimeHealth.components.mqtt",
+ "runtimeHealth.components.redis",
+ "runtimeHealth.components.telemetry",
+ "runtimeHealth.components.tesla_api",
+ "runtimeHealth.components.worker",
+ "runtimeHealth.configureAlerts",
+ "runtimeHealth.historyAvailable",
+ "runtimeHealth.systemStatus",
+ "runtimeHealth.telemetryLastSeen",
+ "runtimeHealth.title",
+ "savedViews.announceApplied",
+ "savedViews.announceCleared",
+ "savedViews.appliedBadge",
+ "savedViews.clearApplied",
+ "savedViews.defaultBadge",
+ "savedViews.deleteConfirm",
+ "savedViews.deleteTitle",
+ "savedViews.empty",
+ "savedViews.emptyQuery",
+ "savedViews.error",
+ "savedViews.loading",
+ "savedViews.makeDefault",
+ "savedViews.manage",
+ "savedViews.name",
+ "savedViews.namePlaceholder",
+ "savedViews.pin",
+ "savedViews.renamePrompt",
+ "savedViews.saveCurrent",
+ "savedViews.setDefault",
+ "savedViews.title",
+ "savedViews.unpin",
+ "savedViews.unsetDefault",
+ "score.aria",
+ "search.history.clear",
+ "search.history.removeAria",
+ "search.history.title",
+ "search.input.label",
+ "serviceMode.banner.defaultDegraded",
+ "serviceMode.banner.defaultMaintenance",
+ "serviceMode.banner.degradedTitle",
+ "serviceMode.banner.ended",
+ "serviceMode.banner.endingNow",
+ "serviceMode.banner.endsIn",
+ "serviceMode.banner.maintenanceTitle",
+ "shareCard.states.cachedPaused",
+ "shareCard.states.paused",
+ "shortcuts.empty",
+ "shortcuts.filter.all",
+ "shortcuts.filter.global",
+ "shortcuts.filter.label",
+ "shortcuts.filter.page",
+ "shortcuts.gotoPrompt",
+ "shortcuts.groups.replay",
+ "shortcuts.search",
+ "shortcuts.title",
+ "signalConfig.deselectAll",
+ "signalConfig.deselectCategory",
+ "signalConfig.deselectSignal",
+ "signalConfig.footerAt10s",
+ "signalConfig.footerAt500",
+ "signalConfig.footerSelected",
+ "signalConfig.intervalForSignal",
+ "signalConfig.masterInterval",
+ "signalConfig.masterIntervalLabel",
+ "signalConfig.noMatches",
+ "signalConfig.noSignals",
+ "signalConfig.searchLabel",
+ "signalConfig.searchPlaceholder",
+ "signalConfig.selectAll",
+ "signalConfig.selectCategory",
+ "signalConfig.selectSignal",
+ "signalConfig.selectedSummary",
+ "signalConfig.setAll",
+ "signalConfig.setCategoryInterval",
+ "signalConfig.subscribeCount",
+ "signalConfig.title",
+ "signalLog.noVehicle",
+ "slider.thumbMax",
+ "slider.thumbMin",
+ "smallMultiples.noData",
"sourceLayer.age",
"sourceLayer.log.desc",
"sourceLayer.log.label",
@@ -63464,12 +63726,6 @@
"statCard.trend.decreased",
"statCard.trend.increased",
"statCard.trend.unchanged",
- "stateMachineDebugger.aiNarrator.badge",
- "stateMachineDebugger.aiNarrator.button",
- "stateMachineDebugger.aiNarrator.description",
- "stateMachineDebugger.aiNarrator.emptyHint",
- "stateMachineDebugger.aiNarrator.title",
- "statistics.age",
"statusBar.alerts.count",
"statusBar.alerts.countMore",
"statusBar.alerts.newCritical",
@@ -63572,8 +63828,6 @@
"statusBar.version.updateBanner",
"statusBar.version.uptime",
"statusBar.version.uptimeLabel",
- "sweetSpot.col.sample",
- "systemStatus.sourceUnavailable",
"table.bulkActions.clear",
"table.bulkActions.region",
"table.bulkActions.selected",
@@ -63617,27 +63871,6 @@
"table.selection.selectAll",
"table.selection.selectRow",
"table.selection.selectRowNamed",
- "tagInput.added",
- "tagInput.addedOne",
- "tagInput.duplicate",
- "tagInput.maxReached",
- "tagInput.maxReachedAnnounce",
- "tagInput.maxReachedHint",
- "tagInput.placeholder",
- "tagInput.removeTag",
- "tagInput.removed",
- "tagInput.tagsList",
- "tagInput.tagsNone",
- "tco.aiNarration.badge",
- "tco.aiNarration.button",
- "tco.aiNarration.description",
- "tco.aiNarration.noVehicleHint",
- "tco.aiNarration.title",
- "tempImpact.aiNarrative.badge",
- "tempImpact.aiNarrative.description",
- "tempImpact.aiNarrative.emptyHint",
- "tempImpact.aiNarrative.generateButton",
- "tempImpact.aiNarrative.title",
"tesla.reauth.body",
"tesla.reauth.cta",
"tesla.reauth.title",
@@ -63664,11 +63897,6 @@
"timeMachine.banner.title",
"timeline.empty",
"timeline.label",
- "tirePressure.aiTrendReasoning.badge",
- "tirePressure.aiTrendReasoning.description",
- "tirePressure.aiTrendReasoning.generateButton",
- "tirePressure.aiTrendReasoning.noVehicleHint",
- "tirePressure.aiTrendReasoning.title",
"toast.admin.apiKey.create.success",
"toast.admin.apiKey.delete.success",
"toast.admin.apiKey.revoke.success",
@@ -63689,9 +63917,6 @@
"toast.export.account.success",
"toast.export.bulkDelete.error",
"toast.export.create.success",
- "toast.journey.create.success",
- "toast.journey.score.success",
- "toast.journey.transition.success",
"toast.notifications.archive.success",
"toast.notifications.delete.success",
"toast.notifications.markRead.success",
@@ -63748,165 +63973,13 @@
"tour.tours.vehicles.description",
"tour.tours.vehicles.title",
"transitionArrow.label",
- "tripPlanner.aiAgent.badge",
- "tripPlanner.aiAgent.draftingDescription",
- "tripPlanner.aiAgent.generateButton",
- "tripPlanner.aiAgent.noDestination",
- "tripPlanner.aiAgent.noOrigin",
- "tripPlanner.aiAgent.noVehicle",
- "tripPlanner.aiAgent.title",
- "trips.brief.allVehicles",
- "trips.brief.detail.description",
- "trips.brief.detail.efficiencyReason",
- "trips.brief.detail.eyebrow",
- "trips.brief.detail.missingScope",
- "trips.brief.detail.provenance",
- "trips.brief.detail.scope",
- "trips.brief.detail.title",
- "trips.brief.list.description",
- "trips.brief.list.eyebrow",
- "trips.brief.list.provenance",
- "trips.brief.list.scope",
- "trips.brief.list.title",
- "trips.brief.replay.batteryContext",
- "trips.brief.replay.description",
- "trips.brief.replay.eyebrow",
- "trips.brief.replay.missingScope",
- "trips.brief.replay.provenance",
- "trips.brief.replay.scope",
- "trips.brief.report.description",
- "trips.brief.report.eyebrow",
- "trips.brief.report.provenance",
- "trips.brief.report.scope",
- "trips.brief.report.title",
- "trips.brief.status.initial",
- "trips.brief.status.initialFailure",
- "trips.brief.status.ok",
- "trips.brief.status.partial",
- "trips.brief.status.stale",
- "trips.brief.status.unavailable",
- "trips.card.charges",
- "trips.card.cost",
- "trips.card.distance",
- "trips.card.drives",
- "trips.card.energy",
- "trips.card.inProgress",
- "trips.chart.aria",
- "trips.chart.col.trip",
- "trips.chart.distance",
- "trips.chart.title",
- "trips.detail.aiSuggestName.badge",
- "trips.detail.aiSuggestName.description",
- "trips.detail.aiSuggestName.generateButton",
- "trips.detail.aiSuggestName.title",
- "trips.detail.charges",
- "trips.detail.chart.aria",
- "trips.detail.chart.col.drive",
- "trips.detail.chart.driveLabel",
- "trips.detail.chart.title",
- "trips.detail.cost",
- "trips.detail.created",
- "trips.detail.distance",
- "trips.detail.drives",
- "trips.detail.drivesEmpty",
- "trips.detail.drivesTitle",
- "trips.detail.duration",
- "trips.detail.efficiency",
- "trips.detail.ended",
- "trips.detail.energy",
- "trips.detail.inProgress",
- "trips.detail.kpi.chargeCount",
- "trips.detail.kpi.driveCount",
- "trips.detail.kpi.label",
- "trips.detail.name",
- "trips.detail.notFound",
- "trips.detail.notes",
- "trips.detail.overview",
- "trips.detail.resourceName",
- "trips.detail.started",
- "trips.detail.table.distance",
- "trips.detail.table.duration",
- "trips.detail.table.energy",
- "trips.detail.table.route",
- "trips.detail.table.started",
- "trips.detail.title",
- "trips.detail.tripId",
- "trips.detail.tripNumber",
- "trips.detail.vehicle",
- "trips.energy.empty",
- "trips.energy.title",
- "trips.export.csv",
- "trips.export.json",
- "trips.list.aria",
- "trips.list.count",
- "trips.list.empty",
- "trips.list.heading",
- "trips.primary.aria",
- "trips.row.trip",
- "trips.stats.aria",
- "trips.stats.avgPerTrip",
- "trips.stats.avgPerTripSub",
- "trips.stats.chargeSessions",
- "trips.stats.charges",
- "trips.stats.cost",
- "trips.stats.costPer",
- "trips.stats.distance",
- "trips.stats.driveCount",
- "trips.stats.energy",
- "trips.stats.total",
- "trips.stats.totalDrives",
- "trips.stats.tripCount",
- "trips.subtitle",
- "trips.title",
"upstream.banner",
- "vampireDrain.aiNarrative.badge",
- "vampireDrain.aiNarrative.description",
- "vampireDrain.aiNarrative.generateButton",
- "vampireDrain.aiNarrative.noVehicleHint",
- "vampireDrain.aiNarrative.title",
"vehiclePicker.aria",
"vehiclePicker.fallbackName",
- "vehicleSelect.aria",
- "vehicles.aiPaintPreview.badge",
- "vehicles.aiPaintPreview.button",
- "vehicles.aiPaintPreview.description",
- "vehicles.aiPaintPreview.noVehicleHint",
- "vehicles.aiPaintPreview.title",
- "voiceMode.actions.muteTts",
- "voiceMode.actions.muteTtsShort",
- "voiceMode.actions.startListening",
- "voiceMode.actions.startListeningShort",
- "voiceMode.actions.stopAll",
- "voiceMode.actions.stopAllShort",
- "voiceMode.actions.stopListening",
- "voiceMode.actions.stopListeningShort",
- "voiceMode.actions.unmuteTts",
- "voiceMode.actions.unmuteTtsShort",
- "voiceMode.button",
- "voiceMode.emptyHint",
- "voiceMode.errors.sttFailed",
- "voiceMode.errors.unsupported",
- "voiceMode.idleHint",
- "voiceMode.listeningHint",
- "voiceMode.processingDisclosure",
- "voiceMode.title",
- "voiceMode.transcriptLabel",
- "voiceMode.unsupportedHint",
- "watchFaceNL.badge",
- "watchFaceNL.button",
- "watchFaceNL.description",
- "watchFaceNL.inputLabel",
- "watchFaceNL.placeholder",
- "watchFaceNL.title",
- "widget.motorPerformance.outsideScale",
- "yearReview.aiNarration.badge",
- "yearReview.aiNarration.emptyHint",
- "yearReview.aiNarration.generateButton",
- "yearReview.aiNarration.scopeDescription",
- "yearReview.aiNarration.title",
- "yearReview.pageTitle"
+ "vehicleSettings.validation.invalidDate",
+ "widget.motorPerformance.outsideScale"
],
- "ownership": [
+ "exports": [
"a11y.breadcrumb",
"a11y.breadcrumbHome",
"a11y.dataFreshness",
@@ -64014,9 +64087,194 @@
"activity.action.vehicleCommandWake",
"activity.myActivity.empty",
"admin.liveSignals.kpi.staleHint",
- "advancedIntelligence.brief.quality.insufficient",
- "advancedIntelligence.brief.quality.limited",
- "advancedIntelligence.brief.quality.sufficient",
+ "ai.common.errorUnknown",
+ "ai.common.noOutput",
+ "ai.confirm.argsLabel",
+ "ai.confirm.cancel",
+ "ai.confirm.intro.mutates",
+ "ai.confirm.intro.read",
+ "ai.confirm.run",
+ "ai.confirm.title",
+ "ai.confirm.toolLabel",
+ "ai.limit.desc.burst",
+ "ai.limit.desc.costCap",
+ "ai.limit.desc.costCapUnavailable",
+ "ai.limit.desc.featureMisconfigured",
+ "ai.limit.desc.generic",
+ "ai.limit.desc.perDay",
+ "ai.limit.desc.perMinute",
+ "ai.limit.desc.providerUnavailable",
+ "ai.limit.desc.settingsUnavailable",
+ "ai.limit.desc.tokens",
+ "ai.limit.retry",
+ "ai.limit.retryIn",
+ "ai.limit.title.burst",
+ "ai.limit.title.costCap",
+ "ai.limit.title.costCapUnavailable",
+ "ai.limit.title.featureMisconfigured",
+ "ai.limit.title.generic",
+ "ai.limit.title.perDay",
+ "ai.limit.title.perMinute",
+ "ai.limit.title.providerUnavailable",
+ "ai.limit.title.settingsUnavailable",
+ "ai.limit.title.tokens",
+ "ai.limit.useBaseline",
+ "alertPacks.aiDescription",
+ "alertPacks.aiGenerate",
+ "alertPacks.aiReview",
+ "alertPacks.aiTitle",
+ "alertPacks.goal",
+ "alertPacks.goalExample",
+ "alertPacks.helixMessage",
+ "alertPacks.proposedCount",
+ "alertPacks.proposedRules",
+ "alertPacks.rules.battery-critical.message",
+ "alertPacks.rules.battery-critical.name",
+ "alertPacks.rules.battery-full.message",
+ "alertPacks.rules.battery-full.name",
+ "alertPacks.rules.battery-heating-ended.message",
+ "alertPacks.rules.battery-heating-ended.name",
+ "alertPacks.rules.battery-heating.message",
+ "alertPacks.rules.battery-heating.name",
+ "alertPacks.rules.battery-low.message",
+ "alertPacks.rules.battery-low.name",
+ "alertPacks.rules.battery-reserve.message",
+ "alertPacks.rules.battery-reserve.name",
+ "alertPacks.rules.bms-full.message",
+ "alertPacks.rules.bms-full.name",
+ "alertPacks.rules.cabin-cold.message",
+ "alertPacks.rules.cabin-cold.name",
+ "alertPacks.rules.cabin-hot.message",
+ "alertPacks.rules.cabin-hot.name",
+ "alertPacks.rules.charge-cold-weather.message",
+ "alertPacks.rules.charge-cold-weather.name",
+ "alertPacks.rules.charge-complete.message",
+ "alertPacks.rules.charge-complete.name",
+ "alertPacks.rules.charge-latch.message",
+ "alertPacks.rules.charge-latch.name",
+ "alertPacks.rules.charge-limit.message",
+ "alertPacks.rules.charge-limit.name",
+ "alertPacks.rules.charge-port-closed.message",
+ "alertPacks.rules.charge-port-closed.name",
+ "alertPacks.rules.charge-port-open.message",
+ "alertPacks.rules.charge-port-open.name",
+ "alertPacks.rules.charge-schedule-mode.message",
+ "alertPacks.rules.charge-schedule-mode.name",
+ "alertPacks.rules.charge-scheduled.message",
+ "alertPacks.rules.charge-scheduled.name",
+ "alertPacks.rules.charge-started.message",
+ "alertPacks.rules.charge-started.name",
+ "alertPacks.rules.charge-stopped.message",
+ "alertPacks.rules.charge-stopped.name",
+ "alertPacks.rules.climate-auto.message",
+ "alertPacks.rules.climate-auto.name",
+ "alertPacks.rules.climate-keeper.message",
+ "alertPacks.rules.climate-keeper.name",
+ "alertPacks.rules.destination-changed.message",
+ "alertPacks.rules.destination-changed.name",
+ "alertPacks.rules.drive-neutral.message",
+ "alertPacks.rules.drive-neutral.name",
+ "alertPacks.rules.drive-parked.message",
+ "alertPacks.rules.drive-parked.name",
+ "alertPacks.rules.drive-reverse.message",
+ "alertPacks.rules.drive-reverse.name",
+ "alertPacks.rules.drive-started.message",
+ "alertPacks.rules.drive-started.name",
+ "alertPacks.rules.driver-arrived.message",
+ "alertPacks.rules.driver-arrived.name",
+ "alertPacks.rules.driver-belt.message",
+ "alertPacks.rules.driver-belt.name",
+ "alertPacks.rules.driver-left.message",
+ "alertPacks.rules.driver-left.name",
+ "alertPacks.rules.fast-charger-left.message",
+ "alertPacks.rules.fast-charger-left.name",
+ "alertPacks.rules.fast-charger.message",
+ "alertPacks.rules.fast-charger.name",
+ "alertPacks.rules.favorite-arrived.message",
+ "alertPacks.rules.favorite-arrived.name",
+ "alertPacks.rules.favorite-left.message",
+ "alertPacks.rules.favorite-left.name",
+ "alertPacks.rules.guest-disabled.message",
+ "alertPacks.rules.guest-disabled.name",
+ "alertPacks.rules.guest-enabled.message",
+ "alertPacks.rules.guest-enabled.name",
+ "alertPacks.rules.home-arrived.message",
+ "alertPacks.rules.home-arrived.name",
+ "alertPacks.rules.home-left.message",
+ "alertPacks.rules.home-left.name",
+ "alertPacks.rules.hvac-off.message",
+ "alertPacks.rules.hvac-off.name",
+ "alertPacks.rules.hvac-on.message",
+ "alertPacks.rules.hvac-on.name",
+ "alertPacks.rules.locked.message",
+ "alertPacks.rules.locked.name",
+ "alertPacks.rules.media-artist.message",
+ "alertPacks.rules.media-artist.name",
+ "alertPacks.rules.media-playback.message",
+ "alertPacks.rules.media-playback.name",
+ "alertPacks.rules.media-source.message",
+ "alertPacks.rules.media-source.name",
+ "alertPacks.rules.media-station.message",
+ "alertPacks.rules.media-station.name",
+ "alertPacks.rules.media-track.message",
+ "alertPacks.rules.media-track.name",
+ "alertPacks.rules.module-cold.message",
+ "alertPacks.rules.module-cold.name",
+ "alertPacks.rules.module-hot.message",
+ "alertPacks.rules.module-hot.name",
+ "alertPacks.rules.outside-freezing.message",
+ "alertPacks.rules.outside-freezing.name",
+ "alertPacks.rules.outside-hot.message",
+ "alertPacks.rules.outside-hot.name",
+ "alertPacks.rules.pin-disabled.message",
+ "alertPacks.rules.pin-disabled.name",
+ "alertPacks.rules.pin-enabled.message",
+ "alertPacks.rules.pin-enabled.name",
+ "alertPacks.rules.powershare-state.message",
+ "alertPacks.rules.powershare-state.name",
+ "alertPacks.rules.powershare-stop.message",
+ "alertPacks.rules.powershare-stop.name",
+ "alertPacks.rules.powershare-type.message",
+ "alertPacks.rules.powershare-type.name",
+ "alertPacks.rules.preconditioning-ended.message",
+ "alertPacks.rules.preconditioning-ended.name",
+ "alertPacks.rules.preconditioning.message",
+ "alertPacks.rules.preconditioning.name",
+ "alertPacks.rules.sentry-state.message",
+ "alertPacks.rules.sentry-state.name",
+ "alertPacks.rules.software-version.message",
+ "alertPacks.rules.software-version.name",
+ "alertPacks.rules.unlocked.message",
+ "alertPacks.rules.unlocked.name",
+ "alertPacks.rules.update-available.message",
+ "alertPacks.rules.update-available.name",
+ "alertPacks.rules.update-ended.message",
+ "alertPacks.rules.update-ended.name",
+ "alertPacks.rules.update-schedule.message",
+ "alertPacks.rules.update-schedule.name",
+ "alertPacks.rules.update-started.message",
+ "alertPacks.rules.update-started.name",
+ "alertPacks.rules.update-version.message",
+ "alertPacks.rules.update-version.name",
+ "alertPacks.rules.valet-disabled.message",
+ "alertPacks.rules.valet-disabled.name",
+ "alertPacks.rules.valet-enabled.message",
+ "alertPacks.rules.valet-enabled.name",
+ "alertPacks.rules.window-driver.message",
+ "alertPacks.rules.window-driver.name",
+ "alertPacks.rules.window-rear-driver.message",
+ "alertPacks.rules.window-rear-driver.name",
+ "alertPacks.rules.work-arrived.message",
+ "alertPacks.rules.work-arrived.name",
+ "alertPacks.rules.work-left.message",
+ "alertPacks.rules.work-left.name",
+ "analytics.weeklyDigest.aiNarration.badge",
+ "analytics.weeklyDigest.aiNarration.description",
+ "analytics.weeklyDigest.aiNarration.generateButton",
+ "analytics.weeklyDigest.aiNarration.noVehicleHint",
+ "analytics.weeklyDigest.aiNarration.title",
+ "analytics.weeklyDigest.aiNarration.utcScope",
+ "analytics.weeklyDigest.aiNarration.weekLimit",
"annotation.add",
"annotation.addTitle",
"annotation.cat.custom",
@@ -64041,10 +64299,44 @@
"annotations.hide",
"annotations.markerRow",
"annotations.show",
+ "anomaly.aiBaseline.badge",
+ "anomaly.aiBaseline.description",
+ "anomaly.aiBaseline.generateButton",
+ "anomaly.aiBaseline.title",
+ "anomaly.aiExplanation.badge",
+ "anomaly.aiExplanation.description",
+ "anomaly.aiExplanation.emptyHint",
+ "anomaly.aiExplanation.generateButton",
+ "anomaly.aiExplanation.title",
+ "automations.builder.aiBuilder.badge",
+ "automations.builder.aiBuilder.description",
+ "automations.builder.aiBuilder.draftButton",
+ "automations.builder.aiBuilder.inputLabel",
+ "automations.builder.aiBuilder.noPrompt",
+ "automations.builder.aiBuilder.noVehicle",
+ "automations.builder.aiBuilder.placeholder",
+ "automations.builder.aiBuilder.title",
+ "automations.builder.aiGeofenceAware.actionsLabel",
+ "automations.builder.aiGeofenceAware.applyButton",
+ "automations.builder.aiGeofenceAware.badge",
+ "automations.builder.aiGeofenceAware.conditionsLabel",
+ "automations.builder.aiGeofenceAware.description",
+ "automations.builder.aiGeofenceAware.placeholder",
+ "automations.builder.aiGeofenceAware.promptAria",
+ "automations.builder.aiGeofenceAware.proposalLabel",
+ "automations.builder.aiGeofenceAware.rejectedLabel",
+ "automations.builder.aiGeofenceAware.suggestButton",
+ "automations.builder.aiGeofenceAware.title",
+ "automations.builder.aiGeofenceAware.triggersLabel",
+ "automations.builder.aiGeofenceAware.unnamed",
"avatar.statusIdle",
"avatar.statusOffline",
"avatar.statusOnline",
"avatar.unknown",
+ "battery.aiNarrative.badge",
+ "battery.aiNarrative.description",
+ "battery.aiNarrative.generateButton",
+ "battery.aiNarrative.title",
"battery.delta.aria",
"battery.delta.unknown",
"bulk.clear",
@@ -64080,11 +64372,30 @@
"changelog.openModal",
"changelog.unseenAria",
"changelog.unseenHint",
+ "chargePlanner.aiAgent.badge",
+ "chargePlanner.aiAgent.departureAssumption",
+ "chargePlanner.aiAgent.description",
+ "chargePlanner.aiAgent.emptyHint",
+ "chargePlanner.aiAgent.generateButton",
+ "chargePlanner.aiAgent.title",
+ "chargePlanner.invalidDepartBy",
+ "charging.aiClustering.badge",
+ "charging.aiClustering.emptyHint",
+ "charging.aiClustering.generateButton",
+ "charging.aiClustering.independentDescription",
+ "charging.aiClustering.title",
+ "charging.aiMlClustering.badge",
+ "charging.aiMlClustering.generateButton",
+ "charging.aiMlClustering.independentDescription",
+ "charging.aiMlClustering.noVehicleHint",
+ "charging.aiMlClustering.title",
+ "charging.detail.aiDiagnosis.badge",
+ "charging.detail.aiDiagnosis.description",
+ "charging.detail.aiDiagnosis.emptyHint",
+ "charging.detail.aiDiagnosis.generateButton",
+ "charging.detail.aiDiagnosis.title",
"chart.a11y.fallbackTableLabel",
- "chart.a11y.metricSelector",
"chart.a11y.summary",
- "chart.col.date",
- "chart.col.value",
"chart.export.copy",
"chart.export.copyFailed",
"chart.export.copyFallback",
@@ -64101,6 +64412,11 @@
"chart.noDataDescription",
"chart.sampling.a11yDisclosure",
"chart.sampling.disclosure",
+ "climate.aiPreheatPrecool.badge",
+ "climate.aiPreheatPrecool.description",
+ "climate.aiPreheatPrecool.emptyHint",
+ "climate.aiPreheatPrecool.generateButton",
+ "climate.aiPreheatPrecool.title",
"combobox.clearAria",
"combobox.closeListAria",
"combobox.loading",
@@ -64269,10 +64585,13 @@
"common.wakeUp",
"common.yes",
"common.yesterday",
+ "compare.aiNarrative.badge",
+ "compare.aiNarrative.description",
+ "compare.aiNarrative.generateButton",
+ "compare.aiNarrative.noVehicleHint",
+ "compare.aiNarrative.title",
"compat.banner.body",
"compat.banner.title",
- "confirm.removeDraftRate.message",
- "confirm.removeDraftRate.title",
"confirm.silence.checkbox",
"consent.banner.accept",
"consent.banner.body",
@@ -64286,6 +64605,14 @@
"consent.category.essential.body",
"consent.category.essential.title",
"contextMenu.menuLabel",
+ "costAnalysis.aiNarrative.badge",
+ "costAnalysis.aiNarrative.description",
+ "costAnalysis.aiNarrative.generateButton",
+ "costAnalysis.aiNarrative.title",
+ "dataRepair.aiSuggestions.badge",
+ "dataRepair.aiSuggestions.button",
+ "dataRepair.aiSuggestions.description",
+ "dataRepair.aiSuggestions.title",
"dataSources.partialMessage",
"dataSources.retry",
"dataSources.staleMessage",
@@ -64448,6 +64775,20 @@
"draft.restoredItem",
"draft.unknownTime",
"draft.useDraft",
+ "driveDetail.aiCoaching.badge",
+ "driveDetail.aiCoaching.description",
+ "driveDetail.aiCoaching.generateButton",
+ "driveDetail.aiCoaching.title",
+ "driveDetail.aiSpeedProfile.badge",
+ "driveDetail.aiSpeedProfile.description",
+ "driveDetail.aiSpeedProfile.generateButton",
+ "driveDetail.aiSpeedProfile.title",
+ "drives.aiSearch.badge",
+ "drives.aiSearch.description",
+ "drives.aiSearch.inputLabel",
+ "drives.aiSearch.placeholder",
+ "drives.aiSearch.searchButton",
+ "drives.aiSearch.title",
"editConflict.banner.body",
"editConflict.banner.bodyWithLabel",
"editConflict.banner.switchHint",
@@ -64476,7 +64817,6 @@
"emptyState.signals.live.meaning",
"emptyState.vehicles.list.likelyCause",
"emptyState.vehicles.list.meaning",
- "energyFlow.state.pausedTitle",
"entityContext.title",
"error.forbidden.message",
"error.forbidden.title",
@@ -64553,9 +64893,86 @@
"export.types.drives",
"export.types.importCharging",
"export.types.importDrives",
+ "exports.aiRedaction.badge",
+ "exports.aiRedaction.button",
+ "exports.aiRedaction.description",
+ "exports.aiRedaction.exportType.account",
+ "exports.aiRedaction.exportType.analytics",
+ "exports.aiRedaction.exportType.backup",
+ "exports.aiRedaction.exportType.charging",
+ "exports.aiRedaction.exportType.drives",
+ "exports.aiRedaction.exportType.trips",
+ "exports.aiRedaction.exportTypeLabel",
+ "exports.aiRedaction.exportTypePlaceholder",
+ "exports.aiRedaction.noTypeHint",
+ "exports.aiRedaction.title",
+ "exportsList.breakdown.empty",
+ "exportsList.breakdown.loading",
+ "exportsList.breakdown.storage",
+ "exportsList.breakdown.title",
+ "exportsList.brief.description",
+ "exportsList.brief.eyebrow",
+ "exportsList.brief.failed",
+ "exportsList.brief.failedDetail",
+ "exportsList.brief.freshnessUnknown",
+ "exportsList.brief.loading",
+ "exportsList.brief.partial",
+ "exportsList.brief.paused",
+ "exportsList.brief.pausedRetained",
+ "exportsList.brief.progressDetail",
+ "exportsList.brief.provenance",
+ "exportsList.brief.readyDetail",
+ "exportsList.brief.refreshing",
+ "exportsList.brief.retained",
+ "exportsList.brief.scope",
+ "exportsList.brief.snapshot",
+ "exportsList.brief.storageDetail",
+ "exportsList.brief.storageDisplay",
+ "exportsList.brief.totalDetail",
+ "exportsList.brief.unavailable",
+ "exportsList.brief.unresolved",
+ "exportsList.brief.updated",
+ "exportsList.bulk.delete",
+ "exportsList.bulk.deleteConfirm.body",
+ "exportsList.bulk.deleteConfirm.title",
+ "exportsList.col.actions",
+ "exportsList.col.created",
+ "exportsList.col.format",
+ "exportsList.col.size",
+ "exportsList.col.status",
+ "exportsList.col.type",
+ "exportsList.deleteFailure.notFound",
+ "exportsList.deleteFailure.unknown",
+ "exportsList.download",
+ "exportsList.downloadAria",
+ "exportsList.empty.body",
+ "exportsList.empty.title",
+ "exportsList.jobs.title",
+ "exportsList.kpi.failed",
+ "exportsList.kpi.inProgress",
+ "exportsList.kpi.label",
+ "exportsList.kpi.ready",
+ "exportsList.kpi.storage",
+ "exportsList.kpi.total",
+ "exportsList.resource",
+ "exportsList.rowLabel",
+ "exportsList.source.paused",
+ "exportsList.source.unresolved",
+ "exportsList.status.expired",
+ "exportsList.status.failed",
+ "exportsList.status.processing",
+ "exportsList.status.queued",
+ "exportsList.status.ready",
+ "exportsList.subtitle",
+ "exportsList.title",
+ "exportsList.unknownType",
"feedback.statSkeleton.loading",
+ "feedbackTriage.aiAdvisor.badge",
+ "feedbackTriage.aiAdvisor.button",
+ "feedbackTriage.aiAdvisor.description",
+ "feedbackTriage.aiAdvisor.emptyHint",
+ "feedbackTriage.aiAdvisor.title",
"filter.pending",
- "fleetOps.workOrderDialog.costMinor",
"form.required",
"forms.discard",
"forms.keepEditing",
@@ -64597,8 +65014,16 @@
"fsm.typeOption.telemetryConnection",
"fsm.typeOption.vehicle",
"gas.pollTriggered",
- "geofences.validation.latitudeRange",
- "geofences.validation.longitudeRange",
+ "geofences.aiSuggest.applyButton",
+ "geofences.aiSuggest.badge",
+ "geofences.aiSuggest.currentLabel",
+ "geofences.aiSuggest.description",
+ "geofences.aiSuggest.proposalLabel",
+ "geofences.aiSuggest.radiusLabel",
+ "geofences.aiSuggest.rejectedLabel",
+ "geofences.aiSuggest.suggestButton",
+ "geofences.aiSuggest.title",
+ "geofences.aiSuggest.unnamed",
"global.loading",
"glossary.degradation.howMeasured",
"glossary.degradation.term",
@@ -64617,6 +65042,28 @@
"glossary.stateOfHealth.howMeasured",
"glossary.stateOfHealth.term",
"glossary.tooltipLabel",
+ "helix.ariaLabel",
+ "helix.askHelix",
+ "helix.badge",
+ "helix.errorLabel",
+ "helix.evidence.gathering",
+ "helix.evidence.limited",
+ "helix.evidence.reading",
+ "helix.evidence.successful",
+ "helix.evidence.title",
+ "helix.evidence.unavailable",
+ "helix.thinkingButtonLabel",
+ "helix.thinkingStatusLabel",
+ "helix.tools.batteryStatus",
+ "helix.tools.vehicleLocation",
+ "helix.tools.weeklyDigest",
+ "helix.tooltip",
+ "help.aiHelp.askButton",
+ "help.aiHelp.badge",
+ "help.aiHelp.description",
+ "help.aiHelp.inputLabel",
+ "help.aiHelp.placeholder",
+ "help.aiHelp.title",
"help.battery.degradationRate",
"help.battery.soh",
"help.feedback",
@@ -64645,6 +65092,10 @@
"impersonation.banner.title",
"impersonation.toast.ended",
"impersonation.toast.started",
+ "incidentTimeline.aiSummary.badge",
+ "incidentTimeline.aiSummary.button",
+ "incidentTimeline.aiSummary.description",
+ "incidentTimeline.aiSummary.title",
"lifetime.achievementBadge",
"lifetime.achievementNames.century",
"lifetime.achievementNames.earth-orbit",
@@ -64663,6 +65114,14 @@
"lifetime.achievementNames.thousand-saved",
"lifetime.achievementNames.ton-co2",
"lifetime.achievementNames.tree-planter",
+ "lifetime.aiQA.askButton",
+ "lifetime.aiQA.badge",
+ "lifetime.aiQA.description",
+ "lifetime.aiQA.inputLabel",
+ "lifetime.aiQA.noQuestion",
+ "lifetime.aiQA.noVehicle",
+ "lifetime.aiQA.placeholder",
+ "lifetime.aiQA.title",
"lifetime.unlocked",
"lightbox.close",
"lightbox.counter",
@@ -64690,12 +65149,86 @@
"live.staleBanner.message",
"live.staleBanner.title",
"live.unknown",
+ "liveLogs.aiSummary.badge",
+ "liveLogs.aiSummary.button",
+ "liveLogs.aiSummary.description",
+ "liveLogs.aiSummary.emptyHint",
+ "liveLogs.aiSummary.title",
+ "locations.aiAutoName.applyButton",
+ "locations.aiAutoName.badge",
+ "locations.aiAutoName.currentLabel",
+ "locations.aiAutoName.description",
+ "locations.aiAutoName.proposalLabel",
+ "locations.aiAutoName.rejectedLabel",
+ "locations.aiAutoName.suggestButton",
+ "locations.aiAutoName.title",
+ "maintenance.aiPredictive.badge",
+ "maintenance.aiPredictive.button",
+ "maintenance.aiPredictive.description",
+ "maintenance.aiPredictive.emptyHint",
+ "maintenance.aiPredictive.title",
"mask.copy",
"mask.hide",
"mask.reveal",
"metricCard.moreInfoAbout",
- "milestones.chart.driveCount",
"modal.close",
+ "mqttSseInspector.aiExplainer.badge",
+ "mqttSseInspector.aiExplainer.button",
+ "mqttSseInspector.aiExplainer.description",
+ "mqttSseInspector.aiExplainer.emptyHint",
+ "mqttSseInspector.aiExplainer.title",
+ "notifications.alertStudio.aiBuilder.badge",
+ "notifications.alertStudio.aiBuilder.description",
+ "notifications.alertStudio.aiBuilder.draftButton",
+ "notifications.alertStudio.aiBuilder.emptyHint",
+ "notifications.alertStudio.aiBuilder.inputLabel",
+ "notifications.alertStudio.aiBuilder.placeholder",
+ "notifications.alertStudio.aiBuilder.title",
+ "notifications.alertStudio.aiConflicts.badge",
+ "notifications.alertStudio.aiConflicts.description",
+ "notifications.alertStudio.aiConflicts.detectButton",
+ "notifications.alertStudio.aiConflicts.emptyMessage",
+ "notifications.alertStudio.aiConflicts.flag.cooldownMismatch",
+ "notifications.alertStudio.aiConflicts.flag.severityMismatch",
+ "notifications.alertStudio.aiConflicts.flag.subsumes",
+ "notifications.alertStudio.aiConflicts.flag.triggerModeMismatch",
+ "notifications.alertStudio.aiConflicts.kind.overlapping_threshold",
+ "notifications.alertStudio.aiConflicts.kind.redundant_duplicate",
+ "notifications.alertStudio.aiConflicts.listLabel",
+ "notifications.alertStudio.aiConflicts.reviewButton",
+ "notifications.alertStudio.aiConflicts.ruleLabel",
+ "notifications.alertStudio.aiConflicts.title",
+ "notifications.alertStudio.aiTemplate.applyButton",
+ "notifications.alertStudio.aiTemplate.badge",
+ "notifications.alertStudio.aiTemplate.description",
+ "notifications.alertStudio.aiTemplate.emptyHint",
+ "notifications.alertStudio.aiTemplate.previewLabel",
+ "notifications.alertStudio.aiTemplate.previewPlaceholders",
+ "notifications.alertStudio.aiTemplate.suggestButton",
+ "notifications.alertStudio.aiTemplate.title",
+ "notifications.alertStudio.aiTuning.applyButton",
+ "notifications.alertStudio.aiTuning.badge",
+ "notifications.alertStudio.aiTuning.description",
+ "notifications.alertStudio.aiTuning.previewLabel",
+ "notifications.alertStudio.aiTuning.suggestButton",
+ "notifications.alertStudio.aiTuning.title",
+ "notifications.inbox.aiCategorize.applyButton",
+ "notifications.inbox.aiCategorize.badge",
+ "notifications.inbox.aiCategorize.description",
+ "notifications.inbox.aiCategorize.previewLabel",
+ "notifications.inbox.aiCategorize.suggestButton",
+ "notifications.inbox.aiCategorize.title",
+ "notifications.quietHours.aiSuggestion.applyButton",
+ "notifications.quietHours.aiSuggestion.badge",
+ "notifications.quietHours.aiSuggestion.button",
+ "notifications.quietHours.aiSuggestion.description",
+ "notifications.quietHours.aiSuggestion.previewBypass",
+ "notifications.quietHours.aiSuggestion.previewExistingCount",
+ "notifications.quietHours.aiSuggestion.previewInsufficientHistory",
+ "notifications.quietHours.aiSuggestion.previewLabel",
+ "notifications.quietHours.aiSuggestion.previewWeekdays",
+ "notifications.quietHours.aiSuggestion.previewWindow",
+ "notifications.quietHours.aiSuggestion.title",
"operationalMode.asOf.description",
"operationalMode.asOf.label",
"operationalMode.asOf.shortLabel",
@@ -64741,904 +65274,6 @@
"operations.noMetricValues",
"operations.reviewAll",
"operations.reviewDetails",
- "ownership.action.cancel",
- "ownership.action.edit",
- "ownership.action.header",
- "ownership.action.remove",
- "ownership.action.save",
- "ownership.brief.bounds",
- "ownership.brief.boundsUnknown",
- "ownership.brief.eyebrow",
- "ownership.brief.freshnessUnknown",
- "ownership.brief.loadedAt",
- "ownership.brief.loading",
- "ownership.brief.notComputed",
- "ownership.brief.observedAt",
- "ownership.brief.provenance",
- "ownership.brief.refreshing",
- "ownership.brief.retained",
- "ownership.brief.returned",
- "ownership.brief.selectionRequired",
- "ownership.brief.unavailable",
- "ownership.brief.window",
- "ownership.compliance.apportion.empty",
- "ownership.compliance.apportion.subtitle",
- "ownership.compliance.apportion.title",
- "ownership.compliance.brief.description",
- "ownership.compliance.brief.recorded",
- "ownership.compliance.brief.title",
- "ownership.compliance.delete.message",
- "ownership.compliance.delete.title",
- "ownership.compliance.digest.body",
- "ownership.compliance.digest.title",
- "ownership.compliance.filing.charge",
- "ownership.compliance.filing.digest",
- "ownership.compliance.filing.distance",
- "ownership.compliance.filing.energy",
- "ownership.compliance.filing.period",
- "ownership.compliance.filing.status",
- "ownership.compliance.filingForm.end",
- "ownership.compliance.filingForm.start",
- "ownership.compliance.filingForm.submit",
- "ownership.compliance.filings.add",
- "ownership.compliance.filings.empty",
- "ownership.compliance.filings.subtitle",
- "ownership.compliance.filings.title",
- "ownership.compliance.navTitle",
- "ownership.compliance.notice.body",
- "ownership.compliance.notice.title",
- "ownership.compliance.rate.bbox",
- "ownership.compliance.rate.code",
- "ownership.compliance.rate.grid",
- "ownership.compliance.rate.registration",
- "ownership.compliance.rate.roadUsage",
- "ownership.compliance.rateForm.code",
- "ownership.compliance.rateForm.codeHint",
- "ownership.compliance.rateForm.grid",
- "ownership.compliance.rateForm.gridHint",
- "ownership.compliance.rateForm.label",
- "ownership.compliance.rateForm.maxLat",
- "ownership.compliance.rateForm.maxLng",
- "ownership.compliance.rateForm.minLat",
- "ownership.compliance.rateForm.minLng",
- "ownership.compliance.rateForm.registration",
- "ownership.compliance.rateForm.roadUsage",
- "ownership.compliance.rateForm.save",
- "ownership.compliance.rates.add",
- "ownership.compliance.rates.empty",
- "ownership.compliance.rates.subtitle",
- "ownership.compliance.rates.title",
- "ownership.compliance.row.confidence",
- "ownership.compliance.row.distance",
- "ownership.compliance.row.drives",
- "ownership.compliance.row.emissions",
- "ownership.compliance.row.emissionsRate",
- "ownership.compliance.row.energy",
- "ownership.compliance.row.jurisdiction",
- "ownership.compliance.row.liability",
- "ownership.compliance.row.registration",
- "ownership.compliance.row.roadUsage",
- "ownership.compliance.stat.assigned",
- "ownership.compliance.stat.distance",
- "ownership.compliance.stat.drives",
- "ownership.compliance.stat.emissions",
- "ownership.compliance.stat.liability",
- "ownership.compliance.stat.mixedCurrency",
- "ownership.compliance.stat.periodSource",
- "ownership.compliance.stat.roadUsage",
- "ownership.compliance.stat.unassigned",
- "ownership.compliance.stat.unknownCurrency",
- "ownership.compliance.stat.unknownDrives",
- "ownership.compliance.stat.unknownPeriod",
- "ownership.compliance.subtitle",
- "ownership.compliance.summary.title",
- "ownership.compliance.title",
- "ownership.compliance.unsupported.polygon",
- "ownership.compliance.unsupported.submit",
- "ownership.consumables.brief.scope",
- "ownership.consumables.brief.title",
- "ownership.consumables.card.adjusted",
- "ownership.consumables.card.binding",
- "ownership.consumables.card.harsh",
- "ownership.consumables.card.health",
- "ownership.consumables.card.history",
- "ownership.consumables.card.multiplier",
- "ownership.consumables.card.ofRated",
- "ownership.consumables.card.remaining",
- "ownership.consumables.card.replace",
- "ownership.consumables.card.used",
- "ownership.consumables.card.wearCost",
- "ownership.consumables.delete.message",
- "ownership.consumables.delete.title",
- "ownership.consumables.econ.blended",
- "ownership.consumables.econ.blendedHint",
- "ownership.consumables.econ.odometer",
- "ownership.consumables.econ.parts",
- "ownership.consumables.economics.title",
- "ownership.consumables.economicsBrief.description",
- "ownership.consumables.economicsBrief.title",
- "ownership.consumables.event.cost",
- "ownership.consumables.event.kind",
- "ownership.consumables.event.note",
- "ownership.consumables.event.odometer",
- "ownership.consumables.event.submit",
- "ownership.consumables.eventKind.inspect",
- "ownership.consumables.eventKind.note",
- "ownership.consumables.eventKind.replace",
- "ownership.consumables.eventKind.rotate",
- "ownership.consumables.eventKind.service",
- "ownership.consumables.form.category",
- "ownership.consumables.form.cost",
- "ownership.consumables.form.installed",
- "ownership.consumables.form.label",
- "ownership.consumables.form.notes",
- "ownership.consumables.form.odometer",
- "ownership.consumables.form.position",
- "ownership.consumables.form.positionHint",
- "ownership.consumables.form.ratedDays",
- "ownership.consumables.form.ratedDaysHint",
- "ownership.consumables.form.ratedDistance",
- "ownership.consumables.form.save",
- "ownership.consumables.item.cost",
- "ownership.consumables.item.inService",
- "ownership.consumables.item.installed",
- "ownership.consumables.item.label",
- "ownership.consumables.item.log",
- "ownership.consumables.item.rated",
- "ownership.consumables.item.retired",
- "ownership.consumables.items.add",
- "ownership.consumables.items.empty",
- "ownership.consumables.items.title",
- "ownership.consumables.lifecycles.empty",
- "ownership.consumables.lifecycles.title",
- "ownership.consumables.navTitle",
- "ownership.consumables.notice.body",
- "ownership.consumables.notice.title",
- "ownership.consumables.stat.due",
- "ownership.consumables.stat.lifetime",
- "ownership.consumables.stat.next",
- "ownership.consumables.stat.overdue",
- "ownership.consumables.stat.stress",
- "ownership.consumables.stat.stressHint",
- "ownership.consumables.stat.twelve",
- "ownership.consumables.stress.baseline",
- "ownership.consumables.stress.empty",
- "ownership.consumables.stress.label",
- "ownership.consumables.stress.multiplier",
- "ownership.consumables.stress.observed",
- "ownership.consumables.stress.subtitle",
- "ownership.consumables.stress.title",
- "ownership.consumables.subtitle",
- "ownership.consumables.summary.title",
- "ownership.consumables.title",
- "ownership.consumables.unsupported.physical",
- "ownership.consumables.unsupported.recall",
- "ownership.driver.assign.drive",
- "ownership.driver.assign.driver",
- "ownership.driver.assign.pick",
- "ownership.driver.assign.submit",
- "ownership.driver.brief.description",
- "ownership.driver.brief.title",
- "ownership.driver.chart.aria",
- "ownership.driver.chart.col.aggression",
- "ownership.driver.chart.col.cluster",
- "ownership.driver.chart.col.share",
- "ownership.driver.chart.empty",
- "ownership.driver.chart.inner",
- "ownership.driver.chart.title",
- "ownership.driver.cluster.aggression",
- "ownership.driver.cluster.cohesion",
- "ownership.driver.cluster.cost",
- "ownership.driver.cluster.distance",
- "ownership.driver.cluster.drives",
- "ownership.driver.cluster.efficiency",
- "ownership.driver.cluster.labelled",
- "ownership.driver.cluster.name",
- "ownership.driver.cluster.night",
- "ownership.driver.cluster.regen",
- "ownership.driver.cluster.speed",
- "ownership.driver.cluster.unlabelled",
- "ownership.driver.clusters.empty",
- "ownership.driver.clusters.subtitle",
- "ownership.driver.clusters.title",
- "ownership.driver.delete.message",
- "ownership.driver.delete.title",
- "ownership.driver.fingerprints.empty",
- "ownership.driver.fingerprints.more",
- "ownership.driver.fingerprints.subtitle",
- "ownership.driver.fingerprints.title",
- "ownership.driver.form.accent",
- "ownership.driver.form.accents.amber",
- "ownership.driver.form.accents.cyan",
- "ownership.driver.form.accents.emerald",
- "ownership.driver.form.accents.indigo",
- "ownership.driver.form.accents.purple",
- "ownership.driver.form.accents.rose",
- "ownership.driver.form.name",
- "ownership.driver.form.primary",
- "ownership.driver.fp.ambiguous",
- "ownership.driver.fp.assign",
- "ownership.driver.fp.attribution",
- "ownership.driver.fp.confidence",
- "ownership.driver.fp.distance",
- "ownership.driver.fp.drive",
- "ownership.driver.fp.duration",
- "ownership.driver.fp.features",
- "ownership.driver.fp.inferred",
- "ownership.driver.fp.labelled",
- "ownership.driver.fp.margin",
- "ownership.driver.navTitle",
- "ownership.driver.notice.body",
- "ownership.driver.notice.title",
- "ownership.driver.profile.created",
- "ownership.driver.profile.name",
- "ownership.driver.profile.primary",
- "ownership.driver.profiles.add",
- "ownership.driver.profiles.empty",
- "ownership.driver.profiles.subtitle",
- "ownership.driver.profiles.title",
- "ownership.driver.stat.ambiguous",
- "ownership.driver.stat.ambiguousHint",
- "ownership.driver.stat.clusters",
- "ownership.driver.stat.inferred",
- "ownership.driver.stat.labelled",
- "ownership.driver.stat.separation",
- "ownership.driver.subtitle",
- "ownership.driver.summary.title",
- "ownership.driver.title",
- "ownership.driver.unnamed",
- "ownership.driver.unsupported.identity",
- "ownership.driver.unsupported.passengers",
- "ownership.driver.verdict.moderate",
- "ownership.driver.verdict.strong",
- "ownership.driver.verdict.title",
- "ownership.driver.verdict.weak",
- "ownership.error.body",
- "ownership.error.title",
- "ownership.evidence.empty",
- "ownership.evidence.sampleLine",
- "ownership.evidence.sources",
- "ownership.evidence.subtitle",
- "ownership.evidence.title",
- "ownership.form.currency",
- "ownership.form.moneyHint",
- "ownership.ghost.alert.body",
- "ownership.ghost.alert.title",
- "ownership.ghost.clear",
- "ownership.ghost.col.deviation",
- "ownership.ghost.col.drive",
- "ownership.ghost.col.reason",
- "ownership.ghost.col.score",
- "ownership.ghost.col.trip",
- "ownership.ghost.confidence",
- "ownership.ghost.count",
- "ownership.ghost.ratio",
- "ownership.ghost.scanning",
- "ownership.ghost.subtitle",
- "ownership.ghost.title",
- "ownership.governance.brief.description",
- "ownership.governance.brief.modeUnknown",
- "ownership.governance.brief.scope",
- "ownership.governance.brief.title",
- "ownership.governance.delete.message",
- "ownership.governance.delete.title",
- "ownership.governance.form.bucket",
- "ownership.governance.form.dataset",
- "ownership.governance.form.downsampleAfter",
- "ownership.governance.form.downsampleHint",
- "ownership.governance.form.enabled",
- "ownership.governance.form.hold",
- "ownership.governance.form.pickDataset",
- "ownership.governance.form.retention",
- "ownership.governance.form.save",
- "ownership.governance.impact.blocked",
- "ownership.governance.impact.dataset",
- "ownership.governance.impact.downsampling",
- "ownership.governance.impact.empty",
- "ownership.governance.impact.expiring",
- "ownership.governance.impact.fidelity",
- "ownership.governance.impact.flags",
- "ownership.governance.impact.growth",
- "ownership.governance.impact.reclaim",
- "ownership.governance.impact.retained",
- "ownership.governance.impact.retention",
- "ownership.governance.impact.runway",
- "ownership.governance.impact.runwayDays",
- "ownership.governance.impact.subtitle",
- "ownership.governance.impact.title",
- "ownership.governance.impactBrief.scope",
- "ownership.governance.impactBrief.title",
- "ownership.governance.impactStat.bytes",
- "ownership.governance.impactStat.fidelity",
- "ownership.governance.impactStat.mode",
- "ownership.governance.impactStat.never",
- "ownership.governance.impactStat.rows",
- "ownership.governance.inventory.bytes",
- "ownership.governance.inventory.dataset",
- "ownership.governance.inventory.empty",
- "ownership.governance.inventory.hypertable",
- "ownership.governance.inventory.include",
- "ownership.governance.inventory.included",
- "ownership.governance.inventory.perRow",
- "ownership.governance.inventory.rows",
- "ownership.governance.inventory.select",
- "ownership.governance.inventory.span",
- "ownership.governance.inventory.subtitle",
- "ownership.governance.inventory.title",
- "ownership.governance.inventory.ungoverned",
- "ownership.governance.navTitle",
- "ownership.governance.notice.datasetTitle",
- "ownership.governance.notice.policyWritesBody",
- "ownership.governance.policies.add",
- "ownership.governance.policies.empty",
- "ownership.governance.policies.subtitle",
- "ownership.governance.policies.title",
- "ownership.governance.policy.bucket",
- "ownership.governance.policy.dataset",
- "ownership.governance.policy.disabled",
- "ownership.governance.policy.downsample",
- "ownership.governance.policy.hold",
- "ownership.governance.policy.retention",
- "ownership.governance.run.bytes",
- "ownership.governance.run.dataset",
- "ownership.governance.run.dryRun",
- "ownership.governance.run.executed",
- "ownership.governance.run.expiring",
- "ownership.governance.run.fidelity",
- "ownership.governance.run.mode",
- "ownership.governance.runs.empty",
- "ownership.governance.runs.subtitle",
- "ownership.governance.runs.title",
- "ownership.governance.simulate",
- "ownership.governance.stat.enforcing",
- "ownership.governance.stat.governed",
- "ownership.governance.stat.holds",
- "ownership.governance.stat.holdsHint",
- "ownership.governance.stat.mode",
- "ownership.governance.stat.planOnly",
- "ownership.governance.stat.total",
- "ownership.governance.stat.ungoverned",
- "ownership.governance.subtitle",
- "ownership.governance.summary.title",
- "ownership.governance.title",
- "ownership.governance.unsupported.datasetDeletion",
- "ownership.governance.unsupported.index",
- "ownership.governance.warning.highExpiry",
- "ownership.governance.warning.legalHold",
- "ownership.governance.warning.noAffectedRows",
- "ownership.insurance.brief.title",
- "ownership.insurance.checksum.empty",
- "ownership.insurance.checksum.hash",
- "ownership.insurance.checksum.subtitle",
- "ownership.insurance.checksum.title",
- "ownership.insurance.costBrief.description",
- "ownership.insurance.costBrief.title",
- "ownership.insurance.delete.message",
- "ownership.insurance.delete.title",
- "ownership.insurance.exposureBrief.title",
- "ownership.insurance.factor.baseline",
- "ownership.insurance.factor.better",
- "ownership.insurance.factor.contribution",
- "ownership.insurance.factor.direction",
- "ownership.insurance.factor.name",
- "ownership.insurance.factor.observed",
- "ownership.insurance.factor.samples",
- "ownership.insurance.factor.score",
- "ownership.insurance.factor.weight",
- "ownership.insurance.factor.worse",
- "ownership.insurance.factors.empty",
- "ownership.insurance.factors.subtitle",
- "ownership.insurance.factors.title",
- "ownership.insurance.form.deductible",
- "ownership.insurance.form.end",
- "ownership.insurance.form.insurer",
- "ownership.insurance.form.maxDiscount",
- "ownership.insurance.form.premium",
- "ownership.insurance.form.ref",
- "ownership.insurance.form.save",
- "ownership.insurance.form.start",
- "ownership.insurance.form.subtitle",
- "ownership.insurance.form.telematics",
- "ownership.insurance.form.title",
- "ownership.insurance.lever.confidence",
- "ownership.insurance.lever.delta",
- "ownership.insurance.lever.difficulty",
- "ownership.insurance.lever.effort",
- "ownership.insurance.lever.hours",
- "ownership.insurance.lever.label",
- "ownership.insurance.lever.rank",
- "ownership.insurance.lever.save",
- "ownership.insurance.lever.target",
- "ownership.insurance.levers.empty",
- "ownership.insurance.levers.subtitle",
- "ownership.insurance.levers.title",
- "ownership.insurance.notice.body",
- "ownership.insurance.notice.title",
- "ownership.insurance.policy.coverage",
- "ownership.insurance.policy.openEnded",
- "ownership.insurance.premium.add",
- "ownership.insurance.premium.baseline",
- "ownership.insurance.premium.cap",
- "ownership.insurance.premium.deductible",
- "ownership.insurance.premium.delta",
- "ownership.insurance.premium.discount",
- "ownership.insurance.premium.edit",
- "ownership.insurance.premium.empty",
- "ownership.insurance.premium.expectedLoss",
- "ownership.insurance.premium.modelled",
- "ownership.insurance.premium.perDistance",
- "ownership.insurance.premium.subtitle",
- "ownership.insurance.premium.title",
- "ownership.insurance.premiumBrief.scope",
- "ownership.insurance.premiumBrief.title",
- "ownership.insurance.stat.drives",
- "ownership.insurance.stat.duration",
- "ownership.insurance.stat.exposure",
- "ownership.insurance.stat.frequency",
- "ownership.insurance.stat.frequencyHint",
- "ownership.insurance.stat.lossCost",
- "ownership.insurance.stat.lossCostHint",
- "ownership.insurance.stat.overnightTripDistance",
- "ownership.insurance.stat.overnightTripDistanceHint",
- "ownership.insurance.stat.percentile",
- "ownership.insurance.stat.score",
- "ownership.insurance.stat.scoreHint",
- "ownership.insurance.stat.severity",
- "ownership.insurance.stat.severityHint",
- "ownership.insurance.subtitle",
- "ownership.insurance.summary.empty",
- "ownership.insurance.summary.subtitle",
- "ownership.insurance.summary.title",
- "ownership.insurance.title",
- "ownership.insurance.trend.chart",
- "ownership.insurance.trend.chartAria",
- "ownership.insurance.trend.col.bucket",
- "ownership.insurance.trend.empty",
- "ownership.insurance.trend.score",
- "ownership.insurance.trend.subtitle",
- "ownership.insurance.trend.title",
- "ownership.insurance.unsupported.claims",
- "ownership.insurance.unsupported.quote",
- "ownership.limitations.empty",
- "ownership.limitations.title",
- "ownership.quality.coverage",
- "ownership.quality.samples",
- "ownership.quality.title",
- "ownership.quality.unavailable",
- "ownership.quality.window",
- "ownership.reconcile.audit.empty",
- "ownership.reconcile.audit.title",
- "ownership.reconcile.brief.scope",
- "ownership.reconcile.brief.title",
- "ownership.reconcile.bucket.amount",
- "ownership.reconcile.bucket.label",
- "ownership.reconcile.bucket.lines",
- "ownership.reconcile.bucket.no",
- "ownership.reconcile.bucket.recoverable",
- "ownership.reconcile.bucket.share",
- "ownership.reconcile.bucket.yes",
- "ownership.reconcile.buckets.empty",
- "ownership.reconcile.buckets.subtitle",
- "ownership.reconcile.buckets.title",
- "ownership.reconcile.delete.message",
- "ownership.reconcile.delete.title",
- "ownership.reconcile.dispute.claimed",
- "ownership.reconcile.dispute.digest",
- "ownership.reconcile.dispute.empty",
- "ownership.reconcile.dispute.noReasons",
- "ownership.reconcile.dispute.none",
- "ownership.reconcile.dispute.note",
- "ownership.reconcile.dispute.open",
- "ownership.reconcile.dispute.recovered",
- "ownership.reconcile.dispute.submit",
- "ownership.reconcile.dispute.subtitle",
- "ownership.reconcile.dispute.title",
- "ownership.reconcile.energyBrief.description",
- "ownership.reconcile.energyBrief.title",
- "ownership.reconcile.form.addLine",
- "ownership.reconcile.form.lineEnergy",
- "ownership.reconcile.form.lineLocation",
- "ownership.reconcile.form.lineRef",
- "ownership.reconcile.form.lineTotal",
- "ownership.reconcile.form.lineWhen",
- "ownership.reconcile.form.lines",
- "ownership.reconcile.form.periodEnd",
- "ownership.reconcile.form.periodStart",
- "ownership.reconcile.form.provider",
- "ownership.reconcile.form.ref",
- "ownership.reconcile.form.save",
- "ownership.reconcile.form.total",
- "ownership.reconcile.invoice.audit",
- "ownership.reconcile.invoice.lines",
- "ownership.reconcile.invoice.period",
- "ownership.reconcile.invoice.ref",
- "ownership.reconcile.invoice.status",
- "ownership.reconcile.invoice.total",
- "ownership.reconcile.invoices.empty",
- "ownership.reconcile.invoices.exportScope",
- "ownership.reconcile.invoices.import",
- "ownership.reconcile.invoices.subtitle",
- "ownership.reconcile.invoices.title",
- "ownership.reconcile.line.billed",
- "ownership.reconcile.line.billedEnergy",
- "ownership.reconcile.line.energyDelta",
- "ownership.reconcile.line.expected",
- "ownership.reconcile.line.match",
- "ownership.reconcile.line.measuredEnergy",
- "ownership.reconcile.line.reasons",
- "ownership.reconcile.line.ref",
- "ownership.reconcile.line.timeDelta",
- "ownership.reconcile.line.unnamed",
- "ownership.reconcile.line.variance",
- "ownership.reconcile.lines.empty",
- "ownership.reconcile.lines.title",
- "ownership.reconcile.notice.body",
- "ownership.reconcile.notice.title",
- "ownership.reconcile.stat.billed",
- "ownership.reconcile.stat.billedEnergy",
- "ownership.reconcile.stat.energyVariance",
- "ownership.reconcile.stat.expected",
- "ownership.reconcile.stat.matched",
- "ownership.reconcile.stat.recoverable",
- "ownership.reconcile.stat.unmatched",
- "ownership.reconcile.stat.variance",
- "ownership.reconcile.subtitle",
- "ownership.reconcile.title",
- "ownership.reconcile.uninvoiced.empty",
- "ownership.reconcile.uninvoiced.energy",
- "ownership.reconcile.uninvoiced.location",
- "ownership.reconcile.uninvoiced.narrative",
- "ownership.reconcile.uninvoiced.session",
- "ownership.reconcile.uninvoiced.subtitle",
- "ownership.reconcile.uninvoiced.title",
- "ownership.reconcile.unsupported.submit",
- "ownership.reconcile.unsupported.tax",
- "ownership.source.empty",
- "ownership.source.error",
- "ownership.subscription.billing.annual",
- "ownership.subscription.billing.monthly",
- "ownership.subscription.billing.once",
- "ownership.subscription.brief.title",
- "ownership.subscription.chart.aria",
- "ownership.subscription.chart.col.name",
- "ownership.subscription.chart.col.roi",
- "ownership.subscription.chart.col.verdict",
- "ownership.subscription.chart.empty",
- "ownership.subscription.chart.inner",
- "ownership.subscription.chart.title",
- "ownership.subscription.delete.message",
- "ownership.subscription.delete.title",
- "ownership.subscription.form.benchmark",
- "ownership.subscription.form.benchmarkBasis",
- "ownership.subscription.form.benchmarkHint",
- "ownership.subscription.form.billing",
- "ownership.subscription.form.ended",
- "ownership.subscription.form.endedHint",
- "ownership.subscription.form.kind",
- "ownership.subscription.form.metric",
- "ownership.subscription.form.name",
- "ownership.subscription.form.newDraft",
- "ownership.subscription.form.price",
- "ownership.subscription.form.save",
- "ownership.subscription.form.started",
- "ownership.subscription.form.utcDateBasis",
- "ownership.subscription.kind.oneTime",
- "ownership.subscription.kind.recurring",
- "ownership.subscription.list.add",
- "ownership.subscription.list.benchmark",
- "ownership.subscription.list.empty",
- "ownership.subscription.list.metric",
- "ownership.subscription.list.name",
- "ownership.subscription.list.ongoing",
- "ownership.subscription.list.period",
- "ownership.subscription.list.price",
- "ownership.subscription.list.title",
- "ownership.subscription.metric.charging_sessions",
- "ownership.subscription.metric.connectivity_time",
- "ownership.subscription.metric.drive_count",
- "ownership.subscription.metric.driving_distance",
- "ownership.subscription.metric.supercharging_energy",
- "ownership.subscription.navTitle",
- "ownership.subscription.notice.body",
- "ownership.subscription.notice.title",
- "ownership.subscription.rateBasis",
- "ownership.subscription.roi.empty",
- "ownership.subscription.roi.subtitle",
- "ownership.subscription.roi.title",
- "ownership.subscription.row.activeDays",
- "ownership.subscription.row.breakEven",
- "ownership.subscription.row.monthly",
- "ownership.subscription.row.name",
- "ownership.subscription.row.narrative",
- "ownership.subscription.row.net",
- "ownership.subscription.row.perMonth",
- "ownership.subscription.row.roi",
- "ownership.subscription.row.spend",
- "ownership.subscription.row.usage",
- "ownership.subscription.row.utilisation",
- "ownership.subscription.row.value",
- "ownership.subscription.row.verdict",
- "ownership.subscription.stat.monthly",
- "ownership.subscription.stat.roi",
- "ownership.subscription.stat.saving",
- "ownership.subscription.stat.savingHint",
- "ownership.subscription.stat.spend",
- "ownership.subscription.stat.value",
- "ownership.subscription.subtitle",
- "ownership.subscription.summary.title",
- "ownership.subscription.title",
- "ownership.subscription.unit.drive",
- "ownership.subscription.unit.session",
- "ownership.subscription.unsupported.cancel",
- "ownership.subscription.unsupported.intangible",
- "ownership.tariff.bands.empty",
- "ownership.tariff.bands.none",
- "ownership.tariff.bands.rank",
- "ownership.tariff.bands.subtitle",
- "ownership.tariff.bands.title",
- "ownership.tariff.brief.currencyUnknown",
- "ownership.tariff.brief.description",
- "ownership.tariff.brief.scope",
- "ownership.tariff.brief.submittedScope",
- "ownership.tariff.brief.title",
- "ownership.tariff.chart.aria",
- "ownership.tariff.chart.caption",
- "ownership.tariff.chart.col.plan",
- "ownership.tariff.chart.col.status",
- "ownership.tariff.chart.cost",
- "ownership.tariff.chart.empty",
- "ownership.tariff.chart.statusAlt",
- "ownership.tariff.chart.statusBest",
- "ownership.tariff.chart.statusCurrent",
- "ownership.tariff.chart.subtitle",
- "ownership.tariff.chart.title",
- "ownership.tariff.controls.all",
- "ownership.tariff.controls.run",
- "ownership.tariff.controls.selected",
- "ownership.tariff.controls.shiftable",
- "ownership.tariff.controls.subtitle",
- "ownership.tariff.controls.switchFee",
- "ownership.tariff.controls.title",
- "ownership.tariff.delete.message",
- "ownership.tariff.delete.title",
- "ownership.tariff.form.addBand",
- "ownership.tariff.form.bandEnd",
- "ownership.tariff.form.bandLabel",
- "ownership.tariff.form.bandPrice",
- "ownership.tariff.form.bandStart",
- "ownership.tariff.form.bands",
- "ownership.tariff.form.defaultRateLabel",
- "ownership.tariff.form.demand",
- "ownership.tariff.form.export",
- "ownership.tariff.form.isCurrent",
- "ownership.tariff.form.name",
- "ownership.tariff.form.provider",
- "ownership.tariff.form.save",
- "ownership.tariff.form.standing",
- "ownership.tariff.form.structure",
- "ownership.tariff.notice.body",
- "ownership.tariff.notice.title",
- "ownership.tariff.plan.bands",
- "ownership.tariff.plan.compare",
- "ownership.tariff.plan.compareNamed",
- "ownership.tariff.plan.current",
- "ownership.tariff.plan.demand",
- "ownership.tariff.plan.name",
- "ownership.tariff.plan.noProvider",
- "ownership.tariff.plan.onPlan",
- "ownership.tariff.plan.standing",
- "ownership.tariff.plan.structure",
- "ownership.tariff.plans.add",
- "ownership.tariff.plans.empty",
- "ownership.tariff.plans.subtitle",
- "ownership.tariff.plans.title",
- "ownership.tariff.result.annual",
- "ownership.tariff.result.breakEven",
- "ownership.tariff.result.breakdown",
- "ownership.tariff.result.currentTag",
- "ownership.tariff.result.days",
- "ownership.tariff.result.delta",
- "ownership.tariff.result.effective",
- "ownership.tariff.result.peak",
- "ownership.tariff.result.plan",
- "ownership.tariff.result.rank",
- "ownership.tariff.result.shift",
- "ownership.tariff.results.empty",
- "ownership.tariff.results.title",
- "ownership.tariff.stat.observed",
- "ownership.tariff.stat.plans",
- "ownership.tariff.stat.saving",
- "ownership.tariff.stat.sessions",
- "ownership.tariff.stat.shift",
- "ownership.tariff.structure.demand",
- "ownership.tariff.structure.flat",
- "ownership.tariff.structure.realTime",
- "ownership.tariff.structure.tiered",
- "ownership.tariff.structure.tou",
- "ownership.tariff.subtitle",
- "ownership.tariff.summary.empty",
- "ownership.tariff.summary.title",
- "ownership.tariff.title",
- "ownership.tariff.unsupported.future",
- "ownership.tariff.unsupported.home",
- "ownership.trust.brief.title",
- "ownership.trust.calibration.aria",
- "ownership.trust.calibration.chart",
- "ownership.trust.calibration.col.bias",
- "ownership.trust.calibration.col.bin",
- "ownership.trust.calibration.col.error",
- "ownership.trust.calibration.col.samples",
- "ownership.trust.calibration.empty",
- "ownership.trust.calibration.first",
- "ownership.trust.calibration.for",
- "ownership.trust.calibration.last",
- "ownership.trust.calibration.title",
- "ownership.trust.card.bias",
- "ownership.trust.card.coverage",
- "ownership.trust.card.drift",
- "ownership.trust.card.grade",
- "ownership.trust.card.inspect",
- "ownership.trust.card.mape",
- "ownership.trust.card.median",
- "ownership.trust.card.model",
- "ownership.trust.card.rmse",
- "ownership.trust.card.samples",
- "ownership.trust.card.skill",
- "ownership.trust.cards.empty",
- "ownership.trust.cards.subtitle",
- "ownership.trust.cards.title",
- "ownership.trust.form.high",
- "ownership.trust.form.horizon",
- "ownership.trust.form.low",
- "ownership.trust.form.model",
- "ownership.trust.form.reference",
- "ownership.trust.form.referenceHint",
- "ownership.trust.form.submit",
- "ownership.trust.form.target",
- "ownership.trust.form.unit",
- "ownership.trust.form.unitHint",
- "ownership.trust.form.value",
- "ownership.trust.navTitle",
- "ownership.trust.notice.body",
- "ownership.trust.notice.title",
- "ownership.trust.outcome.submit",
- "ownership.trust.outcome.value",
- "ownership.trust.pred.error",
- "ownership.trust.pred.horizon",
- "ownership.trust.pred.inside",
- "ownership.trust.pred.interval",
- "ownership.trust.pred.model",
- "ownership.trust.pred.observed",
- "ownership.trust.pred.outside",
- "ownership.trust.pred.pending",
- "ownership.trust.pred.predicted",
- "ownership.trust.pred.reference",
- "ownership.trust.pred.score",
- "ownership.trust.pred.sourceError",
- "ownership.trust.pred.when",
- "ownership.trust.predictions.add",
- "ownership.trust.predictions.empty",
- "ownership.trust.predictions.subtitle",
- "ownership.trust.predictions.title",
- "ownership.trust.stat.portfolio",
- "ownership.trust.stat.scored",
- "ownership.trust.stat.trusted",
- "ownership.trust.stat.unreliable",
- "ownership.trust.stat.watch",
- "ownership.trust.subtitle",
- "ownership.trust.summary.title",
- "ownership.trust.title",
- "ownership.trust.unsupported.cause",
- "ownership.trust.unsupported.retrain",
- "ownership.unsupported.title",
- "ownership.verdict.active",
- "ownership.verdict.cancel",
- "ownership.verdict.expired",
- "ownership.verdict.keep",
- "ownership.verdict.moderate",
- "ownership.verdict.review",
- "ownership.verdict.strong",
- "ownership.verdict.too_early",
- "ownership.verdict.unknown",
- "ownership.verdict.weak",
- "ownership.warranty.binding.capacity",
- "ownership.warranty.binding.distance",
- "ownership.warranty.binding.time",
- "ownership.warranty.brief.scope",
- "ownership.warranty.brief.title",
- "ownership.warranty.bundle.body",
- "ownership.warranty.bundle.title",
- "ownership.warranty.card.binding",
- "ownership.warranty.card.breach",
- "ownership.warranty.card.capacity",
- "ownership.warranty.card.closing",
- "ownership.warranty.card.distance",
- "ownership.warranty.card.distanceHint",
- "ownership.warranty.card.headroom",
- "ownership.warranty.card.pace",
- "ownership.warranty.card.projected",
- "ownership.warranty.card.readiness",
- "ownership.warranty.card.time",
- "ownership.warranty.card.timeHint",
- "ownership.warranty.check.detail",
- "ownership.warranty.check.label",
- "ownership.warranty.check.severity",
- "ownership.warranty.check.state",
- "ownership.warranty.claim.amount",
- "ownership.warranty.claim.note",
- "ownership.warranty.claim.opened",
- "ownership.warranty.claim.status",
- "ownership.warranty.claim.title",
- "ownership.warranty.claimForm.amount",
- "ownership.warranty.claimForm.note",
- "ownership.warranty.claimForm.status",
- "ownership.warranty.claimForm.submit",
- "ownership.warranty.claimForm.title",
- "ownership.warranty.claims.empty",
- "ownership.warranty.claims.subtitle",
- "ownership.warranty.claims.title",
- "ownership.warranty.coverages.empty",
- "ownership.warranty.coverages.title",
- "ownership.warranty.delete.message",
- "ownership.warranty.delete.title",
- "ownership.warranty.form.deductible",
- "ownership.warranty.form.floor",
- "ownership.warranty.form.floorHint",
- "ownership.warranty.form.kind",
- "ownership.warranty.form.label",
- "ownership.warranty.form.notes",
- "ownership.warranty.form.provider",
- "ownership.warranty.form.save",
- "ownership.warranty.form.start",
- "ownership.warranty.form.startOdo",
- "ownership.warranty.form.termDays",
- "ownership.warranty.form.termDistance",
- "ownership.warranty.form.termHint",
- "ownership.warranty.kind.aftermarket",
- "ownership.warranty.kind.basic",
- "ownership.warranty.kind.battery",
- "ownership.warranty.kind.corrosion",
- "ownership.warranty.kind.drivetrain",
- "ownership.warranty.kind.extended",
- "ownership.warranty.kind.tires",
- "ownership.warranty.list.add",
- "ownership.warranty.list.empty",
- "ownership.warranty.list.title",
- "ownership.warranty.navTitle",
- "ownership.warranty.notice.body",
- "ownership.warranty.notice.title",
- "ownership.warranty.readiness.empty",
- "ownership.warranty.readiness.subtitle",
- "ownership.warranty.readiness.title",
- "ownership.warranty.row.claim",
- "ownership.warranty.row.deductible",
- "ownership.warranty.row.floor",
- "ownership.warranty.row.label",
- "ownership.warranty.row.start",
- "ownership.warranty.row.term",
- "ownership.warranty.severity.critical",
- "ownership.warranty.severity.high",
- "ownership.warranty.severity.low",
- "ownership.warranty.severity.medium",
- "ownership.warranty.stat.active",
- "ownership.warranty.stat.claimed",
- "ownership.warranty.stat.expiring",
- "ownership.warranty.stat.next",
- "ownership.warranty.stat.odometer",
- "ownership.warranty.stat.odometerHint",
- "ownership.warranty.status.approved",
- "ownership.warranty.status.closed",
- "ownership.warranty.status.denied",
- "ownership.warranty.status.draft",
- "ownership.warranty.status.expiring",
- "ownership.warranty.status.submitted",
- "ownership.warranty.subtitle",
- "ownership.warranty.summary.title",
- "ownership.warranty.title",
- "ownership.warranty.unsupported.legal",
- "ownership.warranty.unsupported.submit",
- "ownership.window.days",
- "ownership.window.label",
"pagination.currentPage",
"pagination.first",
"pagination.go",
@@ -65656,6 +65291,39 @@
"pin.pin",
"pin.pinned",
"pin.unpin",
+ "powerDashboards.aiDrafter.applyButton",
+ "powerDashboards.aiDrafter.applyTooltip",
+ "powerDashboards.aiDrafter.badge",
+ "powerDashboards.aiDrafter.button",
+ "powerDashboards.aiDrafter.description",
+ "powerDashboards.aiDrafter.promptLabel",
+ "powerDashboards.aiDrafter.promptPlaceholder",
+ "powerDashboards.aiDrafter.title",
+ "powerGrafana.aiDrafter.applyButton",
+ "powerGrafana.aiDrafter.applyTooltip",
+ "powerGrafana.aiDrafter.badge",
+ "powerGrafana.aiDrafter.button",
+ "powerGrafana.aiDrafter.description",
+ "powerGrafana.aiDrafter.previewDatasource",
+ "powerGrafana.aiDrafter.previewLabel",
+ "powerGrafana.aiDrafter.previewTables",
+ "powerGrafana.aiDrafter.previewTargets",
+ "powerGrafana.aiDrafter.previewType",
+ "powerGrafana.aiDrafter.previewUntitled",
+ "powerGrafana.aiDrafter.promptLabel",
+ "powerGrafana.aiDrafter.promptPlaceholder",
+ "powerGrafana.aiDrafter.title",
+ "powerSql.aiDrafter.applyButton",
+ "powerSql.aiDrafter.applyTooltip",
+ "powerSql.aiDrafter.badge",
+ "powerSql.aiDrafter.button",
+ "powerSql.aiDrafter.description",
+ "powerSql.aiDrafter.noNarration",
+ "powerSql.aiDrafter.noTypedDraft",
+ "powerSql.aiDrafter.previewLabel",
+ "powerSql.aiDrafter.promptLabel",
+ "powerSql.aiDrafter.promptPlaceholder",
+ "powerSql.aiDrafter.title",
"presentation.kiosk.help",
"presentation.kiosk.open",
"presentation.report.copyHelp",
@@ -65687,7 +65355,6 @@
"problemReport.policy.userEmail",
"problemReport.submitError",
"problemReport.title",
- "productPreferences.defaultVehicle.unavailable",
"progressRing.ariaLabel",
"provenance.cached",
"provenance.historical",
@@ -65722,6 +65389,13 @@
"pwa.update.runningLabel",
"pwa.update.serverLabel",
"pwa.update.unsavedBlocked",
+ "quietHours.severity.critical",
+ "quietHours.severity.info",
+ "quietHours.severity.warn",
+ "range.aiPredict.badge",
+ "range.aiPredict.description",
+ "range.aiPredict.generateButton",
+ "range.aiPredict.title",
"ratelimit.banner",
"ratelimit.retry",
"rbac.toasts.saved",
@@ -65736,11 +65410,6 @@
"replay.controls.restart",
"replay.controls.speed",
"replay.controls.stop",
- "replay.elevation.aria",
- "replay.elevation.gainLoss",
- "replay.elevation.label",
- "replay.elevation.noData",
- "replay.elevation.title",
"replay.markers.atPercent",
"replay.overview.clusterCount",
"replay.overview.clusterCount_one",
@@ -65769,6 +65438,11 @@
"requiresAuth.title",
"route.noLocationData",
"route.roundTrip",
+ "routeEfficiency.aiSuggestions.badge",
+ "routeEfficiency.aiSuggestions.description",
+ "routeEfficiency.aiSuggestions.emptyHint",
+ "routeEfficiency.aiSuggestions.generateButton",
+ "routeEfficiency.aiSuggestions.title",
"routes.aPIKeys",
"routes.actionCenter",
"routes.activeSessions",
@@ -66035,6 +65709,10 @@
"runtimeHealth.systemStatus",
"runtimeHealth.telemetryLastSeen",
"runtimeHealth.title",
+ "safetySettings.aiExplainer.badge",
+ "safetySettings.aiExplainer.button",
+ "safetySettings.aiExplainer.description",
+ "safetySettings.aiExplainer.title",
"savedViews.announceApplied",
"savedViews.announceCleared",
"savedViews.appliedBadge",
@@ -66058,6 +65736,13 @@
"savedViews.unpin",
"savedViews.unsetDefault",
"score.aria",
+ "search.aiSearch.badge",
+ "search.aiSearch.description",
+ "search.aiSearch.emptyHint",
+ "search.aiSearch.inputLabel",
+ "search.aiSearch.placeholder",
+ "search.aiSearch.searchButton",
+ "search.aiSearch.title",
"search.history.clear",
"search.history.removeAria",
"search.history.title",
@@ -66069,8 +65754,11 @@
"serviceMode.banner.endingNow",
"serviceMode.banner.endsIn",
"serviceMode.banner.maintenanceTitle",
- "shareCard.states.cachedPaused",
- "shareCard.states.paused",
+ "sharing.aiTripPostcard.badge",
+ "sharing.aiTripPostcard.button",
+ "sharing.aiTripPostcard.description",
+ "sharing.aiTripPostcard.noTripHint",
+ "sharing.aiTripPostcard.title",
"shortcuts.empty",
"shortcuts.filter.all",
"shortcuts.filter.global",
@@ -66101,20 +65789,35 @@
"signalConfig.setCategoryInterval",
"signalConfig.subscribeCount",
"signalConfig.title",
- "signalLog.noVehicle",
+ "signalExplorer.aiFilter.applyButton",
+ "signalExplorer.aiFilter.applyTooltip",
+ "signalExplorer.aiFilter.badge",
+ "signalExplorer.aiFilter.button",
+ "signalExplorer.aiFilter.description",
+ "signalExplorer.aiFilter.promptLabel",
+ "signalExplorer.aiFilter.promptPlaceholder",
+ "signalExplorer.aiFilter.title",
"slider.thumbMax",
"slider.thumbMin",
- "smallMultiples.noData",
+ "softwareUpdates.aiNarration.badge",
+ "softwareUpdates.aiNarration.button",
+ "softwareUpdates.aiNarration.description",
+ "softwareUpdates.aiNarration.noVehicleHint",
+ "softwareUpdates.aiNarration.title",
"sourceLayer.age",
"sourceLayer.log.desc",
"sourceLayer.log.label",
"sourceLayer.stale.label",
"sourceLayer.unknown.desc",
- "sparkline.ariaLabel",
"statCard.loading",
"statCard.trend.decreased",
"statCard.trend.increased",
"statCard.trend.unchanged",
+ "stateMachineDebugger.aiNarrator.badge",
+ "stateMachineDebugger.aiNarrator.button",
+ "stateMachineDebugger.aiNarrator.description",
+ "stateMachineDebugger.aiNarrator.emptyHint",
+ "stateMachineDebugger.aiNarrator.title",
"statusBar.alerts.count",
"statusBar.alerts.countMore",
"statusBar.alerts.newCritical",
@@ -66260,6 +65963,16 @@
"table.selection.selectAll",
"table.selection.selectRow",
"table.selection.selectRowNamed",
+ "tco.aiNarration.badge",
+ "tco.aiNarration.button",
+ "tco.aiNarration.description",
+ "tco.aiNarration.noVehicleHint",
+ "tco.aiNarration.title",
+ "tempImpact.aiNarrative.badge",
+ "tempImpact.aiNarrative.description",
+ "tempImpact.aiNarrative.emptyHint",
+ "tempImpact.aiNarrative.generateButton",
+ "tempImpact.aiNarrative.title",
"tesla.reauth.body",
"tesla.reauth.cta",
"tesla.reauth.title",
@@ -66286,6 +65999,11 @@
"timeMachine.banner.title",
"timeline.empty",
"timeline.label",
+ "tirePressure.aiTrendReasoning.badge",
+ "tirePressure.aiTrendReasoning.description",
+ "tirePressure.aiTrendReasoning.generateButton",
+ "tirePressure.aiTrendReasoning.noVehicleHint",
+ "tirePressure.aiTrendReasoning.title",
"toast.admin.apiKey.create.success",
"toast.admin.apiKey.delete.success",
"toast.admin.apiKey.revoke.success",
@@ -66362,13 +66080,64 @@
"tour.tours.vehicles.description",
"tour.tours.vehicles.title",
"transitionArrow.label",
+ "tripPlanner.aiAgent.badge",
+ "tripPlanner.aiAgent.draftingDescription",
+ "tripPlanner.aiAgent.generateButton",
+ "tripPlanner.aiAgent.noDestination",
+ "tripPlanner.aiAgent.noOrigin",
+ "tripPlanner.aiAgent.noVehicle",
+ "tripPlanner.aiAgent.title",
+ "trips.detail.aiSuggestName.badge",
+ "trips.detail.aiSuggestName.description",
+ "trips.detail.aiSuggestName.generateButton",
+ "trips.detail.aiSuggestName.title",
"upstream.banner",
+ "vampireDrain.aiNarrative.badge",
+ "vampireDrain.aiNarrative.description",
+ "vampireDrain.aiNarrative.generateButton",
+ "vampireDrain.aiNarrative.noVehicleHint",
+ "vampireDrain.aiNarrative.title",
"vehiclePicker.aria",
"vehiclePicker.fallbackName",
- "vehicleSettings.validation.invalidDate",
- "widget.motorPerformance.outsideScale"
+ "vehicles.aiPaintPreview.badge",
+ "vehicles.aiPaintPreview.button",
+ "vehicles.aiPaintPreview.description",
+ "vehicles.aiPaintPreview.noVehicleHint",
+ "vehicles.aiPaintPreview.title",
+ "voiceMode.actions.muteTts",
+ "voiceMode.actions.muteTtsShort",
+ "voiceMode.actions.startListening",
+ "voiceMode.actions.startListeningShort",
+ "voiceMode.actions.stopAll",
+ "voiceMode.actions.stopAllShort",
+ "voiceMode.actions.stopListening",
+ "voiceMode.actions.stopListeningShort",
+ "voiceMode.actions.unmuteTts",
+ "voiceMode.actions.unmuteTtsShort",
+ "voiceMode.button",
+ "voiceMode.emptyHint",
+ "voiceMode.errors.sttFailed",
+ "voiceMode.errors.unsupported",
+ "voiceMode.idleHint",
+ "voiceMode.listeningHint",
+ "voiceMode.processingDisclosure",
+ "voiceMode.title",
+ "voiceMode.transcriptLabel",
+ "voiceMode.unsupportedHint",
+ "watchFaceNL.badge",
+ "watchFaceNL.button",
+ "watchFaceNL.description",
+ "watchFaceNL.inputLabel",
+ "watchFaceNL.placeholder",
+ "watchFaceNL.title",
+ "yearReview.aiNarration.badge",
+ "yearReview.aiNarration.emptyHint",
+ "yearReview.aiNarration.generateButton",
+ "yearReview.aiNarration.scopeDescription",
+ "yearReview.aiNarration.title",
+ "yearReview.pageTitle"
],
- "exports": [
+ "diagnostics": [
"a11y.breadcrumb",
"a11y.breadcrumbHome",
"a11y.dataFreshness",
@@ -66697,6 +66466,58 @@
"anomaly.aiExplanation.emptyHint",
"anomaly.aiExplanation.generateButton",
"anomaly.aiExplanation.title",
+ "anomaly.aiInsights",
+ "anomaly.baseline",
+ "anomaly.categories",
+ "anomaly.category.battery",
+ "anomaly.category.charging",
+ "anomaly.category.hvac",
+ "anomaly.category.motors",
+ "anomaly.category.tires",
+ "anomaly.category.unknown",
+ "anomaly.colSignal",
+ "anomaly.count",
+ "anomaly.explanation.aboveMaximum",
+ "anomaly.explanation.belowMinimum",
+ "anomaly.explanation.decreased",
+ "anomaly.explanation.decreasedPercent",
+ "anomaly.explanation.increased",
+ "anomaly.explanation.increasedPercent",
+ "anomaly.explanation.zScore",
+ "anomaly.frequency",
+ "anomaly.frequencyAria",
+ "anomaly.healthSummary",
+ "anomaly.kpis",
+ "anomaly.last24h",
+ "anomaly.last7d",
+ "anomaly.monitored",
+ "anomaly.noData",
+ "anomaly.noFrequency",
+ "anomaly.noHealth",
+ "anomaly.overview",
+ "anomaly.selectVehicle",
+ "anomaly.severity.critical",
+ "anomaly.severity.info",
+ "anomaly.severity.warning",
+ "anomaly.status.critical",
+ "anomaly.status.normal",
+ "anomaly.status.unknown",
+ "anomaly.status.warning",
+ "anomaly.subtitle",
+ "anomaly.summary.available",
+ "anomaly.summary.day",
+ "anomaly.summary.period",
+ "anomaly.summary.scope",
+ "anomaly.summary.sevenDays",
+ "anomaly.summary.snapshot",
+ "anomaly.summary.title",
+ "anomaly.summary.unavailable",
+ "anomaly.timeline",
+ "anomaly.title",
+ "anomaly.type.range",
+ "anomaly.type.trend",
+ "anomaly.type.z_score",
+ "anomaly.value",
"automations.builder.aiBuilder.badge",
"automations.builder.aiBuilder.description",
"automations.builder.aiBuilder.draftButton",
@@ -66783,8 +66604,13 @@
"charging.detail.aiDiagnosis.emptyHint",
"charging.detail.aiDiagnosis.generateButton",
"charging.detail.aiDiagnosis.title",
+ "chargingPlaces.workspace.initialPaused",
+ "chargingPlaces.workspace.pausedRetained",
"chart.a11y.fallbackTableLabel",
+ "chart.a11y.metricSelector",
"chart.a11y.summary",
+ "chart.col.date",
+ "chart.col.value",
"chart.export.copy",
"chart.export.copyFailed",
"chart.export.copyFallback",
@@ -66998,6 +66824,9 @@
"costAnalysis.aiNarrative.description",
"costAnalysis.aiNarrative.generateButton",
"costAnalysis.aiNarrative.title",
+ "costAnalysis.forecast.lowerBound",
+ "costAnalysis.forecast.upperBound",
+ "dashcam.reconstruction.pointCount",
"dataRepair.aiSuggestions.badge",
"dataRepair.aiSuggestions.button",
"dataRepair.aiSuggestions.description",
@@ -67045,6 +66874,20 @@
"dataUnavailable.vehicleOffline.title",
"dataUnavailable.vehicleOffline.whatToDo",
"dataUnavailable.whatToDo",
+ "date.preset.all",
+ "date.preset.last1y",
+ "date.preset.last24h",
+ "date.preset.last30",
+ "date.preset.last6h",
+ "date.preset.last7",
+ "date.preset.last90",
+ "date.preset.lastMonth",
+ "date.preset.live",
+ "date.preset.mtd",
+ "date.preset.qtd",
+ "date.preset.today",
+ "date.preset.yesterday",
+ "date.preset.ytd",
"delta.noComparison",
"delta.title",
"demoData.detail",
@@ -67145,6 +66988,21 @@
"developerReference.stats.valueState.invalid",
"developerReference.stats.valueState.missing",
"developerReference.stats.valueState.value",
+ "diagnostics.brief.analysisTitle",
+ "diagnostics.brief.available",
+ "diagnostics.brief.chooseSignal",
+ "diagnostics.brief.effectBasis",
+ "diagnostics.brief.evidenceScore",
+ "diagnostics.brief.noSignal",
+ "diagnostics.brief.packTitle",
+ "diagnostics.brief.partial",
+ "diagnostics.brief.provenance",
+ "diagnostics.brief.refreshing",
+ "diagnostics.brief.scope",
+ "diagnostics.brief.scoreBasis",
+ "diagnostics.brief.sourceDetails",
+ "diagnostics.brief.sourceUnknown",
+ "diagnostics.brief.unavailable",
"draft.discardDraft",
"draft.recovery.close",
"draft.recovery.discard",
@@ -67209,6 +67067,7 @@
"entityContext.title",
"error.forbidden.message",
"error.forbidden.title",
+ "error.loadFailed",
"error.network.message",
"error.network.offlineDetail",
"error.network.offlineTitle",
@@ -67295,66 +67154,6 @@
"exports.aiRedaction.exportTypePlaceholder",
"exports.aiRedaction.noTypeHint",
"exports.aiRedaction.title",
- "exportsList.breakdown.empty",
- "exportsList.breakdown.loading",
- "exportsList.breakdown.storage",
- "exportsList.breakdown.title",
- "exportsList.brief.description",
- "exportsList.brief.eyebrow",
- "exportsList.brief.failed",
- "exportsList.brief.failedDetail",
- "exportsList.brief.freshnessUnknown",
- "exportsList.brief.loading",
- "exportsList.brief.partial",
- "exportsList.brief.paused",
- "exportsList.brief.pausedRetained",
- "exportsList.brief.progressDetail",
- "exportsList.brief.provenance",
- "exportsList.brief.readyDetail",
- "exportsList.brief.refreshing",
- "exportsList.brief.retained",
- "exportsList.brief.scope",
- "exportsList.brief.snapshot",
- "exportsList.brief.storageDetail",
- "exportsList.brief.storageDisplay",
- "exportsList.brief.totalDetail",
- "exportsList.brief.unavailable",
- "exportsList.brief.unresolved",
- "exportsList.brief.updated",
- "exportsList.bulk.delete",
- "exportsList.bulk.deleteConfirm.body",
- "exportsList.bulk.deleteConfirm.title",
- "exportsList.col.actions",
- "exportsList.col.created",
- "exportsList.col.format",
- "exportsList.col.size",
- "exportsList.col.status",
- "exportsList.col.type",
- "exportsList.deleteFailure.notFound",
- "exportsList.deleteFailure.unknown",
- "exportsList.download",
- "exportsList.downloadAria",
- "exportsList.empty.body",
- "exportsList.empty.title",
- "exportsList.jobs.title",
- "exportsList.kpi.failed",
- "exportsList.kpi.inProgress",
- "exportsList.kpi.label",
- "exportsList.kpi.ready",
- "exportsList.kpi.storage",
- "exportsList.kpi.total",
- "exportsList.resource",
- "exportsList.rowLabel",
- "exportsList.source.paused",
- "exportsList.source.unresolved",
- "exportsList.status.expired",
- "exportsList.status.failed",
- "exportsList.status.processing",
- "exportsList.status.queued",
- "exportsList.status.ready",
- "exportsList.subtitle",
- "exportsList.title",
- "exportsList.unknownType",
"feedback.statSkeleton.loading",
"feedbackTriage.aiAdvisor.badge",
"feedbackTriage.aiAdvisor.button",
@@ -67458,6 +67257,8 @@
"help.feedback",
"help.feedbackLabel",
"help.lifetime.avgEfficiency",
+ "help.rootCauseIntelligence.hypotheses",
+ "help.rootCauseIntelligence.quality",
"help.shortcuts",
"help.shortcutsLabel",
"help.signal.stale",
@@ -67631,6 +67432,7 @@
"operationalMode.live.shortLabel",
"operationalMode.writeBlocked",
"operationalMode.writeNotice.title",
+ "operationalSource.fetchedAt",
"operations.attention",
"operations.detailTitle",
"operations.emptyFieldsHidden",
@@ -67799,6 +67601,11 @@
"replay.controls.restart",
"replay.controls.speed",
"replay.controls.stop",
+ "replay.elevation.aria",
+ "replay.elevation.gainLoss",
+ "replay.elevation.label",
+ "replay.elevation.noData",
+ "replay.elevation.title",
"replay.markers.atPercent",
"replay.overview.clusterCount",
"replay.overview.clusterCount_one",
@@ -67825,6 +67632,91 @@
"replay.shortcuts.startEnd",
"replay.shortcuts.title",
"requiresAuth.title",
+ "rootCauseIntelligence.graph.concurrent",
+ "rootCauseIntelligence.graph.consideredOnly",
+ "rootCauseIntelligence.graph.focalNodeLabel",
+ "rootCauseIntelligence.graph.focalTag",
+ "rootCauseIntelligence.graph.lags",
+ "rootCauseIntelligence.graph.leads",
+ "rootCauseIntelligence.graph.noRelated",
+ "rootCauseIntelligence.graph.pickOne",
+ "rootCauseIntelligence.graph.relationSamples",
+ "rootCauseIntelligence.graph.title",
+ "rootCauseIntelligence.hypotheses.effect",
+ "rootCauseIntelligence.hypotheses.helpLabel",
+ "rootCauseIntelligence.hypotheses.lag",
+ "rootCauseIntelligence.hypotheses.noFocalShift",
+ "rootCauseIntelligence.hypotheses.noneCorroborate",
+ "rootCauseIntelligence.hypotheses.pickOne",
+ "rootCauseIntelligence.hypotheses.samples",
+ "rootCauseIntelligence.hypotheses.score",
+ "rootCauseIntelligence.hypotheses.title",
+ "rootCauseIntelligence.interpretation.coverage",
+ "rootCauseIntelligence.interpretation.limitationsTitle",
+ "rootCauseIntelligence.interpretation.overallScore",
+ "rootCauseIntelligence.interpretation.pickOne",
+ "rootCauseIntelligence.interpretation.title",
+ "rootCauseIntelligence.kpis.effect",
+ "rootCauseIntelligence.kpis.effectNone",
+ "rootCauseIntelligence.kpis.effectSubtitle",
+ "rootCauseIntelligence.kpis.hypotheses",
+ "rootCauseIntelligence.kpis.hypothesesSubtitle",
+ "rootCauseIntelligence.kpis.quality",
+ "rootCauseIntelligence.kpis.qualitySubtitle",
+ "rootCauseIntelligence.kpis.samples",
+ "rootCauseIntelligence.kpis.samplesSubtitle",
+ "rootCauseIntelligence.kpis.sectionLabel",
+ "rootCauseIntelligence.picker.focalHint",
+ "rootCauseIntelligence.picker.focalLabel",
+ "rootCauseIntelligence.picker.focalPlaceholder",
+ "rootCauseIntelligence.picker.noSignals",
+ "rootCauseIntelligence.picker.title",
+ "rootCauseIntelligence.picker.window.h168",
+ "rootCauseIntelligence.picker.window.h24",
+ "rootCauseIntelligence.picker.window.h72",
+ "rootCauseIntelligence.picker.window.h720",
+ "rootCauseIntelligence.picker.windowLabel",
+ "rootCauseIntelligence.quality.insufficient",
+ "rootCauseIntelligence.quality.moderate",
+ "rootCauseIntelligence.quality.strong",
+ "rootCauseIntelligence.quality.weak",
+ "rootCauseIntelligence.reasons.association",
+ "rootCauseIntelligence.reasons.band.insufficient",
+ "rootCauseIntelligence.reasons.band.moderate",
+ "rootCauseIntelligence.reasons.band.strong",
+ "rootCauseIntelligence.reasons.band.weak",
+ "rootCauseIntelligence.reasons.boundedWindow",
+ "rootCauseIntelligence.reasons.chooseSignal",
+ "rootCauseIntelligence.reasons.concurrent",
+ "rootCauseIntelligence.reasons.coverage",
+ "rootCauseIntelligence.reasons.focalUnavailable",
+ "rootCauseIntelligence.reasons.hypotheses",
+ "rootCauseIntelligence.reasons.hypothesis",
+ "rootCauseIntelligence.reasons.incompleteEvidence",
+ "rootCauseIntelligence.reasons.insufficientHistory",
+ "rootCauseIntelligence.reasons.isolatedShift",
+ "rootCauseIntelligence.reasons.lags",
+ "rootCauseIntelligence.reasons.leads",
+ "rootCauseIntelligence.reasons.lowQuality",
+ "rootCauseIntelligence.reasons.noCorroboration",
+ "rootCauseIntelligence.reasons.noFocalShift",
+ "rootCauseIntelligence.reasons.noRelated",
+ "rootCauseIntelligence.reasons.rankedSummary",
+ "rootCauseIntelligence.reasons.scoreDenominator",
+ "rootCauseIntelligence.reasons.stableSignal",
+ "rootCauseIntelligence.reasons.temporalLimit",
+ "rootCauseIntelligence.sources.aggregateLimit",
+ "rootCauseIntelligence.sources.refreshFailed",
+ "rootCauseIntelligence.subtitle",
+ "rootCauseIntelligence.timeline.ariaDescription",
+ "rootCauseIntelligence.timeline.ariaLabel",
+ "rootCauseIntelligence.timeline.col.time",
+ "rootCauseIntelligence.timeline.loadFailed",
+ "rootCauseIntelligence.timeline.notEnough",
+ "rootCauseIntelligence.timeline.pickOne",
+ "rootCauseIntelligence.timeline.subtitle",
+ "rootCauseIntelligence.timeline.title",
+ "rootCauseIntelligence.title",
"route.noLocationData",
"route.roundTrip",
"routeEfficiency.aiSuggestions.badge",
@@ -68086,6 +67978,69 @@
"routes.whatIf",
"routes.wholeHomeEnergy",
"routes.yearReview",
+ "rul.basisKinds.enrollment_age",
+ "rul.basisKinds.invalid_input",
+ "rul.basisKinds.missing_configuration",
+ "rul.basisKinds.missing_history",
+ "rul.basisKinds.no_measurable_decline",
+ "rul.basisKinds.soh_trend",
+ "rul.basisKinds.whole_life_odometer",
+ "rul.board.empty",
+ "rul.board.title",
+ "rul.card.aria",
+ "rul.card.confidence",
+ "rul.card.distanceLeft",
+ "rul.card.health",
+ "rul.card.overdueNow",
+ "rul.card.remaining",
+ "rul.card.replaceBy",
+ "rul.components.brakes",
+ "rul.components.cabin_filter",
+ "rul.components.hv_battery",
+ "rul.components.lv_battery",
+ "rul.components.tires",
+ "rul.confidence.high",
+ "rul.confidence.low",
+ "rul.confidence.medium",
+ "rul.facts.confidence",
+ "rul.facts.confidenceUnavailable",
+ "rul.facts.health",
+ "rul.facts.healthUnavailable",
+ "rul.facts.model",
+ "rul.facts.remainingDays",
+ "rul.facts.remainingDaysUnavailable",
+ "rul.facts.wearRate",
+ "rul.facts.wearRateUnavailable",
+ "rul.forecast.aria",
+ "rul.forecast.band",
+ "rul.forecast.basis",
+ "rul.forecast.empty",
+ "rul.forecast.eol",
+ "rul.forecast.projected",
+ "rul.forecast.select",
+ "rul.forecast.subtitle",
+ "rul.forecast.title",
+ "rul.nextService.assumption",
+ "rul.nextService.available",
+ "rul.nextService.by",
+ "rul.nextService.chooseVehicle",
+ "rul.nextService.component",
+ "rul.nextService.error",
+ "rul.nextService.freshness",
+ "rul.nextService.none",
+ "rul.nextService.scope",
+ "rul.nextService.source",
+ "rul.nextService.title",
+ "rul.nextService.unavailable",
+ "rul.selectVehicle",
+ "rul.status.healthy",
+ "rul.status.overdue",
+ "rul.status.replace_soon",
+ "rul.status.watch",
+ "rul.subtitle",
+ "rul.title",
+ "rul.units.days",
+ "rul.units.years",
"runtimeHealth.affected",
"runtimeHealth.components.database",
"runtimeHealth.components.mqtt",
@@ -68136,6 +68091,49 @@
"search.history.removeAria",
"search.history.title",
"search.input.label",
+ "serviceEvidencePack.errors.cryptoUnavailable",
+ "serviceEvidencePack.errors.generic",
+ "serviceEvidencePack.integrity.copyDigest",
+ "serviceEvidencePack.integrity.explain",
+ "serviceEvidencePack.integrity.export",
+ "serviceEvidencePack.integrity.generate",
+ "serviceEvidencePack.integrity.meta",
+ "serviceEvidencePack.integrity.needsEvidence",
+ "serviceEvidencePack.integrity.title",
+ "serviceEvidencePack.inventory.col.domains",
+ "serviceEvidencePack.inventory.col.evidence",
+ "serviceEvidencePack.inventory.col.role",
+ "serviceEvidencePack.inventory.col.samples",
+ "serviceEvidencePack.inventory.col.signal",
+ "serviceEvidencePack.inventory.evidenceNo",
+ "serviceEvidencePack.inventory.evidenceYes",
+ "serviceEvidencePack.inventory.noSignals",
+ "serviceEvidencePack.inventory.pickOne",
+ "serviceEvidencePack.inventory.roleCandidate",
+ "serviceEvidencePack.inventory.roleFocal",
+ "serviceEvidencePack.inventory.title",
+ "serviceEvidencePack.kpis.hypotheses",
+ "serviceEvidencePack.kpis.hypothesesSubtitle",
+ "serviceEvidencePack.kpis.qualitySubtitle",
+ "serviceEvidencePack.kpis.sectionLabel",
+ "serviceEvidencePack.kpis.signals",
+ "serviceEvidencePack.kpis.signalsSubtitle",
+ "serviceEvidencePack.kpis.status",
+ "serviceEvidencePack.kpis.statusDigest",
+ "serviceEvidencePack.kpis.statusGenerated",
+ "serviceEvidencePack.kpis.statusNotReady",
+ "serviceEvidencePack.kpis.statusNotReadyHint",
+ "serviceEvidencePack.kpis.statusReady",
+ "serviceEvidencePack.kpis.statusReadyHint",
+ "serviceEvidencePack.preview.empty",
+ "serviceEvidencePack.preview.title",
+ "serviceEvidencePack.privacy.excludedTitle",
+ "serviceEvidencePack.privacy.includedTitle",
+ "serviceEvidencePack.privacy.notes",
+ "serviceEvidencePack.privacy.title",
+ "serviceEvidencePack.softwareUpdates",
+ "serviceEvidencePack.subtitle",
+ "serviceEvidencePack.title",
"serviceMode.banner.defaultDegraded",
"serviceMode.banner.defaultMaintenance",
"serviceMode.banner.degradedTitle",
@@ -68188,6 +68186,7 @@
"signalExplorer.aiFilter.title",
"slider.thumbMax",
"slider.thumbMin",
+ "smallMultiples.noData",
"softwareUpdates.aiNarration.badge",
"softwareUpdates.aiNarration.button",
"softwareUpdates.aiNarration.description",
@@ -68198,6 +68197,7 @@
"sourceLayer.log.label",
"sourceLayer.stale.label",
"sourceLayer.unknown.desc",
+ "sparkline.ariaLabel",
"statCard.loading",
"statCard.trend.decreased",
"statCard.trend.increased",
@@ -68365,6 +68365,8 @@
"tesla.reauth.body",
"tesla.reauth.cta",
"tesla.reauth.title",
+ "teslaOnly.workbench.recorded",
+ "teslaOnly.workbench.requested",
"theme.accent",
"theme.accentColor",
"theme.browseModes",
@@ -68519,6 +68521,7 @@
"watchFaceNL.inputLabel",
"watchFaceNL.placeholder",
"watchFaceNL.title",
+ "widget.motorPerformance.outsideScale",
"yearReview.aiNarration.badge",
"yearReview.aiNarration.emptyHint",
"yearReview.aiNarration.generateButton",
@@ -85001,6 +85004,20 @@
"dataUnavailable.vehicleOffline.title",
"dataUnavailable.vehicleOffline.whatToDo",
"dataUnavailable.whatToDo",
+ "date.preset.all",
+ "date.preset.last1y",
+ "date.preset.last24h",
+ "date.preset.last30",
+ "date.preset.last6h",
+ "date.preset.last7",
+ "date.preset.last90",
+ "date.preset.lastMonth",
+ "date.preset.live",
+ "date.preset.mtd",
+ "date.preset.qtd",
+ "date.preset.today",
+ "date.preset.yesterday",
+ "date.preset.ytd",
"delta.noComparison",
"delta.title",
"demoData.detail",
@@ -85921,6 +85938,7 @@
"science.overview.weather",
"science.overview.weatherMeaning",
"science.overview.weatherMeasure",
+ "science.rangeLimit",
"science.subtitle",
"science.thermal.ambient",
"science.thermal.empty",
@@ -85967,7 +85985,6 @@
"science.weather.weatherUnknown",
"science.weather.wind",
"science.weather.windCorrelation",
- "science.window.days",
"science.window.label",
"score.aria",
"search.history.clear",
@@ -133522,17 +133539,6 @@
"toast.common.error",
"toast.pin.pinned.error",
"toast.pin.unpinned.error",
- "tour.launcher.close",
- "tour.launcher.completed",
- "tour.launcher.empty",
- "tour.launcher.recommendedHere",
- "tour.launcher.replay",
- "tour.launcher.replayAria",
- "tour.launcher.resetAll",
- "tour.launcher.start",
- "tour.launcher.startAria",
- "tour.launcher.subtitle",
- "tour.launcher.title",
"tour.tours.alerts.description",
"tour.tours.alerts.title",
"tour.tours.automations.description",
@@ -134436,6 +134442,7 @@
"alertPacks",
"analytics",
"anomaly",
+ "automations",
"battery",
"bulk",
"calculationDetails",
@@ -135038,25 +135045,25 @@
"widget",
"yearReview"
],
- "diagnostics": [
+ "maps": [
"achievements",
"activity",
"admin",
"ai",
"alertPacks",
"analytics",
+ "anomaly",
"automations",
"battery",
"bulk",
"calculationDetails",
"chargePlanner",
"charging",
- "chargingPlaces",
"chart",
"climate",
+ "combobox",
"compare",
"costAnalysis",
- "dashcam",
"dataRepair",
"date",
"delta",
@@ -135065,18 +135072,19 @@
"driveDetail",
"drives",
"editConflict",
+ "efficiency",
"emptyState",
"entityContext",
- "error",
"errorBoundary",
"export",
"exports",
"feedback",
"feedbackTriage",
+ "filters",
+ "forms",
"freshness",
"fsm",
"gas",
- "geofences",
"helix",
"help",
"impersonation",
@@ -135084,18 +135092,17 @@
"lifetime",
"live",
"liveLogs",
- "locations",
"maintenance",
+ "maps",
"mqttSseInspector",
"notifications",
"operationalMode",
- "operationalSource",
"operations",
"powerDashboards",
"powerGrafana",
"powerSql",
"problemReport",
- "provenance",
+ "productPreferences",
"pwa",
"quietHours",
"range",
@@ -135112,9 +135119,10 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
+ "system",
+ "systemStatus",
+ "tagInput",
"tco",
- "tempImpact",
- "teslaOnly",
"timeMachine",
"timeline",
"tirePressure",
@@ -135129,7 +135137,7 @@
"widget",
"yearReview"
],
- "maps": [
+ "trips": [
"achievements",
"activity",
"admin",
@@ -135148,6 +135156,7 @@
"combobox",
"compare",
"costAnalysis",
+ "dashboard",
"dataRepair",
"date",
"delta",
@@ -135156,7 +135165,6 @@
"driveDetail",
"drives",
"editConflict",
- "efficiency",
"emptyState",
"entityContext",
"errorBoundary",
@@ -135165,10 +135173,10 @@
"feedback",
"feedbackTriage",
"filters",
- "forms",
"freshness",
"fsm",
"gas",
+ "geofences",
"helix",
"help",
"impersonation",
@@ -135176,6 +135184,7 @@
"lifetime",
"live",
"liveLogs",
+ "locations",
"maintenance",
"maps",
"mqttSseInspector",
@@ -135187,6 +135196,7 @@
"powerSql",
"problemReport",
"productPreferences",
+ "provenance",
"pwa",
"quietHours",
"range",
@@ -135203,17 +135213,18 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
- "system",
+ "statistics",
+ "sweetSpot",
"systemStatus",
"tagInput",
"tco",
+ "tempImpact",
"timeMachine",
"timeline",
"tirePressure",
"toast",
"tour",
"tripPlanner",
- "trips",
"vampireDrain",
"vehicles",
"voiceMode",
@@ -135221,7 +135232,56 @@
"widget",
"yearReview"
],
- "trips": [
+ "ownership": [
+ "achievements",
+ "activity",
+ "admin",
+ "advancedIntelligence",
+ "battery",
+ "bulk",
+ "calculationDetails",
+ "chart",
+ "confirm",
+ "delta",
+ "developerReference",
+ "draft",
+ "editConflict",
+ "emptyState",
+ "energyFlow",
+ "entityContext",
+ "errorBoundary",
+ "export",
+ "feedback",
+ "fleetOps",
+ "freshness",
+ "fsm",
+ "gas",
+ "geofences",
+ "impersonation",
+ "lifetime",
+ "live",
+ "milestones",
+ "operationalMode",
+ "operations",
+ "problemReport",
+ "productPreferences",
+ "provenance",
+ "pwa",
+ "rbac",
+ "replay",
+ "requiresAuth",
+ "savedViews",
+ "shareCard",
+ "shortcuts",
+ "signalLog",
+ "sourceLayer",
+ "timeMachine",
+ "timeline",
+ "toast",
+ "tour",
+ "widget"
+ ],
+ "exports": [
"achievements",
"activity",
"admin",
@@ -135235,14 +135295,10 @@
"calculationDetails",
"chargePlanner",
"charging",
- "chart",
"climate",
- "combobox",
"compare",
"costAnalysis",
- "dashboard",
"dataRepair",
- "date",
"delta",
"developerReference",
"draft",
@@ -135256,7 +135312,6 @@
"exports",
"feedback",
"feedbackTriage",
- "filters",
"freshness",
"fsm",
"gas",
@@ -135270,7 +135325,6 @@
"liveLogs",
"locations",
"maintenance",
- "maps",
"mqttSseInspector",
"notifications",
"operationalMode",
@@ -135279,13 +135333,11 @@
"powerGrafana",
"powerSql",
"problemReport",
- "productPreferences",
"provenance",
"pwa",
"quietHours",
"range",
"rbac",
- "replay",
"requiresAuth",
"routeEfficiency",
"safetySettings",
@@ -135297,10 +135349,6 @@
"softwareUpdates",
"sourceLayer",
"stateMachineDebugger",
- "statistics",
- "sweetSpot",
- "systemStatus",
- "tagInput",
"tco",
"tempImpact",
"timeMachine",
@@ -135309,63 +135357,14 @@
"toast",
"tour",
"tripPlanner",
+ "trips",
"vampireDrain",
"vehicles",
"voiceMode",
"watchFaceNL",
- "widget",
"yearReview"
],
- "ownership": [
- "achievements",
- "activity",
- "admin",
- "advancedIntelligence",
- "battery",
- "bulk",
- "calculationDetails",
- "chart",
- "confirm",
- "delta",
- "developerReference",
- "draft",
- "editConflict",
- "emptyState",
- "energyFlow",
- "entityContext",
- "errorBoundary",
- "export",
- "feedback",
- "fleetOps",
- "freshness",
- "fsm",
- "gas",
- "geofences",
- "impersonation",
- "lifetime",
- "live",
- "milestones",
- "operationalMode",
- "operations",
- "problemReport",
- "productPreferences",
- "provenance",
- "pwa",
- "rbac",
- "replay",
- "requiresAuth",
- "savedViews",
- "shareCard",
- "shortcuts",
- "signalLog",
- "sourceLayer",
- "timeMachine",
- "timeline",
- "toast",
- "tour",
- "widget"
- ],
- "exports": [
+ "diagnostics": [
"achievements",
"activity",
"admin",
@@ -135379,10 +135378,14 @@
"calculationDetails",
"chargePlanner",
"charging",
+ "chargingPlaces",
+ "chart",
"climate",
"compare",
"costAnalysis",
+ "dashcam",
"dataRepair",
+ "date",
"delta",
"developerReference",
"draft",
@@ -135391,6 +135394,7 @@
"editConflict",
"emptyState",
"entityContext",
+ "error",
"errorBoundary",
"export",
"exports",
@@ -135412,6 +135416,7 @@
"mqttSseInspector",
"notifications",
"operationalMode",
+ "operationalSource",
"operations",
"powerDashboards",
"powerGrafana",
@@ -135422,6 +135427,7 @@
"quietHours",
"range",
"rbac",
+ "replay",
"requiresAuth",
"routeEfficiency",
"safetySettings",
@@ -135435,6 +135441,7 @@
"stateMachineDebugger",
"tco",
"tempImpact",
+ "teslaOnly",
"timeMachine",
"timeline",
"tirePressure",
@@ -135446,6 +135453,7 @@
"vehicles",
"voiceMode",
"watchFaceNL",
+ "widget",
"yearReview"
],
"benchmarks": [
@@ -135854,6 +135862,7 @@
"bulk",
"calculationDetails",
"chart",
+ "date",
"delta",
"developerReference",
"draft",
diff --git a/web/src/i18n/excluded-consistent-defaults.test.ts b/web/src/i18n/excluded-consistent-defaults.test.ts
index bcf363ba11..456e151a8a 100644
--- a/web/src/i18n/excluded-consistent-defaults.test.ts
+++ b/web/src/i18n/excluded-consistent-defaults.test.ts
@@ -224,10 +224,10 @@ describe('exact81 feature-owned consistent producer defaults', () => {
expect(keys.size).toBe(2931)
const oldEntries = leaves(catalog).filter(([key]) => !keys.has(key))
.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
- expect(oldEntries).toHaveLength(30046)
+ expect(oldEntries).toHaveLength(30067)
expect(createHash('sha256').update(JSON.stringify(oldEntries)).digest('hex'))
- .toBe("2db64574cfb37892e8f6cac9fe57faaf0d90efacbcb9d8fca71a182d2dcee4df")
- expect(leaves(catalog)).toHaveLength(32977)
+ .toBe("d3547c8c35416745e7128970c26f182c859f8e8a05065fa033a50837f6542a7f")
+ expect(leaves(catalog)).toHaveLength(32998)
expect(english.t('settings.title')).toBe('Settings')
expect(catalog.pwa).toMatchObject(shell.pwa)
expect(shell.pwa.offline).toEqual(catalog.pwa.offline)
diff --git a/web/src/i18n/excluded-feature-owned-producers.test.ts b/web/src/i18n/excluded-feature-owned-producers.test.ts
index e9649b5434..3335305fbd 100644
--- a/web/src/i18n/excluded-feature-owned-producers.test.ts
+++ b/web/src/i18n/excluded-feature-owned-producers.test.ts
@@ -1435,10 +1435,10 @@ describe('excluded806 feature-owned actual producer canonical defaults', () => {
}
const oldEntries = leaves(catalog).filter(([key]) => !keys.has(key))
.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
- expect(oldEntries).toHaveLength(30127)
+ expect(oldEntries).toHaveLength(30148)
expect(createHash('sha256').update(JSON.stringify(oldEntries)).digest('hex'))
- .toBe("420d2cfea7b8cbcf1f93f9084572c60812fe3fc6d821dbff57c6d55ce3b64ca4")
- expect(leaves(catalog)).toHaveLength(32977)
+ .toBe("85ef31e030f42e2e52e63074bef1024af26d586943228fe116e696a31350dabd")
+ expect(leaves(catalog)).toHaveLength(32998)
expect(catalog.settings.title).toBe('Settings')
expect(catalog.pwa).toMatchObject(shell.pwa)
})
diff --git a/web/src/i18n/final-four-localization-gaps.test.ts b/web/src/i18n/final-four-localization-gaps.test.ts
index a4c66ea006..612be49257 100644
--- a/web/src/i18n/final-four-localization-gaps.test.ts
+++ b/web/src/i18n/final-four-localization-gaps.test.ts
@@ -96,15 +96,15 @@ describe('final four genuine localization gaps — production source contracts',
}
const entries = currentEntries.filter(([parts]) => !acceptedLaterPaths.has(JSON.stringify(parts)))
const exact = new Set(additions.map(([parts]) => JSON.stringify(parts)))
- expect(entries).toHaveLength(32965)
+ expect(entries).toHaveLength(32986)
expect(exact.size).toBe(4)
for (const [parts, value] of additions) {
expect(entries.filter(([path]) => JSON.stringify(path) === JSON.stringify(parts))).toEqual([[parts, value]])
}
const predecessor = entries.filter(([parts]) => !exact.has(JSON.stringify(parts)))
- expect(predecessor).toHaveLength(32961)
+ expect(predecessor).toHaveLength(32982)
expect(createHash('sha256').update(JSON.stringify(predecessor)).digest('hex'))
- .toBe("336545982d1a0cdc8bea3212a6a7f976fe9ec3832205c836680646bd935b6b88")
+ .toBe("ab6d31cc8e325845f69c1ae307c3c1b888abfdb8f058300c754a1d0ff8d48483")
expect(typeof catalog.temperature).toBe('object')
expect(catalog.share.curve).toBe('Charge curve')
expect(catalog.signalLog.composition).toBe('Value composition')
diff --git a/web/src/i18n/he.json b/web/src/i18n/he.json
index 9e7630e6ea..1298645b5a 100644
--- a/web/src/i18n/he.json
+++ b/web/src/i18n/he.json
@@ -32,5 +32,50 @@
"skip_dc": "Skip {{site}} ({{sc}}) — home now is {{home}} for the same energy.",
"charge_home_now": "Charge at home now — the cheapest window is already open (or too far out to wait)."
}
+ },
+ "admin": {
+ "vehicleCost": {
+ "rangeLimit": "בחרו טווח של עד 90 יום בסביבת העבודה כדי להציג את עלות קליטת נתוני הרכב."
+ }
+ },
+ "energyFlow": {
+ "rangeLimit": "בחרו טווח של עד 3650 יום בסביבת העבודה כדי להציג את היסטוריית האנרגיה.",
+ "summary": {
+ "selectedWindow": "הטווח שנבחר בסביבת העבודה",
+ "boundedSource": "נסיעות שהושלמו מסוננות לפי תחילת הטווח בסביבת העבודה וסופו הבלעדי; ההספק החי נשאר תמונת מצב נפרדת."
+ }
+ },
+ "science": {
+ "rangeLimit": "בחרו טווח של עד 30 יום בסביבת העבודה כדי להציג ראיות מדעיות."
+ },
+ "chargeAdvisor": {
+ "planningWindow": "חלון התכנון כולל את שבעת הימים המקומיים הבאים, החל ממחר."
+ },
+ "automations": {
+ "copyName": "{{name}} (עותק)"
+ },
+ "costAnalysis": {
+ "category": {
+ "home": "בית",
+ "supercharger": "סופרצ׳ארג׳ר",
+ "public": "ציבורי",
+ "publicDC": "טעינה ציבורית בזרם ישר",
+ "workL2": "עבודה / רמה 2",
+ "other": "אחר"
+ }
+ },
+ "anomaly": {
+ "explanation": {
+ "zScore": "הערך {{value}} של {{signal}} נמצא במרחק {{sigma}} סטיות תקן מהממוצע ({{baseline}}).",
+ "belowMinimum": "הערך {{value}} של {{signal}} נמוך מהמינימום הבטוח ({{minimum}}).",
+ "aboveMaximum": "הערך {{value}} של {{signal}} חורג מהמקסימום הבטוח ({{maximum}}).",
+ "increased": "{{signal}} עלה ב־24 השעות האחרונות בהשוואה לממוצע של שבעה ימים (מ־{{baseline}} ל־{{value}}).",
+ "decreased": "{{signal}} ירד ב־24 השעות האחרונות בהשוואה לממוצע של שבעה ימים (מ־{{baseline}} ל־{{value}}).",
+ "increasedPercent": "{{signal}} עלה ב־{{percent}}% ב־24 השעות האחרונות בהשוואה לממוצע של שבעה ימים (מ־{{baseline}} ל־{{value}}).",
+ "decreasedPercent": "{{signal}} ירד ב־{{percent}}% ב־24 השעות האחרונות בהשוואה לממוצע של שבעה ימים (מ־{{baseline}} ל־{{value}})."
+ }
+ },
+ "widget": {
+ "overview": "סקירת יישומון"
}
}
diff --git a/web/src/i18n/resolved-baseline-producer.test.ts b/web/src/i18n/resolved-baseline-producer.test.ts
index 8613af0720..47cc68fde2 100644
--- a/web/src/i18n/resolved-baseline-producer.test.ts
+++ b/web/src/i18n/resolved-baseline-producer.test.ts
@@ -211,11 +211,11 @@ describe('resolved known-missing canonical producers', () => {
const oldEntries = leaves(catalog)
.filter(([key]) => !addedKeys.has(key))
.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
- expect(oldEntries).toHaveLength(30028)
+ expect(oldEntries).toHaveLength(30049)
// User-approved current checkpoint; preserve every exact leaf/value in this partition.
expect(createHash('sha256').update(JSON.stringify(oldEntries)).digest('hex'))
- .toBe("bfd0b367d31dc47e731d0afab57fb57de2aa9e6d8eaa15f6f6a8dd3598cd789a")
- expect(leaves(catalog)).toHaveLength(32977)
+ .toBe("20a9e48cb8002f7a058204936f5c3c1d3f2f98cf37cd309e28032435b910d576")
+ expect(leaves(catalog)).toHaveLength(32998)
expect(catalog.settings.title).toBe('Settings')
expect(catalog.pwa.offline.banner).toBe(
'Showing cached data. Operational changes stay disabled until you reconnect.',
diff --git a/web/src/i18n/verified-producer-checkpoints.json b/web/src/i18n/verified-producer-checkpoints.json
index 6d93e71e35..5477772961 100644
--- a/web/src/i18n/verified-producer-checkpoints.json
+++ b/web/src/i18n/verified-producer-checkpoints.json
@@ -24,11 +24,21 @@
"calls": 11,
"sha256": "5d42e4de227de2f0e0b70b9a3d1b0e3f3aa7dae41d6444bd76dc5bcaf13843cb"
},
+ {
+ "file": "web/src/components/data-display/FreshnessDot.tsx",
+ "calls": 14,
+ "sha256": "6a1b40f8c9ace3f393909c3cbd33ff30ca31e420fa43b851c7fb458fac85b2e2"
+ },
{
"file": "web/src/components/data-display/ServiceStatus.tsx",
"calls": 3,
"sha256": "e9b5d6a080a0b01bd42c6b4dc1bf12a51ab5175bbd0a0e2cfbcde9ca7c204836"
},
+ {
+ "file": "web/src/components/data-display/StatusBadge.tsx",
+ "calls": 0,
+ "sha256": "f666c688ad8e53f5c020dee7e2ab02b90bd1521bdd8c4108f0c4f798c9c8174c"
+ },
{
"file": "web/src/components/feedback/ProblemReportModal.tsx",
"calls": 25,
@@ -47,7 +57,7 @@
{
"file": "web/src/components/layout/Layout.tsx",
"calls": 14,
- "sha256": "2001a691cd1157e7c0c0a8db2ffd0bcaa41acea1d4acfaa855c6694b884a43c7",
+ "sha256": "5b3df0325cb2ee6065320d2a6cdd348226b38c434abc6880b01d213bc7e96433",
"dependencies": [
{
"file": "web/src/lib/routeRegistry.ts",
@@ -227,6 +237,11 @@
}
]
},
+ {
+ "file": "web/src/components/ui/IconButton.tsx",
+ "calls": 0,
+ "sha256": "7e5cac2b43e66e5f65efa4ad341054536a333b196a11a0b5284e0c2575b741cd"
+ },
{
"file": "web/src/features/admin/components/continuation-admin-1/SchemaFingerprints.tsx",
"calls": 16,
@@ -439,8 +454,8 @@
},
{
"file": "web/src/features/admin/pages/VehicleCostPage.tsx",
- "calls": 8,
- "sha256": "cf4e18515253af0fa5b1d195afdbf400633834e6bd83d1ac465c1162df88485a"
+ "calls": 10,
+ "sha256": "9b61a5493c12ab6328c888b0c3e1d2cf6d955d662a42c3e21025b52ed72de20b"
},
{
"file": "web/src/features/analytics/components/operationalbrief-n-z/StatisticsBatteryBrief.tsx",
@@ -517,6 +532,11 @@
"calls": 25,
"sha256": "74bbca6be61fc94b3ddc89ebc4f644f571d561778af9b9cdb14cf08fc9754f8b"
},
+ {
+ "file": "web/src/features/dashboard/components/DashboardGrid.tsx",
+ "calls": 7,
+ "sha256": "19778eaa48981138b2d11f0e08c90fc78ab52691d73fd5769cd9e4f2dcba703e"
+ },
{
"file": "web/src/features/dashboard/components/LayoutSwitcher.tsx",
"calls": 31,
@@ -535,7 +555,12 @@
{
"file": "web/src/features/dashboard/components/VehicleHero.tsx",
"calls": 40,
- "sha256": "12b559a2a60632aa509146c33f4ba18e53a26e17ce9a68ace50d6759f43c353d"
+ "sha256": "860dd3f1a55dca8411ecb27d302b53099f49c1b8c9382a6d9bf4291ffa979891"
+ },
+ {
+ "file": "web/src/features/dashboard/components/WidgetEditChrome.tsx",
+ "calls": 22,
+ "sha256": "37b647dee2c118cd25aa4978861ee66546c90de652cb4cf5794aaedcf5d6c3ee"
},
{
"file": "web/src/features/dashboard/pages/DashboardPage.tsx",
@@ -555,7 +580,7 @@
{
"file": "web/src/features/dashboard/widgets/AnomalyDetectorWidget.tsx",
"calls": 13,
- "sha256": "bc796969612e3617cec068495ace0c03a2bb98e7a1adcd2bc2c8ab0f8283519b"
+ "sha256": "599e23e866364fc1bb85d0dc5e6ef253682f55d4dcfc5b525425f8965a233f5d"
},
{
"file": "web/src/features/dashboard/widgets/AutomationStatusWidget.tsx",
@@ -592,6 +617,11 @@
"calls": 20,
"sha256": "9300c48653590c6a6c29e7ef6afe9a59772aaa0626c8dd7f25e465f4bdc727c0"
},
+ {
+ "file": "web/src/features/dashboard/widgets/WidgetShell.tsx",
+ "calls": 2,
+ "sha256": "4d038f00e67c82729aa3673c542b385f2e99bda744c3432c18fee11f65c2d1f7"
+ },
{
"file": "web/src/features/driving/components/drive-detail/SupervisedDrivingPanel.tsx",
"calls": 28,
diff --git a/web/src/lib/__tests__/workspaceScope.test.ts b/web/src/lib/__tests__/workspaceScope.test.ts
index 8d30430342..9791997928 100644
--- a/web/src/lib/__tests__/workspaceScope.test.ts
+++ b/web/src/lib/__tests__/workspaceScope.test.ts
@@ -180,9 +180,9 @@ describe('getWorkspaceRouteScope', () => {
expect(getWorkspaceRouteScope('/analytics/range')).toEqual({ range: false, vehicle: true });
});
- it('owns the charge advisor analysis window in the header', () => {
+ it('keeps charge advisor planning independent of the historical header', () => {
for (const path of ['/charge-advisor', '/charge-advisor/', '/charge-advisor?from=2026-01-01']) {
- expect(getWorkspaceRouteScope(path)).toEqual({ range: true, vehicle: true });
+ expect(getWorkspaceRouteScope(path)).toEqual({ range: false, vehicle: true });
}
});
it('does not scope account-wide energy installations to a vehicle or date range', () => {
diff --git a/web/src/lib/anomalyExplanation.test.ts b/web/src/lib/anomalyExplanation.test.ts
new file mode 100644
index 0000000000..e9d5354704
--- /dev/null
+++ b/web/src/lib/anomalyExplanation.test.ts
@@ -0,0 +1,23 @@
+import { createInstance } from 'i18next';
+import { describe, expect, it } from 'vitest';
+import ar from '@/i18n/ar.json';
+import he from '@/i18n/he.json';
+import { formatAnomalyExplanation } from './anomalyExplanation';
+
+describe('localized anomaly fact contracts', () => {
+ it.each([
+ ['ar', ar, 'تتجاوز قيمة ModuleTempMax البالغة 60°C الحد الأقصى الآمن (55°C).'],
+ ['he', he, 'הערך 60°C של ModuleTempMax חורג מהמקסימום הבטוח (55°C).'],
+ ] as const)('uses the real %s catalog and typed operands', async (language, catalog, expected) => {
+ const i18n = createInstance();
+ await i18n.init({ lng: language, resources: { [language]: { translation: catalog } }, interpolation: { escapeValue: false } });
+ const anomaly = {
+ signal: 'ModuleTempMax', message: 'Legacy English prose.',
+ explanation_code: 'above_maximum',
+ explanation_params: { value: 60, baseline: 17.5, maximum: 55 },
+ };
+ expect(formatAnomalyExplanation(anomaly, i18n.t, value => `${value}°C`, String)).toBe(expected);
+ expect(anomaly.explanation_params).toEqual({ value: 60, baseline: 17.5, maximum: 55 });
+ expect(formatAnomalyExplanation({ ...anomaly, explanation_code: 'future_detector' }, i18n.t, String, String)).toBe('Legacy English prose.');
+ });
+});
diff --git a/web/src/lib/anomalyExplanation.ts b/web/src/lib/anomalyExplanation.ts
new file mode 100644
index 0000000000..d74a26ba15
--- /dev/null
+++ b/web/src/lib/anomalyExplanation.ts
@@ -0,0 +1,49 @@
+import type { TFunction } from 'i18next';
+import type { AnomalyEntry } from '@/api/hooks/useAnomalies';
+import { PASCALS_PER_KPA } from '@/lib/unitConversion';
+
+type UnitFormatters = Record<'formatDistance' | 'formatSpeed' | 'formatTemperature' | 'formatPressure' | 'formatEnergy' | 'formatPower' | 'formatDuration', (value: number) => string>;
+type Explanation = Pick
;
+
+/** Preserve canonical numbers while converting explanation facts for display. */
+export function formatAnomalyReading(value: number | null | undefined, unit: string | undefined, units: UnitFormatters, fmtNumber: (value: number) => string): string {
+ if (typeof value !== 'number' || !Number.isFinite(value)) return '—';
+ switch (unit) {
+ case 'm': return units.formatDistance(value);
+ case 'm/s': return units.formatSpeed(value);
+ case '°C': return units.formatTemperature(value);
+ case 'Pa': return units.formatPressure(value / PASCALS_PER_KPA);
+ case 'kPa': return units.formatPressure(value);
+ case 'Wh': return units.formatEnergy(value);
+ case 'W': return units.formatPower(value);
+ case 's': return units.formatDuration(value);
+ default: return unit ? `${fmtNumber(value)} ${unit}` : fmtNumber(value);
+ }
+
+}
+
+/** Unknown/incomplete explanation contracts retain the legacy prose verbatim. */
+export function formatAnomalyExplanation(anomaly: Explanation, t: TFunction, formatReading: (value: number) => string, fmtNumber: (value: number) => string): string {
+ const facts = anomaly.explanation_params;
+ const finite = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value);
+ if (!facts || !finite(facts.value) || !finite(facts.baseline)) return anomaly.message;
+ const values = { signal: anomaly.signal, value: formatReading(facts.value), baseline: formatReading(facts.baseline) };
+ switch (anomaly.explanation_code) {
+ case 'z_score':
+ return finite(facts.z_score) ? t('anomaly.explanation.zScore', '{{signal}} value {{value}} is {{sigma}} standard deviations from the mean ({{baseline}}).', { ...values, sigma: fmtNumber(facts.z_score) }) : anomaly.message;
+ case 'below_minimum':
+ return finite(facts.minimum) ? t('anomaly.explanation.belowMinimum', '{{signal}} value {{value}} is below the safe minimum ({{minimum}}).', { ...values, minimum: formatReading(facts.minimum) }) : anomaly.message;
+ case 'above_maximum':
+ return finite(facts.maximum) ? t('anomaly.explanation.aboveMaximum', '{{signal}} value {{value}} exceeds the safe maximum ({{maximum}}).', { ...values, maximum: formatReading(facts.maximum) }) : anomaly.message;
+ case 'trend_increased':
+ return t('anomaly.explanation.increased', '{{signal}} increased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).', values);
+ case 'trend_decreased':
+ return t('anomaly.explanation.decreased', '{{signal}} decreased in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).', values);
+ case 'trend_increased_percent':
+ return finite(facts.percent_change) ? t('anomaly.explanation.increasedPercent', '{{signal}} increased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).', { ...values, percent: fmtNumber(facts.percent_change) }) : anomaly.message;
+ case 'trend_decreased_percent':
+ return finite(facts.percent_change) ? t('anomaly.explanation.decreasedPercent', '{{signal}} decreased by {{percent}}% in the last 24 hours compared with the seven-day average ({{baseline}} to {{value}}).', { ...values, percent: fmtNumber(facts.percent_change) }) : anomaly.message;
+ default: return anomaly.message;
+ }
+
+}
diff --git a/web/src/lib/workspaceScope.ts b/web/src/lib/workspaceScope.ts
index 9a3c7608c4..f42cc0d126 100644
--- a/web/src/lib/workspaceScope.ts
+++ b/web/src/lib/workspaceScope.ts
@@ -24,6 +24,7 @@ export type WorkspaceScopedComponent = {
export const RANGE_ENABLED_PATHS: ReadonlySet = new Set([
'/activity',
'/admin/audit-log',
+ '/admin/vehicle-cost',
'/analytics',
'/analytics/carbon',
'/api-logs',
@@ -31,7 +32,6 @@ export const RANGE_ENABLED_PATHS: ReadonlySet = new Set([
'/battery-degradation',
'/cabin-thermal',
'/charging',
- '/charge-advisor',
'/charging-curve',
'/charging-heatmap',
'/charging/costs',
@@ -70,6 +70,7 @@ export const RANGE_ENABLED_PATHS: ReadonlySet = new Set([
'/regen-efficiency',
'/route-efficiency',
'/security-access',
+ '/science',
'/share-card',
'/signal-change-points',
'/signal-correlation',