mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 10:35:51 +00:00
ac328e1eee
Forty-two percent of paying installs never get Patrol running, and the support and issue evidence says the wall is model choice and cost: a prospect asked which models Pulse recommends before trying, a Pro customer picked Flash-Lite to save money and Patrol then could not file verdicts, and a mispriced Opus row tripped the 20 USD budget so the circuit breaker disabled Patrol with nothing but a log line (#1789). Answer both questions at the point of choice. The Patrol and shared default model pickers pin guided models in a "Suggested for Patrol" section with recommended / suggested / caution markers and a one-line reason: the Ollama preflight blessing is the only recommended entry, Gemini Flash-Lite the only caution, and cloud starting points are labelled price-driven and unqualified until this install's own readiness pass upgrades them to "Verified on this install". A server-computed cost preview sits under the model choice: monthly estimate from Pulse's price table, the schedule, and the install's own median full run once three priced runs exist (a measured 104,528-in / 4,491-out run otherwise), with the assumption stated and a token explained once, plus 30-day spend against budget. Each schedule preset is priced in the Schedule select. When a per-token model is picked while the schedule is still the 6-hour default, the cost model proposes the slowest preset that keeps scheduled runs under half the budget (20 USD reference when none is set) and says what the slower check costs in detection delay; a schedule the install already chose is never changed. A used-up budget is now a spending decision, not a provider fault: the budget refusal is a typed sentinel with the figures, classified as the budget_exhausted cause, excluded from circuit-breaker accounting, and promoted into the Patrol block state, so the Patrol page shows "Patrol paused" with the spend and limit and a "Raise the cost budget" action instead of "Check Patrol model".
71 lines
4.4 KiB
JSON
71 lines
4.4 KiB
JSON
{
|
|
"version": 1,
|
|
"base_sha": "fd36b3124c31bde2bea6b916652b9319827f890f",
|
|
"verified_at": "2026-09-02T06:55:42Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/api/aiPatrolCost.ts",
|
|
"frontend-modern/src/components/Settings/AIModelSelectionSection.tsx",
|
|
"frontend-modern/src/components/Settings/AISettings.tsx",
|
|
"frontend-modern/src/components/Settings/useAISettingsState.ts",
|
|
"frontend-modern/src/components/shared/AIModelPicker.tsx",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceBanners.tsx",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceHeader.tsx",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceWorkspace.tsx",
|
|
"frontend-modern/src/features/patrol/patrolControlPresentation.ts",
|
|
"frontend-modern/src/features/patrol/usePatrolIntelligenceState.ts",
|
|
"frontend-modern/src/stores/aiIntelligence.ts",
|
|
"frontend-modern/src/types/ai.ts",
|
|
"frontend-modern/src/utils/aiPatrolCostPresentation.ts",
|
|
"frontend-modern/src/utils/patrolRuntimeActions.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/api/aiPatrolCost.ts": "be947370111a1efb7e2618f344b4b81481262f6b1fd8fc4ed2690a7729a05bff",
|
|
"frontend-modern/src/components/Settings/AIModelSelectionSection.tsx": "33b63989306752e5b852e5d2438dfcb99c0df78530ba50c1e157b895d7f1a623",
|
|
"frontend-modern/src/components/Settings/AISettings.tsx": "7103686e133e08d50563bf66da63ea161f73ae0386c59d6c770da78f0bdb78bb",
|
|
"frontend-modern/src/components/Settings/useAISettingsState.ts": "841fa917cf7c5a1f7867b992813984bbd1ce6f57ed9f1abe8db2b7183a4596a5",
|
|
"frontend-modern/src/components/shared/AIModelPicker.tsx": "79abf84c58d6baec0351bea8cfb7d828db8ff00f5bae7ed0fff4079bbef25b91",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceBanners.tsx": "085c1d677ed5e15698e32759b4c01a05e0fd038fbf686ded48b390623de41d22",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceHeader.tsx": "69ff486b95aafd445600571c977f8670e9686d9185f2c1285c2a6690e9c2d113",
|
|
"frontend-modern/src/features/patrol/PatrolIntelligenceWorkspace.tsx": "cd6d888b620e44fa8ec2125b818e59c8ed802f8aeae0c554c4ce5bd1d40e314f",
|
|
"frontend-modern/src/features/patrol/patrolControlPresentation.ts": "58ad626d6af2472343307c01583621d4cfd742684f36c5583a3b72de75f86929",
|
|
"frontend-modern/src/features/patrol/usePatrolIntelligenceState.ts": "7578f9e010bc36a1d5a3ec932a69a23a077e176755e7207905ec47f5e94d5fae",
|
|
"frontend-modern/src/stores/aiIntelligence.ts": "8b81de1c09f47555b148415641f9cc42a9db25e0a54cd0bc64bb24d03bb1a0ac",
|
|
"frontend-modern/src/types/ai.ts": "12473e6f0e6339094689ac77f9a32aa1ffb62def1e81c780f4263cbcf5923474",
|
|
"frontend-modern/src/utils/aiPatrolCostPresentation.ts": "3d1ffa67e0df24af89ca26bb40e29fe55ef859902145aa958d4331483952a032",
|
|
"frontend-modern/src/utils/patrolRuntimeActions.ts": "a71f234c2007dafd6e8773542ae238b8cd3cdb9501aaf5f1a403060335fbabd9"
|
|
},
|
|
"routes": [
|
|
"/settings/pulse-intelligence/patrol",
|
|
"/settings/pulse-intelligence/provider",
|
|
"/patrol"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1280,
|
|
"height": 1000
|
|
},
|
|
{
|
|
"width": 375,
|
|
"height": 812
|
|
}
|
|
],
|
|
"states": [
|
|
"Patrol model picker open with the Suggested for Patrol section and Recommended for Patrol badge (Ollama qwen3:8b)",
|
|
"estimate box for a local model (no per-token bill) with the 30-day budget line",
|
|
"estimate box for a per-token model (Anthropic Sonnet 5) with monthly figure, per-run assumption, token explainer, and schedule recommendation",
|
|
"schedule select priced per preset and current-schedule card after the auto-adjust to once a day",
|
|
"estimate box with the budget reached line after seeding an over-budget usage history",
|
|
"Patrol page paused banner with spend, limit, and Raise the cost budget action",
|
|
"Patrol page setup card after a backend restart: paused subtitle and Raise the cost budget action from the persisted finding cause",
|
|
"narrow viewport: settings Patrol tab, picker, and Patrol page with no horizontal overflow"
|
|
],
|
|
"interactions": [
|
|
"configured Ollama and a 20 USD budget on Provider & Models and saved",
|
|
"opened the Patrol model picker, searched a custom route, selected anthropic:claude-sonnet-5 and observed the schedule change to once a day",
|
|
"triggered a Patrol run against an over-budget usage history and observed the blocked status and finding",
|
|
"restarted the backend and reloaded the Patrol page",
|
|
"resized to 375x812 and repeated the settings and Patrol page checks"
|
|
]
|
|
}
|