wulf-pulse/lib/services/analyzer/fixtures/T20260424.0045.expected.json
lorentz 8f8b5ab7be feat: AI ticket analyzer (phases 1-6)
Multi-stage LLM pipeline that produces structured analyses of Autotask
tickets from local Postgres. Migration 069 + Zod schemas, Stage 0
preprocessor, IT Glue redaction + search, Anthropic SDK wrapper, Stages
1/3/4 (Haiku/Sonnet/Opus), pipeline + cost circuit breaker, job worker
(opt-in autostart), 6 API routes, 3 frontend pages, share-row
persistence (email send deferred to phase 7). 128 vitest tests, tsc
clean. Build journal in docs/wulf-pulse-ticket-analyzer-build-notes.md.

Sync: adds syncTicketNotes() + ticket_notes to ordered/date-filtered
entities so the analyzer's local mirror stays current via scheduler.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 10:59:40 -04:00

113 lines
No EOL
2.9 KiB
JSON

{
"preprocessor": {
"filtered_workflow_noise_ids": [
33738631,
33738632,
33738633,
33738634
],
"filtered_email_notification_ids_in_input": [
33738776,
33738797,
33741514,
33741844
],
"retained_note_ids": [
33738796
],
"retained_time_entry_ids": [
465933,
465961,
465968,
466134,
466183
]
},
"required_findings": [
{
"id": "F1_original_ask_narrower",
"severity": "low",
"description": "The original requestor email asked for a credential location for an existing integration (loss run pro / claims department), narrower than the broader vendor-integration scope the ticket pivoted to.",
"evidence": [
{
"kind": "time_entry_internal_notes",
"id": 465933
}
],
"grounded": true
},
{
"id": "F2_customer_said_stop",
"severity": "high",
"description": "Requestor (Lorentz Hinrichsen) posted a ticket note on 2026-04-24 indicating he could proceed independently and that no further outreach to Vertafore was needed.",
"evidence": [
{
"kind": "ticket_note",
"id": 33738796
}
],
"grounded": true,
"notes_for_review": "This note is in Autotask but was NOT in the local ticket_notes table at fixture-build time. The analyzer must source notes either live or via a fixed sync."
},
{
"id": "F3_work_continued_after_stop",
"severity": "high",
"description": "On 2026-04-27 (next business day after the requestor said \"I'll take it from here\"), the assigned tech took a call from Vertafore and logged ~20 minutes of additional work (entries on 04/27).",
"evidence": [
{
"kind": "ticket_note",
"id": 33738796
},
{
"kind": "time_entry",
"id": 466134
},
{
"kind": "time_entry",
"id": 466183
}
],
"grounded": true
},
{
"id": "F4_status_does_not_match_reality",
"severity": "medium",
"description": "Ticket status remains \"Waiting Customer\" though the requestor effectively closed the loop on 04/24. resolved_date_time is null three days later.",
"evidence": [
{
"kind": "ticket_field",
"field": "status_label",
"value": "Waiting Customer"
},
{
"kind": "ticket_field",
"field": "resolved_date_time",
"value": null
},
{
"kind": "ticket_note",
"id": 33738796
}
],
"grounded": true
}
],
"expected_next_step_keywords": [
"confirm with requestor",
"Vertafore",
"close"
],
"sync_gap_observed": {
"live_note_count": 9,
"synced_note_count": 2,
"missing_note_ids": [
33738631,
33738632,
33738633,
33738634,
33738776,
33738796,
33738797
]
}
}