DG
Dispatch Ops AgentDailyGrubs Console · demo
Tenant
Bawa Medical, Nagercoil
Day
2 Sep 2026
Riders
1
Orders
12
Source
Orders_Detail export

This day’s delivery times were never measured. They were typed in at 23:00.

Eleven of the twelve orders were marked delivered inside an 86-second window, 8–11 seconds apart. The twelfth has real stamps, but they contradict each other. Before an agent can answer anything about lateness, ETAs or rider productivity, this one field has to become real — otherwise it will answer confidently and be wrong.

Usable delivery times
0 / 12
bulk-closed 22:59–23:00
Lifecycle capture
45%
27 of 60 expected stamps
Slot → assignment
+13 min
median, after TZ correction
Day settled
₹756
36 km · 2 pickup points
Evidence

One day, three clocks

Promised slot, assignment and delivery for each order. Slots are drawn corrected by +5:30 — see the second finding. The wall on the right is the problem.

Promised slot Assigned to rider Marked delivered Genuine lifecycle — 1 order
Findings — click one to highlight its rows below

What the agent found

Ranked by what they block, not by how bad they look. The first two invalidate every time-based number in the console; the rest are hygiene that will bite as volume grows.

Records

The twelve orders

Δ is assignment minus corrected slot. Stamps counts how many of the five lifecycle events — assign, start, arrival, pickup, delivery — the rider app actually recorded.

OrderSlot ISTAssignedΔDelivered ZoneLocalityKm₹Stamps
Getting there

What it takes to make this real

You already own most of the machinery. The gap is not a model — it is a trustworthy event stream and somewhere in the console to put the answer.

01

Fix the clock first

  • Stamp deliverytime server-side from the rider’s delivery action, not from a screen cleared at night
  • Reject more than ~3 closes per rider per minute, and log every rejection
  • Emit deliverydate as true UTC with Z, or true IST with +05:30 — not today’s mix of both
  • Backfill nothing. Treat everything before the fix as unmeasured
02

Build it inside Jupiter

  • One read-only, tool-calling agent that belongs to DailyGrubs — its own service, no borrowed runtime
  • Tools, not raw SQL: get_orders, get_rider_logs, zone_summary, data_quality_scan
  • Scope every tool by tenantid server-side, from the session — never from a model argument
  • Keep this day as a regression fixture. The correct answer is “these timestamps are fabricated”
03

Land it in the console

  • A drawer on /nearle/reports and /nearle/dispatch, opened from the existing header
  • TanStack Query against a new /ai/ask on Jupiter. Never call Anthropic from the browser
  • Every answer cites the orders it read, as in the panel. An uncited claim is a bug
  • Read-only in v1. Reassigning riders is a separate project, with a confirm step